
Contribute Catalog
Contribute a new HyperFrames registry block or component and open an upstream PR when the public catalog—not an in-repo edit—is the goal.
Overview
Contribute-catalog is an agent skill for the Build phase that guides you from idea through merged PR for a new HyperFrames registry block or component.
Install
npx skills add https://github.com/heygen-com/hyperframes --skill contribute-catalogWhat is this skill?
- Six-step workflow: Clarify → Scaffold → Build → Validate → Preview → Ship
- Supports registry blocks (hyperframes:block) and reusable components (hyperframes:component)
- Scaffolds registry/blocks or registry/components folders with HTML and registry-item.json
- Steers in-project authoring to hyperframes and installs to hyperframes-registry
- Guides visual reference, audience, and PR-ready validation before merge
- 6-step workflow from Clarify through Ship
- 2 registry item types: block and component
Adoption & trust: 48k installs on skills.sh; 25.6k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have a caption or motion effect idea but no clear path to scaffold, validate, and upstream it into the public HyperFrames registry.
Who is it for?
Solo builders or small teams who maintain video templates and want their styles merged into the shared HyperFrames catalog.
Skip if: In-project timeline edits or installing existing registry items—those flows belong to hyperframes and hyperframes-registry respectively.
When should I use this skill?
User wants to CONTRIBUTE to the public HyperFrames catalog with a new block or component and ship an upstream PR.
What do I get? / Deliverables
You leave with a correctly typed registry folder, validated assets, and a PR ready for review in the hyperframes repo.
- registry/blocks or registry/components scaffold
- registry-item.json and HTML asset
- Upstream pull request to hyperframes
Recommended Skills
Journey fit
Canonical shelf is Build because the workflow scaffolds HTML registry assets, validates them, and ships them through the hyperframes repo. Frontend fits caption styles, transitions, and lower thirds authored as registry HTML/CSS compositions with fixed or adaptive layout.
How it compares
Use this workflow skill for open-source catalog contributions, not the hyperframes-registry installer or local hyperframes authoring.
Common Questions / FAQ
Who is contribute-catalog for?
Indie creators and developers who want to publish new HyperFrames blocks or components to the public registry via an upstream PR.
When should I use contribute-catalog?
Use it during Build when you are authoring a net-new registry item (caption style, transition, lower third, or reusable overlay) and intend to merge it into the hyperframes repo—not when editing one project or installing catalog entries.
Is contribute-catalog safe to install?
Treat it like any third-party skill: review the Security Audits panel on this Prism page and inspect what git, filesystem, and preview steps your agent will run before contributing.
Workflow Chain
Requires first: hyperframes
SKILL.md
READMESKILL.md - Contribute Catalog
# Contribute to HyperFrames Registry Guide the user from idea to merged PR for a new registry block or component. ## Workflow ``` 1. Clarify → 2. Scaffold → 3. Build → 4. Validate → 5. Preview → 6. Ship ``` ### Step 1: Clarify Ask what they're building. The registry has two item types: - **Block** (`registry/blocks/`, type `hyperframes:block`) — a full standalone composition with fixed dimensions and duration. Caption styles, VFX effects, title cards, lower thirds. - **Component** (`registry/components/`, type `hyperframes:component`) — a reusable snippet with no fixed dimensions or duration. CSS effects, text treatments, overlays that adapt to any composition size. Then ask: - One-sentence description of the effect - Visual reference (URL, screenshot, or description) - Who uses this and when? ### Step 2: Scaffold Create the registry structure: **For blocks:** ``` registry/blocks/{block-name}/ {block-name}.html registry-item.json ``` **For components:** ``` registry/components/{component-name}/ {component-name}.html registry-item.json ``` **Naming convention:** | Item name | ID prefix | Example IDs | | ---------------- | --------- | ---------------------- | | `cap-hormozi` | `hz` | `hz-cg-0`, `hz-cw-3` | | `cap-typewriter` | `tw` | `tw-cg-0`, `tw-ch-0-5` | | `vfx-chrome` | `vc` | `vc-canvas` | Use a 2-3 letter prefix. ALL element IDs must use this prefix to avoid collisions in sub-compositions. **registry-item.json for blocks:** ```json { "$schema": "https://hyperframes.heygen.com/schema/registry-item.json", "name": "{block-name}", "type": "hyperframes:block", "title": "{Human Title}", "description": "{one sentence}", "dimensions": { "width": 1920, "height": 1080 }, // adjust: 1080x1920 for portrait/social "duration": 10, // adjust for your composition "tags": ["{category}", "{subcategory}"], "files": [ { "path": "{block-name}.html", "target": "compositions/{block-name}.html", "type": "hyperframes:composition" } ] } ``` **registry-item.json for components** (no `dimensions` or `duration`): ```json { "$schema": "https://hyperframes.heygen.com/schema/registry-item.json", "name": "{component-name}", "type": "hyperframes:component", "title": "{Human Title}", "description": "{one sentence}", "tags": ["{category}"], "files": [ { "path": "{component-name}.html", "target": "compositions/components/{component-name}.html", "type": "hyperframes:snippet" } ] } ``` ### Step 3: Build Apply the correct template based on type. See [templates.md](templates.md) for copy-paste starters. #### Caption blocks **Non-negotiable caption rules:** - Font: **96px minimum** for proportional fonts. **64-72px acceptable for monospace** (wider characters need less size). - Readability: `-webkit-text-stroke: 2-3px` OR multi-layer `text-shadow` - Overflow: call `window.__hyperframes.fitTextFontSize()` on every group - Karaoke: highlight active word via `tl.to(wordEl, { color/scale }, WORDS[wi].start)` - Hard kill: `tl.set(groupEl, { opacity: 0, visibility: "hidden" }, g.end)` on EVERY group - **Never use `tl.from(el, { opacity: 0 })` at the same position as `tl.set(el, { opacity: 1 })`** — the from clobbers the set. Use `tl.to` instead. **Per-character animation** (typewriter, scramble): - Wrap each character in `<span>` with ID `{prefix}-ch-{group}-{char}` - Stagger via `tl.set` at computed intervals from word timestamps - Cursors/decorat