captions-overlay
Overlay doctrine for captions in HyperFrames videos — the caption MODEL (drop / rail / embed) and the rule that captions are an…
Bring Figma into a HyperFrames video - rendered assets, brand tokens, components, storyboard frames as reconstructed motion (frames read as states, not slides), shaders and connector-assisted motion. Use when the person pastes a figma.com link or asks to use a Figma design,
Claude Code
$ npx -y skills add heygen-com/hyperframes --skill figma --agent claude-code
Codex
$ npx skills add heygen-com/hyperframes --skill figma -a codex -y
Cursor
$ npx skills add heygen-com/hyperframes --skill figma -a cursor -y
Gemini CLI
$ npx skills add heygen-com/hyperframes --skill figma -a gemini-cli -y
GitHub Copilot
$ npx skills add heygen-com/hyperframes --skill figma -a github-copilot -y
OpenCode
$ npx skills add heygen-com/hyperframes --skill figma -a opencode -y
Windsurf
$ npx skills add heygen-com/hyperframes --skill figma -a windsurf -y
name: figma description: Bring Figma into a HyperFrames video - rendered assets, brand tokens, components, storyboard frames as reconstructed motion (frames read as states, not slides), shaders and connector-assisted motion. Use when the person pastes a figma.com link or asks to use a Figma design, frame, logo or brand.
**Plugin installs:** Inside a HyperFrames plugin, follow [plugin execution rules](../hyperframes/references/plugin-installation.md).
**Usage beacon:** run `npx hyperframes events --skill=figma` once as this skill starts. It sends the skill's name with the CLI's usual telemetry (account-linked when signed in) and honours the opt-out.
Every import happens at build time and freezes a local file with its source recorded under `.media/`, so renders never call Figma and re-running a command re-imports only what changed. Assets, tokens and components go over REST with a token; motion and shader data need a Figma connector, or a native export from the person.
`FIGMA_TOKEN` in the shell or the project `.env`. Check it exists before the first command; if not, tell the person how to make one and stop: figma.com → Settings → Security → Personal access tokens, read-only **File content** and **File metadata**, plus **Library content** for `tokens` on non-Enterprise plans. They set it themselves; never ask them to paste it into the chat.
| Error | Meaning | | --- | --- | | `BAD_TOKEN` (401) | Expired or revoked: make a new one | | `FORBIDDEN` (403) | The message names the missing scope, or the file isn't visible to the account | | `REQUIRES_ENTERPRISE` (403, variables) | Not a failure: the published-styles fallback already ran | | `RATE_LIMITED` (429) | Already retried with backoff; wait a minute or import fewer nodes per call |
Usage beacon: these phases have no CLI touchpoint, so run `npx hyperframes events --skill=figma-motion` when you begin and `npx hyperframes events --skill=figma-motion --event=skill_completed --outcome=success|error` when done. Same for shaders (`figma-shaders`) and storyboards (`figma-storyboard`).
1. Fetch motion context for the parent frame in one recursive request; cache the raw JSON in `.media/figma-cache/`. 2. Normalise with `motionContextToDocs(raw, { selectorFor, repeat })` from `@hyperframes/core/figma`, never by transcribing keyframes. It reads the motion.dev snippets (the CSS snippets stretch durations), drops loop-wrap tail keyframes and keeps bezier eases. `selectorFor` returns the ids from the component import. 3. `motionToGsap(doc)` → `emitTimelineScript(spec)`, injected after the GSAP and CustomEase tags: paused, finite, a literal `window.__timelines` key. Named eases outside the mapped set fall back to linear; say so. 4. Verify against Figma's own export: `node <SKILL_DIR>/scripts/verify-motion.mjs --reference <export.mp4> --render <render.mp4> --crop WxH+X+Y`. It compares motion between samples, so static drift cancels out, and fails under 15 dB (faithful ≈ 20+, diverging ≈ 5). Measure `--crop` from the render's card edges. A fail means fix the translation, not the threshold. 5. A track that won't translate: export it, freeze the MP4 and place it as `<video class="clip">`.
Figma's export path flattens shaders to their base colour, and shader source is only reachable for library-published styles. Ask the person for a native export of that frame (PNG or MP4) and place it as an asset or clip.
Two frames holding the same element describe that element's state through time: animate the element between the states. Playing the frames back to back as stills is the failure mode.
1. Scenes are every frame-sized node in the section, named frames and loose full-frame rectangles alike: filter by size, not type or name. Order by `absoluteBoundingBox.x`. 2. Match children across neighbouring frames by name first, then by similar size and position. Tween geometry between states; crossfade two exports in place when the pixels changed. Export one asset per element, not one still per frame. Unmatched children enter or exit at their scene's beat. 3. Text nodes below the strip are motion notes for the scene above them, not on-screen copy. A note about motion inside a scene ("lines reveal one after another") means import that frame as a component and animate it. 4. Export in batches of about 4 scene frames per call: past about 12 ids `/v1/images` times out. 5. Frames that are one product UI in successive states: rebuild the UI
Overlay doctrine for captions in HyperFrames videos — the caption MODEL (drop / rail / embed) and the rule that captions are an…
Turn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background,…
The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus…
GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene…
House-style oversized macOS cursor technique for HyperFrames launch videos. Load whenever a scene involves cursors or a…
Render-correctness doctrine for scene-to-scene seams in HyperFrames launch videos — the prerequisites that make transitions…
AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction for video production. Use when…
This skill should be used when a Seedance 2.0 prompt contains generic AI filler, hollow superlatives, vague cinematic language,…