figma

作者: heygen-com

将Figma内容导入HyperFrames合成——渲染资源、品牌令牌、组件、故事板章节→重构动画(帧作为状态读取,而非幻灯片)(REST/CLI)、Figma Motion动画(MCP)及着色器(MCP源/原生导出)。当用户粘贴figma.com链接或要求将Figma设计、帧、标志、品牌或动画导入视频/合成时使用。

npx skills add https://github.com/heygen-com/hyperframes --skill figma

Plugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin.

Figma → HyperFrames

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.

Access

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.

ErrorMeaning
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

Commands

  • A layer, logo or image: npx hyperframes figma asset '<url or fileKey:nodeId>' [more refs] --format svg|png --scale 2 --description "<what it is>" [--entity "<brand mark>"]. SVG for vectors and logos, PNG at 2x for raster. Several nodes of one file in one call render in a single request; --entity lets /media-use find a brand mark later.
  • Brand colours and type: npx hyperframes figma tokens <fileKey>. Run it before component and paste the printed entries into data-composition-variables. Without Enterprise it falls back to published styles. A connector can supply variables there instead: cache its raw response in .media/figma-cache/ and write the bindings to .media/figma-bindings.jsonl ({kind:"binding", figmaId, sourceFileKey, compositionVariableId:"figma:<name>", version}).
  • A frame as editable HTML at exact geometry: npx hyperframes figma component '<url or fileKey:nodeId>', packaged under compositions/components/<name>/. A fill bound to an imported token comes out as var(--slug, #literal), so one variable re-brands every import; an unknown token stays a literal marked data-figma-unresolved: import that library's tokens and re-import. Ask once which file a library is; never match by hex.
  • Check hero components against Figma's pixels (figma asset <same node> --format png). Text drift is the usual cause; report drift you can't fix instead of hand-tweaking the import.

Motion (connector)

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">.

Shaders

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.

Storyboards: frames are KEYFRAMES, not slides

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 as live DOM: code what changes state, freeze what doesn't, and treat each frame change as an interaction to perform (the cursor moves, clicks, the screen responds), not a tween to apply.
  6. Stills are the fallback, only for frames with no shared elements.

Never leave a Figma URL in the composition.

来自 heygen-com 的更多技能

hyperframes-audio
heygen-com
Use when audio already placed in a HyperFrames composition needs to be mixed: a music bed that fights a voiceover (voiceover carve), effects on a track (EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser, bitcrush), or automation envelopes drawn on a track's volume or any effect parameter. Don't use for sourcing or generating audio — finding BGM, SFX, or making a voiceover is `/media-use`. Don't use for clip timing or track layout, which is `/hyperframes-core`.
hyperframes-cli
heygen-com
姤
developmenttestingapi
hyperframes-animation
heygen-com
HyperFrames的所有动画知识——原子运动规则、多阶段场景蓝图、场景过渡、更广泛的动态设计技术,以及七种运行时适配器(默认GSAP,外加Lottie、Three.js、Anime.js、CSS关键帧、Web Animations API、TypeGPU)。适用于任何运动或动画任务:选取2-4条规则进行组合,或加载蓝图,或查询特定运行时的API(例如GSAP缓动函数/Lottie播放器/Three.js混合器)。HyperFrames原生特性:单一暂停时间线,安全跳帧,...
creativedevelopmentdesign
hyperframes-core
heygen-com
HyperFrames HTML 组合合约。用于组合结构、数据属性、剪辑、轨道、子组合、变量、媒体播放、确定性渲染规则以及最小可渲染项目的验证。
developmentmediacreative
hyperframes-media
heygen-com
为HyperFrames合成提供资产预处理——多供应商TTS(HeyGen / ElevenLabs / Kokoro本地)、多供应商BGM(Google Lyria / 本地MusicGen)、Whisper转录、背景移除及字幕编写。用于npx hyperframes tts、bgm、transcribe、remove-background、语音/供应商选择、音乐情绪提示、字幕/副标题/歌词/卡拉OK/逐词样式。
mediaaudiovideo
hyperframes-registry
heygen-com
安装并将注册表块和组件接入HyperFrames组合中。在运行hyperframes add、安装块或组件、将已安装项接入index.html或处理hyperframes.json时使用。涵盖add命令、安装位置、块子组合接入、组件片段合并、注册表发现,以及编写新块或组件以向上游贡献(构思→脚手架→验证→PR)。
developmentapicode-review
general-video
heygen-com
用作自定义HyperFrames HTML视频合成创作的后备方案,适用于无专门工作流程的场景。涵盖较长或多场景作品、品牌/宣传片、蒙太奇、标题卡、动态海报、静态循环以及任意长度或格式的自由创作。不适用于营销产品推广(product-launch-video)、通用网站转视频(website-to-video)、主题解说(faceless-explainer)、GitHub PR视频(pr-to-video)、为现有素材添加字幕等场景。
videocreativemedia
motion-graphics
heygen-com
当用户需要一段简短、以设计为主导的动态图形,且动态本身即为信息时使用:动态文字排版、数字或统计计数、图表/数据可视化效果、标志片头、品牌组合、底部三分之一、标注、社交覆盖层、动画标题/推文/新闻条目、动态海报或快速捕捉页面高亮。通常时长在10秒以内,最长约30秒,无叙事弧线、画外音或真人实拍主体。可渲染为MP4或透明叠加层。不适用于较长、多场景、带旁白或品牌宣传片的作品……
creativevideodesign