From hyperframes
Imports Figma designs into HyperFrames compositions: static assets, brand tokens, components, motion animations, and shaders. Use when pasting a figma.com link or bringing Figma content into a video/composition.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hyperframes:figmaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Bring the user's Figma work into a composition. **Split by capability** (design spec §2):
Bring the user's Figma work into a composition. Split by capability (design spec §2):
| Phase | What | Transport | Surface |
|---|---|---|---|
| 1 | Static assets | REST | hyperframes figma asset |
| 2 | Brand tokens/styles | REST | hyperframes figma tokens |
| 3 | Components → HTML | REST | hyperframes figma component |
| 4 | Motion → GSAP | MCP only | you, via get_motion_context |
| 5 | Shaders | MCP only / manual export | you |
REST is used wherever it can be (usable at volume, headless); MCP only where Figma exposes no REST equivalent (motion, shaders). Every path freezes assets locally so renders stay deterministic. Storyboard animatics compose Phase-1 asset exports (REST) with agent-driven timeline assembly — no MCP needed. Existing frozen assets, manifest records, and bindings are unaffected by routing changes — the split only changes which credential the next import uses.
Preflight — before the first CLI call, check a token exists: shell env ([ -n "$FIGMA_TOKEN" ]) or the project .env (the CLI auto-loads it — a .env entry counts as configured). If neither, do NOT run the command to harvest the error — walk the user through the one-time setup first, then stop and wait:
tokens degrades to published styles automatically (expected behavior, not an error — say so).export FIGMA_TOKEN="figd_…" — and suggest persisting it (shell profile or project .env) so no future session repeats this.While onboarding, also set expectations in one breath: every import lands as a local frozen file with recorded provenance — renders never call Figma, re-running a command re-imports only what changed in Figma, and one token works for assets, brand tokens, and components across every file their Figma account can view.
BAD_TOKEN (401) mid-flow → the token is expired/revoked; re-mint. FORBIDDEN (403) → missing read scope or no access to that file — check scopes + file visibility. REQUIRES_ENTERPRISE (403 on variables) → not a failure: styles fallback already ran.Rate-limit awareness (spec §2.1): MCP on a Starter plan is 6 tool calls/month (figma plan matrix as of 2026-07 — re-verify if quotas look off) — batch with recursive:true on the parent node, skip verification screenshots unless asked, and cache raw MCP responses so re-derivation never spends a second call. REST is per-minute (10+/min, per-endpoint buckets) — fine at volume, back off on 429.
Parse the user's figma link with parseFigmaRef (URL, fileKey:nodeId, bare fileKey). Then by intent:
Narrate every step for the user — before each command say what you're about to pull from Figma; after it, say where the artifact landed (the frozen path / sidecar / component dir), what changed in the composition, and the immediate next action (preview, add printed variables, re-import to link bindings). The user should never have to ask "did it work?" or "now what?".
hyperframes figma asset '<url-or-fileKey:nodeId>' [--format svg|png|jpg|pdf] [--scale 2] [--description "..."] [--entity "..."]
Renders over REST, sanitizes SVG, freezes under .media/images/, appends the manifest with provenance, regenerates .media/index.md (the shared media-use inventory), prints an <img> snippet. Idempotent per fileKey:nodeId:format:scale:version. Prefer SVG for vectors/logos (scalable, animatable), PNG --scale 2 for raster fidelity. Always pass --description "<what it is>" (it becomes the index row + <img alt>); add --entity "<name>" for named brand marks so media-use resolve --entity finds them later (entity hits match across image/icon).
hyperframes figma tokens <fileKey>
Imports variables as composition brand-variable entries + figma-tokens.json sidecar + binding-index records (.media/figma-bindings.jsonl). Variables are Enterprise-gated upstream: on other plans the command degrades to published-style metadata (values resolve at component-import time). Add the printed entries to the composition's data-composition-variables.
Import tokens before components when both are wanted — that's what lets component colors link to brand variables instead of baking duplicates.
hyperframes figma component '<url-or-fileKey:nodeId>'
Node tree → editable HTML at exact figma geometry, packaged as a registry item under compositions/components/<name>/. Vectors/boolean-ops auto-rasterize via Phase-1 export. Binding pass (spec §7.1, exact-ID only — never value matching):
var(--slug, #literal) — brand refresh propagates.data-figma-unresolved flag. The command tells you; offer the user: run tokens on the source (or library) file, then re-import the component to link them. Ask once per unknown library which file it is — never guess, never match by hex.No REST equivalent exists. You drive the MCP tools, then hand output to the pure helpers in @hyperframes/core/figma:
get_motion_context(fileKey, nodeId) — use recursive:true on the parent frame (one call for the whole scene, not one per element). Save the raw JSON next to the project (.media/figma-cache/) so retranslation is free.MotionDoc: per animated property a MotionTrack { property (motion.dev name), values, times (0..1), ease[] (named or [x1,y1,x2,y2] bezier), duration, repeat }. Selector = the element's stable id (#<id> from Phase-3 output or the authored scene).motionToGsap(doc) → emitTimelineScript(spec) → inject as a <script> after the GSAP + CustomEase CDN tags. Paused, finite, registered on window.__timelines with a literal key.export_video → freeze MP4 → embed as <video class="clip">. Exception: shader-driven tracks — figma's export path flattens shaders to the base color (see Shaders below), so a bake there silently loses the shader; ask the user for a native figma export instead. Always say which path you used and why. Named eases outside the mapped set fall back to linear — the mapping table lives in motionEase.ts; flag the fallback to the user when it fires.npx hyperframes lint && npx hyperframes validate before calling it done.Figma's MCP render path does not execute shaders (they flatten to the base color), and shader source is only reachable for library-published styles (paid Full seat). Default path: ask the user to export the shader frame natively in Figma (PNG or Motion MP4), then import it as a Phase-1 asset / clip. Don't attempt MCP pixel capture of a shader — it will silently produce the wrong thing.
The cardinal rule: storyboard frames are KEYFRAMES, not slides. Two frames containing the same element describe that element's state through time — animate the ELEMENT between the states; never play the frames as a sequence of stills. A logo drawn in four consecutive frames at descending y is ONE element rising through four keyframes. Playing storyboard frames back-to-back is the failure mode; reconstructing the element timelines they imply is the job.
Storyboard files follow a grammar you can parse mechanically — don't eyeball, decode:
absoluteBoundingBox.x.GET /v1/images accepts comma-separated ids, but big scene frames hit "Render timeout" past ~12 ids — chunk to ~4 per call with a retry. (One call per scene wastes the rate budget; 26 scenes ≈ 52 calls via the single-asset path.)| Note says | Do |
|---|---|
| EXPLOSION / BURST | incoming scale ~1.5→1 + fade, power3.out |
| SLIDES / SLIDE TO THE… / SCROLL | directional slide in from that edge |
| MORPH / REVEALS | crossfade — or Phase-3 import if the motion is inside one scene |
| CYCLE THROUGH / EACH ONE | longer hold — or Phase-3 import if items animate within the scene |
| (no note) | crossfade + slow Ken-Burns drift |
main timeline sequences everything (opacity/x/y per scene at absolute times) — no per-scene sub-compositions needed for an animatic.Never leave a Figma URL in the composition — freeze first. Never emit repeat: -1. Timelines paused, finite, literal window.__timelines keys. All Figma I/O at import time; render sees local files only.
npx claudepluginhub heygen-com/hyperframes --plugin hyperframes2plugins reuse this skill
First indexed Jul 4, 2026
Expert guidance for Framer design, Framer Motion animations, interactive prototyping, production site building, and CMS/MCP integration. Activates automatically when working on Framer sites or animations.
Creates video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML.
Translates Figma motion and animations into production-ready application code. Use when implementing motion from Figma designs, including keyframes, easing, and framework-specific motion libraries.