From daac216bb974f1ed2dcd3327b02dc9a561edb960 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 21 Oct 2026 23:18:32 +0000 Subject: [PATCH] Add HyperFrames skills (from heygen-com/hyperframes, Apache-2.0) Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01FXVsD1DgdzZLiPuwtKzMSY --- .claude/skills/figma/SKILL.md | 55 + .../skills/figma/scripts/verify-motion.mjs | 153 ++ .claude/skills/hyperframes-cli/SKILL.md | 97 ++ .../hyperframes-cli/references/beats.md | 15 + .../hyperframes-cli/references/cloud.md | 163 ++ .../hyperframes-cli/references/cloudrun.md | 62 + .../references/compare-and-batch.md | 105 ++ .../hyperframes-cli/references/conventions.md | 17 + .../references/doctor-browser.md | 80 + .../hyperframes-cli/references/feedback.md | 14 + .../references/init-and-scaffold.md | 78 + .../hyperframes-cli/references/lambda.md | 185 +++ .../references/lint-validate-inspect.md | 155 ++ .../references/preview-render.md | 199 +++ .../references/upgrade-info-misc.md | 142 ++ .claude/skills/hyperframes-registry/SKILL.md | 56 + .../examples/add-block.md | 51 + .../examples/add-component.md | 73 + .../references/component-quality-bar.md | 250 +++ .../references/contributing.md | 180 ++ .../references/demo-html-pattern.md | 54 + .../references/discovery.md | 217 +++ .../references/install-locations.md | 45 + .../references/placeholder-material.md | 149 ++ .../hyperframes-registry/references/search.md | 67 + .../references/templates.md | 417 +++++ .../references/wiring-blocks.md | 61 + .../references/wiring-components.md | 39 + .claude/skills/hyperframes/SKILL.md | 74 + .../frame-presets/biennale-yellow/FRAME.md | 289 ++++ .../biennale-yellow/caption-skin.html | 220 +++ .../biennale-yellow/frame-showcase.html | 1214 ++++++++++++++ .../assets/frame-presets/blockframe/FRAME.md | 275 +++ .../blockframe/caption-skin.html | 223 +++ .../blockframe/frame-showcase.html | 1347 +++++++++++++++ .../frame-presets/blue-professional/FRAME.md | 307 ++++ .../blue-professional/caption-skin.html | 222 +++ .../blue-professional/frame-showcase.html | 1372 +++++++++++++++ .../assets/frame-presets/bold-poster/FRAME.md | 275 +++ .../bold-poster/caption-skin.html | 229 +++ .../bold-poster/frame-showcase.html | 1140 +++++++++++++ .../assets/frame-presets/broadside/FRAME.md | 284 ++++ .../frame-presets/broadside/caption-skin.html | 224 +++ .../broadside/frame-showcase.html | 1166 +++++++++++++ .../assets/frame-presets/capsule/FRAME.md | 284 ++++ .../frame-presets/capsule/caption-skin.html | 223 +++ .../frame-presets/capsule/frame-showcase.html | 1465 ++++++++++++++++ .../assets/frame-presets/cartesian/FRAME.md | 278 ++++ .../frame-presets/cartesian/caption-skin.html | 221 +++ .../cartesian/frame-showcase.html | 1263 ++++++++++++++ .../assets/frame-presets/cobalt-grid/FRAME.md | 265 +++ .../cobalt-grid/caption-skin.html | 237 +++ .../cobalt-grid/frame-showcase.html | 1468 +++++++++++++++++ .../frame-presets/code-editorial/FRAME.md | 277 ++++ .../code-editorial/caption-skin.html | 223 +++ .../code-editorial/fonts/EBGaramond-400.woff2 | Bin 0 -> 21704 bytes .../code-editorial/fonts/EBGaramond-700.woff2 | Bin 0 -> 23076 bytes .../code-editorial/fonts/Inter-400.woff2 | Bin 0 -> 23664 bytes .../code-editorial/fonts/Inter-700.woff2 | Bin 0 -> 24356 bytes .../fonts/JetBrainsMono-400.woff2 | Bin 0 -> 21168 bytes .../fonts/JetBrainsMono-700.woff2 | Bin 0 -> 21908 bytes .../code-editorial/fonts/OFL-eb-garamond.txt | 93 ++ .../code-editorial/fonts/OFL-inter.txt | 93 ++ .../fonts/OFL-jetbrains-mono.txt | 93 ++ .../code-editorial/frame-showcase.html | 1438 ++++++++++++++++ .../assets/frame-presets/coral/FRAME.md | 314 ++++ .../frame-presets/coral/caption-skin.html | 225 +++ .../frame-presets/coral/frame-showcase.html | 1268 ++++++++++++++ .../frame-presets/creative-mode/FRAME.md | 333 ++++ .../creative-mode/caption-skin.html | 226 +++ .../creative-mode/frame-showcase.html | 1330 +++++++++++++++ .../assets/frame-presets/daisy-days/FRAME.md | 274 +++ .../daisy-days/caption-skin.html | 229 +++ .../daisy-days/frame-showcase.html | 1444 ++++++++++++++++ .../frame-presets/editorial-forest/FRAME.md | 265 +++ .../editorial-forest/caption-skin.html | 222 +++ .../editorial-forest/frame-showcase.html | 1273 ++++++++++++++ .../skills/hyperframes/references/captions.md | 46 + .claude/skills/hyperframes/references/film.md | 47 + .../skills/hyperframes/references/format.md | 157 ++ .claude/skills/hyperframes/references/look.md | 69 + .../skills/hyperframes/references/motion.md | 94 ++ .../skills/hyperframes/references/overlays.md | 39 + .../references/plugin-installation.md | 43 + .../skills/hyperframes/references/review.md | 51 + .../skills/hyperframes/references/runtimes.md | 43 + .../hyperframes/references/skill-lifecycle.md | 45 + .../skills/hyperframes/references/sound.md | 43 + .claude/skills/hyperframes/references/spec.md | 76 + .../skills/hyperframes/references/story.md | 103 ++ .../references/storyboard-format.md | 107 ++ .../hyperframes/references/storyboard.md | 36 + .../skills/hyperframes/references/types/3d.md | 25 + .../hyperframes/references/types/character.md | 20 + .../hyperframes/references/types/data.md | 19 + .../hyperframes/references/types/explainer.md | 34 + .../hyperframes/references/types/launch.md | 31 + .../hyperframes/references/types/music.md | 24 + .../hyperframes/references/types/vertical.md | 23 + .../hyperframes/scripts/bake-basemap.mjs | 324 ++++ .../hyperframes/scripts/lib/main-module.mjs | 13 + .../scripts/lib/main-module.test.mjs | 46 + .claude/skills/hyperframes/scripts/locate.mjs | 228 +++ .../skills/hyperframes/scripts/plugin-cli.mjs | 89 + .../hyperframes/scripts/plugin-cli.test.mjs | 121 ++ .claude/skills/media-use/.gitignore | 1 + .claude/skills/media-use/SKILL.md | 60 + .../media-use/audio/assets/sfx/CREDITS.md | 35 + .../media-use/audio/assets/sfx/chime.mp3 | Bin 0 -> 27309 bytes .../media-use/audio/assets/sfx/click-soft.mp3 | Bin 0 -> 11702 bytes .../media-use/audio/assets/sfx/click.mp3 | Bin 0 -> 11702 bytes .../media-use/audio/assets/sfx/error.mp3 | Bin 0 -> 51827 bytes .../media-use/audio/assets/sfx/glitch-1.mp3 | Bin 0 -> 84427 bytes .../media-use/audio/assets/sfx/glitch-2.mp3 | Bin 0 -> 112128 bytes .../media-use/audio/assets/sfx/glitch-3.mp3 | Bin 0 -> 99072 bytes .../audio/assets/sfx/impact-bass-1.mp3 | Bin 0 -> 67709 bytes .../audio/assets/sfx/impact-bass-2.mp3 | Bin 0 -> 82944 bytes .../media-use/audio/assets/sfx/key-press.mp3 | Bin 0 -> 3909 bytes .../media-use/audio/assets/sfx/manifest.json | 97 ++ .../audio/assets/sfx/notification.mp3 | Bin 0 -> 78576 bytes .../media-use/audio/assets/sfx/ping.mp3 | Bin 0 -> 26400 bytes .../skills/media-use/audio/assets/sfx/pop.mp3 | Bin 0 -> 23040 bytes .../media-use/audio/assets/sfx/riser.mp3 | Bin 0 -> 321024 bytes .../media-use/audio/assets/sfx/sparkle.mp3 | Bin 0 -> 57678 bytes .../media-use/audio/assets/sfx/typing.mp3 | Bin 0 -> 26852 bytes .../audio/assets/sfx/whoosh-cinematic.mp3 | Bin 0 -> 177408 bytes .../audio/assets/sfx/whoosh-short.mp3 | Bin 0 -> 18390 bytes .../media-use/audio/assets/sfx/whoosh.mp3 | Bin 0 -> 18390 bytes .../skills/media-use/audio/references/bgm.md | 76 + .../audio/references/captions/authoring.md | 162 ++ .../audio/references/captions/motion.md | 87 + .../captions/transcript-handling.md | 97 ++ .../audio/references/remove-background.md | 143 ++ .../audio/references/requirements.md | 29 + .../skills/media-use/audio/references/sfx.md | 48 + .../media-use/audio/references/transcribe.md | 52 + .../audio/references/tts-to-captions.md | 35 + .../skills/media-use/audio/references/tts.md | 257 +++ .../skills/media-use/audio/scripts/audio.mjs | 310 ++++ .../media-use/audio/scripts/audio.test.mjs | 166 ++ .../skills/media-use/audio/scripts/carve.mjs | 560 +++++++ .../media-use/audio/scripts/carve.test.mjs | 254 +++ .../audio/scripts/extract-audio-data.py | 199 +++ .../audio/scripts/gemini-pipeline.test.mjs | 131 ++ .../media-use/audio/scripts/heygen-tts.mjs | 122 ++ .../audio/scripts/heygen-tts.test.mjs | 38 + .../media-use/audio/scripts/heygen-voice.mjs | 98 ++ .../audio/scripts/heygen-voice.test.mjs | 233 +++ .../audio/scripts/lib/audio-meta.mjs | 39 + .../audio/scripts/lib/audio-meta.test.mjs | 136 ++ .../audio/scripts/lib/bgm-volume.mjs | 4 + .../media-use/audio/scripts/lib/bgm.mjs | 257 +++ .../media-use/audio/scripts/lib/bgm.test.mjs | 74 + .../audio/scripts/lib/concurrency.mjs | 14 + .../audio/scripts/lib/concurrency.test.mjs | 41 + .../audio/scripts/lib/gemini-auth.mjs | 43 + .../audio/scripts/lib/gemini-auth.py | 52 + .../audio/scripts/lib/gemini-auth.test.mjs | 86 + .../audio/scripts/lib/gemini-auth_test.py | 90 + .../audio/scripts/lib/gemini-tts.mjs | 122 ++ .../audio/scripts/lib/gemini-tts.test.mjs | 243 +++ .../media-use/audio/scripts/lib/heygen.mjs | 240 +++ .../audio/scripts/lib/heygen.test.mjs | 292 ++++ .../audio/scripts/lib/main-module.mjs | 13 + .../audio/scripts/lib/media-record.mjs | 118 ++ .../audio/scripts/lib/media-record.test.mjs | 224 +++ .../media-use/audio/scripts/lib/openverse.mjs | 134 ++ .../media-use/audio/scripts/lib/python.mjs | 77 + .../audio/scripts/lib/python.test.mjs | 136 ++ .../media-use/audio/scripts/lib/sfx.mjs | 196 +++ .../media-use/audio/scripts/lib/sfx.test.mjs | 331 ++++ .../audio/scripts/lib/tts.cleanup.test.mjs | 175 ++ .../media-use/audio/scripts/lib/tts.mjs | 394 +++++ .../audio/scripts/lib/tts.spawn.test.mjs | 158 ++ .../media-use/audio/scripts/lib/tts.test.mjs | 230 +++ .../media-use/audio/scripts/lyria-recipe.py | 136 ++ .../media-use/audio/scripts/wait-bgm.mjs | 175 ++ .../media-use/audio/scripts/wait-bgm.test.mjs | 108 ++ .claude/skills/media-use/luts/README.md | 28 + .claude/skills/media-use/luts/index.json | 57 + .claude/skills/media-use/references/audio.md | 20 + .../skills/media-use/references/grading.md | 161 ++ .claude/skills/media-use/references/local.md | 24 + .../references/media-treatment-recipes.md | 929 +++++++++++ .../media-use/references/media-treatments.md | 206 +++ .claude/skills/media-use/references/memory.md | 37 + .claude/skills/media-use/references/meta.md | 61 + .claude/skills/media-use/references/mixing.md | 71 + .../skills/media-use/references/operations.md | 329 ++++ .../skills/media-use/references/resolve.md | 150 ++ .../media-use/references/setup-providers.md | 94 ++ .../references/telemetry-dashboard.md | 49 + .../skills/media-use/scripts/audio-duck.mjs | 113 ++ .../media-use/scripts/compatibility.test.mjs | 41 + .claude/skills/media-use/scripts/dither.mjs | 328 ++++ .../skills/media-use/scripts/dither.test.mjs | 176 ++ .claude/skills/media-use/scripts/eval.mjs | 369 +++++ .../media-use/scripts/lib/config-lock.mjs | 45 + .../skills/media-use/scripts/lib/cutlist.mjs | 191 +++ .claude/skills/media-use/scripts/lib/duck.mjs | 96 ++ .../media-use/scripts/lib/error-diffusion.mjs | 230 +++ .../media-use/scripts/lib/index-gen.mjs | 63 + .../skills/media-use/scripts/lib/manifest.mjs | 282 ++++ .../media-use/scripts/lib/media-fetch.mjs | 85 + .../media-use/scripts/lib/media-home.mjs | 20 + .../skills/media-use/scripts/lib/npx-sync.mjs | 57 + .../media-use/scripts/lib/parakeet-words.mjs | 27 + .../media-use/scripts/lib/prefs-store.mjs | 180 ++ .../media-use/scripts/lib/recipe-store.mjs | 370 +++++ .../media-use/scripts/lib/telemetry.mjs | 213 +++ .../media-use/scripts/lib/telemetry.test.mjs | 73 + .../scripts/lib/transcriptCutFade.mjs | 21 + .../skills/media-use/scripts/lib/words.mjs | 18 + .claude/skills/media-use/scripts/prefs.mjs | 69 + .claude/skills/media-use/scripts/recipe.mjs | 101 ++ .../media-use/scripts/resolve-plugin.test.mjs | 62 + .claude/skills/media-use/scripts/resolve.mjs | 31 + .../skills/media-use/scripts/transcribe.mjs | 194 +++ .../media-use/scripts/transcribe.test.mjs | 112 ++ .../media-use/scripts/transcript-cut.mjs | 289 ++++ .../media-use/scripts/transcript-cut.test.mjs | 341 ++++ .../skills/remotion-to-hyperframes/SKILL.md | 49 + .../remotion-to-hyperframes/assets/.gitkeep | 0 .../assets/test-corpus/.gitignore | 1 + .../assets/test-corpus/run.sh | 249 +++ .../test-corpus/tier-1-title-card/.gitignore | 10 + .../test-corpus/tier-1-title-card/README.md | 41 + .../tier-1-title-card/expected.json | 26 + .../hf-src/compositions/title.html | 31 + .../tier-1-title-card/hf-src/index.html | 46 + .../remotion-src/package.json | 14 + .../remotion-src/remotion.config.ts | 13 + .../remotion-src/src/Root.tsx | 13 + .../remotion-src/src/TitleCard.tsx | 34 + .../remotion-src/src/index.ts | 4 + .../remotion-src/tsconfig.json | 15 + .../test-corpus/tier-2-multi-scene/.gitignore | 14 + .../test-corpus/tier-2-multi-scene/README.md | 54 + .../tier-2-multi-scene/expected.json | 29 + .../hf-src/compositions/scene-1.html | 35 + .../hf-src/compositions/scene-2.html | 35 + .../hf-src/compositions/scene-3.html | 36 + .../tier-2-multi-scene/hf-src/index.html | 75 + .../remotion-src/package.json | 14 + .../remotion-src/remotion.config.ts | 13 + .../remotion-src/src/MultiScene.tsx | 105 ++ .../remotion-src/src/Root.tsx | 13 + .../remotion-src/src/index.ts | 4 + .../remotion-src/tsconfig.json | 15 + .../test-corpus/tier-2-multi-scene/setup.sh | 34 + .../test-corpus/tier-3-data-driven/.gitignore | 10 + .../test-corpus/tier-3-data-driven/README.md | 85 + .../tier-3-data-driven/expected.json | 41 + .../hf-src/compositions/scene-1.html | 52 + .../hf-src/compositions/scene-2.html | 99 ++ .../hf-src/compositions/scene-3.html | 55 + .../tier-3-data-driven/hf-src/index.html | 70 + .../remotion-src/package.json | 15 + .../remotion-src/remotion.config.ts | 13 + .../remotion-src/src/Root.tsx | 27 + .../remotion-src/src/Stargazed.tsx | 37 + .../src/components/AnimatedNumber.tsx | 23 + .../remotion-src/src/components/StatCard.tsx | 59 + .../src/components/UnderlinedText.tsx | 47 + .../remotion-src/src/index.ts | 4 + .../remotion-src/src/scenes/OutroScene.tsx | 18 + .../remotion-src/src/scenes/StatsScene.tsx | 34 + .../remotion-src/src/scenes/TitleScene.tsx | 55 + .../remotion-src/tsconfig.json | 15 + .../test-corpus/tier-4-escape-hatch/README.md | 51 + .../cases/01-use-state.tsx | 29 + .../cases/02-use-effect-deps.tsx | 29 + .../cases/03-async-metadata.tsx | 39 + .../cases/04-third-party-react.tsx | 30 + .../cases/05-lambda-config.tsx | 38 + .../cases/06-warnings-only.tsx | 36 + .../cases/07-custom-hook.tsx | 28 + .../tier-4-escape-hatch/cases/08-mixed.tsx | 41 + .../tier-4-escape-hatch/expected.json | 85 + .../tier-4-escape-hatch/validate.sh | 110 ++ .../references/api-map.md | 142 ++ .../references/escape-hatch.md | 115 ++ .../references/eval.md | 140 ++ .../references/fonts.md | 112 ++ .../references/limitations.md | 136 ++ .../references/lottie.md | 119 ++ .../references/media.md | 166 ++ .../references/parameters.md | 172 ++ .../references/sequencing.md | 251 +++ .../references/timing.md | 165 ++ .../references/transitions.md | 114 ++ .../remotion-to-hyperframes/scripts/.gitkeep | 0 .../scripts/frame_strip.sh | 107 ++ .../scripts/lint_source.py | 370 +++++ .../scripts/render_diff.sh | 103 ++ .../scripts/tests/fixtures/blocker.tsx | 50 + .../scripts/tests/fixtures/clean.tsx | 46 + .../scripts/tests/smoke.sh | 90 + .claude/skills/slideshow/SKILL.md | 62 + .../references/standalone-harness.md | 1017 ++++++++++++ 300 files changed, 49175 insertions(+) create mode 100644 .claude/skills/figma/SKILL.md create mode 100644 .claude/skills/figma/scripts/verify-motion.mjs create mode 100644 .claude/skills/hyperframes-cli/SKILL.md create mode 100644 .claude/skills/hyperframes-cli/references/beats.md create mode 100644 .claude/skills/hyperframes-cli/references/cloud.md create mode 100644 .claude/skills/hyperframes-cli/references/cloudrun.md create mode 100644 .claude/skills/hyperframes-cli/references/compare-and-batch.md create mode 100644 .claude/skills/hyperframes-cli/references/conventions.md create mode 100644 .claude/skills/hyperframes-cli/references/doctor-browser.md create mode 100644 .claude/skills/hyperframes-cli/references/feedback.md create mode 100644 .claude/skills/hyperframes-cli/references/init-and-scaffold.md create mode 100644 .claude/skills/hyperframes-cli/references/lambda.md create mode 100644 .claude/skills/hyperframes-cli/references/lint-validate-inspect.md create mode 100644 .claude/skills/hyperframes-cli/references/preview-render.md create mode 100644 .claude/skills/hyperframes-cli/references/upgrade-info-misc.md create mode 100644 .claude/skills/hyperframes-registry/SKILL.md create mode 100644 .claude/skills/hyperframes-registry/examples/add-block.md create mode 100644 .claude/skills/hyperframes-registry/examples/add-component.md create mode 100644 .claude/skills/hyperframes-registry/references/component-quality-bar.md create mode 100644 .claude/skills/hyperframes-registry/references/contributing.md create mode 100644 .claude/skills/hyperframes-registry/references/demo-html-pattern.md create mode 100644 .claude/skills/hyperframes-registry/references/discovery.md create mode 100644 .claude/skills/hyperframes-registry/references/install-locations.md create mode 100644 .claude/skills/hyperframes-registry/references/placeholder-material.md create mode 100644 .claude/skills/hyperframes-registry/references/search.md create mode 100644 .claude/skills/hyperframes-registry/references/templates.md create mode 100644 .claude/skills/hyperframes-registry/references/wiring-blocks.md create mode 100644 .claude/skills/hyperframes-registry/references/wiring-components.md create mode 100644 .claude/skills/hyperframes/SKILL.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/biennale-yellow/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/biennale-yellow/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/biennale-yellow/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blockframe/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blockframe/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blockframe/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blue-professional/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blue-professional/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/blue-professional/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/bold-poster/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/bold-poster/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/bold-poster/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/broadside/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/broadside/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/broadside/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/capsule/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/capsule/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/capsule/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cartesian/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cartesian/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cartesian/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cobalt-grid/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cobalt-grid/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/cobalt-grid/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-400.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-700.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-inter.txt create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt create mode 100644 .claude/skills/hyperframes/assets/frame-presets/code-editorial/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/coral/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/coral/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/coral/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/creative-mode/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/creative-mode/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/creative-mode/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/daisy-days/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/daisy-days/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/daisy-days/frame-showcase.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/editorial-forest/FRAME.md create mode 100644 .claude/skills/hyperframes/assets/frame-presets/editorial-forest/caption-skin.html create mode 100644 .claude/skills/hyperframes/assets/frame-presets/editorial-forest/frame-showcase.html create mode 100644 .claude/skills/hyperframes/references/captions.md create mode 100644 .claude/skills/hyperframes/references/film.md create mode 100644 .claude/skills/hyperframes/references/format.md create mode 100644 .claude/skills/hyperframes/references/look.md create mode 100644 .claude/skills/hyperframes/references/motion.md create mode 100644 .claude/skills/hyperframes/references/overlays.md create mode 100644 .claude/skills/hyperframes/references/plugin-installation.md create mode 100644 .claude/skills/hyperframes/references/review.md create mode 100644 .claude/skills/hyperframes/references/runtimes.md create mode 100644 .claude/skills/hyperframes/references/skill-lifecycle.md create mode 100644 .claude/skills/hyperframes/references/sound.md create mode 100644 .claude/skills/hyperframes/references/spec.md create mode 100644 .claude/skills/hyperframes/references/story.md create mode 100644 .claude/skills/hyperframes/references/storyboard-format.md create mode 100644 .claude/skills/hyperframes/references/storyboard.md create mode 100644 .claude/skills/hyperframes/references/types/3d.md create mode 100644 .claude/skills/hyperframes/references/types/character.md create mode 100644 .claude/skills/hyperframes/references/types/data.md create mode 100644 .claude/skills/hyperframes/references/types/explainer.md create mode 100644 .claude/skills/hyperframes/references/types/launch.md create mode 100644 .claude/skills/hyperframes/references/types/music.md create mode 100644 .claude/skills/hyperframes/references/types/vertical.md create mode 100644 .claude/skills/hyperframes/scripts/bake-basemap.mjs create mode 100644 .claude/skills/hyperframes/scripts/lib/main-module.mjs create mode 100644 .claude/skills/hyperframes/scripts/lib/main-module.test.mjs create mode 100644 .claude/skills/hyperframes/scripts/locate.mjs create mode 100644 .claude/skills/hyperframes/scripts/plugin-cli.mjs create mode 100644 .claude/skills/hyperframes/scripts/plugin-cli.test.mjs create mode 100644 .claude/skills/media-use/.gitignore create mode 100644 .claude/skills/media-use/SKILL.md create mode 100644 .claude/skills/media-use/audio/assets/sfx/CREDITS.md create mode 100644 .claude/skills/media-use/audio/assets/sfx/chime.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/click-soft.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/click.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/error.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/glitch-1.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/glitch-2.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/glitch-3.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/key-press.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/manifest.json create mode 100644 .claude/skills/media-use/audio/assets/sfx/notification.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/ping.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/pop.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/riser.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/sparkle.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/typing.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/whoosh-short.mp3 create mode 100644 .claude/skills/media-use/audio/assets/sfx/whoosh.mp3 create mode 100644 .claude/skills/media-use/audio/references/bgm.md create mode 100644 .claude/skills/media-use/audio/references/captions/authoring.md create mode 100644 .claude/skills/media-use/audio/references/captions/motion.md create mode 100644 .claude/skills/media-use/audio/references/captions/transcript-handling.md create mode 100644 .claude/skills/media-use/audio/references/remove-background.md create mode 100644 .claude/skills/media-use/audio/references/requirements.md create mode 100644 .claude/skills/media-use/audio/references/sfx.md create mode 100644 .claude/skills/media-use/audio/references/transcribe.md create mode 100644 .claude/skills/media-use/audio/references/tts-to-captions.md create mode 100644 .claude/skills/media-use/audio/references/tts.md create mode 100644 .claude/skills/media-use/audio/scripts/audio.mjs create mode 100644 .claude/skills/media-use/audio/scripts/audio.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/carve.mjs create mode 100644 .claude/skills/media-use/audio/scripts/carve.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/extract-audio-data.py create mode 100644 .claude/skills/media-use/audio/scripts/gemini-pipeline.test.mjs create mode 100755 .claude/skills/media-use/audio/scripts/heygen-tts.mjs create mode 100644 .claude/skills/media-use/audio/scripts/heygen-tts.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/heygen-voice.mjs create mode 100644 .claude/skills/media-use/audio/scripts/heygen-voice.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/audio-meta.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/audio-meta.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/bgm-volume.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/bgm.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/bgm.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/concurrency.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/concurrency.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-auth.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-auth.py create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-auth_test.py create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-tts.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/heygen.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/heygen.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/main-module.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/media-record.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/media-record.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/openverse.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/python.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/python.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/sfx.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/sfx.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/tts.cleanup.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/tts.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lib/tts.test.mjs create mode 100644 .claude/skills/media-use/audio/scripts/lyria-recipe.py create mode 100644 .claude/skills/media-use/audio/scripts/wait-bgm.mjs create mode 100644 .claude/skills/media-use/audio/scripts/wait-bgm.test.mjs create mode 100644 .claude/skills/media-use/luts/README.md create mode 100644 .claude/skills/media-use/luts/index.json create mode 100644 .claude/skills/media-use/references/audio.md create mode 100644 .claude/skills/media-use/references/grading.md create mode 100644 .claude/skills/media-use/references/local.md create mode 100644 .claude/skills/media-use/references/media-treatment-recipes.md create mode 100644 .claude/skills/media-use/references/media-treatments.md create mode 100644 .claude/skills/media-use/references/memory.md create mode 100644 .claude/skills/media-use/references/meta.md create mode 100644 .claude/skills/media-use/references/mixing.md create mode 100644 .claude/skills/media-use/references/operations.md create mode 100644 .claude/skills/media-use/references/resolve.md create mode 100644 .claude/skills/media-use/references/setup-providers.md create mode 100644 .claude/skills/media-use/references/telemetry-dashboard.md create mode 100644 .claude/skills/media-use/scripts/audio-duck.mjs create mode 100644 .claude/skills/media-use/scripts/compatibility.test.mjs create mode 100644 .claude/skills/media-use/scripts/dither.mjs create mode 100644 .claude/skills/media-use/scripts/dither.test.mjs create mode 100644 .claude/skills/media-use/scripts/eval.mjs create mode 100644 .claude/skills/media-use/scripts/lib/config-lock.mjs create mode 100644 .claude/skills/media-use/scripts/lib/cutlist.mjs create mode 100644 .claude/skills/media-use/scripts/lib/duck.mjs create mode 100644 .claude/skills/media-use/scripts/lib/error-diffusion.mjs create mode 100644 .claude/skills/media-use/scripts/lib/index-gen.mjs create mode 100644 .claude/skills/media-use/scripts/lib/manifest.mjs create mode 100644 .claude/skills/media-use/scripts/lib/media-fetch.mjs create mode 100644 .claude/skills/media-use/scripts/lib/media-home.mjs create mode 100644 .claude/skills/media-use/scripts/lib/npx-sync.mjs create mode 100644 .claude/skills/media-use/scripts/lib/parakeet-words.mjs create mode 100644 .claude/skills/media-use/scripts/lib/prefs-store.mjs create mode 100644 .claude/skills/media-use/scripts/lib/recipe-store.mjs create mode 100644 .claude/skills/media-use/scripts/lib/telemetry.mjs create mode 100644 .claude/skills/media-use/scripts/lib/telemetry.test.mjs create mode 100644 .claude/skills/media-use/scripts/lib/transcriptCutFade.mjs create mode 100644 .claude/skills/media-use/scripts/lib/words.mjs create mode 100644 .claude/skills/media-use/scripts/prefs.mjs create mode 100644 .claude/skills/media-use/scripts/recipe.mjs create mode 100644 .claude/skills/media-use/scripts/resolve-plugin.test.mjs create mode 100644 .claude/skills/media-use/scripts/resolve.mjs create mode 100644 .claude/skills/media-use/scripts/transcribe.mjs create mode 100644 .claude/skills/media-use/scripts/transcribe.test.mjs create mode 100644 .claude/skills/media-use/scripts/transcript-cut.mjs create mode 100644 .claude/skills/media-use/scripts/transcript-cut.test.mjs create mode 100644 .claude/skills/remotion-to-hyperframes/SKILL.md create mode 100644 .claude/skills/remotion-to-hyperframes/assets/.gitkeep create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/.gitignore create mode 100755 .claude/skills/remotion-to-hyperframes/assets/test-corpus/run.sh create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/.gitignore create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/compositions/title.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/.gitignore create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-1.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-3.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json create mode 100755 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/.gitignore create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json create mode 100755 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh create mode 100644 .claude/skills/remotion-to-hyperframes/references/api-map.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/escape-hatch.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/eval.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/fonts.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/limitations.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/lottie.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/media.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/parameters.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/sequencing.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/timing.md create mode 100644 .claude/skills/remotion-to-hyperframes/references/transitions.md create mode 100644 .claude/skills/remotion-to-hyperframes/scripts/.gitkeep create mode 100755 .claude/skills/remotion-to-hyperframes/scripts/frame_strip.sh create mode 100755 .claude/skills/remotion-to-hyperframes/scripts/lint_source.py create mode 100755 .claude/skills/remotion-to-hyperframes/scripts/render_diff.sh create mode 100644 .claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx create mode 100644 .claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx create mode 100755 .claude/skills/remotion-to-hyperframes/scripts/tests/smoke.sh create mode 100644 .claude/skills/slideshow/SKILL.md create mode 100644 .claude/skills/slideshow/references/standalone-harness.md diff --git a/.claude/skills/figma/SKILL.md b/.claude/skills/figma/SKILL.md new file mode 100644 index 0000000..2a33e19 --- /dev/null +++ b/.claude/skills/figma/SKILL.md @@ -0,0 +1,55 @@ +--- +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:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) 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. + +| 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 | + +## Commands + +- A layer, logo or image: `npx hyperframes figma asset '' [more refs] --format svg|png --scale 2 --description "" [--entity ""]`. 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 `. 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:", version}`). +- A frame as editable HTML at exact geometry: `npx hyperframes figma component ''`, packaged under `compositions/components//`. 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 --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 /scripts/verify-motion.mjs --reference --render --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 `