takomi 2.1.41 → 2.1.42
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/README.md +7 -4
- package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -0
- package/assets/.agent/skills/embedded-captions/SKILL.md +286 -0
- package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
- package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
- package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/assets/.agent/skills/embedded-captions/dna/README.md +148 -0
- package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -0
- package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -0
- package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -0
- package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -0
- package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -0
- package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -0
- package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -0
- package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -0
- package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -0
- package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -0
- package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -0
- package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/assets/.agent/skills/embedded-captions/references/rail.md +68 -0
- package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -0
- package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -0
- package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -0
- package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -0
- package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
- package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
- package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -0
- package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -0
- package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -0
- package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -0
- package/assets/.agent/skills/embedded-captions/themes/README.md +244 -0
- package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -0
- package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -0
- package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -0
- package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -0
- package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -0
- package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -0
- package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -0
- package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -0
- package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -0
- package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -0
- package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -0
- package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -0
- package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -0
- package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -0
- package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -0
- package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -0
- package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -0
- package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -0
- package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -0
- package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -0
- package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -0
- package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -0
- package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -0
- package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -0
- package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -0
- package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/figma/SKILL.md +121 -0
- package/assets/.agent/skills/general-video/SKILL.md +143 -0
- package/assets/.agent/skills/hyperframes/SKILL.md +164 -0
- package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
- package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
- package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
- package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
- package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
- package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
- package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
- package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
- package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
- package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
- package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
- package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
- package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
- package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
- package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
- package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
- package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
- package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
- package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
- package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
- package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
- package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
- package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
- package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
- package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
- package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
- package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
- package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
- package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
- package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
- package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
- package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
- package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -0
- package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -0
- package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -0
- package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -0
- package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -0
- package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
- package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -0
- package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
- package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -0
- package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -0
- package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -0
- package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -0
- package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -0
- package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -0
- package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -0
- package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -0
- package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
- package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -0
- package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
- package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -0
- package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -0
- package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -0
- package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -0
- package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -0
- package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -0
- package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
- package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -0
- package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -0
- package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -0
- package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -0
- package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -0
- package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -0
- package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -0
- package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -0
- package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -0
- package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -0
- package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -0
- package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -0
- package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -0
- package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -0
- package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -0
- package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -0
- package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -0
- package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -0
- package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -0
- package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -0
- package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -0
- package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -0
- package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -0
- package/assets/.agent/skills/media-use/SKILL.md +124 -0
- package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -0
- package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -0
- package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -0
- package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -0
- package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -0
- package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -0
- package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -0
- package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -0
- package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -0
- package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -0
- package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -0
- package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -0
- package/assets/.agent/skills/motion-graphics/SKILL.md +172 -0
- package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -0
- package/assets/.agent/skills/motion-graphics/agents/director.md +53 -0
- package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -0
- package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -0
- package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -0
- package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -0
- package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -0
- package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -0
- package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -0
- package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/assets/.agent/skills/music-to-video/SKILL.md +197 -0
- package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -0
- package/assets/.agent/skills/music-to-video/references/montage.md +58 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -0
- package/assets/.agent/skills/music-to-video/references/planning.md +104 -0
- package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -0
- package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -0
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
- package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
- package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
- package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
- package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
- package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
- package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -0
- package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -0
- package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -0
- package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -0
- package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/pr-to-video/SKILL.md +240 -0
- package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -0
- package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -0
- package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -0
- package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -0
- package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -0
- package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -0
- package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -0
- package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -0
- package/assets/.agent/skills/product-launch-video/SKILL.md +208 -0
- package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -0
- package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -0
- package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -0
- package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
- package/assets/.agent/skills/slideshow/SKILL.md +550 -0
- package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -0
- package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -0
- package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -0
- package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/assets/.agent/skills/website-to-video/SKILL.md +145 -0
- package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
- package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -0
- package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -0
- package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -0
- package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -0
- package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -0
- package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -0
- package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -0
- package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -0
- package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -0
- package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -0
- package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
- package/package.json +1 -1
- package/src/skills-catalog.js +32 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: svg-icon-enrichment
|
|
3
|
+
description: Animate internal SVG elements (rotating hands, opening blades, pulsing dots, dash flows) to make icons feel alive without replacing them.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: svg, icon, animation, internal, micro-animation, pulse, rotation
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SVG Icon Enrichment
|
|
9
|
+
|
|
10
|
+
Treats an SVG icon as a composition of animated PARTS, not an opaque image. Each meaningful internal element (a clock hand, scissor blade, recording dot, data line) gets its own GSAP-driven micro-animation. Distinct from [svg-path-draw](svg-path-draw.md) (which animates the OUTLINE drawing) — enrichment animates INTERNAL PARTS, ideally after the outline has drawn.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
The SVG is authored with named `<line>`, `<circle>`, `<path>`, or `<g>` children. The GSAP timeline targets these by selector and applies one of 4 signature motion patterns:
|
|
15
|
+
|
|
16
|
+
1. **Rotation** — clock hand, gear, loading spinner (`transform: rotate(deg)`)
|
|
17
|
+
2. **Oscillation** — scissor blades, wing flap, toggle (`transform: rotate(±sin*amp)` on opposing groups)
|
|
18
|
+
3. **Pulse** — recording dot, heart, notification (`scale + opacity` via sin)
|
|
19
|
+
4. **Dash flow** — moving dashes along a stroke, like a data stream (`strokeDashoffset` linear)
|
|
20
|
+
|
|
21
|
+
All run inside the paused GSAP timeline so HF seeks deterministically.
|
|
22
|
+
|
|
23
|
+
## HTML
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<div
|
|
27
|
+
class="scene"
|
|
28
|
+
data-composition-id="enrichment-scene"
|
|
29
|
+
data-start="0"
|
|
30
|
+
data-duration="4"
|
|
31
|
+
data-track-index="0"
|
|
32
|
+
>
|
|
33
|
+
<div class="stack">
|
|
34
|
+
<div class="row">
|
|
35
|
+
<!-- Clock icon — minute hand rotates -->
|
|
36
|
+
<svg class="icon-svg" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg">
|
|
37
|
+
<circle cx="60" cy="60" r="50" fill="none" stroke="{accentColor}" stroke-width="6" />
|
|
38
|
+
<line
|
|
39
|
+
class="clock-hand"
|
|
40
|
+
id="hand-min"
|
|
41
|
+
x1="60"
|
|
42
|
+
y1="60"
|
|
43
|
+
x2="60"
|
|
44
|
+
y2="22"
|
|
45
|
+
stroke="{textColor}"
|
|
46
|
+
stroke-width="6"
|
|
47
|
+
stroke-linecap="round"
|
|
48
|
+
/>
|
|
49
|
+
<line
|
|
50
|
+
class="clock-hand"
|
|
51
|
+
id="hand-sec"
|
|
52
|
+
x1="60"
|
|
53
|
+
y1="60"
|
|
54
|
+
x2="60"
|
|
55
|
+
y2="30"
|
|
56
|
+
stroke="{recordColor}"
|
|
57
|
+
stroke-width="3"
|
|
58
|
+
stroke-linecap="round"
|
|
59
|
+
/>
|
|
60
|
+
<circle cx="60" cy="60" r="6" fill="{textColor}" />
|
|
61
|
+
</svg>
|
|
62
|
+
|
|
63
|
+
<!-- Recording dot — pulses -->
|
|
64
|
+
<svg class="icon-svg" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg">
|
|
65
|
+
<circle
|
|
66
|
+
id="rec-ring"
|
|
67
|
+
cx="60"
|
|
68
|
+
cy="60"
|
|
69
|
+
r="50"
|
|
70
|
+
fill="none"
|
|
71
|
+
stroke="{recordColor}"
|
|
72
|
+
stroke-width="4"
|
|
73
|
+
/>
|
|
74
|
+
<circle id="rec-dot" cx="60" cy="60" r="22" fill="{recordColor}" />
|
|
75
|
+
</svg>
|
|
76
|
+
|
|
77
|
+
<!-- Data stream — dashes flow along the line -->
|
|
78
|
+
<svg class="icon-svg" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg">
|
|
79
|
+
<rect
|
|
80
|
+
x="14"
|
|
81
|
+
y="48"
|
|
82
|
+
width="92"
|
|
83
|
+
height="24"
|
|
84
|
+
rx="12"
|
|
85
|
+
fill="none"
|
|
86
|
+
stroke="{accentColor}"
|
|
87
|
+
stroke-width="4"
|
|
88
|
+
/>
|
|
89
|
+
<line
|
|
90
|
+
id="data-flow"
|
|
91
|
+
x1="14"
|
|
92
|
+
y1="60"
|
|
93
|
+
x2="106"
|
|
94
|
+
y2="60"
|
|
95
|
+
stroke="{accentColor}"
|
|
96
|
+
stroke-width="6"
|
|
97
|
+
stroke-linecap="round"
|
|
98
|
+
stroke-dasharray="14 12"
|
|
99
|
+
/>
|
|
100
|
+
</svg>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="brand">{brandPhrase}</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## CSS
|
|
108
|
+
|
|
109
|
+
```css
|
|
110
|
+
.scene {
|
|
111
|
+
position: relative;
|
|
112
|
+
width: 100%;
|
|
113
|
+
height: 100%;
|
|
114
|
+
display: grid;
|
|
115
|
+
place-items: center;
|
|
116
|
+
background: {bgColor};
|
|
117
|
+
font-family: {font};
|
|
118
|
+
}
|
|
119
|
+
.stack {
|
|
120
|
+
display: flex;
|
|
121
|
+
flex-direction: column;
|
|
122
|
+
align-items: center;
|
|
123
|
+
gap: 80px;
|
|
124
|
+
}
|
|
125
|
+
.row {
|
|
126
|
+
display: flex;
|
|
127
|
+
gap: 120px;
|
|
128
|
+
}
|
|
129
|
+
.icon-svg {
|
|
130
|
+
width: 320px;
|
|
131
|
+
height: 320px;
|
|
132
|
+
filter: drop-shadow(0 12px 32px {shadowColor});
|
|
133
|
+
}
|
|
134
|
+
.clock-hand {
|
|
135
|
+
/* transform-origin in SVG must be in viewBox units, not pixels */
|
|
136
|
+
transform-origin: 60px 60px;
|
|
137
|
+
transform-box: fill-box;
|
|
138
|
+
}
|
|
139
|
+
.brand {
|
|
140
|
+
font-size: 64px;
|
|
141
|
+
font-weight: 900;
|
|
142
|
+
letter-spacing: 14px;
|
|
143
|
+
text-transform: uppercase;
|
|
144
|
+
color: {textColor};
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## GSAP Timeline
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
152
|
+
<script>
|
|
153
|
+
window.__timelines = window.__timelines || {};
|
|
154
|
+
const tl = gsap.timeline({ paused: true });
|
|
155
|
+
|
|
156
|
+
// Pattern 1 — Rotation (clock hands)
|
|
157
|
+
// Minute hand: MIN_REVOLUTIONS full rotations over TOTAL_DURATION
|
|
158
|
+
const minState = { deg: 0 };
|
|
159
|
+
tl.to(
|
|
160
|
+
minState,
|
|
161
|
+
{
|
|
162
|
+
deg: 360 * MIN_REVOLUTIONS,
|
|
163
|
+
duration: TOTAL_DURATION,
|
|
164
|
+
ease: "none",
|
|
165
|
+
onUpdate: () => {
|
|
166
|
+
document.getElementById("hand-min").style.transform = `rotate(${minState.deg}deg)`;
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
0,
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// Second hand: SEC_REVOLUTIONS full rotations over TOTAL_DURATION (faster)
|
|
173
|
+
const secState = { deg: 0 };
|
|
174
|
+
tl.to(
|
|
175
|
+
secState,
|
|
176
|
+
{
|
|
177
|
+
deg: 360 * SEC_REVOLUTIONS,
|
|
178
|
+
duration: TOTAL_DURATION,
|
|
179
|
+
ease: "none",
|
|
180
|
+
onUpdate: () => {
|
|
181
|
+
document.getElementById("hand-sec").style.transform = `rotate(${secState.deg}deg)`;
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
0,
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
// Pattern 2 — Pulse (recording dot, ring opacity inverse)
|
|
188
|
+
const pulseState = { p: 0 };
|
|
189
|
+
tl.to(
|
|
190
|
+
pulseState,
|
|
191
|
+
{
|
|
192
|
+
p: Math.PI * 2 * PULSE_CYCLES,
|
|
193
|
+
duration: TOTAL_DURATION,
|
|
194
|
+
ease: "none",
|
|
195
|
+
onUpdate: () => {
|
|
196
|
+
const dotScale = 1 + Math.sin(pulseState.p) * PULSE_DOT_AMP;
|
|
197
|
+
const ringScale = 1 + Math.sin(pulseState.p + Math.PI / 2) * PULSE_RING_AMP;
|
|
198
|
+
const ringOpacity =
|
|
199
|
+
PULSE_RING_OPACITY_BASE + Math.sin(pulseState.p) * PULSE_RING_OPACITY_AMP;
|
|
200
|
+
const dot = document.getElementById("rec-dot");
|
|
201
|
+
const ring = document.getElementById("rec-ring");
|
|
202
|
+
dot.style.transform = `scale(${dotScale})`;
|
|
203
|
+
dot.style.transformOrigin = "60px 60px";
|
|
204
|
+
ring.style.transform = `scale(${ringScale})`;
|
|
205
|
+
ring.style.transformOrigin = "60px 60px";
|
|
206
|
+
ring.style.opacity = String(ringOpacity);
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
0,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
// Pattern 3 — Dash flow (data stream)
|
|
213
|
+
const flowState = { offset: 0 };
|
|
214
|
+
tl.to(
|
|
215
|
+
flowState,
|
|
216
|
+
{
|
|
217
|
+
offset: DASH_FLOW_TOTAL_OFFSET, // negative for L→R flow, positive for R→L
|
|
218
|
+
duration: TOTAL_DURATION,
|
|
219
|
+
ease: "none",
|
|
220
|
+
onUpdate: () => {
|
|
221
|
+
document.getElementById("data-flow").style.strokeDashoffset = String(flowState.offset);
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
0,
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
// Brand fades in early
|
|
228
|
+
tl.from(".brand", { opacity: 0, y: 16, duration: 0.6, ease: "power3.out" }, BRAND_AT);
|
|
229
|
+
|
|
230
|
+
window.__timelines["enrichment-scene"] = tl;
|
|
231
|
+
</script>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## How to Choose Values
|
|
235
|
+
|
|
236
|
+
- **MIN_REVOLUTIONS** — minute-hand revolutions across TOTAL_DURATION
|
|
237
|
+
- Range: 0.5–2.0 (continuous; faster reads as time-lapse)
|
|
238
|
+
- Constraints: avoid integer revolutions if visible end frame matters (lands back at start)
|
|
239
|
+
|
|
240
|
+
- **SEC_REVOLUTIONS** — second-hand revolutions across TOTAL_DURATION
|
|
241
|
+
- Range: 4–10 (should be visibly faster than the minute hand)
|
|
242
|
+
- Constraints: SEC_REVOLUTIONS > MIN_REVOLUTIONS × 3 for the speed difference to read
|
|
243
|
+
|
|
244
|
+
- **PULSE_CYCLES** — number of pulse cycles across TOTAL_DURATION
|
|
245
|
+
- Range: 2–4 over a 3–5 s comp
|
|
246
|
+
- Effects: ≥ 5 reads as anxious flicker; ≤ 1 reads as forgotten
|
|
247
|
+
|
|
248
|
+
- **PULSE_DOT_AMP** — dot scale amplitude
|
|
249
|
+
- Range: 0.05–0.20
|
|
250
|
+
- Effects: 0.05 = breathing; 0.20 = throbbing
|
|
251
|
+
|
|
252
|
+
- **PULSE_RING_AMP** — ring scale amplitude (typically lower than DOT_AMP)
|
|
253
|
+
- Range: 0.04–0.12
|
|
254
|
+
- Constraints: must be < PULSE_DOT_AMP or ring overshadows dot
|
|
255
|
+
|
|
256
|
+
- **PULSE_RING_OPACITY_BASE / PULSE_RING_OPACITY_AMP** — ring opacity baseline + sine amplitude
|
|
257
|
+
- Range: BASE 0.4–0.6; AMP 0.3–0.5
|
|
258
|
+
- Constraints: BASE − AMP ≥ 0 and BASE + AMP ≤ 1
|
|
259
|
+
|
|
260
|
+
- **DASH_FLOW_TOTAL_OFFSET** — total stroke-dashoffset change across TOTAL_DURATION
|
|
261
|
+
- Range: −400 to −100 (negative for L→R) or +100 to +400 (R→L)
|
|
262
|
+
- Effects: |large| = fast flow; |small| = slow drift
|
|
263
|
+
- Constraints: must be an integer multiple of the dash period (dash + gap) or the loop end frame shows a phase jump
|
|
264
|
+
|
|
265
|
+
- **BRAND_AT** — when the brand phrase fades in
|
|
266
|
+
- Range: 0.3–1.0 s
|
|
267
|
+
- Effects: too early competes with icon entries; too late feels appended
|
|
268
|
+
|
|
269
|
+
- **Ease family choices**: rotation = `none` (linear motion is the point); pulse driver = `none` (sine handles the curve); reveal of brand = `power3.out`
|
|
270
|
+
|
|
271
|
+
## Signature Motion Patterns
|
|
272
|
+
|
|
273
|
+
| Pattern | Use For | Math | Tip |
|
|
274
|
+
| ----------- | ---------------------------------- | ------------------------------------------------ | ----------------------------------- |
|
|
275
|
+
| Rotation | Clock, gear, loader, dial | `transform: rotate(deg)`, linear via sec-counter | `transform-origin` in viewBox units |
|
|
276
|
+
| Oscillation | Scissors, wings, toggle | `rotate(±sin*amp)` on opposing groups | Opposite signs on the two parts |
|
|
277
|
+
| Pulse | Recording dot, heart, notification | `scale(1 + sin*amp)` + opacity | Ring lags dot by π/2 for ripple |
|
|
278
|
+
| Dash flow | Cutting line, data stream | `strokeDashoffset` linear via time | Negative for L→R, positive for R→L |
|
|
279
|
+
|
|
280
|
+
## Variations
|
|
281
|
+
|
|
282
|
+
### Stroke draw → enrichment chain
|
|
283
|
+
|
|
284
|
+
Draw the icon outline first (via [svg-path-draw](svg-path-draw.md)), THEN activate enrichment. The internal animation feels like "the icon woke up" after assembly.
|
|
285
|
+
|
|
286
|
+
```js
|
|
287
|
+
// Phase 1: outline draws (0 → OUTLINE_DUR)
|
|
288
|
+
tl.fromTo(
|
|
289
|
+
"#icon-outline",
|
|
290
|
+
{ strokeDashoffset: 360 },
|
|
291
|
+
{ strokeDashoffset: 0, duration: OUTLINE_DUR, ease: "power2.inOut" },
|
|
292
|
+
0,
|
|
293
|
+
);
|
|
294
|
+
// Phase 2: enrichment starts at OUTLINE_DUR
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Per-icon entry stagger
|
|
298
|
+
|
|
299
|
+
For a row of icons all animating, stagger their entries. Each icon's enrichment starts as it fades in, not synchronized — feels organic.
|
|
300
|
+
|
|
301
|
+
## Key Principles
|
|
302
|
+
|
|
303
|
+
- **❗ For rotation around an explicit point inside SVG, use the SVG `transform` attribute, NOT CSS transform** — `el.setAttribute('transform', `rotate(${deg} ${cx} ${cy})`)`. The CSS combination `transform: rotate(...)` + `transform-origin: 60px 60px` + `transform-box: fill-box` interprets the origin in the element's OWN bbox-local coordinates, NOT in viewBox coordinates. For a thin `<line>` (whose bbox is the line's narrow envelope), `60 60` in bbox-local refers to a point OUTSIDE the line, so the hand flies along an off-center arc instead of rotating in place. Same trap for small inner shapes (rec-dot circle whose bbox is the small circle, not the full viewBox).
|
|
304
|
+
- **For scaling around a center point inside SVG**, use `el.setAttribute('transform', `translate(${cx} ${cy}) scale(${s}) translate(-${cx} -${cy})`)`. Same reason — avoids the CSS bbox-local origin trap.
|
|
305
|
+
- **Run continuous animations inside the timeline** — never CSS `@keyframes` or `requestAnimationFrame`. Both desync from HF's frame-by-frame seek.
|
|
306
|
+
- **Amplitudes subtle** — icons are decorative, not headlines. Pulse scale within the ranges above; rotation speeds calibrated against composition length, not absolute time.
|
|
307
|
+
- **Multiple parts of the same icon at different phases** — clock minute vs second hand at different speeds, ring vs dot pulse offset by π/2. Pure-sync looks mechanical; phase-offset looks alive.
|
|
308
|
+
- **❗ Climax dwell ≥ 1 s** — if the enrichment is the headline beat, the composition must continue ≥ 1 s after the most dramatic moment.
|
|
309
|
+
|
|
310
|
+
## Critical Constraints
|
|
311
|
+
|
|
312
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
313
|
+
- **Registry key = `data-composition-id`**
|
|
314
|
+
- **No CSS `animation`** on SVG children — must be timeline-driven
|
|
315
|
+
- **`transform-origin` matters per child** — set explicitly per animated element
|
|
316
|
+
- **`stroke-linecap: round`** on flowing/dashed lines for clean dash edges
|
|
317
|
+
- **Target SVG children by id** — `document.getElementById` is fine; selector chains into `<svg>` work the same as HTML
|
|
318
|
+
|
|
319
|
+
## Combinations
|
|
320
|
+
|
|
321
|
+
- [svg-path-draw.md](svg-path-draw.md) — outline draws first, enrichment activates second
|
|
322
|
+
- [orbit-3d-entry.md](orbit-3d-entry.md) — orbiting items are enriched icons (clock orbits a brand label)
|
|
323
|
+
- [sine-wave-loop.md](sine-wave-loop.md) — entire icon floats while internal parts animate
|
|
324
|
+
|
|
325
|
+
## Pairs with HF skills
|
|
326
|
+
|
|
327
|
+
- `/hyperframes-animation` — onUpdate writes transform/opacity per SVG child
|
|
328
|
+
- `/hyperframes-core` — composition wiring
|
|
329
|
+
- `/hyperframes-cli` — `hyperframes lint`
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: svg-path-draw
|
|
3
|
+
description: Animate SVG paths drawing progressively using stroke-dasharray and stroke-dashoffset.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: svg, stroke, draw, path, reveal, icon, vector
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SVG Path Draw
|
|
9
|
+
|
|
10
|
+
Reveals an SVG shape by animating its stroke as if a pen were tracing it. The line appears to be drawn in real-time.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
The trick uses two SVG stroke properties together:
|
|
15
|
+
|
|
16
|
+
1. **`stroke-dasharray = <pathLength>`** — sets the dash pattern to a single dash equal to the path's total length, so the entire path is "one dash"
|
|
17
|
+
2. **`stroke-dashoffset`** — controls how much of the dash is shifted out of view. Start at `pathLength` (entire path is offset out → invisible), animate to `0` (no offset → fully drawn)
|
|
18
|
+
|
|
19
|
+
The path length is computed via the DOM API `path.getTotalLength()`.
|
|
20
|
+
|
|
21
|
+
## HTML
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<div
|
|
25
|
+
class="scene"
|
|
26
|
+
id="svg-draw-scene"
|
|
27
|
+
data-composition-id="svg-draw-scene"
|
|
28
|
+
data-start="0"
|
|
29
|
+
data-duration="3"
|
|
30
|
+
data-track-index="0"
|
|
31
|
+
>
|
|
32
|
+
<svg class="logo-mark" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
33
|
+
<!-- Multi-segment glyph; draw all segments sequentially -->
|
|
34
|
+
<path id="bar-left" d="M 60 40 L 60 160" />
|
|
35
|
+
<path id="bar-right" d="M 140 40 L 140 160" />
|
|
36
|
+
<path id="bar-mid" d="M 60 100 L 140 100" />
|
|
37
|
+
</svg>
|
|
38
|
+
<div class="brand-line">{Brand}</div>
|
|
39
|
+
</div>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## CSS
|
|
43
|
+
|
|
44
|
+
```css
|
|
45
|
+
.scene {
|
|
46
|
+
position: relative;
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: 100%;
|
|
49
|
+
display: grid;
|
|
50
|
+
place-items: center;
|
|
51
|
+
background: {bgColor};
|
|
52
|
+
gap: 32px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.logo-mark {
|
|
56
|
+
width: 320px;
|
|
57
|
+
height: 320px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.logo-mark path {
|
|
61
|
+
fill: none;
|
|
62
|
+
stroke: {accentColor};
|
|
63
|
+
stroke-width: 12;
|
|
64
|
+
stroke-linecap: round; /* soften endpoints */
|
|
65
|
+
stroke-linejoin: round;
|
|
66
|
+
/* Initial state: invisible. GSAP fills strokeDasharray + strokeDashoffset
|
|
67
|
+
based on each path's measured length. */
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.brand-line {
|
|
71
|
+
font-family: {font};
|
|
72
|
+
font-weight: 700;
|
|
73
|
+
font-size: 48px;
|
|
74
|
+
color: {textColor};
|
|
75
|
+
opacity: 0; /* fades in after stroke completes */
|
|
76
|
+
letter-spacing: 0.04em;
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## GSAP Timeline
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
84
|
+
<script>
|
|
85
|
+
window.__timelines = window.__timelines || {};
|
|
86
|
+
|
|
87
|
+
// Named constants — assignments live in the example, not here.
|
|
88
|
+
// See "How to Choose Values" below for ranges and selection criteria.
|
|
89
|
+
const SEGMENT_DRAW_DUR; // per-segment stroke duration
|
|
90
|
+
const FINAL_SEGMENT_DUR; // shorter draw on the last (shorter) segment
|
|
91
|
+
const SEG_1_START; // first segment start time
|
|
92
|
+
const SEG_2_START; // second segment start time (overlaps SEG_1 tail)
|
|
93
|
+
const SEG_3_START; // third segment start time (overlaps SEG_2 tail)
|
|
94
|
+
const BRAND_FADE_DUR; // wordmark fade-in duration
|
|
95
|
+
const BRAND_FADE_START; // wordmark fade-in start (after last stroke settles)
|
|
96
|
+
|
|
97
|
+
// Measure each path's total length and set up its dash pattern.
|
|
98
|
+
// getTotalLength() is a real DOM API — its return value is dynamic
|
|
99
|
+
// measured geometry, NOT a magic number.
|
|
100
|
+
const paths = document.querySelectorAll(".logo-mark path");
|
|
101
|
+
paths.forEach((p) => {
|
|
102
|
+
const len = p.getTotalLength();
|
|
103
|
+
p.style.strokeDasharray = `${len}`;
|
|
104
|
+
p.style.strokeDashoffset = `${len}`;
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const tl = gsap.timeline({ paused: true });
|
|
108
|
+
|
|
109
|
+
// Stagger draws across segments — each starts before the previous finishes
|
|
110
|
+
// so the eye reads continuous motion.
|
|
111
|
+
tl.to(
|
|
112
|
+
"#bar-left",
|
|
113
|
+
{
|
|
114
|
+
strokeDashoffset: 0,
|
|
115
|
+
duration: SEGMENT_DRAW_DUR,
|
|
116
|
+
ease: "power2.out",
|
|
117
|
+
},
|
|
118
|
+
SEG_1_START,
|
|
119
|
+
);
|
|
120
|
+
tl.to(
|
|
121
|
+
"#bar-right",
|
|
122
|
+
{
|
|
123
|
+
strokeDashoffset: 0,
|
|
124
|
+
duration: SEGMENT_DRAW_DUR,
|
|
125
|
+
ease: "power2.out",
|
|
126
|
+
},
|
|
127
|
+
SEG_2_START,
|
|
128
|
+
);
|
|
129
|
+
tl.to(
|
|
130
|
+
"#bar-mid",
|
|
131
|
+
{
|
|
132
|
+
strokeDashoffset: 0,
|
|
133
|
+
duration: FINAL_SEGMENT_DUR,
|
|
134
|
+
ease: "power2.out",
|
|
135
|
+
},
|
|
136
|
+
SEG_3_START,
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
// Brand line fades in after the strokes settle
|
|
140
|
+
tl.to(
|
|
141
|
+
".brand-line",
|
|
142
|
+
{
|
|
143
|
+
opacity: 1,
|
|
144
|
+
duration: BRAND_FADE_DUR,
|
|
145
|
+
ease: "power1.out",
|
|
146
|
+
},
|
|
147
|
+
BRAND_FADE_START,
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
window.__timelines["svg-draw-scene"] = tl;
|
|
151
|
+
</script>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## How to Choose Values
|
|
155
|
+
|
|
156
|
+
- **SEGMENT_DRAW_DUR** — per-segment stroke duration
|
|
157
|
+
- Range: 0.3-0.8s
|
|
158
|
+
- Effects: low end reads as a fast snap (good for short segments); high end reads as a deliberate pen trace (good for long curves)
|
|
159
|
+
- Constraints: must be short enough that the total chain (last segment finish) ends before BRAND_FADE_START; longer than ~1s feels sluggish for a logo reveal
|
|
160
|
+
- Reference: short outline segments use ~0.5s
|
|
161
|
+
|
|
162
|
+
- **FINAL_SEGMENT_DUR** — duration of the shortest / final segment
|
|
163
|
+
- Range: 0.25-0.6s
|
|
164
|
+
- Effects: should be proportional to segment length — a short connector drawn at SEGMENT_DRAW_DUR appears slower than its longer siblings
|
|
165
|
+
- Constraints: typically 60-80% of SEGMENT_DRAW_DUR when the segment is visibly shorter than the others
|
|
166
|
+
- Reference: a mid-bar that is roughly 2/3 the length of the verticals uses ~0.35s
|
|
167
|
+
|
|
168
|
+
- **SEG_1_START** — first segment start time
|
|
169
|
+
- Range: 0-0.4s
|
|
170
|
+
- Effects: 0 starts immediately on play; >0 gives a brief beat of empty stage before motion
|
|
171
|
+
- Constraints: should be ≥ 0
|
|
172
|
+
- Reference: a small lead-in of ~0.2s lets the viewer settle before motion
|
|
173
|
+
|
|
174
|
+
- **SEG_2_START** — second segment start time
|
|
175
|
+
- Range: SEG_1_START + (0.5 \* SEGMENT_DRAW_DUR) to SEG_1_START + SEGMENT_DRAW_DUR
|
|
176
|
+
- Effects: closer to SEG_1_START + 0.5\*SEGMENT_DRAW_DUR feels rapid/overlapping; closer to SEG_1_START + SEGMENT_DRAW_DUR feels sequential
|
|
177
|
+
- Constraints: stagger ~70-80% of SEGMENT_DRAW_DUR reads as continuous motion (not 3 isolated animations)
|
|
178
|
+
- Reference: SEG_1_START + ~0.25s (about half of SEGMENT_DRAW_DUR)
|
|
179
|
+
|
|
180
|
+
- **SEG_3_START** — third segment start time
|
|
181
|
+
- Range: SEG_2_START + (0.5 \* SEGMENT_DRAW_DUR) to SEG_2_START + SEGMENT_DRAW_DUR
|
|
182
|
+
- Effects: same as SEG_2_START — controls perceived rhythm
|
|
183
|
+
- Constraints: should preserve the same stagger ratio used between SEG_1 and SEG_2
|
|
184
|
+
- Reference: SEG_2_START + ~0.4s
|
|
185
|
+
|
|
186
|
+
- **BRAND_FADE_DUR** — wordmark fade-in duration
|
|
187
|
+
- Range: 0.3-0.8s
|
|
188
|
+
- Effects: low end snaps in (urgent); high end glides in (premium / branded)
|
|
189
|
+
- Constraints: must finish before the composition's `data-duration` ends
|
|
190
|
+
- Reference: a calm logo lockup uses ~0.5s
|
|
191
|
+
|
|
192
|
+
- **BRAND_FADE_START** — wordmark fade-in start time
|
|
193
|
+
- Range: max(SEG_3_START + FINAL_SEGMENT_DUR, …) to that value + 0.4s
|
|
194
|
+
- Effects: starting exactly at last stroke end feels tightly chained; adding a small beat gives the strokes a moment to "settle" before the wordmark joins
|
|
195
|
+
- Constraints: MUST be ≥ SEG_3_START + FINAL_SEGMENT_DUR (otherwise wordmark appears during the draw and competes with it)
|
|
196
|
+
- Reference: SEG_3_START + FINAL_SEGMENT_DUR + ~0.2s
|
|
197
|
+
|
|
198
|
+
Ease families used here are discrete choices, not tunable scalars:
|
|
199
|
+
|
|
200
|
+
- **stroke draws** use `power2.out` — gentle deceleration mimics a hand lifting at end of stroke. Do NOT use `back.out` or `elastic.out` (pens don't bounce).
|
|
201
|
+
- **brand fade** uses `power1.out` — soft tail on an opacity tween.
|
|
202
|
+
- For a constant-speed "real pen" tracing feel, swap to `none` (see Variations).
|
|
203
|
+
|
|
204
|
+
## Variations
|
|
205
|
+
|
|
206
|
+
### Rotation start point (start from top instead of 3 o'clock)
|
|
207
|
+
|
|
208
|
+
By default, `<circle>` and `<rect>` start their stroke at 3 o'clock. Rotate the element to start from top:
|
|
209
|
+
|
|
210
|
+
```html
|
|
211
|
+
<circle
|
|
212
|
+
cx="100"
|
|
213
|
+
cy="100"
|
|
214
|
+
r="60"
|
|
215
|
+
id="ring"
|
|
216
|
+
style="transform-origin: 100px 100px; transform: rotate(-90deg);"
|
|
217
|
+
/>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Linear (constant-speed) draw
|
|
221
|
+
|
|
222
|
+
Use `ease: 'none'` for steady-rate drawing (like an actual pen tracing):
|
|
223
|
+
|
|
224
|
+
```js
|
|
225
|
+
tl.to("#path", { strokeDashoffset: 0, duration: SEGMENT_DRAW_DUR, ease: "none" }, SEG_1_START);
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Draw then fill
|
|
229
|
+
|
|
230
|
+
For SVG shapes that have a fill color, animate fill opacity to come in AFTER the stroke completes:
|
|
231
|
+
|
|
232
|
+
```js
|
|
233
|
+
tl.to(
|
|
234
|
+
"#path",
|
|
235
|
+
{ strokeDashoffset: 0, duration: SEGMENT_DRAW_DUR, ease: "power2.out" },
|
|
236
|
+
SEG_1_START,
|
|
237
|
+
);
|
|
238
|
+
tl.to(
|
|
239
|
+
"#path",
|
|
240
|
+
{ fillOpacity: 1, duration: FILL_FADE_DUR, ease: "power1.out" },
|
|
241
|
+
SEG_1_START + SEGMENT_DRAW_DUR,
|
|
242
|
+
);
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Requires `fill-opacity: 0` initially and a real `fill` color in CSS.
|
|
246
|
+
|
|
247
|
+
## Key Principles
|
|
248
|
+
|
|
249
|
+
- **Set `strokeDasharray` to the path's `getTotalLength()` value**, not an arbitrary number — guessing means stroke will animate but not match the geometry
|
|
250
|
+
- **Start `strokeDashoffset` at the same length**, animate down to `0`
|
|
251
|
+
- **Measure inside the timeline setup, not at module top** — SVG may not be rendered when module code runs in some environments. In HF runtime this works at top because SVG is inline, but be safe
|
|
252
|
+
- **`stroke-linecap: round`** for softer endpoints (less abrupt finish)
|
|
253
|
+
- **For sequential multi-path draws, stagger by ~70-80% of the previous segment's duration** — eye reads it as continuous motion, not N separate animations
|
|
254
|
+
- **Don't pair with `back.out` or `elastic.out`** — bouncing strokes feel wrong (the pen wouldn't bounce)
|
|
255
|
+
|
|
256
|
+
## Critical Constraints
|
|
257
|
+
|
|
258
|
+
- **`fill: none` in CSS for outline-only draws** — otherwise the fill area appears immediately and ruins the reveal
|
|
259
|
+
- **Path length is measured in the browser**: requires SVG to be in the DOM. HF inline SVG is fine; loaded `<image>` SVGs may not be
|
|
260
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
261
|
+
- **Registry key = `data-composition-id`**
|
|
262
|
+
- **Works on**: `<path>`, `<circle>`, `<rect>`, `<line>`, `<polyline>`, `<polygon>`, `<ellipse>` (anything with a stroke)
|
|
263
|
+
- **For complex paths**, if `getTotalLength()` looks wrong, overestimate `strokeDasharray` slightly (e.g. `len * 1.05`) — too large is invisible during animation start (no visible gap), too small clips the end
|
|
264
|
+
|
|
265
|
+
## Combinations
|
|
266
|
+
|
|
267
|
+
- [counting-dynamic-scale.md](counting-dynamic-scale.md) — pair: stroke draws an icon while a number counts up beside it
|
|
268
|
+
- [hacker-flip-3d.md](hacker-flip-3d.md) — pair: SVG logo draws, then a hacker-flipped wordmark reveals under it
|
|
269
|
+
|
|
270
|
+
## Pairs with HF skills
|
|
271
|
+
|
|
272
|
+
- `/hyperframes-animation` — timeline + stroke property tween
|
|
273
|
+
- `/hyperframes-core` — composition wiring
|
|
274
|
+
- `/hyperframes-cli` — `hyperframes lint`
|