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,307 +1,307 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dynamic-content-sequencing
|
|
3
|
-
description: Auto-calculate timeline start/end times from content length + per-item duration config — longer content gets more screen time without hardcoded numbers.
|
|
4
|
-
metadata:
|
|
5
|
-
tags: timeline, sequencing, dynamic, duration, content-aware, utility
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Dynamic Content Sequencing
|
|
9
|
-
|
|
10
|
-
A utility pattern (not a motion rule in itself) for scenes that show a SEQUENCE of items (cards, phrases, stats). Each item's duration is calculated from its content length + a per-item config; the sequencer assigns absolute start/end times automatically. Distinct from [discrete-text-sequence](discrete-text-sequence.md) (which is one text element changing states) — this rule swaps between distinct content blocks.
|
|
11
|
-
|
|
12
|
-
## How It Works
|
|
13
|
-
|
|
14
|
-
1. Define a content array — each entry has `{ text, speedFactor, hold }` (or arbitrary fields)
|
|
15
|
-
2. Pre-compute absolute start times: `start[i] = sum of durations 0..i-1`
|
|
16
|
-
3. In onUpdate, find which entry is active (last entry whose `start ≤ time`) and render it
|
|
17
|
-
|
|
18
|
-
The "dynamic" part: items with longer text get more screen time (formula: `baseDuration + textLength * msPerChar`). No hardcoded `from` / `durationInFrames` per item.
|
|
19
|
-
|
|
20
|
-
## HTML
|
|
21
|
-
|
|
22
|
-
```html
|
|
23
|
-
<div
|
|
24
|
-
class="scene"
|
|
25
|
-
id="seq-scene"
|
|
26
|
-
data-composition-id="seq-scene"
|
|
27
|
-
data-start="0"
|
|
28
|
-
data-duration="{DURATION}"
|
|
29
|
-
data-track-index="0"
|
|
30
|
-
>
|
|
31
|
-
<div class="display">
|
|
32
|
-
<div class="eyebrow" id="eyebrow">{eyebrow}</div>
|
|
33
|
-
<div class="title" id="title"></div>
|
|
34
|
-
<div class="body" id="body"></div>
|
|
35
|
-
<div class="progress-bar"><div class="progress-fill" id="progress-fill"></div></div>
|
|
36
|
-
</div>
|
|
37
|
-
<div class="brand">— {Brand}</div>
|
|
38
|
-
</div>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## CSS
|
|
42
|
-
|
|
43
|
-
Placeholders: `{font}` is the project sans-serif stack; `{bgColor1}`/`{bgColor2}` make the dark backdrop gradient; `{accentColor}` highlights the eyebrow / brand / progress fill; `{textColor}` is the primary readable foreground.
|
|
44
|
-
|
|
45
|
-
```css
|
|
46
|
-
.scene {
|
|
47
|
-
position: relative;
|
|
48
|
-
width: 100%;
|
|
49
|
-
height: 100%;
|
|
50
|
-
display: grid;
|
|
51
|
-
place-items: center;
|
|
52
|
-
background: radial-gradient(ellipse at center, {bgColor1} 0%, {bgColor2} 70%);
|
|
53
|
-
font-family: {font};
|
|
54
|
-
}
|
|
55
|
-
.display {
|
|
56
|
-
display: flex;
|
|
57
|
-
flex-direction: column;
|
|
58
|
-
align-items: center;
|
|
59
|
-
gap: 32px;
|
|
60
|
-
text-align: center;
|
|
61
|
-
max-width: 1400px;
|
|
62
|
-
}
|
|
63
|
-
.eyebrow {
|
|
64
|
-
font-size: 32px;
|
|
65
|
-
font-weight: 800;
|
|
66
|
-
letter-spacing: 14px;
|
|
67
|
-
color: {accentColor};
|
|
68
|
-
text-transform: uppercase;
|
|
69
|
-
}
|
|
70
|
-
.title {
|
|
71
|
-
font-size: 120px;
|
|
72
|
-
font-weight: 900;
|
|
73
|
-
letter-spacing: -2px;
|
|
74
|
-
line-height: 1;
|
|
75
|
-
color: {textColor};
|
|
76
|
-
}
|
|
77
|
-
.body {
|
|
78
|
-
font-size: 48px;
|
|
79
|
-
font-weight: 500;
|
|
80
|
-
line-height: 1.4;
|
|
81
|
-
color: {accentColor};
|
|
82
|
-
opacity: 0.9;
|
|
83
|
-
min-height: 160px; /* reserve space so layout doesn't jump */
|
|
84
|
-
}
|
|
85
|
-
.progress-bar {
|
|
86
|
-
width: 600px;
|
|
87
|
-
height: 4px;
|
|
88
|
-
background: {accentColor}26; /* ~15% alpha */
|
|
89
|
-
border-radius: 2px;
|
|
90
|
-
margin-top: 16px;
|
|
91
|
-
overflow: hidden;
|
|
92
|
-
}
|
|
93
|
-
.progress-fill {
|
|
94
|
-
height: 100%;
|
|
95
|
-
background: linear-gradient(90deg, {accentColor} 0%, {accentColor2} 100%);
|
|
96
|
-
width: 0%;
|
|
97
|
-
}
|
|
98
|
-
.brand {
|
|
99
|
-
position: absolute;
|
|
100
|
-
bottom: 80px;
|
|
101
|
-
left: 50%;
|
|
102
|
-
transform: translateX(-50%);
|
|
103
|
-
font-size: 32px;
|
|
104
|
-
font-weight: 900;
|
|
105
|
-
letter-spacing: 12px;
|
|
106
|
-
color: {accentColor};
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## GSAP Timeline
|
|
111
|
-
|
|
112
|
-
```html
|
|
113
|
-
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
114
|
-
<script>
|
|
115
|
-
window.__timelines = window.__timelines || {};
|
|
116
|
-
const tl = gsap.timeline({ paused: true });
|
|
117
|
-
|
|
118
|
-
// Content array — N entries, each with its own pacing config.
|
|
119
|
-
// Shape: short eyebrow label, short title, longer body sentence, plus per-entry pacing.
|
|
120
|
-
// The final entry typically uses a larger `hold` (closing beat).
|
|
121
|
-
const CONTENT = [
|
|
122
|
-
{
|
|
123
|
-
eyebrow: "{eyebrow1}",
|
|
124
|
-
title: "{title1}",
|
|
125
|
-
body: "{body1}",
|
|
126
|
-
speedFactor: SPEED_FACTOR,
|
|
127
|
-
hold: HOLD_MID,
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
eyebrow: "{eyebrow2}",
|
|
131
|
-
title: "{title2}",
|
|
132
|
-
body: "{body2}",
|
|
133
|
-
speedFactor: SPEED_FACTOR,
|
|
134
|
-
hold: HOLD_MID,
|
|
135
|
-
},
|
|
136
|
-
// …
|
|
137
|
-
{
|
|
138
|
-
eyebrow: "{eyebrowN}",
|
|
139
|
-
title: "{titleN}",
|
|
140
|
-
body: "{bodyN}",
|
|
141
|
-
speedFactor: SPEED_FACTOR,
|
|
142
|
-
hold: HOLD_FINAL,
|
|
143
|
-
},
|
|
144
|
-
];
|
|
145
|
-
|
|
146
|
-
// Pre-compute absolute start times.
|
|
147
|
-
// Duration per entry: BASE_DURATION + body.length * SEC_PER_CHAR + entry.hold seconds.
|
|
148
|
-
// BASE_DURATION, SEC_PER_CHAR documented in How to Choose Values.
|
|
149
|
-
let cumulative = 0;
|
|
150
|
-
const TIMELINE = CONTENT.map((entry) => {
|
|
151
|
-
const dur = BASE_DURATION + entry.body.length * SEC_PER_CHAR + entry.hold;
|
|
152
|
-
const start = cumulative;
|
|
153
|
-
cumulative += dur;
|
|
154
|
-
return { ...entry, start, end: cumulative };
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Reverse-search current entry
|
|
158
|
-
function entryAt(time) {
|
|
159
|
-
for (let i = TIMELINE.length - 1; i >= 0; i--) {
|
|
160
|
-
if (time >= TIMELINE[i].start) return TIMELINE[i];
|
|
161
|
-
}
|
|
162
|
-
return TIMELINE[0];
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const eyebrowEl = document.getElementById("eyebrow");
|
|
166
|
-
const titleEl = document.getElementById("title");
|
|
167
|
-
const bodyEl = document.getElementById("body");
|
|
168
|
-
const progressEl = document.getElementById("progress-fill");
|
|
169
|
-
|
|
170
|
-
const TOTAL_DURATION = cumulative + TAIL_PAD;
|
|
171
|
-
const driver = { t: 0 };
|
|
172
|
-
let lastTitle = "";
|
|
173
|
-
|
|
174
|
-
tl.to(
|
|
175
|
-
driver,
|
|
176
|
-
{
|
|
177
|
-
t: TOTAL_DURATION,
|
|
178
|
-
duration: TOTAL_DURATION,
|
|
179
|
-
ease: "none",
|
|
180
|
-
onUpdate: () => {
|
|
181
|
-
const entry = entryAt(driver.t);
|
|
182
|
-
// Only swap content on transitions (avoid per-frame DOM thrash)
|
|
183
|
-
if (entry.title !== lastTitle) {
|
|
184
|
-
eyebrowEl.textContent = entry.eyebrow;
|
|
185
|
-
titleEl.textContent = entry.title;
|
|
186
|
-
bodyEl.textContent = entry.body;
|
|
187
|
-
lastTitle = entry.title;
|
|
188
|
-
}
|
|
189
|
-
// Progress bar fills 0% → 100% as composition advances
|
|
190
|
-
progressEl.style.width = `${(driver.t / TOTAL_DURATION) * 100}%`;
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
0,
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
window.__timelines["seq-scene"] = tl;
|
|
197
|
-
</script>
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Variations
|
|
201
|
-
|
|
202
|
-
### Crossfade between items (not hard cut)
|
|
203
|
-
|
|
204
|
-
Add `overlap` to the find function — return BOTH the previous and next entry during the overlap window, render with crossfade opacity:
|
|
205
|
-
|
|
206
|
-
```js
|
|
207
|
-
function activeEntries(time, overlap = 0.3) {
|
|
208
|
-
const result = [];
|
|
209
|
-
TIMELINE.forEach((e) => {
|
|
210
|
-
if (time >= e.start - overlap && time <= e.end + overlap) result.push(e);
|
|
211
|
-
});
|
|
212
|
-
return result;
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
Then render the two adjacent entries with computed opacities based on distance from boundary.
|
|
217
|
-
|
|
218
|
-
### Per-item motion variation
|
|
219
|
-
|
|
220
|
-
Each entry has its own motion style. Map `entry.style` to one of the existing rules: chapter 1 uses [3d-text-depth-layers](3d-text-depth-layers.md), chapter 2 uses [hacker-flip-3d](hacker-flip-3d.md), chapter 3 uses [counting-dynamic-scale](counting-dynamic-scale.md). The sequencer just orchestrates timing; per-entry rendering uses the appropriate rule.
|
|
221
|
-
|
|
222
|
-
### Auto-extend composition duration
|
|
223
|
-
|
|
224
|
-
If you don't know upfront how long the sequence will be (dynamic content count), bind `data-duration` to the computed `TOTAL_DURATION`. Do this in script BEFORE the timeline registers:
|
|
225
|
-
|
|
226
|
-
```js
|
|
227
|
-
document
|
|
228
|
-
.querySelector("[data-composition-id]")
|
|
229
|
-
.setAttribute("data-duration", String(Math.ceil(TOTAL_DURATION)));
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
(Caveat: HF reads `data-duration` at composition load; setting after init may not take effect — author the duration manually based on a rough TOTAL calc.)
|
|
233
|
-
|
|
234
|
-
## Key Principles
|
|
235
|
-
|
|
236
|
-
- **Pre-compute timeline once, not per-frame** — building absolute start/end at script init means onUpdate is O(log n) reverse-search, not O(n²).
|
|
237
|
-
- **Per-item duration formula: `BASE_DURATION + body.length × SEC_PER_CHAR + hold`** — longer text needs more reading time. The formula is the load-bearing teaching of this rule; ranges for each const are in How to Choose Values.
|
|
238
|
-
- **Reserve `min-height` on body element** — content height varies per item; without reservation, layout jumps and downstream elements (progress bar, brand) jitter.
|
|
239
|
-
- **DOM update on transition, not every frame** — track `lastTitle` (or whatever key) and only call `textContent =` when it changes. Per-frame textContent assignment causes flicker in HF render.
|
|
240
|
-
- **Optional progress indicator** — a thin bar at the bottom showing 0-100% completes the "this is a sequence" framing.
|
|
241
|
-
- **Climax dwell longer than mid-sequence dwell** — the outro's `hold` (HOLD_FINAL) should exceed the in-sequence `hold` (HOLD_MID) so the final brand/CTA lands.
|
|
242
|
-
|
|
243
|
-
## How to Choose Values
|
|
244
|
-
|
|
245
|
-
- **BASE_DURATION** — minimum visible time of an entry regardless of content length
|
|
246
|
-
- Range: 0.6-1.5 s
|
|
247
|
-
- Effects: low end snaps through short entries too fast for the eye; high end stalls on short titles
|
|
248
|
-
- Constraints: ensures even one-word entries have time to read
|
|
249
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
250
|
-
|
|
251
|
-
- **SEC_PER_CHAR** — extra time added per body character
|
|
252
|
-
- Range: 0.03-0.06 s/char (≈ 17-33 chars/sec read pace for video)
|
|
253
|
-
- Effects: low end feels rushed for paragraph-style bodies; high end feels slow when bodies are short
|
|
254
|
-
- Constraints: should be uniform across the sequence so the pace reads as one engine; for languages with wider characters, lean to the high end
|
|
255
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
256
|
-
|
|
257
|
-
- **HOLD_MID** — dwell after the typing of a non-final entry completes
|
|
258
|
-
- Range: 0.5-1.0 s
|
|
259
|
-
- Effects: low end feels rushed; high end feels lazy
|
|
260
|
-
- Constraints: `HOLD_MID < HOLD_FINAL`
|
|
261
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
262
|
-
|
|
263
|
-
- **HOLD_FINAL** — dwell on the last entry (outro / climax)
|
|
264
|
-
- Range: 1.0-2.0 s
|
|
265
|
-
- Effects: low end truncates the closing beat; high end overstays
|
|
266
|
-
- Constraints: must exceed HOLD_MID by a clear margin so the close reads as a beat, not another mid-sequence pause
|
|
267
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
268
|
-
|
|
269
|
-
- **SPEED_FACTOR** — per-entry pacing multiplier
|
|
270
|
-
- Range: 0.5-2.0 (default 1.0)
|
|
271
|
-
- Effects: <1 stretches an entry's body-driven duration (good for high-density passages); >1 compresses it
|
|
272
|
-
- Constraints: discrete choice — use 1.0 unless one entry needs special pacing; if every entry uses the same factor, fold it into SEC_PER_CHAR instead
|
|
273
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
274
|
-
|
|
275
|
-
- **TAIL_PAD** — seconds added to `TOTAL_DURATION` after the last entry's `end`
|
|
276
|
-
- Range: 0.0-1.0 s
|
|
277
|
-
- Effects: 0 ends the driver exactly at the last `hold` completion; >0 leaves a quiet beat (useful before a transition to the next composition)
|
|
278
|
-
- Constraints: if downstream is another composition, prefer 0 and handle the breath at the composition seam
|
|
279
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
280
|
-
|
|
281
|
-
- **CONTENT length (N)** — number of entries in the sequence
|
|
282
|
-
- Range: 3-6 entries
|
|
283
|
-
- Effects: <3 isn't a sequence (use a static scene); >6 drags
|
|
284
|
-
- Constraints: each entry's `title` must fit one line at the chosen `.title` fontSize; bodies should fit within `min-height` after wrapping
|
|
285
|
-
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
286
|
-
|
|
287
|
-
## Critical Constraints
|
|
288
|
-
|
|
289
|
-
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
290
|
-
- **Registry key = `data-composition-id`**
|
|
291
|
-
- **Pre-compute the TIMELINE array** — don't recompute in onUpdate
|
|
292
|
-
- **`min-height` on body** for layout stability
|
|
293
|
-
- **DOM swap only on entry transition** — use lastTitle/lastKey guard
|
|
294
|
-
- **Sequential only** — for parallel tracks, use a different reduction (this rule is sequential)
|
|
295
|
-
|
|
296
|
-
## Combinations
|
|
297
|
-
|
|
298
|
-
- [discrete-text-sequence.md](discrete-text-sequence.md) — per-entry typewriter on the body
|
|
299
|
-
- [context-sensitive-cursor.md](context-sensitive-cursor.md) — cursor color per chapter segment
|
|
300
|
-
- [vertical-spring-ticker.md](vertical-spring-ticker.md) — animated word transitions between items (instead of hard cut)
|
|
301
|
-
- [scale-swap-transition.md](scale-swap-transition.md) — visual morph between entries
|
|
302
|
-
|
|
303
|
-
## Pairs with HF skills
|
|
304
|
-
|
|
305
|
-
- `/hyperframes-animation` — single driver, reverse-search dispatch
|
|
306
|
-
- `/hyperframes-core` — composition wiring
|
|
307
|
-
- `/hyperframes-cli` — `hyperframes lint`
|
|
1
|
+
---
|
|
2
|
+
name: dynamic-content-sequencing
|
|
3
|
+
description: Auto-calculate timeline start/end times from content length + per-item duration config — longer content gets more screen time without hardcoded numbers.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: timeline, sequencing, dynamic, duration, content-aware, utility
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Dynamic Content Sequencing
|
|
9
|
+
|
|
10
|
+
A utility pattern (not a motion rule in itself) for scenes that show a SEQUENCE of items (cards, phrases, stats). Each item's duration is calculated from its content length + a per-item config; the sequencer assigns absolute start/end times automatically. Distinct from [discrete-text-sequence](discrete-text-sequence.md) (which is one text element changing states) — this rule swaps between distinct content blocks.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
1. Define a content array — each entry has `{ text, speedFactor, hold }` (or arbitrary fields)
|
|
15
|
+
2. Pre-compute absolute start times: `start[i] = sum of durations 0..i-1`
|
|
16
|
+
3. In onUpdate, find which entry is active (last entry whose `start ≤ time`) and render it
|
|
17
|
+
|
|
18
|
+
The "dynamic" part: items with longer text get more screen time (formula: `baseDuration + textLength * msPerChar`). No hardcoded `from` / `durationInFrames` per item.
|
|
19
|
+
|
|
20
|
+
## HTML
|
|
21
|
+
|
|
22
|
+
```html
|
|
23
|
+
<div
|
|
24
|
+
class="scene"
|
|
25
|
+
id="seq-scene"
|
|
26
|
+
data-composition-id="seq-scene"
|
|
27
|
+
data-start="0"
|
|
28
|
+
data-duration="{DURATION}"
|
|
29
|
+
data-track-index="0"
|
|
30
|
+
>
|
|
31
|
+
<div class="display">
|
|
32
|
+
<div class="eyebrow" id="eyebrow">{eyebrow}</div>
|
|
33
|
+
<div class="title" id="title"></div>
|
|
34
|
+
<div class="body" id="body"></div>
|
|
35
|
+
<div class="progress-bar"><div class="progress-fill" id="progress-fill"></div></div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="brand">— {Brand}</div>
|
|
38
|
+
</div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## CSS
|
|
42
|
+
|
|
43
|
+
Placeholders: `{font}` is the project sans-serif stack; `{bgColor1}`/`{bgColor2}` make the dark backdrop gradient; `{accentColor}` highlights the eyebrow / brand / progress fill; `{textColor}` is the primary readable foreground.
|
|
44
|
+
|
|
45
|
+
```css
|
|
46
|
+
.scene {
|
|
47
|
+
position: relative;
|
|
48
|
+
width: 100%;
|
|
49
|
+
height: 100%;
|
|
50
|
+
display: grid;
|
|
51
|
+
place-items: center;
|
|
52
|
+
background: radial-gradient(ellipse at center, {bgColor1} 0%, {bgColor2} 70%);
|
|
53
|
+
font-family: {font};
|
|
54
|
+
}
|
|
55
|
+
.display {
|
|
56
|
+
display: flex;
|
|
57
|
+
flex-direction: column;
|
|
58
|
+
align-items: center;
|
|
59
|
+
gap: 32px;
|
|
60
|
+
text-align: center;
|
|
61
|
+
max-width: 1400px;
|
|
62
|
+
}
|
|
63
|
+
.eyebrow {
|
|
64
|
+
font-size: 32px;
|
|
65
|
+
font-weight: 800;
|
|
66
|
+
letter-spacing: 14px;
|
|
67
|
+
color: {accentColor};
|
|
68
|
+
text-transform: uppercase;
|
|
69
|
+
}
|
|
70
|
+
.title {
|
|
71
|
+
font-size: 120px;
|
|
72
|
+
font-weight: 900;
|
|
73
|
+
letter-spacing: -2px;
|
|
74
|
+
line-height: 1;
|
|
75
|
+
color: {textColor};
|
|
76
|
+
}
|
|
77
|
+
.body {
|
|
78
|
+
font-size: 48px;
|
|
79
|
+
font-weight: 500;
|
|
80
|
+
line-height: 1.4;
|
|
81
|
+
color: {accentColor};
|
|
82
|
+
opacity: 0.9;
|
|
83
|
+
min-height: 160px; /* reserve space so layout doesn't jump */
|
|
84
|
+
}
|
|
85
|
+
.progress-bar {
|
|
86
|
+
width: 600px;
|
|
87
|
+
height: 4px;
|
|
88
|
+
background: {accentColor}26; /* ~15% alpha */
|
|
89
|
+
border-radius: 2px;
|
|
90
|
+
margin-top: 16px;
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
}
|
|
93
|
+
.progress-fill {
|
|
94
|
+
height: 100%;
|
|
95
|
+
background: linear-gradient(90deg, {accentColor} 0%, {accentColor2} 100%);
|
|
96
|
+
width: 0%;
|
|
97
|
+
}
|
|
98
|
+
.brand {
|
|
99
|
+
position: absolute;
|
|
100
|
+
bottom: 80px;
|
|
101
|
+
left: 50%;
|
|
102
|
+
transform: translateX(-50%);
|
|
103
|
+
font-size: 32px;
|
|
104
|
+
font-weight: 900;
|
|
105
|
+
letter-spacing: 12px;
|
|
106
|
+
color: {accentColor};
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## GSAP Timeline
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
114
|
+
<script>
|
|
115
|
+
window.__timelines = window.__timelines || {};
|
|
116
|
+
const tl = gsap.timeline({ paused: true });
|
|
117
|
+
|
|
118
|
+
// Content array — N entries, each with its own pacing config.
|
|
119
|
+
// Shape: short eyebrow label, short title, longer body sentence, plus per-entry pacing.
|
|
120
|
+
// The final entry typically uses a larger `hold` (closing beat).
|
|
121
|
+
const CONTENT = [
|
|
122
|
+
{
|
|
123
|
+
eyebrow: "{eyebrow1}",
|
|
124
|
+
title: "{title1}",
|
|
125
|
+
body: "{body1}",
|
|
126
|
+
speedFactor: SPEED_FACTOR,
|
|
127
|
+
hold: HOLD_MID,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
eyebrow: "{eyebrow2}",
|
|
131
|
+
title: "{title2}",
|
|
132
|
+
body: "{body2}",
|
|
133
|
+
speedFactor: SPEED_FACTOR,
|
|
134
|
+
hold: HOLD_MID,
|
|
135
|
+
},
|
|
136
|
+
// …
|
|
137
|
+
{
|
|
138
|
+
eyebrow: "{eyebrowN}",
|
|
139
|
+
title: "{titleN}",
|
|
140
|
+
body: "{bodyN}",
|
|
141
|
+
speedFactor: SPEED_FACTOR,
|
|
142
|
+
hold: HOLD_FINAL,
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
|
|
146
|
+
// Pre-compute absolute start times.
|
|
147
|
+
// Duration per entry: BASE_DURATION + body.length * SEC_PER_CHAR + entry.hold seconds.
|
|
148
|
+
// BASE_DURATION, SEC_PER_CHAR documented in How to Choose Values.
|
|
149
|
+
let cumulative = 0;
|
|
150
|
+
const TIMELINE = CONTENT.map((entry) => {
|
|
151
|
+
const dur = BASE_DURATION + entry.body.length * SEC_PER_CHAR + entry.hold;
|
|
152
|
+
const start = cumulative;
|
|
153
|
+
cumulative += dur;
|
|
154
|
+
return { ...entry, start, end: cumulative };
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Reverse-search current entry
|
|
158
|
+
function entryAt(time) {
|
|
159
|
+
for (let i = TIMELINE.length - 1; i >= 0; i--) {
|
|
160
|
+
if (time >= TIMELINE[i].start) return TIMELINE[i];
|
|
161
|
+
}
|
|
162
|
+
return TIMELINE[0];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const eyebrowEl = document.getElementById("eyebrow");
|
|
166
|
+
const titleEl = document.getElementById("title");
|
|
167
|
+
const bodyEl = document.getElementById("body");
|
|
168
|
+
const progressEl = document.getElementById("progress-fill");
|
|
169
|
+
|
|
170
|
+
const TOTAL_DURATION = cumulative + TAIL_PAD;
|
|
171
|
+
const driver = { t: 0 };
|
|
172
|
+
let lastTitle = "";
|
|
173
|
+
|
|
174
|
+
tl.to(
|
|
175
|
+
driver,
|
|
176
|
+
{
|
|
177
|
+
t: TOTAL_DURATION,
|
|
178
|
+
duration: TOTAL_DURATION,
|
|
179
|
+
ease: "none",
|
|
180
|
+
onUpdate: () => {
|
|
181
|
+
const entry = entryAt(driver.t);
|
|
182
|
+
// Only swap content on transitions (avoid per-frame DOM thrash)
|
|
183
|
+
if (entry.title !== lastTitle) {
|
|
184
|
+
eyebrowEl.textContent = entry.eyebrow;
|
|
185
|
+
titleEl.textContent = entry.title;
|
|
186
|
+
bodyEl.textContent = entry.body;
|
|
187
|
+
lastTitle = entry.title;
|
|
188
|
+
}
|
|
189
|
+
// Progress bar fills 0% → 100% as composition advances
|
|
190
|
+
progressEl.style.width = `${(driver.t / TOTAL_DURATION) * 100}%`;
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
0,
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
window.__timelines["seq-scene"] = tl;
|
|
197
|
+
</script>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Variations
|
|
201
|
+
|
|
202
|
+
### Crossfade between items (not hard cut)
|
|
203
|
+
|
|
204
|
+
Add `overlap` to the find function — return BOTH the previous and next entry during the overlap window, render with crossfade opacity:
|
|
205
|
+
|
|
206
|
+
```js
|
|
207
|
+
function activeEntries(time, overlap = 0.3) {
|
|
208
|
+
const result = [];
|
|
209
|
+
TIMELINE.forEach((e) => {
|
|
210
|
+
if (time >= e.start - overlap && time <= e.end + overlap) result.push(e);
|
|
211
|
+
});
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Then render the two adjacent entries with computed opacities based on distance from boundary.
|
|
217
|
+
|
|
218
|
+
### Per-item motion variation
|
|
219
|
+
|
|
220
|
+
Each entry has its own motion style. Map `entry.style` to one of the existing rules: chapter 1 uses [3d-text-depth-layers](3d-text-depth-layers.md), chapter 2 uses [hacker-flip-3d](hacker-flip-3d.md), chapter 3 uses [counting-dynamic-scale](counting-dynamic-scale.md). The sequencer just orchestrates timing; per-entry rendering uses the appropriate rule.
|
|
221
|
+
|
|
222
|
+
### Auto-extend composition duration
|
|
223
|
+
|
|
224
|
+
If you don't know upfront how long the sequence will be (dynamic content count), bind `data-duration` to the computed `TOTAL_DURATION`. Do this in script BEFORE the timeline registers:
|
|
225
|
+
|
|
226
|
+
```js
|
|
227
|
+
document
|
|
228
|
+
.querySelector("[data-composition-id]")
|
|
229
|
+
.setAttribute("data-duration", String(Math.ceil(TOTAL_DURATION)));
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
(Caveat: HF reads `data-duration` at composition load; setting after init may not take effect — author the duration manually based on a rough TOTAL calc.)
|
|
233
|
+
|
|
234
|
+
## Key Principles
|
|
235
|
+
|
|
236
|
+
- **Pre-compute timeline once, not per-frame** — building absolute start/end at script init means onUpdate is O(log n) reverse-search, not O(n²).
|
|
237
|
+
- **Per-item duration formula: `BASE_DURATION + body.length × SEC_PER_CHAR + hold`** — longer text needs more reading time. The formula is the load-bearing teaching of this rule; ranges for each const are in How to Choose Values.
|
|
238
|
+
- **Reserve `min-height` on body element** — content height varies per item; without reservation, layout jumps and downstream elements (progress bar, brand) jitter.
|
|
239
|
+
- **DOM update on transition, not every frame** — track `lastTitle` (or whatever key) and only call `textContent =` when it changes. Per-frame textContent assignment causes flicker in HF render.
|
|
240
|
+
- **Optional progress indicator** — a thin bar at the bottom showing 0-100% completes the "this is a sequence" framing.
|
|
241
|
+
- **Climax dwell longer than mid-sequence dwell** — the outro's `hold` (HOLD_FINAL) should exceed the in-sequence `hold` (HOLD_MID) so the final brand/CTA lands.
|
|
242
|
+
|
|
243
|
+
## How to Choose Values
|
|
244
|
+
|
|
245
|
+
- **BASE_DURATION** — minimum visible time of an entry regardless of content length
|
|
246
|
+
- Range: 0.6-1.5 s
|
|
247
|
+
- Effects: low end snaps through short entries too fast for the eye; high end stalls on short titles
|
|
248
|
+
- Constraints: ensures even one-word entries have time to read
|
|
249
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
250
|
+
|
|
251
|
+
- **SEC_PER_CHAR** — extra time added per body character
|
|
252
|
+
- Range: 0.03-0.06 s/char (≈ 17-33 chars/sec read pace for video)
|
|
253
|
+
- Effects: low end feels rushed for paragraph-style bodies; high end feels slow when bodies are short
|
|
254
|
+
- Constraints: should be uniform across the sequence so the pace reads as one engine; for languages with wider characters, lean to the high end
|
|
255
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
256
|
+
|
|
257
|
+
- **HOLD_MID** — dwell after the typing of a non-final entry completes
|
|
258
|
+
- Range: 0.5-1.0 s
|
|
259
|
+
- Effects: low end feels rushed; high end feels lazy
|
|
260
|
+
- Constraints: `HOLD_MID < HOLD_FINAL`
|
|
261
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
262
|
+
|
|
263
|
+
- **HOLD_FINAL** — dwell on the last entry (outro / climax)
|
|
264
|
+
- Range: 1.0-2.0 s
|
|
265
|
+
- Effects: low end truncates the closing beat; high end overstays
|
|
266
|
+
- Constraints: must exceed HOLD_MID by a clear margin so the close reads as a beat, not another mid-sequence pause
|
|
267
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
268
|
+
|
|
269
|
+
- **SPEED_FACTOR** — per-entry pacing multiplier
|
|
270
|
+
- Range: 0.5-2.0 (default 1.0)
|
|
271
|
+
- Effects: <1 stretches an entry's body-driven duration (good for high-density passages); >1 compresses it
|
|
272
|
+
- Constraints: discrete choice — use 1.0 unless one entry needs special pacing; if every entry uses the same factor, fold it into SEC_PER_CHAR instead
|
|
273
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
274
|
+
|
|
275
|
+
- **TAIL_PAD** — seconds added to `TOTAL_DURATION` after the last entry's `end`
|
|
276
|
+
- Range: 0.0-1.0 s
|
|
277
|
+
- Effects: 0 ends the driver exactly at the last `hold` completion; >0 leaves a quiet beat (useful before a transition to the next composition)
|
|
278
|
+
- Constraints: if downstream is another composition, prefer 0 and handle the breath at the composition seam
|
|
279
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
280
|
+
|
|
281
|
+
- **CONTENT length (N)** — number of entries in the sequence
|
|
282
|
+
- Range: 3-6 entries
|
|
283
|
+
- Effects: <3 isn't a sequence (use a static scene); >6 drags
|
|
284
|
+
- Constraints: each entry's `title` must fit one line at the chosen `.title` fontSize; bodies should fit within `min-height` after wrapping
|
|
285
|
+
- Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
|
|
286
|
+
|
|
287
|
+
## Critical Constraints
|
|
288
|
+
|
|
289
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
290
|
+
- **Registry key = `data-composition-id`**
|
|
291
|
+
- **Pre-compute the TIMELINE array** — don't recompute in onUpdate
|
|
292
|
+
- **`min-height` on body** for layout stability
|
|
293
|
+
- **DOM swap only on entry transition** — use lastTitle/lastKey guard
|
|
294
|
+
- **Sequential only** — for parallel tracks, use a different reduction (this rule is sequential)
|
|
295
|
+
|
|
296
|
+
## Combinations
|
|
297
|
+
|
|
298
|
+
- [discrete-text-sequence.md](discrete-text-sequence.md) — per-entry typewriter on the body
|
|
299
|
+
- [context-sensitive-cursor.md](context-sensitive-cursor.md) — cursor color per chapter segment
|
|
300
|
+
- [vertical-spring-ticker.md](vertical-spring-ticker.md) — animated word transitions between items (instead of hard cut)
|
|
301
|
+
- [scale-swap-transition.md](scale-swap-transition.md) — visual morph between entries
|
|
302
|
+
|
|
303
|
+
## Pairs with HF skills
|
|
304
|
+
|
|
305
|
+
- `/hyperframes-animation` — single driver, reverse-search dispatch
|
|
306
|
+
- `/hyperframes-core` — composition wiring
|
|
307
|
+
- `/hyperframes-cli` — `hyperframes lint`
|