takomi 2.5.1 → 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/agents/worker.md +32 -32
- 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/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/gate-provenance.ts +24 -24
- package/.pi/extensions/takomi-runtime/model-routing-defaults.ts +262 -262
- 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/async-lifecycle.ts +401 -401
- package/.pi/extensions/takomi-subagents/detached-results.ts +940 -940
- package/.pi/extensions/takomi-subagents/native-render.ts +253 -250
- 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 +25 -0
- package/.pi/takomi-profile.json +54 -54
- 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 +5 -4
- 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,313 +1,313 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: depth-of-field-blur
|
|
3
|
-
description: Selective-focus rack-focus — pull the eye to a focal element by GSAP-tweening filter blur (+ a small opacity dim) on the off-focus layers while the focal one stays sharp. Drive blur via a `--dof` CSS var; finite tweens, no CSS transition, deterministic. Covers single focal pull, rack-focus between two depth planes, and blur-the-cluster-while-pushing-in.
|
|
4
|
-
metadata:
|
|
5
|
-
tags: blur, focus, depth-of-field, dof, rack-focus, filter, dim, spotlight, cinematic, push-in
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Depth-of-Field Blur (Selective Focus / Rack Focus)
|
|
9
|
-
|
|
10
|
-
Pulls the eye to one focal element by **blurring** (and slightly **dimming**) everything around it while the focal layer stays sharp — the camera's depth-of-field falling off the background, or a rack-focus shifting which plane is in focus. The motion is `filter: blur(Npx)` plus a small `opacity` dim, tweened from sharp(0) to blurred over the focus-shift window — both seek-safe, since `filter` and `opacity` are paint-only properties HF interpolates correctly frame-by-frame.
|
|
11
|
-
|
|
12
|
-
This is the backing rule for the focus-falloff beat the blueprints keep reaching for: the outer nodes blurring during the push-in (`constellation-hub`), the rack-focus across a parallax card stack (`cursor-ui-demo`), and the non-highlighted cards dimming + blurring to spotlight the hero metric (`dataviz-countup`). Each of those flags "no backing rule" for the DoF half of the move — this is it.
|
|
13
|
-
|
|
14
|
-
## How It Works
|
|
15
|
-
|
|
16
|
-
Every layer carries a `--dof` custom property (px of blur), read by `filter: blur(var(--dof))`, plus its own `opacity`. A single GSAP tween advances each layer's `--dof` from `0` to its target blur and its opacity from `1` to a dim level, over the focus-shift window. The focal layer's tween targets `--dof: 0` (stays sharp); the off-focus layers target a positive blur.
|
|
17
|
-
|
|
18
|
-
Three mechanics, same primitive:
|
|
19
|
-
|
|
20
|
-
1. **Focal pull** — one window: off-focus layers go sharp(0) → blurred while the focal layer holds at 0. The eye is pulled to the only thing still crisp.
|
|
21
|
-
2. **Rack focus** — two adjacent windows on the same property: focus releases plane A (its blur ramps 0 → max) at the same position plane B's blur ramps max → 0. State continuity matters exactly as in `press-release-spring`: A's resting blur after the rack must be the value B held before it, so authoring the two as adjacent tweens on the same `--dof` is what makes the hand-off seamless.
|
|
22
|
-
3. **Blur-the-cluster-while-pushing-in** — the DoF tween runs concurrently with a camera push-in (`multi-phase-camera` / `coordinate-target-zoom`): the surrounding cluster blurs + dims on the SAME timeline position as the camera scales toward the focal core, so "the world recedes" and "we push in" read as one move.
|
|
23
|
-
|
|
24
|
-
Because the blur is a tween target (not a CSS `transition`), the renderer can land it at any frame — and because each layer's target is derived from its index / a data attribute (never `Math.random`), the falloff is identical on every seek.
|
|
25
|
-
|
|
26
|
-
## HTML
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<div
|
|
30
|
-
class="scene"
|
|
31
|
-
id="dof-scene"
|
|
32
|
-
data-composition-id="dof-scene"
|
|
33
|
-
data-start="0"
|
|
34
|
-
data-duration="DURATION"
|
|
35
|
-
data-track-index="0"
|
|
36
|
-
>
|
|
37
|
-
<div class="world" id="world">
|
|
38
|
-
<!-- Focal layer — stays sharp -->
|
|
39
|
-
<div class="layer focal" id="focal" data-dof="0">{FocalLabel}</div>
|
|
40
|
-
|
|
41
|
-
<!-- Off-focus layers — blur + dim. data-depth orders them near→far
|
|
42
|
-
so the falloff can scale blur by depth (see Variations). -->
|
|
43
|
-
<div class="layer ctx" data-depth="1">{Context A}</div>
|
|
44
|
-
<div class="layer ctx" data-depth="2">{Context B}</div>
|
|
45
|
-
<div class="layer ctx" data-depth="3">{Context C}</div>
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## CSS
|
|
51
|
-
|
|
52
|
-
```css
|
|
53
|
-
.scene {
|
|
54
|
-
position: relative;
|
|
55
|
-
width: 100%;
|
|
56
|
-
height: 100%;
|
|
57
|
-
display: grid;
|
|
58
|
-
place-items: center;
|
|
59
|
-
background: {bgGradient};
|
|
60
|
-
}
|
|
61
|
-
.world {
|
|
62
|
-
/* Single wrapper so a concurrent camera push-in (multi-phase-camera)
|
|
63
|
-
transforms everything together; DoF is independent of the camera. */
|
|
64
|
-
position: relative;
|
|
65
|
-
width: 100%;
|
|
66
|
-
height: 100%;
|
|
67
|
-
transform-origin: 50% 50%;
|
|
68
|
-
}
|
|
69
|
-
.layer {
|
|
70
|
-
/* --dof is the px of blur; filter reads it. Starts sharp. */
|
|
71
|
-
--dof: 0px;
|
|
72
|
-
filter: blur(var(--dof));
|
|
73
|
-
/* will-change: filter — promotes the layer so the blur is cheap to
|
|
74
|
-
re-rasterize each frame. See the perf note in Key Principles. */
|
|
75
|
-
will-change: filter;
|
|
76
|
-
font-family: {font};
|
|
77
|
-
font-weight: 900;
|
|
78
|
-
color: {textColor};
|
|
79
|
-
}
|
|
80
|
-
.focal {
|
|
81
|
-
/* Sits above the context layers and never blurs. */
|
|
82
|
-
z-index: 2;
|
|
83
|
-
font-size: FOCAL_FONT_SIZE;
|
|
84
|
-
}
|
|
85
|
-
.ctx {
|
|
86
|
-
/* The off-focus plane(s). Smaller / grouped so the blur radius can
|
|
87
|
-
stay modest yet still read — blurring a small layer is cheap. */
|
|
88
|
-
z-index: 1;
|
|
89
|
-
font-size: CTX_FONT_SIZE;
|
|
90
|
-
opacity: 1;
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## GSAP Timeline
|
|
95
|
-
|
|
96
|
-
```html
|
|
97
|
-
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
98
|
-
<script>
|
|
99
|
-
window.__timelines = window.__timelines || {};
|
|
100
|
-
const tl = gsap.timeline({ paused: true });
|
|
101
|
-
|
|
102
|
-
const ctx = gsap.utils.toArray(".ctx");
|
|
103
|
-
|
|
104
|
-
// ── Mechanic 1: FOCAL PULL ─────────────────────────────────────────
|
|
105
|
-
// Off-focus layers blur + dim from sharp to defocused over the
|
|
106
|
-
// focus-shift window. Blur scales with data-depth so far planes blur
|
|
107
|
-
// more than near ones (deterministic — derived from the attribute,
|
|
108
|
-
// never Math.random).
|
|
109
|
-
ctx.forEach((el) => {
|
|
110
|
-
const depth = Number(el.dataset.depth) || 1;
|
|
111
|
-
const targetBlur = BLUR_PER_DEPTH * depth; // px
|
|
112
|
-
tl.to(
|
|
113
|
-
el,
|
|
114
|
-
{
|
|
115
|
-
"--dof": `${targetBlur}px`,
|
|
116
|
-
opacity: DIM_LEVEL, // e.g. 0.55 — dim, not gone
|
|
117
|
-
duration: FOCUS_DUR,
|
|
118
|
-
ease: "power2.inOut",
|
|
119
|
-
},
|
|
120
|
-
FOCUS_START,
|
|
121
|
-
);
|
|
122
|
-
});
|
|
123
|
-
// Focal layer is already sharp (--dof:0, opacity:1) and untouched.
|
|
124
|
-
|
|
125
|
-
window.__timelines["dof-scene"] = tl;
|
|
126
|
-
</script>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## Variations
|
|
130
|
-
|
|
131
|
-
### Rack focus between two depth planes (foreground ⇄ background)
|
|
132
|
-
|
|
133
|
-
Two adjacent tweens on the same `--dof` per plane — focus leaves plane A as it lands on plane B. State continuity: B's _resting_ blur before the rack equals what A holds after, so the hand-off has no jump.
|
|
134
|
-
|
|
135
|
-
```js
|
|
136
|
-
// Start: A sharp, B pre-blurred (set BEFORE the rack so there's no pop).
|
|
137
|
-
gsap.set("#planeA", { "--dof": "0px", opacity: 1 });
|
|
138
|
-
gsap.set("#planeB", { "--dof": `${MAX_BLUR}px`, opacity: DIM_LEVEL });
|
|
139
|
-
|
|
140
|
-
// Rack: A defocuses while B comes into focus, same position + duration.
|
|
141
|
-
tl.to(
|
|
142
|
-
"#planeA",
|
|
143
|
-
{ "--dof": `${MAX_BLUR}px`, opacity: DIM_LEVEL, duration: RACK_DUR, ease: "power2.inOut" },
|
|
144
|
-
RACK_START,
|
|
145
|
-
);
|
|
146
|
-
tl.to(
|
|
147
|
-
"#planeB",
|
|
148
|
-
{ "--dof": "0px", opacity: 1, duration: RACK_DUR, ease: "power2.inOut" },
|
|
149
|
-
RACK_START,
|
|
150
|
-
);
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Blur the cluster while pushing in (DoF + camera, one beat)
|
|
154
|
-
|
|
155
|
-
Run the focal-pull tween at the **same timeline position** as a camera push-in so the surrounding cluster recedes into blur exactly as the camera scales toward the core. The camera transforms `.world`; the DoF tweens the layers — independent properties, no conflict.
|
|
156
|
-
|
|
157
|
-
```js
|
|
158
|
-
// Camera push-in toward the focal core (see multi-phase-camera / coordinate-target-zoom).
|
|
159
|
-
tl.to(
|
|
160
|
-
"#world",
|
|
161
|
-
{ scale: PUSH_SCALE, x: PUSH_X, y: PUSH_Y, duration: FOCUS_DUR, ease: "power2.inOut" },
|
|
162
|
-
FOCUS_START,
|
|
163
|
-
);
|
|
164
|
-
// Cluster blurs + dims on the SAME position — "the world recedes as we push in."
|
|
165
|
-
ctx.forEach((el) => {
|
|
166
|
-
const depth = Number(el.dataset.depth) || 1;
|
|
167
|
-
tl.to(
|
|
168
|
-
el,
|
|
169
|
-
{
|
|
170
|
-
"--dof": `${BLUR_PER_DEPTH * depth}px`,
|
|
171
|
-
opacity: DIM_LEVEL,
|
|
172
|
-
duration: FOCUS_DUR,
|
|
173
|
-
ease: "power2.inOut",
|
|
174
|
-
},
|
|
175
|
-
FOCUS_START,
|
|
176
|
-
);
|
|
177
|
-
});
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Spotlight a hero metric in a card grid (dim + blur the rest)
|
|
181
|
-
|
|
182
|
-
The `dataviz-countup` beat: a subset of grid cards stays sharp (the hero metric) while the remainder dim + blur. Tag the hero(es) and skip them; everything else defocuses on one shared window.
|
|
183
|
-
|
|
184
|
-
```js
|
|
185
|
-
gsap.utils.toArray(".card:not(.hero)").forEach((el) => {
|
|
186
|
-
tl.to(
|
|
187
|
-
el,
|
|
188
|
-
{ "--dof": `${GRID_BLUR}px`, opacity: DIM_LEVEL, duration: FOCUS_DUR, ease: "power2.out" },
|
|
189
|
-
FOCUS_START,
|
|
190
|
-
);
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Refocus / settle (release the blur before the scene ends)
|
|
195
|
-
|
|
196
|
-
If the beat resolves back to "everything visible" (or hands off to a crossfade that needs a clean outgoing frame), ramp the blur back to 0 over the tail so the scene settles sharp instead of mid-defocus.
|
|
197
|
-
|
|
198
|
-
```js
|
|
199
|
-
ctx.forEach((el) =>
|
|
200
|
-
tl.to(
|
|
201
|
-
el,
|
|
202
|
-
{ "--dof": "0px", opacity: 1, duration: REFOCUS_DUR, ease: "power2.inOut" },
|
|
203
|
-
REFOCUS_START,
|
|
204
|
-
),
|
|
205
|
-
);
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Bounded focus-breathing on the focal layer (optional)
|
|
209
|
-
|
|
210
|
-
For a subtle "rack settling" feel, let the focal layer's blur breathe a hair around 0 during its hold — a _finite_ `ease:"none"` driver writing `sin()` into `--dof` (never `repeat:-1`, never a CSS animation). Keep the amplitude well under 1px or it reads as "still focusing."
|
|
211
|
-
|
|
212
|
-
```js
|
|
213
|
-
const drift = { p: 0 };
|
|
214
|
-
tl.to(
|
|
215
|
-
drift,
|
|
216
|
-
{
|
|
217
|
-
p: Math.PI * 2 * BREATH_CYCLES,
|
|
218
|
-
duration: BREATH_DUR,
|
|
219
|
-
ease: "none",
|
|
220
|
-
onUpdate: () => {
|
|
221
|
-
const b = Math.max(0, Math.sin(drift.p)) * FOCAL_BREATH_PX; // ≤ ~0.6px
|
|
222
|
-
document.getElementById("focal").style.setProperty("--dof", `${b}px`);
|
|
223
|
-
},
|
|
224
|
-
},
|
|
225
|
-
BREATH_START,
|
|
226
|
-
);
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## How to Choose Values
|
|
230
|
-
|
|
231
|
-
### Geometry / layout
|
|
232
|
-
|
|
233
|
-
- **FOCAL_FONT_SIZE / CTX_FONT_SIZE** — focal vs context sizing.
|
|
234
|
-
- Range: focal is the visual lead; context layers smaller so a modest blur radius still reads as "out of focus."
|
|
235
|
-
- Effects: small context layers let you use a smaller `BLUR_PER_DEPTH` (cheaper) yet still look soft.
|
|
236
|
-
- **z-index** — focal `z-index: 2`, context `z-index: 1`.
|
|
237
|
-
- Constraints: the sharp focal layer must sit **above** the blurred ones, or its crisp edges read as bleeding into the haze.
|
|
238
|
-
|
|
239
|
-
### Blur amounts
|
|
240
|
-
|
|
241
|
-
- **BLUR_PER_DEPTH** — px of blur added per depth step (`data-depth`).
|
|
242
|
-
- Range: 3-6 px per step (a 3-plane stack tops out at ~9-18 px)
|
|
243
|
-
- Effects: low → gentle DoF; high → strong miniature/tilt-shift falloff
|
|
244
|
-
- Constraints: keep **per-layer blur ≤ ~24 px on large layers** — radius cost grows with both blur and area; large radius over a full-frame element is the expensive case (see Key Principles)
|
|
245
|
-
- **MAX_BLUR** — terminal blur for a fully-defocused plane (rack / focal-pull peak).
|
|
246
|
-
- Range: 8 (soft) → 16 (default) → 24 (heavy) px
|
|
247
|
-
- Constraints: above ~24 px on a big surface, prefer scaling the layer down or grouping its contents so the blurred footprint shrinks
|
|
248
|
-
- **GRID_BLUR** — blur on dimmed grid cards (spotlight variation).
|
|
249
|
-
- Range: 6-12 px — enough to push them back without losing the grid's shape
|
|
250
|
-
|
|
251
|
-
### Dim amounts
|
|
252
|
-
|
|
253
|
-
- **DIM_LEVEL** — opacity of off-focus layers at full defocus.
|
|
254
|
-
- Range: 0.4 (strong push-back) → 0.55 (default) → 0.7 (subtle)
|
|
255
|
-
- Effects: lower → context recedes hard / near-spotlight; higher → still legibly present, just secondary
|
|
256
|
-
- Constraints: rarely below 0.35 — fully dark off-focus layers read as "removed," not "defocused"
|
|
257
|
-
|
|
258
|
-
### Timing
|
|
259
|
-
|
|
260
|
-
- **FOCUS_START / FOCUS_DUR** — when the focal pull begins and how long the rack takes.
|
|
261
|
-
- Range: `FOCUS_DUR` 0.5-1.2 s — a rack/pull is a deliberate move, not a snap
|
|
262
|
-
- Effects: shorter → urgent "snap focus"; longer → languid cinematic rack
|
|
263
|
-
- **RACK_START / RACK_DUR** — rack-focus window (foreground ⇄ background).
|
|
264
|
-
- Constraints: both planes' tweens share `RACK_START` and `RACK_DUR` so they cross at the midpoint; `gsap.set` the pre-blurred plane BEFORE `RACK_START`
|
|
265
|
-
- **REFOCUS_START / REFOCUS_DUR** — settle-back window.
|
|
266
|
-
- Constraints: `REFOCUS_START + REFOCUS_DUR ≤ DURATION` so the scene actually reaches sharp before it ends / hands off
|
|
267
|
-
- **PUSH_SCALE / PUSH_X / PUSH_Y** (cluster-while-pushing-in variation) — camera move on `.world`.
|
|
268
|
-
- Constraints: shares `FOCUS_START` + `FOCUS_DUR` with the DoF tween so move and defocus read as one beat; counter-translate math lives in `coordinate-target-zoom` / `viewport-change`
|
|
269
|
-
- **BREATH_CYCLES / BREATH_DUR / FOCAL_BREATH_PX** (focus-breathing variation).
|
|
270
|
-
- Range: `FOCAL_BREATH_PX ≤ 0.6` px; period 2-3 s; this is a barely-there nicety, default to omitting it
|
|
271
|
-
|
|
272
|
-
### Tokens
|
|
273
|
-
|
|
274
|
-
- **{bgGradient}** — typically dark so the sharp focal layer reads as lit and forward
|
|
275
|
-
- **{textColor}** — high-contrast on `{bgGradient}`; the blur softens edges, so don't rely on hairline contrast
|
|
276
|
-
- **{font}** — display weight; blurred copy needs heavy weight to stay shape-legible when defocused
|
|
277
|
-
|
|
278
|
-
## Key Principles
|
|
279
|
-
|
|
280
|
-
- **`--dof` drives the blur; tween the variable, never a CSS `transition`.** Reading `filter: blur(var(--dof))` and animating `--dof` on the GSAP timeline keeps the blur on the HF seek clock. A CSS `transition` on `filter` interpolates on the browser's own clock and flickers/desyncs under frame-by-frame seek.
|
|
281
|
-
- **Blur the SMALL / GROUPED layers, not the giant one.** Filter-blur cost scales with both radius and the blurred element's pixel area. A 20 px blur on a full-frame background is the worst case; the same blur on a smaller context card, or on a single grouped wrapper, is cheap. Prefer pushing the focal plane _forward and sharp_ over cranking the background blur radius.
|
|
282
|
-
- **`will-change: filter`** on every layer that animates its blur — promotes it to its own layer so the re-rasterization each frame is cheap. Drop it once the blur settles if the layer also does heavy transform work.
|
|
283
|
-
- **Keep the radius modest.** ≤ ~24 px on large surfaces; lean on the `opacity` **dim** to do the "push it back" work alongside a smaller blur, rather than blur alone. Dim + modest blur reads more like real DoF than blur cranked to the max.
|
|
284
|
-
- **Focal layer stays genuinely sharp** — its `--dof` is `0` and untouched (or breathes ≤0.6 px). Any visible blur on the focal element kills the "this is the thing" read.
|
|
285
|
-
- **State continuity on a rack** — the plane coming OUT of focus must start the rack at the blur the incoming plane _was_ holding, and vice-versa; author both as tweens on the same `--dof` at the same position so the cross is seamless (same rule as `press-release-spring`'s press↔release).
|
|
286
|
-
- **DoF is independent of the camera** — blur the layers, transform `.world` for the push-in. They're different property channels, so they compose without fighting. Don't try to fake DoF with the camera transform or vice-versa.
|
|
287
|
-
- **Settle sharp before a hand-off** — if the next beat is a crossfade/push, refocus to `--dof:0` in the tail so the outgoing frame is crisp; handing off mid-defocus reads as "the render glitched."
|
|
288
|
-
|
|
289
|
-
## Critical Constraints
|
|
290
|
-
|
|
291
|
-
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
292
|
-
- **Registry key = `data-composition-id`**
|
|
293
|
-
- **No CSS `transition`** on `filter` / `opacity` — animate `--dof` and `opacity` on the timeline instead
|
|
294
|
-
- **No `repeat` / `yoyo` / infinite tweens** — the focus pull is a finite tween; any breathing is a bounded `onUpdate` reading the driver phase (or a finite tween), never `repeat:-1`
|
|
295
|
-
- **No `Math.random` / `Date.now`** — per-layer blur is derived from `data-depth` / element index so every seek is identical
|
|
296
|
-
- **Tween `filter` (blur) + `opacity` only here** — both paint-only and seek-safe. Use GSAP transform aliases (`x`, `y`, `scale`) for any concurrent camera move; never tween `width` / `height` / `left` / `top`
|
|
297
|
-
- **`will-change: filter`** on layers whose blur animates; keep the blurred footprint small
|
|
298
|
-
- **Per-layer blur radius ≤ ~24 px on large surfaces** — beyond that the cost (and visible banding) climbs; shrink/group the layer instead
|
|
299
|
-
|
|
300
|
-
## Combinations
|
|
301
|
-
|
|
302
|
-
- [multi-phase-camera.md](multi-phase-camera.md) — the push-in / push-through whose focus-falloff this rule supplies; run the DoF tween at the same position as the PUSH phase
|
|
303
|
-
- [coordinate-target-zoom.md](coordinate-target-zoom.md) — zoom onto the focal core while the off-center layers blur (the `constellation-hub` hook)
|
|
304
|
-
- [viewport-change.md](viewport-change.md) — pan across a tilted card plane with a rack-focus between near and far cards (the `cursor-ui-demo` focus-pull)
|
|
305
|
-
- [counting-dynamic-scale.md](counting-dynamic-scale.md) — the hero metric counts up sharp while the surrounding cards dim + blur (the `dataviz-countup` spotlight)
|
|
306
|
-
- [3d-page-scroll.md](3d-page-scroll.md) — the parallax card stack whose planes you rack focus between
|
|
307
|
-
- [sine-wave-loop.md](sine-wave-loop.md) — the focal layer idle-breathes after the rack settles (keep idle amplitude and focus-breath both tiny)
|
|
308
|
-
|
|
309
|
-
## Pairs with HF skills
|
|
310
|
-
|
|
311
|
-
- `/hyperframes-animation` — tweening a CSS custom property + multi-tween coordination
|
|
312
|
-
- `/hyperframes-core` — composition wiring
|
|
313
|
-
- `/hyperframes-cli` — `hyperframes lint`
|
|
1
|
+
---
|
|
2
|
+
name: depth-of-field-blur
|
|
3
|
+
description: Selective-focus rack-focus — pull the eye to a focal element by GSAP-tweening filter blur (+ a small opacity dim) on the off-focus layers while the focal one stays sharp. Drive blur via a `--dof` CSS var; finite tweens, no CSS transition, deterministic. Covers single focal pull, rack-focus between two depth planes, and blur-the-cluster-while-pushing-in.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: blur, focus, depth-of-field, dof, rack-focus, filter, dim, spotlight, cinematic, push-in
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Depth-of-Field Blur (Selective Focus / Rack Focus)
|
|
9
|
+
|
|
10
|
+
Pulls the eye to one focal element by **blurring** (and slightly **dimming**) everything around it while the focal layer stays sharp — the camera's depth-of-field falling off the background, or a rack-focus shifting which plane is in focus. The motion is `filter: blur(Npx)` plus a small `opacity` dim, tweened from sharp(0) to blurred over the focus-shift window — both seek-safe, since `filter` and `opacity` are paint-only properties HF interpolates correctly frame-by-frame.
|
|
11
|
+
|
|
12
|
+
This is the backing rule for the focus-falloff beat the blueprints keep reaching for: the outer nodes blurring during the push-in (`constellation-hub`), the rack-focus across a parallax card stack (`cursor-ui-demo`), and the non-highlighted cards dimming + blurring to spotlight the hero metric (`dataviz-countup`). Each of those flags "no backing rule" for the DoF half of the move — this is it.
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
Every layer carries a `--dof` custom property (px of blur), read by `filter: blur(var(--dof))`, plus its own `opacity`. A single GSAP tween advances each layer's `--dof` from `0` to its target blur and its opacity from `1` to a dim level, over the focus-shift window. The focal layer's tween targets `--dof: 0` (stays sharp); the off-focus layers target a positive blur.
|
|
17
|
+
|
|
18
|
+
Three mechanics, same primitive:
|
|
19
|
+
|
|
20
|
+
1. **Focal pull** — one window: off-focus layers go sharp(0) → blurred while the focal layer holds at 0. The eye is pulled to the only thing still crisp.
|
|
21
|
+
2. **Rack focus** — two adjacent windows on the same property: focus releases plane A (its blur ramps 0 → max) at the same position plane B's blur ramps max → 0. State continuity matters exactly as in `press-release-spring`: A's resting blur after the rack must be the value B held before it, so authoring the two as adjacent tweens on the same `--dof` is what makes the hand-off seamless.
|
|
22
|
+
3. **Blur-the-cluster-while-pushing-in** — the DoF tween runs concurrently with a camera push-in (`multi-phase-camera` / `coordinate-target-zoom`): the surrounding cluster blurs + dims on the SAME timeline position as the camera scales toward the focal core, so "the world recedes" and "we push in" read as one move.
|
|
23
|
+
|
|
24
|
+
Because the blur is a tween target (not a CSS `transition`), the renderer can land it at any frame — and because each layer's target is derived from its index / a data attribute (never `Math.random`), the falloff is identical on every seek.
|
|
25
|
+
|
|
26
|
+
## HTML
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<div
|
|
30
|
+
class="scene"
|
|
31
|
+
id="dof-scene"
|
|
32
|
+
data-composition-id="dof-scene"
|
|
33
|
+
data-start="0"
|
|
34
|
+
data-duration="DURATION"
|
|
35
|
+
data-track-index="0"
|
|
36
|
+
>
|
|
37
|
+
<div class="world" id="world">
|
|
38
|
+
<!-- Focal layer — stays sharp -->
|
|
39
|
+
<div class="layer focal" id="focal" data-dof="0">{FocalLabel}</div>
|
|
40
|
+
|
|
41
|
+
<!-- Off-focus layers — blur + dim. data-depth orders them near→far
|
|
42
|
+
so the falloff can scale blur by depth (see Variations). -->
|
|
43
|
+
<div class="layer ctx" data-depth="1">{Context A}</div>
|
|
44
|
+
<div class="layer ctx" data-depth="2">{Context B}</div>
|
|
45
|
+
<div class="layer ctx" data-depth="3">{Context C}</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## CSS
|
|
51
|
+
|
|
52
|
+
```css
|
|
53
|
+
.scene {
|
|
54
|
+
position: relative;
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: 100%;
|
|
57
|
+
display: grid;
|
|
58
|
+
place-items: center;
|
|
59
|
+
background: {bgGradient};
|
|
60
|
+
}
|
|
61
|
+
.world {
|
|
62
|
+
/* Single wrapper so a concurrent camera push-in (multi-phase-camera)
|
|
63
|
+
transforms everything together; DoF is independent of the camera. */
|
|
64
|
+
position: relative;
|
|
65
|
+
width: 100%;
|
|
66
|
+
height: 100%;
|
|
67
|
+
transform-origin: 50% 50%;
|
|
68
|
+
}
|
|
69
|
+
.layer {
|
|
70
|
+
/* --dof is the px of blur; filter reads it. Starts sharp. */
|
|
71
|
+
--dof: 0px;
|
|
72
|
+
filter: blur(var(--dof));
|
|
73
|
+
/* will-change: filter — promotes the layer so the blur is cheap to
|
|
74
|
+
re-rasterize each frame. See the perf note in Key Principles. */
|
|
75
|
+
will-change: filter;
|
|
76
|
+
font-family: {font};
|
|
77
|
+
font-weight: 900;
|
|
78
|
+
color: {textColor};
|
|
79
|
+
}
|
|
80
|
+
.focal {
|
|
81
|
+
/* Sits above the context layers and never blurs. */
|
|
82
|
+
z-index: 2;
|
|
83
|
+
font-size: FOCAL_FONT_SIZE;
|
|
84
|
+
}
|
|
85
|
+
.ctx {
|
|
86
|
+
/* The off-focus plane(s). Smaller / grouped so the blur radius can
|
|
87
|
+
stay modest yet still read — blurring a small layer is cheap. */
|
|
88
|
+
z-index: 1;
|
|
89
|
+
font-size: CTX_FONT_SIZE;
|
|
90
|
+
opacity: 1;
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## GSAP Timeline
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
98
|
+
<script>
|
|
99
|
+
window.__timelines = window.__timelines || {};
|
|
100
|
+
const tl = gsap.timeline({ paused: true });
|
|
101
|
+
|
|
102
|
+
const ctx = gsap.utils.toArray(".ctx");
|
|
103
|
+
|
|
104
|
+
// ── Mechanic 1: FOCAL PULL ─────────────────────────────────────────
|
|
105
|
+
// Off-focus layers blur + dim from sharp to defocused over the
|
|
106
|
+
// focus-shift window. Blur scales with data-depth so far planes blur
|
|
107
|
+
// more than near ones (deterministic — derived from the attribute,
|
|
108
|
+
// never Math.random).
|
|
109
|
+
ctx.forEach((el) => {
|
|
110
|
+
const depth = Number(el.dataset.depth) || 1;
|
|
111
|
+
const targetBlur = BLUR_PER_DEPTH * depth; // px
|
|
112
|
+
tl.to(
|
|
113
|
+
el,
|
|
114
|
+
{
|
|
115
|
+
"--dof": `${targetBlur}px`,
|
|
116
|
+
opacity: DIM_LEVEL, // e.g. 0.55 — dim, not gone
|
|
117
|
+
duration: FOCUS_DUR,
|
|
118
|
+
ease: "power2.inOut",
|
|
119
|
+
},
|
|
120
|
+
FOCUS_START,
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
// Focal layer is already sharp (--dof:0, opacity:1) and untouched.
|
|
124
|
+
|
|
125
|
+
window.__timelines["dof-scene"] = tl;
|
|
126
|
+
</script>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Variations
|
|
130
|
+
|
|
131
|
+
### Rack focus between two depth planes (foreground ⇄ background)
|
|
132
|
+
|
|
133
|
+
Two adjacent tweens on the same `--dof` per plane — focus leaves plane A as it lands on plane B. State continuity: B's _resting_ blur before the rack equals what A holds after, so the hand-off has no jump.
|
|
134
|
+
|
|
135
|
+
```js
|
|
136
|
+
// Start: A sharp, B pre-blurred (set BEFORE the rack so there's no pop).
|
|
137
|
+
gsap.set("#planeA", { "--dof": "0px", opacity: 1 });
|
|
138
|
+
gsap.set("#planeB", { "--dof": `${MAX_BLUR}px`, opacity: DIM_LEVEL });
|
|
139
|
+
|
|
140
|
+
// Rack: A defocuses while B comes into focus, same position + duration.
|
|
141
|
+
tl.to(
|
|
142
|
+
"#planeA",
|
|
143
|
+
{ "--dof": `${MAX_BLUR}px`, opacity: DIM_LEVEL, duration: RACK_DUR, ease: "power2.inOut" },
|
|
144
|
+
RACK_START,
|
|
145
|
+
);
|
|
146
|
+
tl.to(
|
|
147
|
+
"#planeB",
|
|
148
|
+
{ "--dof": "0px", opacity: 1, duration: RACK_DUR, ease: "power2.inOut" },
|
|
149
|
+
RACK_START,
|
|
150
|
+
);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Blur the cluster while pushing in (DoF + camera, one beat)
|
|
154
|
+
|
|
155
|
+
Run the focal-pull tween at the **same timeline position** as a camera push-in so the surrounding cluster recedes into blur exactly as the camera scales toward the core. The camera transforms `.world`; the DoF tweens the layers — independent properties, no conflict.
|
|
156
|
+
|
|
157
|
+
```js
|
|
158
|
+
// Camera push-in toward the focal core (see multi-phase-camera / coordinate-target-zoom).
|
|
159
|
+
tl.to(
|
|
160
|
+
"#world",
|
|
161
|
+
{ scale: PUSH_SCALE, x: PUSH_X, y: PUSH_Y, duration: FOCUS_DUR, ease: "power2.inOut" },
|
|
162
|
+
FOCUS_START,
|
|
163
|
+
);
|
|
164
|
+
// Cluster blurs + dims on the SAME position — "the world recedes as we push in."
|
|
165
|
+
ctx.forEach((el) => {
|
|
166
|
+
const depth = Number(el.dataset.depth) || 1;
|
|
167
|
+
tl.to(
|
|
168
|
+
el,
|
|
169
|
+
{
|
|
170
|
+
"--dof": `${BLUR_PER_DEPTH * depth}px`,
|
|
171
|
+
opacity: DIM_LEVEL,
|
|
172
|
+
duration: FOCUS_DUR,
|
|
173
|
+
ease: "power2.inOut",
|
|
174
|
+
},
|
|
175
|
+
FOCUS_START,
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Spotlight a hero metric in a card grid (dim + blur the rest)
|
|
181
|
+
|
|
182
|
+
The `dataviz-countup` beat: a subset of grid cards stays sharp (the hero metric) while the remainder dim + blur. Tag the hero(es) and skip them; everything else defocuses on one shared window.
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
gsap.utils.toArray(".card:not(.hero)").forEach((el) => {
|
|
186
|
+
tl.to(
|
|
187
|
+
el,
|
|
188
|
+
{ "--dof": `${GRID_BLUR}px`, opacity: DIM_LEVEL, duration: FOCUS_DUR, ease: "power2.out" },
|
|
189
|
+
FOCUS_START,
|
|
190
|
+
);
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Refocus / settle (release the blur before the scene ends)
|
|
195
|
+
|
|
196
|
+
If the beat resolves back to "everything visible" (or hands off to a crossfade that needs a clean outgoing frame), ramp the blur back to 0 over the tail so the scene settles sharp instead of mid-defocus.
|
|
197
|
+
|
|
198
|
+
```js
|
|
199
|
+
ctx.forEach((el) =>
|
|
200
|
+
tl.to(
|
|
201
|
+
el,
|
|
202
|
+
{ "--dof": "0px", opacity: 1, duration: REFOCUS_DUR, ease: "power2.inOut" },
|
|
203
|
+
REFOCUS_START,
|
|
204
|
+
),
|
|
205
|
+
);
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Bounded focus-breathing on the focal layer (optional)
|
|
209
|
+
|
|
210
|
+
For a subtle "rack settling" feel, let the focal layer's blur breathe a hair around 0 during its hold — a _finite_ `ease:"none"` driver writing `sin()` into `--dof` (never `repeat:-1`, never a CSS animation). Keep the amplitude well under 1px or it reads as "still focusing."
|
|
211
|
+
|
|
212
|
+
```js
|
|
213
|
+
const drift = { p: 0 };
|
|
214
|
+
tl.to(
|
|
215
|
+
drift,
|
|
216
|
+
{
|
|
217
|
+
p: Math.PI * 2 * BREATH_CYCLES,
|
|
218
|
+
duration: BREATH_DUR,
|
|
219
|
+
ease: "none",
|
|
220
|
+
onUpdate: () => {
|
|
221
|
+
const b = Math.max(0, Math.sin(drift.p)) * FOCAL_BREATH_PX; // ≤ ~0.6px
|
|
222
|
+
document.getElementById("focal").style.setProperty("--dof", `${b}px`);
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
BREATH_START,
|
|
226
|
+
);
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## How to Choose Values
|
|
230
|
+
|
|
231
|
+
### Geometry / layout
|
|
232
|
+
|
|
233
|
+
- **FOCAL_FONT_SIZE / CTX_FONT_SIZE** — focal vs context sizing.
|
|
234
|
+
- Range: focal is the visual lead; context layers smaller so a modest blur radius still reads as "out of focus."
|
|
235
|
+
- Effects: small context layers let you use a smaller `BLUR_PER_DEPTH` (cheaper) yet still look soft.
|
|
236
|
+
- **z-index** — focal `z-index: 2`, context `z-index: 1`.
|
|
237
|
+
- Constraints: the sharp focal layer must sit **above** the blurred ones, or its crisp edges read as bleeding into the haze.
|
|
238
|
+
|
|
239
|
+
### Blur amounts
|
|
240
|
+
|
|
241
|
+
- **BLUR_PER_DEPTH** — px of blur added per depth step (`data-depth`).
|
|
242
|
+
- Range: 3-6 px per step (a 3-plane stack tops out at ~9-18 px)
|
|
243
|
+
- Effects: low → gentle DoF; high → strong miniature/tilt-shift falloff
|
|
244
|
+
- Constraints: keep **per-layer blur ≤ ~24 px on large layers** — radius cost grows with both blur and area; large radius over a full-frame element is the expensive case (see Key Principles)
|
|
245
|
+
- **MAX_BLUR** — terminal blur for a fully-defocused plane (rack / focal-pull peak).
|
|
246
|
+
- Range: 8 (soft) → 16 (default) → 24 (heavy) px
|
|
247
|
+
- Constraints: above ~24 px on a big surface, prefer scaling the layer down or grouping its contents so the blurred footprint shrinks
|
|
248
|
+
- **GRID_BLUR** — blur on dimmed grid cards (spotlight variation).
|
|
249
|
+
- Range: 6-12 px — enough to push them back without losing the grid's shape
|
|
250
|
+
|
|
251
|
+
### Dim amounts
|
|
252
|
+
|
|
253
|
+
- **DIM_LEVEL** — opacity of off-focus layers at full defocus.
|
|
254
|
+
- Range: 0.4 (strong push-back) → 0.55 (default) → 0.7 (subtle)
|
|
255
|
+
- Effects: lower → context recedes hard / near-spotlight; higher → still legibly present, just secondary
|
|
256
|
+
- Constraints: rarely below 0.35 — fully dark off-focus layers read as "removed," not "defocused"
|
|
257
|
+
|
|
258
|
+
### Timing
|
|
259
|
+
|
|
260
|
+
- **FOCUS_START / FOCUS_DUR** — when the focal pull begins and how long the rack takes.
|
|
261
|
+
- Range: `FOCUS_DUR` 0.5-1.2 s — a rack/pull is a deliberate move, not a snap
|
|
262
|
+
- Effects: shorter → urgent "snap focus"; longer → languid cinematic rack
|
|
263
|
+
- **RACK_START / RACK_DUR** — rack-focus window (foreground ⇄ background).
|
|
264
|
+
- Constraints: both planes' tweens share `RACK_START` and `RACK_DUR` so they cross at the midpoint; `gsap.set` the pre-blurred plane BEFORE `RACK_START`
|
|
265
|
+
- **REFOCUS_START / REFOCUS_DUR** — settle-back window.
|
|
266
|
+
- Constraints: `REFOCUS_START + REFOCUS_DUR ≤ DURATION` so the scene actually reaches sharp before it ends / hands off
|
|
267
|
+
- **PUSH_SCALE / PUSH_X / PUSH_Y** (cluster-while-pushing-in variation) — camera move on `.world`.
|
|
268
|
+
- Constraints: shares `FOCUS_START` + `FOCUS_DUR` with the DoF tween so move and defocus read as one beat; counter-translate math lives in `coordinate-target-zoom` / `viewport-change`
|
|
269
|
+
- **BREATH_CYCLES / BREATH_DUR / FOCAL_BREATH_PX** (focus-breathing variation).
|
|
270
|
+
- Range: `FOCAL_BREATH_PX ≤ 0.6` px; period 2-3 s; this is a barely-there nicety, default to omitting it
|
|
271
|
+
|
|
272
|
+
### Tokens
|
|
273
|
+
|
|
274
|
+
- **{bgGradient}** — typically dark so the sharp focal layer reads as lit and forward
|
|
275
|
+
- **{textColor}** — high-contrast on `{bgGradient}`; the blur softens edges, so don't rely on hairline contrast
|
|
276
|
+
- **{font}** — display weight; blurred copy needs heavy weight to stay shape-legible when defocused
|
|
277
|
+
|
|
278
|
+
## Key Principles
|
|
279
|
+
|
|
280
|
+
- **`--dof` drives the blur; tween the variable, never a CSS `transition`.** Reading `filter: blur(var(--dof))` and animating `--dof` on the GSAP timeline keeps the blur on the HF seek clock. A CSS `transition` on `filter` interpolates on the browser's own clock and flickers/desyncs under frame-by-frame seek.
|
|
281
|
+
- **Blur the SMALL / GROUPED layers, not the giant one.** Filter-blur cost scales with both radius and the blurred element's pixel area. A 20 px blur on a full-frame background is the worst case; the same blur on a smaller context card, or on a single grouped wrapper, is cheap. Prefer pushing the focal plane _forward and sharp_ over cranking the background blur radius.
|
|
282
|
+
- **`will-change: filter`** on every layer that animates its blur — promotes it to its own layer so the re-rasterization each frame is cheap. Drop it once the blur settles if the layer also does heavy transform work.
|
|
283
|
+
- **Keep the radius modest.** ≤ ~24 px on large surfaces; lean on the `opacity` **dim** to do the "push it back" work alongside a smaller blur, rather than blur alone. Dim + modest blur reads more like real DoF than blur cranked to the max.
|
|
284
|
+
- **Focal layer stays genuinely sharp** — its `--dof` is `0` and untouched (or breathes ≤0.6 px). Any visible blur on the focal element kills the "this is the thing" read.
|
|
285
|
+
- **State continuity on a rack** — the plane coming OUT of focus must start the rack at the blur the incoming plane _was_ holding, and vice-versa; author both as tweens on the same `--dof` at the same position so the cross is seamless (same rule as `press-release-spring`'s press↔release).
|
|
286
|
+
- **DoF is independent of the camera** — blur the layers, transform `.world` for the push-in. They're different property channels, so they compose without fighting. Don't try to fake DoF with the camera transform or vice-versa.
|
|
287
|
+
- **Settle sharp before a hand-off** — if the next beat is a crossfade/push, refocus to `--dof:0` in the tail so the outgoing frame is crisp; handing off mid-defocus reads as "the render glitched."
|
|
288
|
+
|
|
289
|
+
## Critical Constraints
|
|
290
|
+
|
|
291
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
292
|
+
- **Registry key = `data-composition-id`**
|
|
293
|
+
- **No CSS `transition`** on `filter` / `opacity` — animate `--dof` and `opacity` on the timeline instead
|
|
294
|
+
- **No `repeat` / `yoyo` / infinite tweens** — the focus pull is a finite tween; any breathing is a bounded `onUpdate` reading the driver phase (or a finite tween), never `repeat:-1`
|
|
295
|
+
- **No `Math.random` / `Date.now`** — per-layer blur is derived from `data-depth` / element index so every seek is identical
|
|
296
|
+
- **Tween `filter` (blur) + `opacity` only here** — both paint-only and seek-safe. Use GSAP transform aliases (`x`, `y`, `scale`) for any concurrent camera move; never tween `width` / `height` / `left` / `top`
|
|
297
|
+
- **`will-change: filter`** on layers whose blur animates; keep the blurred footprint small
|
|
298
|
+
- **Per-layer blur radius ≤ ~24 px on large surfaces** — beyond that the cost (and visible banding) climbs; shrink/group the layer instead
|
|
299
|
+
|
|
300
|
+
## Combinations
|
|
301
|
+
|
|
302
|
+
- [multi-phase-camera.md](multi-phase-camera.md) — the push-in / push-through whose focus-falloff this rule supplies; run the DoF tween at the same position as the PUSH phase
|
|
303
|
+
- [coordinate-target-zoom.md](coordinate-target-zoom.md) — zoom onto the focal core while the off-center layers blur (the `constellation-hub` hook)
|
|
304
|
+
- [viewport-change.md](viewport-change.md) — pan across a tilted card plane with a rack-focus between near and far cards (the `cursor-ui-demo` focus-pull)
|
|
305
|
+
- [counting-dynamic-scale.md](counting-dynamic-scale.md) — the hero metric counts up sharp while the surrounding cards dim + blur (the `dataviz-countup` spotlight)
|
|
306
|
+
- [3d-page-scroll.md](3d-page-scroll.md) — the parallax card stack whose planes you rack focus between
|
|
307
|
+
- [sine-wave-loop.md](sine-wave-loop.md) — the focal layer idle-breathes after the rack settles (keep idle amplitude and focus-breath both tiny)
|
|
308
|
+
|
|
309
|
+
## Pairs with HF skills
|
|
310
|
+
|
|
311
|
+
- `/hyperframes-animation` — tweening a CSS custom property + multi-tween coordination
|
|
312
|
+
- `/hyperframes-core` — composition wiring
|
|
313
|
+
- `/hyperframes-cli` — `hyperframes lint`
|