takomi 2.1.45 → 2.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.pi/README.md +5 -5
- package/.pi/agents/architect.md +2 -2
- package/.pi/agents/designer.md +2 -2
- package/.pi/agents/worker.md +32 -0
- package/.pi/extensions/oauth-router/README.md +3 -3
- package/.pi/extensions/oauth-router/config.ts +34 -34
- package/.pi/extensions/oauth-router/report-ui.ts +205 -205
- package/.pi/extensions/oauth-router/scripts/vibe-verify.py +5 -5
- package/.pi/extensions/takomi-context-manager/diagnostics.ts +560 -560
- package/.pi/extensions/takomi-context-manager/model-policy-gate.ts +15 -103
- package/.pi/extensions/takomi-context-manager/policy-tools.ts +93 -93
- package/.pi/extensions/takomi-context-manager/skill-categories.d.ts +11 -11
- package/.pi/extensions/takomi-context-manager/skill-tools.ts +208 -208
- package/.pi/extensions/takomi-context-manager/tool-renderers.ts +112 -112
- package/.pi/extensions/takomi-runtime/command-text.ts +5 -4
- package/.pi/extensions/takomi-runtime/commands.ts +17 -17
- package/.pi/extensions/takomi-runtime/gate-provenance.ts +24 -24
- package/.pi/extensions/takomi-runtime/index.ts +278 -86
- package/.pi/extensions/takomi-runtime/model-routing-defaults.ts +168 -232
- package/.pi/extensions/takomi-runtime/profile.ts +9 -8
- package/.pi/extensions/takomi-runtime/routing-policy.ts +84 -65
- package/.pi/extensions/takomi-runtime/shared.ts +7 -30
- package/.pi/extensions/takomi-runtime/tool-renderers.ts +234 -234
- package/.pi/extensions/takomi-runtime/workflow-catalog.ts +54 -54
- package/.pi/extensions/takomi-subagents/agents.ts +5 -0
- package/.pi/extensions/takomi-subagents/async-lifecycle.ts +401 -401
- package/.pi/extensions/takomi-subagents/detached-results.ts +940 -940
- package/.pi/extensions/takomi-subagents/index.ts +4 -0
- package/.pi/extensions/takomi-subagents/native-render.ts +253 -250
- package/.pi/extensions/takomi-subagents/pi-subagents-engine.ts +7 -1
- package/.pi/extensions/takomi-subagents/result-heartbeat.ts +55 -55
- package/.pi/extensions/takomi-subagents/subagent-ux.ts +162 -162
- package/.pi/extensions/takomi-subagents/tool-runner.ts +65 -1
- package/.pi/settings.json +39 -36
- package/.pi/takomi/model-routing.md +6 -0
- package/.pi/takomi-profile.json +8 -4
- package/README.md +1 -1
- package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -93
- package/assets/.agent/skills/embedded-captions/SKILL.md +286 -286
- package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -35
- package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -115
- package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -2211
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +241 -241
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +241 -241
- package/assets/.agent/skills/embedded-captions/dna/README.md +148 -148
- package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -68
- package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -69
- package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -70
- package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -82
- package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -65
- package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -75
- package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -58
- package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -89
- package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -48
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -98
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -188
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -134
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -179
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -81
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -170
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -16
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -226
- package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -355
- package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -233
- package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -192
- package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -97
- package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -168
- package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -188
- package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -178
- package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -130
- package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -522
- package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -138
- package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -371
- package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -334
- package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -145
- package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -238
- package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -148
- package/assets/.agent/skills/embedded-captions/references/rail.md +68 -68
- package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -47
- package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -94
- package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -66
- package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -266
- package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -63
- package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -95
- package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -250
- package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -194
- package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -233
- package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -173
- package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -124
- package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -158
- package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -46
- package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -169
- package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -201
- package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -1205
- package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -404
- package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -8781
- package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -279
- package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -293
- package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -39
- package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -268
- package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -469
- package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -34
- package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -813
- package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -332
- package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -49
- package/assets/.agent/skills/embedded-captions/themes/README.md +244 -244
- package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -27
- package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -51
- package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -35
- package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -74
- package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -52
- package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -33
- package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -53
- package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -37
- package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -29
- package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -49
- package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -47
- package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -209
- package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -156
- package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -248
- package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -146
- package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/figma/SKILL.md +121 -121
- package/assets/.agent/skills/general-video/SKILL.md +143 -143
- package/assets/.agent/skills/hyperframes/SKILL.md +164 -164
- package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -84
- package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -64
- package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -114
- package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -143
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -118
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -105
- package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -117
- package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -131
- package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -178
- package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -101
- package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -27
- package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -44
- package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -57
- package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -46
- package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -53
- package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -78
- package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -69
- package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -29
- package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -42
- package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -146
- package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -382
- package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -649
- package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -520
- package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -468
- package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -1298
- package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -759
- package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -729
- package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -352
- package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -779
- package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -1374
- package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -861
- package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -347
- package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -606
- package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -297
- package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -382
- package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -305
- package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -286
- package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -371
- package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -246
- package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -267
- package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -257
- package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -332
- package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -283
- package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -373
- package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -262
- package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -313
- package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -303
- package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -307
- package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -299
- package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -223
- package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -183
- package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -328
- package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -301
- package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -350
- package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -296
- package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -298
- package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -278
- package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -156
- package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -329
- package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -274
- package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -239
- package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -349
- package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -86
- package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -606
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -167
- package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -127
- package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -12
- package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -43
- package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -95
- package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -45
- package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -10
- package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -49
- package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -25
- package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -41
- package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -24
- package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -153
- package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -113
- package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -45
- package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -51
- package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -132
- package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -121
- package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -164
- package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -75
- package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -78
- package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -263
- package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -70
- package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -68
- package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -62
- package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -66
- package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -49
- package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -95
- package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -237
- package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -41
- package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -125
- package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -76
- package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -90
- package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -70
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -289
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -221
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -1214
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -1347
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -307
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -1372
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -1140
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -225
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -1166
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -1465
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -278
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -222
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -1263
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -277
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -1439
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -238
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -1468
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -314
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -226
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -1268
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -333
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -227
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -1330
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -274
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -1444
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -1273
- package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -76
- package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -164
- package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -199
- package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -123
- package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -55
- package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -73
- package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -150
- package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -92
- package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -68
- package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -218
- package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -63
- package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -457
- package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -353
- package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -188
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -1432
- package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -237
- package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -4
- package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -106
- package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -97
- package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -72
- package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -159
- package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -87
- package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -97
- package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -143
- package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -29
- package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -42
- package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -52
- package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -24
- package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -135
- package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -293
- package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -121
- package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -235
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -14
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -41
- package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -131
- package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -298
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -97
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -66
- package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -167
- package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -101
- package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -51
- package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -73
- package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -166
- package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -54
- package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -215
- package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -45
- package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -417
- package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -61
- package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -39
- package/assets/.agent/skills/media-use/SKILL.md +124 -124
- package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -369
- package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -112
- package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -20
- package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -59
- package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -114
- package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -26
- package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -51
- package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -44
- package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -63
- package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -91
- package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -293
- package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -39
- package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -31
- package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -29
- package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -23
- package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -247
- package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -247
- package/assets/.agent/skills/motion-graphics/SKILL.md +172 -172
- package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -40
- package/assets/.agent/skills/motion-graphics/agents/director.md +53 -53
- package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -17
- package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -40
- package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -37
- package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -19
- package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -17
- package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -273
- package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -61
- package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -56
- package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -64
- package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -227
- package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -21
- package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -38
- package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -43
- package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -54
- package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -306
- package/assets/.agent/skills/music-to-video/SKILL.md +197 -197
- package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -100
- package/assets/.agent/skills/music-to-video/references/montage.md +58 -58
- package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -75
- package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -11
- package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -326
- package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -120
- package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -95
- package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -135
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -146
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -103
- package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -155
- package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -166
- package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -133
- package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -241
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -79
- package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -104
- package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -92
- package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -131
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -109
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -124
- package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -108
- package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -141
- package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -121
- package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -160
- package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -113
- package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -130
- package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -42
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -313
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -136
- package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -122
- package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -126
- package/assets/.agent/skills/music-to-video/references/planning.md +104 -104
- package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -94
- package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -106
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -527
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -13
- package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -485
- package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -302
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -610
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -41
- package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -596
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -589
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -25
- package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -267
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -594
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -39
- package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -238
- package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -531
- package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -218
- package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -58
- package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -161
- package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/pr-to-video/SKILL.md +240 -240
- package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -111
- package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -211
- package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -157
- package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -539
- package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -95
- package/assets/.agent/skills/product-launch-video/SKILL.md +208 -208
- package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -220
- package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -373
- package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -126
- package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -39
- package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/remotion/SKILL.md +357 -38
- package/assets/.agent/skills/remotion/rules/3d.md +5 -5
- package/assets/.agent/skills/remotion/rules/assets/text-animations-word-highlight.tsx +1 -6
- package/assets/.agent/skills/remotion/rules/audio-visualization.md +198 -0
- package/assets/.agent/skills/remotion/rules/audio.md +1 -4
- package/assets/.agent/skills/remotion/rules/calculate-metadata.md +48 -18
- package/assets/.agent/skills/remotion/rules/compositions.md +16 -24
- package/assets/.agent/skills/remotion/rules/display-captions.md +79 -21
- package/assets/.agent/skills/remotion/rules/effects.md +235 -0
- package/assets/.agent/skills/remotion/rules/ffmpeg.md +34 -0
- package/assets/.agent/skills/remotion/rules/get-audio-duration.md +13 -13
- package/assets/.agent/skills/remotion/rules/get-video-dimensions.md +1 -1
- package/assets/.agent/skills/remotion/rules/get-video-duration.md +12 -10
- package/assets/.agent/skills/remotion/rules/gifs.md +21 -18
- package/assets/.agent/skills/remotion/rules/google-fonts.md +72 -0
- package/assets/.agent/skills/remotion/rules/html-in-canvas.md +122 -0
- package/assets/.agent/skills/remotion/rules/images.md +5 -64
- package/assets/.agent/skills/remotion/rules/import-srt-captions.md +9 -7
- package/assets/.agent/skills/remotion/rules/light-leaks.md +73 -0
- package/assets/.agent/skills/remotion/rules/local-fonts.md +65 -0
- package/assets/.agent/skills/remotion/rules/lottie.md +10 -8
- package/assets/.agent/skills/remotion/rules/maplibre.md +458 -0
- package/assets/.agent/skills/remotion/rules/measuring-dom-nodes.md +0 -1
- package/assets/.agent/skills/remotion/rules/measuring-text.md +2 -5
- package/assets/.agent/skills/remotion/rules/parameters.md +21 -10
- package/assets/.agent/skills/remotion/rules/sequencing.md +35 -9
- package/assets/.agent/skills/remotion/rules/sfx.md +51 -0
- package/assets/.agent/skills/remotion/rules/silence-detection.md +71 -0
- package/assets/.agent/skills/remotion/rules/subtitles.md +36 -0
- package/assets/.agent/skills/remotion/rules/tailwind.md +2 -2
- package/assets/.agent/skills/remotion/rules/timing.md +89 -106
- package/assets/.agent/skills/remotion/rules/transcribe-captions.md +58 -7
- package/assets/.agent/skills/remotion/rules/transitions.md +117 -42
- package/assets/.agent/skills/remotion/rules/transparent-videos.md +106 -0
- package/assets/.agent/skills/remotion/rules/trimming.md +1 -3
- package/assets/.agent/skills/remotion/rules/video-layout.md +68 -0
- package/assets/.agent/skills/remotion/rules/voiceover.md +99 -0
- package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -264
- package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -114
- package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -75
- package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -93
- package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -127
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -249
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -26
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -61
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -54
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -118
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -105
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -269
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -27
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -37
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -23
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -59
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -47
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -18
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -55
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -51
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -39
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -30
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -38
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -36
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -28
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -110
- package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -142
- package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -115
- package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -140
- package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -112
- package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -136
- package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -121
- package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -149
- package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -167
- package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -195
- package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -165
- package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -114
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -107
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -358
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -103
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -50
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -46
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -90
- package/assets/.agent/skills/shared-resend-portfolio/SKILL.md +124 -124
- package/assets/.agent/skills/slideshow/SKILL.md +550 -550
- package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -1020
- package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -39
- package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -1191
- package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -10
- package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -145
- package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -92
- package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -171
- package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -131
- package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -164
- package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -143
- package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -121
- package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -109
- package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -172
- package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -189
- package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -181
- package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -130
- package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -142
- package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -188
- package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -196
- package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -206
- package/assets/.agent/skills/website-to-video/SKILL.md +145 -145
- package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -263
- package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -713
- package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -55
- package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -333
- package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -178
- package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -572
- package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -230
- package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -483
- package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -341
- package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -759
- package/package.json +6 -5
- package/src/pi-takomi-core/orchestration.ts +39 -21
- package/src/pi-takomi-core/routing.ts +8 -8
- package/src/pi-takomi-core/types.ts +25 -5
- package/src/pi-takomi-core/workflows.ts +86 -86
- package/src/takomi-stats.js +5 -5
- package/assets/.agent/skills/remotion/rules/animations.md +0 -29
- package/assets/.agent/skills/remotion/rules/assets.md +0 -78
- package/assets/.agent/skills/remotion/rules/can-decode.md +0 -75
- package/assets/.agent/skills/remotion/rules/charts.md +0 -58
- package/assets/.agent/skills/remotion/rules/extract-frames.md +0 -229
- package/assets/.agent/skills/remotion/rules/fonts.md +0 -152
- package/assets/.agent/skills/remotion/rules/maps.md +0 -403
|
@@ -1,197 +1,197 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: music-to-video
|
|
3
|
-
description: "Use when the user has a music track (an audio file, or a video to pull audio from) and wants a beat-synced HyperFrames video, calm to hard-hitting. The music drives everything: one analyzer reads it once, the orchestrator lays out the frames and fills a per-frame plan, and one sub-agent builds each frame. Typography and templates are the floor — a complete video needs zero assets — but any images or videos the user supplies are cut into the frames on the same beat grid (beat-cut / ken-burns). The genre (lyric video, slideshow, kinetic promo) falls out of the per-frame choices; the pipeline never branches on it."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# music-to-video — one music-grounded, beat-synced video workflow
|
|
7
|
-
|
|
8
|
-
Use this skill to turn a **music track** into a beat-synced HyperFrames video. You analyze the track once, lay out the frames, fill in a per-frame plan, and build each frame as a composition. The input is a music track plus optional user images or videos — there is **no narration and no website capture**. Typography and templates are the floor (a complete video needs zero assets); any media the user supplies is cut in on the same beat grid.
|
|
9
|
-
|
|
10
|
-
You are the **orchestrator**. Work in `videos/<project>/`. Run the steps in order and pass each **Gate** before moving on. Two steps need the user: **Step 3** (plan approval) and **Step 6** (render approval). Do every step yourself except **Step 4**, where you dispatch **one sub-agent per frame**. Keep design and motion rules out of this file — they live in `references/` and the `frame-worker` sub-agent.
|
|
11
|
-
|
|
12
|
-
`SKILL_DIR` = this skill directory. `PROJECT_DIR` = `videos/<project-name>/`.
|
|
13
|
-
|
|
14
|
-
Workflow: Step 0 setup → `hyperframes.json` + `assets/bgm.mp3`; Step 1 analyze → `audiomap.json`; Step 2 skeleton → `STORYBOARD.md` (frames, groups `TBD`); Step 3 plan → complete `STORYBOARD.md` + `frame.md`; Step 4 build → `compositions/frames/NN-*.html`; Step 5 assemble → `index.html`; Step 6 render → `renders/video.mp4`.
|
|
15
|
-
|
|
16
|
-
## Two ideas that shape everything
|
|
17
|
-
|
|
18
|
-
- **One analyzer, and you trust it.** `analyze-beatgrid.py` is the only beat analyzer — never re-measure beats with another tool or by ear. Its energy / density / rolls / onsets / silences are always reliable. Its `bpm` and `beats_sec` are reliable **only when the music is genuinely rhythmic**; on calm music the grid is a metronome the tracker imposed, so pace by phrases and energy instead and never hard-cut to it. Deciding which case you're in is each frame's `pacing` (Step 2).
|
|
19
|
-
- **One frame = one file; groups live inside.** Step 2 cuts the track into **frames**, and each frame becomes one composition file `compositions/frames/NN-<frame_id>.html`, built by one frame-worker. A frame can subdivide into **groups** (each a template or a motion-primitives combo). Extra density goes _inside_ a group, so **frame count tracks distinct treatments, not beats** — a fast track does not blow up the number of sub-agents.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Step 0: Setup, BGM, and inputs
|
|
24
|
-
|
|
25
|
-
Goal: Establish the music source, create the HyperFrames project, and note any user-supplied media.
|
|
26
|
-
|
|
27
|
-
The **music is the spine** — establish one track before anything else. This skill is tuned for **fast, high-energy BGM**: a strong beat grid drives the cuts (calm tracks work, but pace by phrase rather than beat). If the user gave you audio — a music file, or a video to pull the audio from — use it. If not, generate one: choose the mood from the user's description (e.g. "driving synthwave", "trap beat", "upbeat corporate") and produce a track via `/hyperframes-media` (`references/bgm.md` — HeyGen retrieval when credentialed, else local Lyria / MusicGen; ElevenLabs or another generator also works). Before generating, run `npx hyperframes auth status` and **relay its output verbatim (don't paraphrase or rewrite it)** — it shows whether BGM comes from HeyGen or local MusicGen and, if not signed in, how to sign in. **If not signed in, STOP and wait for the user to choose — sign in, or continue offline with local MusicGen — before generating the track**; don't write keys into a per-repo `.env`. (In autonomous mode, note the status and continue offline.) See `/hyperframes-media` → Preflight for the canonical guidance. Either way the track lands at `assets/bgm.mp3`. Stage any user-supplied images or videos so frames can weave them in on the beat grid; otherwise typography carries the whole video.
|
|
28
|
-
|
|
29
|
-
Initialize only if `hyperframes.json` is missing. Name `<project>` from the brief in kebab-case, such as `midnight-drive-loop` — never a timestamp. `init` checks the installed skills against the latest on GitHub and updates the global set if any are out of date.
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npx hyperframes init "videos/<project>" --non-interactive --example=blank
|
|
33
|
-
mkdir -p "$PROJECT_DIR/assets" "$PROJECT_DIR/renders"
|
|
34
|
-
cp "<user-music>" "$PROJECT_DIR/assets/bgm.mp3" # extract from a video first if needed
|
|
35
|
-
# only if the user gave you images/videos:
|
|
36
|
-
node <SKILL_DIR>/scripts/stage-assets.mjs --from <dir> --hyperframes "$PROJECT_DIR" --into public
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
The **brand** (font + palette) is chosen at Step 3, not here. Don't pick a genre or a track type up front — assets are just an optional ingredient, and the genre emerges from the per-frame choices.
|
|
40
|
-
|
|
41
|
-
**Gate:** `hyperframes.json` + `assets/bgm.mp3` exist; aspect / length / fps and (if any) the asset inventory are noted.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Step 1: Analyze the music
|
|
46
|
-
|
|
47
|
-
Goal: Produce the one canonical timing analysis the whole video is built on.
|
|
48
|
-
|
|
49
|
-
`analyze-beatgrid.py` is the **only** beat analyzer — never re-measure beats with another tool or by ear. It reads the track once and writes `audiomap.json`: energy phases (level / density / feel), onsets + `onset_rate`, rolls, silences, `hard_stops`, `key_moments`, phrases, tempo / grid, and `audio.duration_sec`. It's deterministic — the same file always gives the same map. Most fields are reliable on any music; `bpm` and `beats_sec` are reliable only when the music is genuinely rhythmic, and judging that is the call you make at Step 2.
|
|
50
|
-
|
|
51
|
-
Prerequisites: Python 3 with `librosa`, `numpy`, and `soundfile` available. If import fails, install them into the active Python environment before running the analyzer:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
python3 -m pip install librosa numpy soundfile
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
python3 <SKILL_DIR>/scripts/analyze-beatgrid.py "$PROJECT_DIR/assets/bgm.mp3" \
|
|
59
|
-
-o "$PROJECT_DIR/audiomap.json" --print
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Gate:** `audiomap.json` exists; `audio.duration_sec` is known.
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Step 2: Frame skeleton (structure only)
|
|
67
|
-
|
|
68
|
-
Goal: Read the music and lay out the frames — the skeleton of `STORYBOARD.md`.
|
|
69
|
-
|
|
70
|
-
Read [`references/frame-skeleton.md`](references/frame-skeleton.md). Turn `audiomap.json` into the **skeleton** of `STORYBOARD.md` yourself — there is no intermediate JSON. Cut the track into **frames** at real musical changes (`hard_stops`, SURGE / DROP `key_moments`, the edges of a roll, a stretch with no onsets, a big energy jump), snapping every boundary to an audiomap anchor. For each frame set `span_sec`, `pacing` (the verdict from Step 1's trust call — `beat_cut` when the grid is real, `phrase_flow` when it's a metronome imposed on calm music), `mood`, and a one-line `feel` (the plain music situation Step 3 matches a template against). Only classify and lay out here: leave every frame's `### Groups` as `TBD (Step 3)` and the frontmatter `style` blank — no templates, copy, color, or fonts. Expect ~1–6 frames.
|
|
71
|
-
|
|
72
|
-
**Gate:** frames tile the track (first at 0, last at `duration_s`); each carries `span_sec` + `pacing` + `mood` + `feel`; every `### Groups` is `TBD`; no content anywhere.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Step 3: Fill the plan (user-gated)
|
|
77
|
-
|
|
78
|
-
Goal: Turn the skeleton into an approved, complete `STORYBOARD.md`.
|
|
79
|
-
|
|
80
|
-
Read [`references/planning.md`](references/planning.md), [`storyboard-format.md`](references/storyboard-format.md), [`template-catalog.md`](references/template-catalog.md), [`motion-primitive-catalog.md`](references/motion-primitive-catalog.md), and [`montage.md`](references/montage.md) (only if the user supplied assets). Editing the same file in place, do two things:
|
|
81
|
-
|
|
82
|
-
1. **Pick the brand.** Choose one preset from `../hyperframes-creative/frame-presets/` using the table in `../hyperframes-creative/references/design-spec.md` (match the track's mood; **only its fonts and colors matter** — templates own composition). Copy it into `frame.md` **unmodified** and fill the frontmatter `style` (font + a ≤4–6 swatch palette) from it.
|
|
83
|
-
2. **Fill every frame.** Decide its groups and give each a treatment: a matched template from the catalog (with bound params and real audiomap anchors), a free-compose from the primitive catalog, or an asset treatment that **obeys `pacing`**. Write the copy. You own WHAT (template / primitives + content + anchors); the frame-worker owns HOW — **never write millisecond tweens into the storyboard**.
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
node <SKILL_DIR>/scripts/validate-plan.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
|
|
87
|
-
--audiomap "$PROJECT_DIR/audiomap.json" --templates <SKILL_DIR>/references/templates
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Fix every `✗` (hard errors: duration mismatch, frames not tiling the track, a missing `src`); warnings are best-effort. Then show the user a frame-by-frame summary and iterate until they approve.
|
|
91
|
-
|
|
92
|
-
**Gate:** `frame.md` is a verbatim preset copy; `validate-plan.mjs` exits 0; the user approved the plan.
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Step 4: Build frames from the plan
|
|
97
|
-
|
|
98
|
-
Goal: Build every frame as a self-contained composition file.
|
|
99
|
-
|
|
100
|
-
Create `compositions/frames/`. Read [`sub-agents/frame-worker.md`](sub-agents/frame-worker.md) and `../hyperframes-core/references/subagent-dispatch.md`. Dispatch **one frame-worker per frame**, in parallel where possible (otherwise in waves). Each worker gets exactly one frame and this context:
|
|
101
|
-
|
|
102
|
-
```text
|
|
103
|
-
PROJECT_DIR: <abs path>
|
|
104
|
-
frame_id: <NN-frame_id> # = the frame file stem, e.g. 02-f2; the composition id
|
|
105
|
-
Your block: the `## Frame N — <frame_id>` block in PROJECT_DIR/STORYBOARD.md
|
|
106
|
-
audiomap: PROJECT_DIR/audiomap.json
|
|
107
|
-
frame.md: PROJECT_DIR/frame.md
|
|
108
|
-
Materials: for each group, <SKILL_DIR>/references/templates/<id>/index.html (templates) and
|
|
109
|
-
<SKILL_DIR>/references/motion-primitives/<id>/ (free); staged assets/ (asset groups)
|
|
110
|
-
Contracts: ../hyperframes-core/references/sub-compositions.md + determinism-rules.md
|
|
111
|
-
Canvas: <w>×<h> Pacing: <beat_cut|phrase_flow>
|
|
112
|
-
Write to: PROJECT_DIR/compositions/frames/<frame_id>.html
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
The worker forks the cited materials, converts every anchor to frame-local seconds (`local_t = track_t − span_sec[0]`), gates its groups with 0ms cuts, and writes one seek-safe frame file. **The worker never runs the `hyperframes` CLI** — those commands operate on the assembled project, which doesn't exist yet, so they'd report on the wrong files. The worker just writes to the contract and stops; you verify after assembly (Step 6). As each worker returns, you can confirm its file landed on disk.
|
|
116
|
-
|
|
117
|
-
**Gate:** every frame has its `compositions/frames/NN-*.html` on disk.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Step 5: Assemble
|
|
122
|
-
|
|
123
|
-
Goal: Wire the built frames + BGM into the playable `index.html`.
|
|
124
|
-
|
|
125
|
-
`assemble-index.mjs` is deterministic — no subagent, no judgment. It references each frame file at its cumulative `data-start`, mounts `assets/bgm.mp3` on track 11, and hard-cuts frame → frame (frames tile the track with no gaps, so there is **no transition injector**).
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
|
|
129
|
-
--hyperframes "$PROJECT_DIR" --audiomap "$PROJECT_DIR/audiomap.json"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Fix any `✗` it reports — a missing or blank frame file means that worker wrote a partial file; re-dispatch it (Step 4) and re-assemble.
|
|
133
|
-
|
|
134
|
-
**Gate:** `index.html` exists; total duration == `audiomap.audio.duration_sec`.
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Step 6: Verify and render
|
|
139
|
-
|
|
140
|
-
Goal: Verify the assembled video, get user approval, and render the final MP4.
|
|
141
|
-
|
|
142
|
-
Run the CLI on the **assembled project** — that's the correct unit (the per-frame workers couldn't run it). `lint` checks structure, `validate` runs headless Chrome (catching JS errors and missing assets), `inspect` snapshots frames.
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
( cd "$PROJECT_DIR" && npx hyperframes lint . && npx hyperframes validate . && npx hyperframes inspect . )
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Inspect at `t=0`, each frame start, the strongest DROP / SURGE, every `hard_stops[].t`, and the final frame. On failure, make the **cheapest safe fix** yourself: edit the offending `compositions/frames/NN-*.html`. Never change duration or audio timing to hide a sync issue. Once the gates pass, pause for user review, then render only on approval:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
( cd "$PROJECT_DIR" && npx hyperframes render . --skill=music-to-video -q draft -o renders/video.mp4 --fps 30 )
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Gate:** `lint` / `validate` / `inspect` passed; the user approved; `renders/video.mp4` exists with audio, duration == `audiomap.audio.duration_sec`. The final reply states the MP4 path and duration.
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Resume table
|
|
159
|
-
|
|
160
|
-
| You have | Continue from |
|
|
161
|
-
| -------------------------- | ------------- |
|
|
162
|
-
| `assets/bgm.mp3` only | Step 1 |
|
|
163
|
-
| `audiomap.json` | Step 2 |
|
|
164
|
-
| `STORYBOARD.md` (skeleton) | Step 3 |
|
|
165
|
-
| `STORYBOARD.md` (complete) | Step 4 |
|
|
166
|
-
| all frame files | Step 5 |
|
|
167
|
-
| `index.html` | Step 6 |
|
|
168
|
-
|
|
169
|
-
## Quick Reference
|
|
170
|
-
|
|
171
|
-
**Formats:** landscape `1920x1080` by default; portrait `1080x1920`; square `1080x1080`. Set the canvas once in the storyboard frontmatter (`canvas: { w, h, fps }`).
|
|
172
|
-
|
|
173
|
-
**Scripts** under `scripts/`: `analyze-beatgrid.py` (the one analyzer), `validate-plan.mjs` (plan check), `assemble-index.mjs` (index assembly), `stage-assets.mjs` (stage user media), `lib/storyboard.mjs` (vendored parser). Everything else is the `hyperframes` CLI.
|
|
174
|
-
|
|
175
|
-
| Read | When |
|
|
176
|
-
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
|
|
177
|
-
| [`references/frame-skeleton.md`](references/frame-skeleton.md) | Step 2: read the music, lay out the frames, set pacing |
|
|
178
|
-
| [`references/planning.md`](references/planning.md) · [`storyboard-format.md`](references/storyboard-format.md) | Step 3: pick the brand, fill each frame, write the plan |
|
|
179
|
-
| [`references/template-catalog.md`](references/template-catalog.md) | Step 3: pick a template per group |
|
|
180
|
-
| [`references/motion-primitive-catalog.md`](references/motion-primitive-catalog.md) | Step 3/4: L0 recipes for free-compose |
|
|
181
|
-
| [`references/montage.md`](references/montage.md) | Step 3/4: asset treatments (beat-cut / ken-burns) |
|
|
182
|
-
| [`sub-agents/frame-worker.md`](sub-agents/frame-worker.md) | Step 4: dispatch + build one frame |
|
|
183
|
-
| `../hyperframes-core/references/subagent-dispatch.md` | Step 4: dispatch sub-agents safely |
|
|
184
|
-
| `../hyperframes-creative/references/design-spec.md` | Step 3: pick the preset (the brand) |
|
|
185
|
-
|
|
186
|
-
## Directory layout
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
music-to-video/
|
|
190
|
-
SKILL.md
|
|
191
|
-
references/ frame-skeleton.md · planning.md · storyboard-format.md
|
|
192
|
-
template-catalog.md · motion-primitive-catalog.md · montage.md
|
|
193
|
-
templates/<id>/ { index.html (+ assets/ · program.json) } ← L1 catalog impls
|
|
194
|
-
motion-primitives/<id>/ { index.html } (+ ../assets/gsap.min.js shared by recipes) ← L0 catalog impls
|
|
195
|
-
scripts/ analyze-beatgrid.py · assemble-index.mjs · validate-plan.mjs · stage-assets.mjs · lib/storyboard.mjs
|
|
196
|
-
sub-agents/ frame-worker.md ← the one subagent (one per frame)
|
|
197
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: music-to-video
|
|
3
|
+
description: "Use when the user has a music track (an audio file, or a video to pull audio from) and wants a beat-synced HyperFrames video, calm to hard-hitting. The music drives everything: one analyzer reads it once, the orchestrator lays out the frames and fills a per-frame plan, and one sub-agent builds each frame. Typography and templates are the floor — a complete video needs zero assets — but any images or videos the user supplies are cut into the frames on the same beat grid (beat-cut / ken-burns). The genre (lyric video, slideshow, kinetic promo) falls out of the per-frame choices; the pipeline never branches on it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# music-to-video — one music-grounded, beat-synced video workflow
|
|
7
|
+
|
|
8
|
+
Use this skill to turn a **music track** into a beat-synced HyperFrames video. You analyze the track once, lay out the frames, fill in a per-frame plan, and build each frame as a composition. The input is a music track plus optional user images or videos — there is **no narration and no website capture**. Typography and templates are the floor (a complete video needs zero assets); any media the user supplies is cut in on the same beat grid.
|
|
9
|
+
|
|
10
|
+
You are the **orchestrator**. Work in `videos/<project>/`. Run the steps in order and pass each **Gate** before moving on. Two steps need the user: **Step 3** (plan approval) and **Step 6** (render approval). Do every step yourself except **Step 4**, where you dispatch **one sub-agent per frame**. Keep design and motion rules out of this file — they live in `references/` and the `frame-worker` sub-agent.
|
|
11
|
+
|
|
12
|
+
`SKILL_DIR` = this skill directory. `PROJECT_DIR` = `videos/<project-name>/`.
|
|
13
|
+
|
|
14
|
+
Workflow: Step 0 setup → `hyperframes.json` + `assets/bgm.mp3`; Step 1 analyze → `audiomap.json`; Step 2 skeleton → `STORYBOARD.md` (frames, groups `TBD`); Step 3 plan → complete `STORYBOARD.md` + `frame.md`; Step 4 build → `compositions/frames/NN-*.html`; Step 5 assemble → `index.html`; Step 6 render → `renders/video.mp4`.
|
|
15
|
+
|
|
16
|
+
## Two ideas that shape everything
|
|
17
|
+
|
|
18
|
+
- **One analyzer, and you trust it.** `analyze-beatgrid.py` is the only beat analyzer — never re-measure beats with another tool or by ear. Its energy / density / rolls / onsets / silences are always reliable. Its `bpm` and `beats_sec` are reliable **only when the music is genuinely rhythmic**; on calm music the grid is a metronome the tracker imposed, so pace by phrases and energy instead and never hard-cut to it. Deciding which case you're in is each frame's `pacing` (Step 2).
|
|
19
|
+
- **One frame = one file; groups live inside.** Step 2 cuts the track into **frames**, and each frame becomes one composition file `compositions/frames/NN-<frame_id>.html`, built by one frame-worker. A frame can subdivide into **groups** (each a template or a motion-primitives combo). Extra density goes _inside_ a group, so **frame count tracks distinct treatments, not beats** — a fast track does not blow up the number of sub-agents.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 0: Setup, BGM, and inputs
|
|
24
|
+
|
|
25
|
+
Goal: Establish the music source, create the HyperFrames project, and note any user-supplied media.
|
|
26
|
+
|
|
27
|
+
The **music is the spine** — establish one track before anything else. This skill is tuned for **fast, high-energy BGM**: a strong beat grid drives the cuts (calm tracks work, but pace by phrase rather than beat). If the user gave you audio — a music file, or a video to pull the audio from — use it. If not, generate one: choose the mood from the user's description (e.g. "driving synthwave", "trap beat", "upbeat corporate") and produce a track via `/hyperframes-media` (`references/bgm.md` — HeyGen retrieval when credentialed, else local Lyria / MusicGen; ElevenLabs or another generator also works). Before generating, run `npx hyperframes auth status` and **relay its output verbatim (don't paraphrase or rewrite it)** — it shows whether BGM comes from HeyGen or local MusicGen and, if not signed in, how to sign in. **If not signed in, STOP and wait for the user to choose — sign in, or continue offline with local MusicGen — before generating the track**; don't write keys into a per-repo `.env`. (In autonomous mode, note the status and continue offline.) See `/hyperframes-media` → Preflight for the canonical guidance. Either way the track lands at `assets/bgm.mp3`. Stage any user-supplied images or videos so frames can weave them in on the beat grid; otherwise typography carries the whole video.
|
|
28
|
+
|
|
29
|
+
Initialize only if `hyperframes.json` is missing. Name `<project>` from the brief in kebab-case, such as `midnight-drive-loop` — never a timestamp. `init` checks the installed skills against the latest on GitHub and updates the global set if any are out of date.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx hyperframes init "videos/<project>" --non-interactive --example=blank
|
|
33
|
+
mkdir -p "$PROJECT_DIR/assets" "$PROJECT_DIR/renders"
|
|
34
|
+
cp "<user-music>" "$PROJECT_DIR/assets/bgm.mp3" # extract from a video first if needed
|
|
35
|
+
# only if the user gave you images/videos:
|
|
36
|
+
node <SKILL_DIR>/scripts/stage-assets.mjs --from <dir> --hyperframes "$PROJECT_DIR" --into public
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The **brand** (font + palette) is chosen at Step 3, not here. Don't pick a genre or a track type up front — assets are just an optional ingredient, and the genre emerges from the per-frame choices.
|
|
40
|
+
|
|
41
|
+
**Gate:** `hyperframes.json` + `assets/bgm.mp3` exist; aspect / length / fps and (if any) the asset inventory are noted.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Step 1: Analyze the music
|
|
46
|
+
|
|
47
|
+
Goal: Produce the one canonical timing analysis the whole video is built on.
|
|
48
|
+
|
|
49
|
+
`analyze-beatgrid.py` is the **only** beat analyzer — never re-measure beats with another tool or by ear. It reads the track once and writes `audiomap.json`: energy phases (level / density / feel), onsets + `onset_rate`, rolls, silences, `hard_stops`, `key_moments`, phrases, tempo / grid, and `audio.duration_sec`. It's deterministic — the same file always gives the same map. Most fields are reliable on any music; `bpm` and `beats_sec` are reliable only when the music is genuinely rhythmic, and judging that is the call you make at Step 2.
|
|
50
|
+
|
|
51
|
+
Prerequisites: Python 3 with `librosa`, `numpy`, and `soundfile` available. If import fails, install them into the active Python environment before running the analyzer:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
python3 -m pip install librosa numpy soundfile
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python3 <SKILL_DIR>/scripts/analyze-beatgrid.py "$PROJECT_DIR/assets/bgm.mp3" \
|
|
59
|
+
-o "$PROJECT_DIR/audiomap.json" --print
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Gate:** `audiomap.json` exists; `audio.duration_sec` is known.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Step 2: Frame skeleton (structure only)
|
|
67
|
+
|
|
68
|
+
Goal: Read the music and lay out the frames — the skeleton of `STORYBOARD.md`.
|
|
69
|
+
|
|
70
|
+
Read [`references/frame-skeleton.md`](references/frame-skeleton.md). Turn `audiomap.json` into the **skeleton** of `STORYBOARD.md` yourself — there is no intermediate JSON. Cut the track into **frames** at real musical changes (`hard_stops`, SURGE / DROP `key_moments`, the edges of a roll, a stretch with no onsets, a big energy jump), snapping every boundary to an audiomap anchor. For each frame set `span_sec`, `pacing` (the verdict from Step 1's trust call — `beat_cut` when the grid is real, `phrase_flow` when it's a metronome imposed on calm music), `mood`, and a one-line `feel` (the plain music situation Step 3 matches a template against). Only classify and lay out here: leave every frame's `### Groups` as `TBD (Step 3)` and the frontmatter `style` blank — no templates, copy, color, or fonts. Expect ~1–6 frames.
|
|
71
|
+
|
|
72
|
+
**Gate:** frames tile the track (first at 0, last at `duration_s`); each carries `span_sec` + `pacing` + `mood` + `feel`; every `### Groups` is `TBD`; no content anywhere.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 3: Fill the plan (user-gated)
|
|
77
|
+
|
|
78
|
+
Goal: Turn the skeleton into an approved, complete `STORYBOARD.md`.
|
|
79
|
+
|
|
80
|
+
Read [`references/planning.md`](references/planning.md), [`storyboard-format.md`](references/storyboard-format.md), [`template-catalog.md`](references/template-catalog.md), [`motion-primitive-catalog.md`](references/motion-primitive-catalog.md), and [`montage.md`](references/montage.md) (only if the user supplied assets). Editing the same file in place, do two things:
|
|
81
|
+
|
|
82
|
+
1. **Pick the brand.** Choose one preset from `../hyperframes-creative/frame-presets/` using the table in `../hyperframes-creative/references/design-spec.md` (match the track's mood; **only its fonts and colors matter** — templates own composition). Copy it into `frame.md` **unmodified** and fill the frontmatter `style` (font + a ≤4–6 swatch palette) from it.
|
|
83
|
+
2. **Fill every frame.** Decide its groups and give each a treatment: a matched template from the catalog (with bound params and real audiomap anchors), a free-compose from the primitive catalog, or an asset treatment that **obeys `pacing`**. Write the copy. You own WHAT (template / primitives + content + anchors); the frame-worker owns HOW — **never write millisecond tweens into the storyboard**.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
node <SKILL_DIR>/scripts/validate-plan.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
|
|
87
|
+
--audiomap "$PROJECT_DIR/audiomap.json" --templates <SKILL_DIR>/references/templates
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Fix every `✗` (hard errors: duration mismatch, frames not tiling the track, a missing `src`); warnings are best-effort. Then show the user a frame-by-frame summary and iterate until they approve.
|
|
91
|
+
|
|
92
|
+
**Gate:** `frame.md` is a verbatim preset copy; `validate-plan.mjs` exits 0; the user approved the plan.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Step 4: Build frames from the plan
|
|
97
|
+
|
|
98
|
+
Goal: Build every frame as a self-contained composition file.
|
|
99
|
+
|
|
100
|
+
Create `compositions/frames/`. Read [`sub-agents/frame-worker.md`](sub-agents/frame-worker.md) and `../hyperframes-core/references/subagent-dispatch.md`. Dispatch **one frame-worker per frame**, in parallel where possible (otherwise in waves). Each worker gets exactly one frame and this context:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
PROJECT_DIR: <abs path>
|
|
104
|
+
frame_id: <NN-frame_id> # = the frame file stem, e.g. 02-f2; the composition id
|
|
105
|
+
Your block: the `## Frame N — <frame_id>` block in PROJECT_DIR/STORYBOARD.md
|
|
106
|
+
audiomap: PROJECT_DIR/audiomap.json
|
|
107
|
+
frame.md: PROJECT_DIR/frame.md
|
|
108
|
+
Materials: for each group, <SKILL_DIR>/references/templates/<id>/index.html (templates) and
|
|
109
|
+
<SKILL_DIR>/references/motion-primitives/<id>/ (free); staged assets/ (asset groups)
|
|
110
|
+
Contracts: ../hyperframes-core/references/sub-compositions.md + determinism-rules.md
|
|
111
|
+
Canvas: <w>×<h> Pacing: <beat_cut|phrase_flow>
|
|
112
|
+
Write to: PROJECT_DIR/compositions/frames/<frame_id>.html
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The worker forks the cited materials, converts every anchor to frame-local seconds (`local_t = track_t − span_sec[0]`), gates its groups with 0ms cuts, and writes one seek-safe frame file. **The worker never runs the `hyperframes` CLI** — those commands operate on the assembled project, which doesn't exist yet, so they'd report on the wrong files. The worker just writes to the contract and stops; you verify after assembly (Step 6). As each worker returns, you can confirm its file landed on disk.
|
|
116
|
+
|
|
117
|
+
**Gate:** every frame has its `compositions/frames/NN-*.html` on disk.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Step 5: Assemble
|
|
122
|
+
|
|
123
|
+
Goal: Wire the built frames + BGM into the playable `index.html`.
|
|
124
|
+
|
|
125
|
+
`assemble-index.mjs` is deterministic — no subagent, no judgment. It references each frame file at its cumulative `data-start`, mounts `assets/bgm.mp3` on track 11, and hard-cuts frame → frame (frames tile the track with no gaps, so there is **no transition injector**).
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
|
|
129
|
+
--hyperframes "$PROJECT_DIR" --audiomap "$PROJECT_DIR/audiomap.json"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Fix any `✗` it reports — a missing or blank frame file means that worker wrote a partial file; re-dispatch it (Step 4) and re-assemble.
|
|
133
|
+
|
|
134
|
+
**Gate:** `index.html` exists; total duration == `audiomap.audio.duration_sec`.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Step 6: Verify and render
|
|
139
|
+
|
|
140
|
+
Goal: Verify the assembled video, get user approval, and render the final MP4.
|
|
141
|
+
|
|
142
|
+
Run the CLI on the **assembled project** — that's the correct unit (the per-frame workers couldn't run it). `lint` checks structure, `validate` runs headless Chrome (catching JS errors and missing assets), `inspect` snapshots frames.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
( cd "$PROJECT_DIR" && npx hyperframes lint . && npx hyperframes validate . && npx hyperframes inspect . )
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Inspect at `t=0`, each frame start, the strongest DROP / SURGE, every `hard_stops[].t`, and the final frame. On failure, make the **cheapest safe fix** yourself: edit the offending `compositions/frames/NN-*.html`. Never change duration or audio timing to hide a sync issue. Once the gates pass, pause for user review, then render only on approval:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
( cd "$PROJECT_DIR" && npx hyperframes render . --skill=music-to-video -q draft -o renders/video.mp4 --fps 30 )
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Gate:** `lint` / `validate` / `inspect` passed; the user approved; `renders/video.mp4` exists with audio, duration == `audiomap.audio.duration_sec`. The final reply states the MP4 path and duration.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Resume table
|
|
159
|
+
|
|
160
|
+
| You have | Continue from |
|
|
161
|
+
| -------------------------- | ------------- |
|
|
162
|
+
| `assets/bgm.mp3` only | Step 1 |
|
|
163
|
+
| `audiomap.json` | Step 2 |
|
|
164
|
+
| `STORYBOARD.md` (skeleton) | Step 3 |
|
|
165
|
+
| `STORYBOARD.md` (complete) | Step 4 |
|
|
166
|
+
| all frame files | Step 5 |
|
|
167
|
+
| `index.html` | Step 6 |
|
|
168
|
+
|
|
169
|
+
## Quick Reference
|
|
170
|
+
|
|
171
|
+
**Formats:** landscape `1920x1080` by default; portrait `1080x1920`; square `1080x1080`. Set the canvas once in the storyboard frontmatter (`canvas: { w, h, fps }`).
|
|
172
|
+
|
|
173
|
+
**Scripts** under `scripts/`: `analyze-beatgrid.py` (the one analyzer), `validate-plan.mjs` (plan check), `assemble-index.mjs` (index assembly), `stage-assets.mjs` (stage user media), `lib/storyboard.mjs` (vendored parser). Everything else is the `hyperframes` CLI.
|
|
174
|
+
|
|
175
|
+
| Read | When |
|
|
176
|
+
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
|
|
177
|
+
| [`references/frame-skeleton.md`](references/frame-skeleton.md) | Step 2: read the music, lay out the frames, set pacing |
|
|
178
|
+
| [`references/planning.md`](references/planning.md) · [`storyboard-format.md`](references/storyboard-format.md) | Step 3: pick the brand, fill each frame, write the plan |
|
|
179
|
+
| [`references/template-catalog.md`](references/template-catalog.md) | Step 3: pick a template per group |
|
|
180
|
+
| [`references/motion-primitive-catalog.md`](references/motion-primitive-catalog.md) | Step 3/4: L0 recipes for free-compose |
|
|
181
|
+
| [`references/montage.md`](references/montage.md) | Step 3/4: asset treatments (beat-cut / ken-burns) |
|
|
182
|
+
| [`sub-agents/frame-worker.md`](sub-agents/frame-worker.md) | Step 4: dispatch + build one frame |
|
|
183
|
+
| `../hyperframes-core/references/subagent-dispatch.md` | Step 4: dispatch sub-agents safely |
|
|
184
|
+
| `../hyperframes-creative/references/design-spec.md` | Step 3: pick the preset (the brand) |
|
|
185
|
+
|
|
186
|
+
## Directory layout
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
music-to-video/
|
|
190
|
+
SKILL.md
|
|
191
|
+
references/ frame-skeleton.md · planning.md · storyboard-format.md
|
|
192
|
+
template-catalog.md · motion-primitive-catalog.md · montage.md
|
|
193
|
+
templates/<id>/ { index.html (+ assets/ · program.json) } ← L1 catalog impls
|
|
194
|
+
motion-primitives/<id>/ { index.html } (+ ../assets/gsap.min.js shared by recipes) ← L0 catalog impls
|
|
195
|
+
scripts/ analyze-beatgrid.py · assemble-index.mjs · validate-plan.mjs · stage-assets.mjs · lib/storyboard.mjs
|
|
196
|
+
sub-agents/ frame-worker.md ← the one subagent (one per frame)
|
|
197
|
+
```
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
# Frame skeleton (Step 2) — read the music, lay out the frames
|
|
2
|
-
|
|
3
|
-
At Step 2 **you (the orchestrator)** read `audiomap.json` and write the **skeleton** of
|
|
4
|
-
`STORYBOARD.md` directly: cut the track into **frames** (one frame = one composition file =
|
|
5
|
-
one scene), and for each frame set its **span**, its **pacing** (does this stretch want hard
|
|
6
|
-
beat-cuts, or calm phrase/energy flow?), its **mood**, and a one-line **feel** note.
|
|
7
|
-
|
|
8
|
-
You **classify and lay out the spine only.** You do **not** pick templates, write copy, choose
|
|
9
|
-
colors/fonts, or decide a frame's groups — those are Step 3 (the plan fills each frame in
|
|
10
|
-
place). Leave every frame's `### Groups` as `TBD (Step 3)` and the frontmatter `style` blank.
|
|
11
|
-
|
|
12
|
-
There is **no intermediate JSON** — the skeleton _is_ the start of `STORYBOARD.md`. Step 3
|
|
13
|
-
edits the same file.
|
|
14
|
-
|
|
15
|
-
## The trust boundary (read this first)
|
|
16
|
-
|
|
17
|
-
`audiomap.json` is one analyzer's output. Some fields are robust on **any** music; some are
|
|
18
|
-
reliable only when the music is **actually rhythmic**. This decides each frame's `pacing`:
|
|
19
|
-
|
|
20
|
-
| Field | Trust |
|
|
21
|
-
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
|
-
| `energy_phases[]` (level / energy / density / feel), `events[]` + `onset_rate`, `rolls[]` (and their **absence**), `silences[]`, `hard_stops[]`, `key_moments[]`, `phrases[]`, `audio.duration_sec` | **Always** — robust measurements |
|
|
23
|
-
| `tempo.bpm`, `grid.beats_sec` / `downbeats_sec` **precision** | **Only when the music is rhythmic.** On calm / sparse material the beat grid is a metronome the tracker _imposes_ (often octave-doubled) — usually **more grid beats than real onsets**. Do **not** anchor cuts to it there. |
|
|
24
|
-
|
|
25
|
-
- **Grid is reliable** when: rolls present, and/or dense phases, and/or high `onset_rate` with a steady grid.
|
|
26
|
-
- **Grid is fictional** when: `rolls`≈0, mostly `sparse` phases, low `onset_rate` → pace by `phrases[]` + `energy_phases[]`, not beats.
|
|
27
|
-
|
|
28
|
-
## How to lay out frames (run in order)
|
|
29
|
-
|
|
30
|
-
1. **Gestalt.** From `summary` / `tempo` / `audio.duration_sec` + the roll count, write the
|
|
31
|
-
frontmatter `compositionId`, `duration_s` (== `audio.duration_sec`), `canvas`, and a
|
|
32
|
-
one-line read of the track's density arc.
|
|
33
|
-
2. **Cut into frames.** Walk `energy_phases[]` and split where the music genuinely changes
|
|
34
|
-
state — at `hard_stops[]`, `SURGE` / `DROP` `key_moments`, the start/end of a `rolls[]` run,
|
|
35
|
-
an **onset desert** (a long gap in `events[]`), or a big energy-level jump. Collapse adjacent
|
|
36
|
-
phases that are one gesture. Expect **~1–6 frames**; a short clip may be one.
|
|
37
|
-
**Snap every boundary to an audiomap anchor**, then re-snap to the nearest `beats_sec`
|
|
38
|
-
(tolerance ≤ ½ beat) **only when the grid is reliable**; on calm material snap to
|
|
39
|
-
`phrases[]` / `energy_phases[]` edges instead. Frames **tile the track** (first at 0, last
|
|
40
|
-
at `duration_s`, no gaps/overlaps).
|
|
41
|
-
3. **Per frame, set `pacing`** — the trust-boundary call:
|
|
42
|
-
- **`beat_cut`** — genuinely rhythmic: a roll present, **or** dense, **or** (clearly high `onset_rate` **and** a steady grid). Hard cuts / per-onset reveals may anchor to beats.
|
|
43
|
-
- **`phrase_flow`** — calm / sparse: `rolls`≈0, mostly sparse, low `onset_rate`. Do **not** anchor hard cuts to the grid; pace by `phrases[]` + the energy envelope (slow crossfades, long holds).
|
|
44
|
-
4. **Per frame, tag `mood`** (1–3 of: `warm` · `dark` · `hype` · `elegant` · `glitch` ·
|
|
45
|
-
`cinematic` · `playful` · `tense` · `dreamy` · `aggressive`) from `energy_phases[].feel` +
|
|
46
|
-
energy + any genre cue in the brief/title.
|
|
47
|
-
5. **Per frame, write a one-line `feel`** — the plain-language music situation Step 3 matches a
|
|
48
|
-
template against (e.g. "accelerating onset stream into a held downbeat", "calm held pad, one
|
|
49
|
-
onset desert", "fast sustained-fill roll, no readable message"). This is what the planner
|
|
50
|
-
reads against the catalog's **Reach for it when** — keep it concrete, drawn from the robust
|
|
51
|
-
fields, never invented.
|
|
52
|
-
|
|
53
|
-
## What the skeleton looks like
|
|
54
|
-
|
|
55
|
-
A valid `STORYBOARD.md` with the spine set and every frame's treatment left for Step 3
|
|
56
|
-
(full syntax in [`storyboard-format.md`](storyboard-format.md)):
|
|
57
|
-
|
|
58
|
-
```markdown
|
|
59
|
-
---
|
|
60
|
-
compositionId: bgm
|
|
61
|
-
duration_s: 30.0 # == audiomap.audio.duration_sec
|
|
62
|
-
canvas: { w: 1920, h: 1080, fps: 30 }
|
|
63
|
-
style: # blank — Step 3 fills it from the chosen frame.md preset
|
|
64
|
-
build_notes: ["one paused timeline per frame", "no remote assets"]
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Frame 1 — f1
|
|
68
|
-
|
|
69
|
-
- src: compositions/frames/01-f1.html
|
|
70
|
-
- duration: 7.198s # = span length; assembler sums these for cumulative data-start
|
|
71
|
-
- span_sec: [0.0, 7.198] # track seconds; frames tile the track
|
|
72
|
-
- pacing: beat_cut
|
|
73
|
-
- mood: [hype]
|
|
74
|
-
- feel: accelerating onset stream building into a held downbeat
|
|
75
|
-
|
|
76
|
-
### Groups
|
|
77
|
-
|
|
78
|
-
- TBD (Step 3)
|
|
79
|
-
|
|
80
|
-
## Frame 2 — f2
|
|
81
|
-
|
|
82
|
-
- src: compositions/frames/02-f2.html
|
|
83
|
-
- duration: 10.4s
|
|
84
|
-
- span_sec: [7.198, 17.598]
|
|
85
|
-
- pacing: phrase_flow
|
|
86
|
-
- mood: [warm, cinematic]
|
|
87
|
-
- feel: calm held pad, one long onset desert
|
|
88
|
-
|
|
89
|
-
### Groups
|
|
90
|
-
|
|
91
|
-
- TBD (Step 3)
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Self-check
|
|
95
|
-
|
|
96
|
-
- `duration_s == audiomap.audio.duration_sec`; frames tile the track gap-free (first at 0, last at `duration_s`).
|
|
97
|
-
- Every frame has `src` + `span_sec` + `duration` + `pacing` + `mood` + a one-line `feel`.
|
|
98
|
-
- `pacing` was set from the **robust** fields (energy / density / rolls / onset_rate), never from `bpm` / `beats_sec` alone.
|
|
99
|
-
- No frame boundary sits inside a `rolls[]` run or leaves a sub-1-bar fragment.
|
|
100
|
-
- Every frame's `### Groups` is `TBD (Step 3)`; `style` is blank. **No template, copy, color, or font anywhere.**
|
|
1
|
+
# Frame skeleton (Step 2) — read the music, lay out the frames
|
|
2
|
+
|
|
3
|
+
At Step 2 **you (the orchestrator)** read `audiomap.json` and write the **skeleton** of
|
|
4
|
+
`STORYBOARD.md` directly: cut the track into **frames** (one frame = one composition file =
|
|
5
|
+
one scene), and for each frame set its **span**, its **pacing** (does this stretch want hard
|
|
6
|
+
beat-cuts, or calm phrase/energy flow?), its **mood**, and a one-line **feel** note.
|
|
7
|
+
|
|
8
|
+
You **classify and lay out the spine only.** You do **not** pick templates, write copy, choose
|
|
9
|
+
colors/fonts, or decide a frame's groups — those are Step 3 (the plan fills each frame in
|
|
10
|
+
place). Leave every frame's `### Groups` as `TBD (Step 3)` and the frontmatter `style` blank.
|
|
11
|
+
|
|
12
|
+
There is **no intermediate JSON** — the skeleton _is_ the start of `STORYBOARD.md`. Step 3
|
|
13
|
+
edits the same file.
|
|
14
|
+
|
|
15
|
+
## The trust boundary (read this first)
|
|
16
|
+
|
|
17
|
+
`audiomap.json` is one analyzer's output. Some fields are robust on **any** music; some are
|
|
18
|
+
reliable only when the music is **actually rhythmic**. This decides each frame's `pacing`:
|
|
19
|
+
|
|
20
|
+
| Field | Trust |
|
|
21
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
|
+
| `energy_phases[]` (level / energy / density / feel), `events[]` + `onset_rate`, `rolls[]` (and their **absence**), `silences[]`, `hard_stops[]`, `key_moments[]`, `phrases[]`, `audio.duration_sec` | **Always** — robust measurements |
|
|
23
|
+
| `tempo.bpm`, `grid.beats_sec` / `downbeats_sec` **precision** | **Only when the music is rhythmic.** On calm / sparse material the beat grid is a metronome the tracker _imposes_ (often octave-doubled) — usually **more grid beats than real onsets**. Do **not** anchor cuts to it there. |
|
|
24
|
+
|
|
25
|
+
- **Grid is reliable** when: rolls present, and/or dense phases, and/or high `onset_rate` with a steady grid.
|
|
26
|
+
- **Grid is fictional** when: `rolls`≈0, mostly `sparse` phases, low `onset_rate` → pace by `phrases[]` + `energy_phases[]`, not beats.
|
|
27
|
+
|
|
28
|
+
## How to lay out frames (run in order)
|
|
29
|
+
|
|
30
|
+
1. **Gestalt.** From `summary` / `tempo` / `audio.duration_sec` + the roll count, write the
|
|
31
|
+
frontmatter `compositionId`, `duration_s` (== `audio.duration_sec`), `canvas`, and a
|
|
32
|
+
one-line read of the track's density arc.
|
|
33
|
+
2. **Cut into frames.** Walk `energy_phases[]` and split where the music genuinely changes
|
|
34
|
+
state — at `hard_stops[]`, `SURGE` / `DROP` `key_moments`, the start/end of a `rolls[]` run,
|
|
35
|
+
an **onset desert** (a long gap in `events[]`), or a big energy-level jump. Collapse adjacent
|
|
36
|
+
phases that are one gesture. Expect **~1–6 frames**; a short clip may be one.
|
|
37
|
+
**Snap every boundary to an audiomap anchor**, then re-snap to the nearest `beats_sec`
|
|
38
|
+
(tolerance ≤ ½ beat) **only when the grid is reliable**; on calm material snap to
|
|
39
|
+
`phrases[]` / `energy_phases[]` edges instead. Frames **tile the track** (first at 0, last
|
|
40
|
+
at `duration_s`, no gaps/overlaps).
|
|
41
|
+
3. **Per frame, set `pacing`** — the trust-boundary call:
|
|
42
|
+
- **`beat_cut`** — genuinely rhythmic: a roll present, **or** dense, **or** (clearly high `onset_rate` **and** a steady grid). Hard cuts / per-onset reveals may anchor to beats.
|
|
43
|
+
- **`phrase_flow`** — calm / sparse: `rolls`≈0, mostly sparse, low `onset_rate`. Do **not** anchor hard cuts to the grid; pace by `phrases[]` + the energy envelope (slow crossfades, long holds).
|
|
44
|
+
4. **Per frame, tag `mood`** (1–3 of: `warm` · `dark` · `hype` · `elegant` · `glitch` ·
|
|
45
|
+
`cinematic` · `playful` · `tense` · `dreamy` · `aggressive`) from `energy_phases[].feel` +
|
|
46
|
+
energy + any genre cue in the brief/title.
|
|
47
|
+
5. **Per frame, write a one-line `feel`** — the plain-language music situation Step 3 matches a
|
|
48
|
+
template against (e.g. "accelerating onset stream into a held downbeat", "calm held pad, one
|
|
49
|
+
onset desert", "fast sustained-fill roll, no readable message"). This is what the planner
|
|
50
|
+
reads against the catalog's **Reach for it when** — keep it concrete, drawn from the robust
|
|
51
|
+
fields, never invented.
|
|
52
|
+
|
|
53
|
+
## What the skeleton looks like
|
|
54
|
+
|
|
55
|
+
A valid `STORYBOARD.md` with the spine set and every frame's treatment left for Step 3
|
|
56
|
+
(full syntax in [`storyboard-format.md`](storyboard-format.md)):
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
---
|
|
60
|
+
compositionId: bgm
|
|
61
|
+
duration_s: 30.0 # == audiomap.audio.duration_sec
|
|
62
|
+
canvas: { w: 1920, h: 1080, fps: 30 }
|
|
63
|
+
style: # blank — Step 3 fills it from the chosen frame.md preset
|
|
64
|
+
build_notes: ["one paused timeline per frame", "no remote assets"]
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Frame 1 — f1
|
|
68
|
+
|
|
69
|
+
- src: compositions/frames/01-f1.html
|
|
70
|
+
- duration: 7.198s # = span length; assembler sums these for cumulative data-start
|
|
71
|
+
- span_sec: [0.0, 7.198] # track seconds; frames tile the track
|
|
72
|
+
- pacing: beat_cut
|
|
73
|
+
- mood: [hype]
|
|
74
|
+
- feel: accelerating onset stream building into a held downbeat
|
|
75
|
+
|
|
76
|
+
### Groups
|
|
77
|
+
|
|
78
|
+
- TBD (Step 3)
|
|
79
|
+
|
|
80
|
+
## Frame 2 — f2
|
|
81
|
+
|
|
82
|
+
- src: compositions/frames/02-f2.html
|
|
83
|
+
- duration: 10.4s
|
|
84
|
+
- span_sec: [7.198, 17.598]
|
|
85
|
+
- pacing: phrase_flow
|
|
86
|
+
- mood: [warm, cinematic]
|
|
87
|
+
- feel: calm held pad, one long onset desert
|
|
88
|
+
|
|
89
|
+
### Groups
|
|
90
|
+
|
|
91
|
+
- TBD (Step 3)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Self-check
|
|
95
|
+
|
|
96
|
+
- `duration_s == audiomap.audio.duration_sec`; frames tile the track gap-free (first at 0, last at `duration_s`).
|
|
97
|
+
- Every frame has `src` + `span_sec` + `duration` + `pacing` + `mood` + a one-line `feel`.
|
|
98
|
+
- `pacing` was set from the **robust** fields (energy / density / rolls / onset_rate), never from `bpm` / `beats_sec` alone.
|
|
99
|
+
- No frame boundary sits inside a `rolls[]` run or leaves a sub-1-bar fragment.
|
|
100
|
+
- Every frame's `### Groups` is `TBD (Step 3)`; `style` is blank. **No template, copy, color, or font anywhere.**
|