@mevdragon/vidfarm-devcli 0.13.0 → 0.15.0
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/.agents/skills/embedded-captions/CATALOG.md +93 -0
- package/.agents/skills/embedded-captions/SKILL.md +286 -0
- package/.agents/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
- package/.agents/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
- package/.agents/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/.agents/skills/embedded-captions/dna/README.md +148 -0
- package/.agents/skills/embedded-captions/dna/chrome.json +68 -0
- package/.agents/skills/embedded-captions/dna/cream.json +69 -0
- package/.agents/skills/embedded-captions/dna/documentary.json +62 -0
- package/.agents/skills/embedded-captions/dna/editorial.json +70 -0
- package/.agents/skills/embedded-captions/dna/glitch.json +82 -0
- package/.agents/skills/embedded-captions/dna/ink.json +65 -0
- package/.agents/skills/embedded-captions/dna/keynote.json +62 -0
- package/.agents/skills/embedded-captions/dna/loud.json +75 -0
- package/.agents/skills/embedded-captions/dna/neon.json +58 -0
- package/.agents/skills/embedded-captions/dna/velocity.json +89 -0
- package/.agents/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/.agents/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/.agents/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/.agents/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/.agents/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/.agents/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/.agents/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/.agents/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/.agents/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/.agents/skills/embedded-captions/references/composition-craft.md +522 -0
- package/.agents/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/.agents/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/.agents/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/.agents/skills/embedded-captions/references/failure-modes.md +145 -0
- package/.agents/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/.agents/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/.agents/skills/embedded-captions/references/rail.md +68 -0
- package/.agents/skills/embedded-captions/references/reference-bar.md +47 -0
- package/.agents/skills/embedded-captions/references/scene-types.md +94 -0
- package/.agents/skills/embedded-captions/references/test-set.md +66 -0
- package/.agents/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/.agents/skills/embedded-captions/references/typography-presets.md +63 -0
- package/.agents/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/.agents/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/.agents/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/.agents/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/.agents/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/.agents/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/.agents/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/.agents/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
- package/.agents/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/.agents/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/.agents/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
- package/.agents/skills/embedded-captions/scripts/make-composition.cjs +404 -0
- package/.agents/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
- package/.agents/skills/embedded-captions/scripts/matte.cjs +294 -0
- package/.agents/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/.agents/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/.agents/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/.agents/skills/embedded-captions/scripts/render-and-composite.sh +509 -0
- package/.agents/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/.agents/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/.agents/skills/embedded-captions/scripts/transcribe.cjs +349 -0
- package/.agents/skills/embedded-captions/themes/PORTING.md +49 -0
- package/.agents/skills/embedded-captions/themes/README.md +244 -0
- package/.agents/skills/embedded-captions/themes/anchor.json +27 -0
- package/.agents/skills/embedded-captions/themes/arcade.json +51 -0
- package/.agents/skills/embedded-captions/themes/aurora.json +41 -0
- package/.agents/skills/embedded-captions/themes/biolume.json +35 -0
- package/.agents/skills/embedded-captions/themes/brush.json +74 -0
- package/.agents/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/.agents/skills/embedded-captions/themes/dossier.json +56 -0
- package/.agents/skills/embedded-captions/themes/graffiti.json +62 -0
- package/.agents/skills/embedded-captions/themes/hologram.json +41 -0
- package/.agents/skills/embedded-captions/themes/inkwater.json +43 -0
- package/.agents/skills/embedded-captions/themes/laser.json +46 -0
- package/.agents/skills/embedded-captions/themes/lastpage.json +33 -0
- package/.agents/skills/embedded-captions/themes/neonsign.json +53 -0
- package/.agents/skills/embedded-captions/themes/nightcity.json +56 -0
- package/.agents/skills/embedded-captions/themes/ordnance.json +54 -0
- package/.agents/skills/embedded-captions/themes/papercut.json +37 -0
- package/.agents/skills/embedded-captions/themes/popup.json +46 -0
- package/.agents/skills/embedded-captions/themes/ransom.json +62 -0
- package/.agents/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/.agents/skills/embedded-captions/themes/spectrum.json +46 -0
- package/.agents/skills/embedded-captions/themes/stardust.json +29 -0
- package/.agents/skills/embedded-captions/themes/stomp.json +43 -0
- package/.agents/skills/embedded-captions/themes/terminal.json +49 -0
- package/.agents/skills/embedded-captions/themes/thunder.json +44 -0
- package/.agents/skills/embedded-captions/themes/transit.json +44 -0
- package/.agents/skills/embedded-captions/themes/vhs.json +47 -0
- package/.agents/skills/faceless-explainer/SKILL.md +209 -0
- package/.agents/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/.agents/skills/faceless-explainer/references/motion-language.md +156 -0
- package/.agents/skills/faceless-explainer/references/story-design.md +248 -0
- package/.agents/skills/faceless-explainer/references/visual-design.md +146 -0
- package/.agents/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/faceless-explainer/scripts/audio.mjs +260 -0
- package/.agents/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
- package/.agents/skills/faceless-explainer/scripts/captions.mjs +508 -0
- package/.agents/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/.agents/skills/faceless-explainer/scripts/transitions.mjs +320 -0
- package/.agents/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/flockposter/LICENSE +17 -0
- package/.agents/skills/flockposter/README.md +72 -0
- package/.agents/skills/flockposter/SKILL.md +562 -0
- package/.agents/skills/flockposter/examples/cli-instagram-reel.sh +21 -0
- package/.agents/skills/flockposter/examples/cli-multi-platform.json +69 -0
- package/.agents/skills/flockposter/examples/cli-tiktok-upload-only.sh +22 -0
- package/.agents/skills/flockposter/examples/cli-x-thread.sh +17 -0
- package/.agents/skills/flockposter/examples/cli-youtube-short.sh +21 -0
- package/.agents/skills/flockposter/examples/public-api-instagram-reel.json +28 -0
- package/.agents/skills/general-video/SKILL.md +143 -0
- package/.agents/skills/hyperframes/SKILL.md +160 -0
- package/.agents/skills/hyperframes-animation/SKILL.md +84 -0
- package/.agents/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/.agents/skills/hyperframes-animation/adapters/animejs.md +114 -0
- package/.agents/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/.agents/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/.agents/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/.agents/skills/hyperframes-animation/adapters/three.md +131 -0
- package/.agents/skills/hyperframes-animation/adapters/typegpu.md +178 -0
- package/.agents/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/.agents/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/.agents/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
- package/.agents/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
- package/.agents/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
- package/.agents/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
- package/.agents/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
- package/.agents/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
- package/.agents/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
- package/.agents/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/.agents/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/.agents/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
- package/.agents/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/.agents/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/.agents/skills/hyperframes-animation/blueprints-index.md +146 -0
- package/.agents/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/.agents/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/.agents/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/.agents/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/.agents/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/.agents/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/.agents/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/.agents/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/.agents/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/.agents/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/.agents/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/.agents/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/.agents/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/.agents/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
- package/.agents/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
- package/.agents/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
- package/.agents/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
- package/.agents/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
- package/.agents/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
- package/.agents/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
- package/.agents/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
- package/.agents/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
- package/.agents/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
- package/.agents/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
- package/.agents/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
- package/.agents/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
- package/.agents/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
- package/.agents/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
- package/.agents/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
- package/.agents/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
- package/.agents/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
- package/.agents/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
- package/.agents/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
- package/.agents/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
- package/.agents/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
- package/.agents/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
- package/.agents/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
- package/.agents/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
- package/.agents/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
- package/.agents/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
- package/.agents/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
- package/.agents/skills/hyperframes-animation/rules/viewport-change.md +349 -0
- package/.agents/skills/hyperframes-animation/rules-index.md +86 -0
- package/.agents/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-animation/techniques.md +507 -0
- package/.agents/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
- package/.agents/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/.agents/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/.agents/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/.agents/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/.agents/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/.agents/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/.agents/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/.agents/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/.agents/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/.agents/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/.agents/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/.agents/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/.agents/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/.agents/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/.agents/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/.agents/skills/hyperframes-cli/SKILL.md +113 -0
- package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
- package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +55 -0
- package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
- package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
- package/.agents/skills/hyperframes-cli/references/preview-render.md +149 -0
- package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
- package/.agents/skills/hyperframes-core/SKILL.md +78 -0
- package/.agents/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/.agents/skills/hyperframes-core/references/data-attributes.md +70 -0
- package/.agents/skills/hyperframes-core/references/determinism-rules.md +68 -0
- package/.agents/skills/hyperframes-core/references/full-screen-motion.md +62 -0
- package/.agents/skills/hyperframes-core/references/minimal-composition.md +66 -0
- package/.agents/skills/hyperframes-core/references/script-format.md +49 -0
- package/.agents/skills/hyperframes-core/references/storyboard-format.md +95 -0
- package/.agents/skills/hyperframes-core/references/sub-compositions.md +237 -0
- package/.agents/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
- package/.agents/skills/hyperframes-core/references/tailwind.md +125 -0
- package/.agents/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
- package/.agents/skills/hyperframes-core/references/variables-and-media.md +90 -0
- package/.agents/skills/hyperframes-creative/SKILL.md +70 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/.agents/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/.agents/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/.agents/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/.agents/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/.agents/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/.agents/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/.agents/skills/hyperframes-creative/references/house-style.md +73 -0
- package/.agents/skills/hyperframes-creative/references/motion-principles.md +150 -0
- package/.agents/skills/hyperframes-creative/references/narration.md +92 -0
- package/.agents/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/.agents/skills/hyperframes-creative/references/typography.md +218 -0
- package/.agents/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/.agents/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/.agents/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
- package/.agents/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/.agents/skills/hyperframes-keyframes/SKILL.md +237 -0
- package/.agents/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/.agents/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
- package/.agents/skills/motion-graphics/SKILL.md +172 -0
- package/.agents/skills/motion-graphics/agents/builder.md +40 -0
- package/.agents/skills/motion-graphics/agents/director.md +53 -0
- package/.agents/skills/motion-graphics/agents/finalize.md +17 -0
- package/.agents/skills/motion-graphics/catalog-map.md +40 -0
- package/.agents/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/.agents/skills/motion-graphics/categories/charts/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/.agents/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/.agents/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/.agents/skills/motion-graphics/categories/maps/module.md +61 -0
- package/.agents/skills/motion-graphics/categories/news/module.md +56 -0
- package/.agents/skills/motion-graphics/categories/stat/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/webpage/module.md +21 -0
- package/.agents/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/.agents/skills/motion-graphics/grounding/locate.mjs +227 -0
- package/.agents/skills/motion-graphics/phases/source/guide.md +21 -0
- package/.agents/skills/motion-graphics/references/builder-contract.md +38 -0
- package/.agents/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/.agents/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/.agents/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/.agents/skills/product-launch-video/SKILL.md +208 -0
- package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
- package/.agents/skills/product-launch-video/references/story-design.md +373 -0
- package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
- package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/product-launch-video/scripts/audio.mjs +260 -0
- package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
- package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
- package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
- package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/.agents/skills/product-launch-video/scripts/transitions.mjs +327 -0
- package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/slideshow/SKILL.md +550 -0
- package/.agents/skills/slideshow/references/standalone-harness.md +1020 -0
- package/.agents/skills/talking-head-recut/NOTICE.md +39 -0
- package/.agents/skills/talking-head-recut/SKILL.md +1195 -0
- package/.agents/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/.agents/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/.agents/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/.agents/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/.agents/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/.agents/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/.agents/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/.agents/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/.agents/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/.agents/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/.agents/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/.agents/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/.agents/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/.agents/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/.agents/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/.agents/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/.agents/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/.agents/skills/vidfarm-media/SKILL.md +85 -0
- package/.agents/skills/vidfarm-media/references/tts.md +54 -0
- package/.agents/skills/vidfarm-media/scripts/audio.mjs +628 -0
- package/.agents/skills/vidfarm-media/scripts/wait-bgm.mjs +31 -0
- package/.agents/skills/website-to-video/SKILL.md +145 -0
- package/.agents/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
- package/.agents/skills/website-to-video/assets/sfx/manifest.json +97 -0
- package/.agents/skills/website-to-video/references/beat-builder-guide.md +263 -0
- package/.agents/skills/website-to-video/references/capabilities.md +713 -0
- package/.agents/skills/website-to-video/references/step-0-capture.md +55 -0
- package/.agents/skills/website-to-video/references/step-1-design.md +333 -0
- package/.agents/skills/website-to-video/references/step-2-brief.md +178 -0
- package/.agents/skills/website-to-video/references/step-3-storyboard.md +572 -0
- package/.agents/skills/website-to-video/references/step-4-vo.md +225 -0
- package/.agents/skills/website-to-video/references/step-5-build.md +483 -0
- package/.agents/skills/website-to-video/references/step-6-validate.md +341 -0
- package/.agents/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
- package/SKILL.director.md +60 -4
- package/SKILL.platform.md +7 -2
- package/demo/dist/app.css +1 -1
- package/demo/dist/app.js +485 -86
- package/dist/src/account-pages-legacy.js +9 -14
- package/dist/src/app.js +659 -159
- package/dist/src/cli.js +618 -17
- package/dist/src/composition-runtime.js +286 -6
- package/dist/src/devcli/composition-edit.js +176 -8
- package/dist/src/devcli/doctor.js +192 -0
- package/dist/src/devcli/hyperframes-cli.js +118 -0
- package/dist/src/devcli/skills.js +476 -0
- package/dist/src/devcli/stills.js +249 -0
- package/dist/src/devcli/transitions.js +205 -0
- package/dist/src/editor-chat.js +260 -4
- package/dist/src/frontend/template-editor-chat.js +6 -5
- package/dist/src/homepage.js +2 -48
- package/dist/src/hyperframes/composition.js +188 -7
- package/dist/src/services/composition-lint.js +199 -0
- package/dist/src/services/hyperframes.js +127 -28
- package/dist/src/services/serverless-records.js +7 -0
- package/dist/src/template-editor-shell.js +87 -48
- package/package.json +2 -1
- package/public/assets/page-runtime-client-app.js +31 -31
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# GSAP Effects for HyperFrames
|
|
2
|
+
|
|
3
|
+
Drop-in animation patterns. Each effect is self-contained (HTML + CSS + JS) and follows the HyperFrames seek-driven contract — deterministic, no randomness, timeline registered on `window.__timelines`.
|
|
4
|
+
|
|
5
|
+
## Index
|
|
6
|
+
|
|
7
|
+
- [Typewriter](#typewriter) — character-by-character text reveal with optional cursor / backspace / word rotation
|
|
8
|
+
- [Audio Visualizer](#audio-visualizer) — pre-extract audio data, drive Canvas/DOM rendering from the timeline
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Typewriter
|
|
13
|
+
|
|
14
|
+
Reveal text character by character using GSAP's TextPlugin.
|
|
15
|
+
|
|
16
|
+
### Required Plugin
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
20
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/TextPlugin.min.js"></script>
|
|
21
|
+
<script>
|
|
22
|
+
gsap.registerPlugin(TextPlugin);
|
|
23
|
+
</script>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Basic Typewriter
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const text = "Hello, world!";
|
|
30
|
+
const cps = 10; // chars per second: 3-5 dramatic, 8-12 conversational, 15-20 energetic
|
|
31
|
+
tl.to(
|
|
32
|
+
"#typed-text",
|
|
33
|
+
{ text: { value: text }, duration: text.length / cps, ease: "none" },
|
|
34
|
+
startTime,
|
|
35
|
+
);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### With Blinking Cursor
|
|
39
|
+
|
|
40
|
+
Three rules:
|
|
41
|
+
|
|
42
|
+
1. **One cursor visible at a time** — hide previous before showing next.
|
|
43
|
+
2. **Cursor must blink when idle** — after typing, during pauses.
|
|
44
|
+
3. **No gap between text and cursor** — elements must be flush in HTML.
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<span id="typed-text"></span><span id="cursor" class="cursor-blink">|</span>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
@keyframes blink {
|
|
52
|
+
0%,
|
|
53
|
+
100% {
|
|
54
|
+
opacity: 1;
|
|
55
|
+
}
|
|
56
|
+
50% {
|
|
57
|
+
opacity: 0;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
.cursor-blink {
|
|
61
|
+
animation: blink 0.8s step-end infinite;
|
|
62
|
+
}
|
|
63
|
+
.cursor-solid {
|
|
64
|
+
animation: none;
|
|
65
|
+
opacity: 1;
|
|
66
|
+
}
|
|
67
|
+
.cursor-hide {
|
|
68
|
+
animation: none;
|
|
69
|
+
opacity: 0;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Pattern: blink → solid (typing starts) → type → solid → blink (typing done).
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], startTime);
|
|
77
|
+
tl.to("#typed-text", { text: { value: text }, duration: dur, ease: "none" }, startTime);
|
|
78
|
+
tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], startTime + dur);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Backspacing
|
|
82
|
+
|
|
83
|
+
TextPlugin removes from front — wrong for backspace. Use manual substring removal:
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
function backspace(tl, selector, word, startTime, cps) {
|
|
87
|
+
const el = document.querySelector(selector);
|
|
88
|
+
const interval = 1 / cps;
|
|
89
|
+
for (let i = word.length - 1; i >= 0; i--) {
|
|
90
|
+
tl.call(
|
|
91
|
+
() => {
|
|
92
|
+
el.textContent = word.slice(0, i);
|
|
93
|
+
},
|
|
94
|
+
[],
|
|
95
|
+
startTime + (word.length - i) * interval,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return word.length * interval;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Spacing With Static Text
|
|
103
|
+
|
|
104
|
+
When a typewriter word sits next to static text, use `margin-left` on a wrapper span. Don't use flex `gap` (it spaces the cursor from the text) and don't put a trailing space in the static text (it collapses when the dynamic span is empty).
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<div style="display:flex; align-items:baseline;">
|
|
108
|
+
<span style="font-size:40px; color:#555;">Ship something</span>
|
|
109
|
+
<span style="margin-left:14px;"><span id="word"></span><span id="cursor">|</span></span>
|
|
110
|
+
</div>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Word Rotation
|
|
114
|
+
|
|
115
|
+
Type → hold → backspace → next word. Cursor blinks during every idle moment (holds, after backspace).
|
|
116
|
+
|
|
117
|
+
```js
|
|
118
|
+
let offset = 0;
|
|
119
|
+
words.forEach((word, i) => {
|
|
120
|
+
const typeDur = word.length / 10;
|
|
121
|
+
tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], offset);
|
|
122
|
+
tl.to("#typed-text", { text: { value: word }, duration: typeDur, ease: "none" }, offset);
|
|
123
|
+
tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], offset + typeDur);
|
|
124
|
+
offset += typeDur + 1.5; // hold
|
|
125
|
+
|
|
126
|
+
if (i < words.length - 1) {
|
|
127
|
+
tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], offset);
|
|
128
|
+
const clearDur = backspace(tl, "#typed-text", word, offset, 20);
|
|
129
|
+
tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], offset + clearDur);
|
|
130
|
+
offset += clearDur + 0.3;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Appending Words
|
|
136
|
+
|
|
137
|
+
Build a sentence word-by-word into the same element:
|
|
138
|
+
|
|
139
|
+
```js
|
|
140
|
+
let accumulated = "";
|
|
141
|
+
let offset = 0;
|
|
142
|
+
words.forEach((word) => {
|
|
143
|
+
const target = accumulated + (accumulated ? " " : "") + word;
|
|
144
|
+
const newChars = target.length - accumulated.length;
|
|
145
|
+
tl.to("#typed-text", { text: { value: target }, duration: newChars / 10, ease: "none" }, offset);
|
|
146
|
+
accumulated = target;
|
|
147
|
+
offset += newChars / 10 + 0.3;
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Multi-Line Cursor Handoff
|
|
152
|
+
|
|
153
|
+
Handing off between typewriter lines: hide previous → blink new → pause → solid when typing. Never go `hidden → solid` (skips the idle blink).
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
tl.call(
|
|
157
|
+
() => {
|
|
158
|
+
prevCursor.classList.replace("cursor-blink", "cursor-hide");
|
|
159
|
+
nextCursor.classList.replace("cursor-hide", "cursor-blink");
|
|
160
|
+
},
|
|
161
|
+
[],
|
|
162
|
+
handoffTime,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
const typeStart = handoffTime + 0.5; // brief blink pause
|
|
166
|
+
tl.call(() => nextCursor.classList.replace("cursor-blink", "cursor-solid"), [], typeStart);
|
|
167
|
+
tl.to("#next-text", { text: { value: text }, duration: dur, ease: "none" }, typeStart);
|
|
168
|
+
tl.call(() => nextCursor.classList.replace("cursor-solid", "cursor-blink"), [], typeStart + dur);
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Timing Guide
|
|
172
|
+
|
|
173
|
+
| CPS | Feel | Good for |
|
|
174
|
+
| ----- | ---------------- | -------------------------- |
|
|
175
|
+
| 3-5 | Slow, deliberate | Dramatic reveals, suspense |
|
|
176
|
+
| 8-12 | Natural typing | Dialogue, narration |
|
|
177
|
+
| 15-20 | Fast, energetic | Tech demos, code |
|
|
178
|
+
| 30+ | Near-instant | Filling long blocks |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Audio Visualizer
|
|
183
|
+
|
|
184
|
+
Pre-extract audio data, drive Canvas / DOM rendering from a single `tl.call(...)` per frame. **Do not** use the Web Audio API at render time — there's no playback during seek.
|
|
185
|
+
|
|
186
|
+
### Extract Audio Data
|
|
187
|
+
|
|
188
|
+
Use the bundled extractor (requires `ffmpeg` and Python `numpy`):
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
python skills/hyperframes-creative/scripts/extract-audio-data.py audio.mp3 -o audio-data.json
|
|
192
|
+
python skills/hyperframes-creative/scripts/extract-audio-data.py video.mp4 --fps 30 --bands 16 -o audio-data.json
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Data Format
|
|
196
|
+
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"fps": 30,
|
|
200
|
+
"totalFrames": 5415,
|
|
201
|
+
"frames": [{ "time": 0.0, "rms": 0.42, "bands": [0.8, 0.6, 0.3] }]
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
- **`rms`** (0-1) — overall loudness, normalized across the track.
|
|
206
|
+
- **`bands[]`** (0-1) — frequency magnitudes. Index 0 = bass, higher index = treble. Each band normalized independently.
|
|
207
|
+
|
|
208
|
+
### Loading the Data (Synchronously)
|
|
209
|
+
|
|
210
|
+
```js
|
|
211
|
+
// Option A — inline (small files, under ~500 KB)
|
|
212
|
+
var AUDIO_DATA = {
|
|
213
|
+
/* paste audio-data.json contents */
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// Option B — sync XHR (large files; must be synchronous for deterministic timeline construction)
|
|
217
|
+
var xhr = new XMLHttpRequest();
|
|
218
|
+
xhr.open("GET", "audio-data.json", false);
|
|
219
|
+
xhr.send();
|
|
220
|
+
var AUDIO_DATA = JSON.parse(xhr.responseText);
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Do NOT use async `fetch()`.** HyperFrames reads `window.__timelines` synchronously after page load — building the timeline inside `.then()` means the timeline isn't ready when capture starts.
|
|
224
|
+
|
|
225
|
+
### Driving the Timeline
|
|
226
|
+
|
|
227
|
+
**Canvas 2D** — most common (bars, waveforms, circles, gradients):
|
|
228
|
+
|
|
229
|
+
```js
|
|
230
|
+
const canvas = document.getElementById("viz");
|
|
231
|
+
const ctx = canvas.getContext("2d");
|
|
232
|
+
|
|
233
|
+
for (let f = 0; f < AUDIO_DATA.totalFrames; f++) {
|
|
234
|
+
tl.call(
|
|
235
|
+
() => {
|
|
236
|
+
const frame = AUDIO_DATA.frames[f];
|
|
237
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
238
|
+
// draw using frame.rms and frame.bands
|
|
239
|
+
},
|
|
240
|
+
[],
|
|
241
|
+
f / AUDIO_DATA.fps,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**WebGL / Three.js** — HyperFrames patches `THREE.Clock` for deterministic time. Update uniforms from audio data each frame.
|
|
247
|
+
|
|
248
|
+
**DOM elements** — fine for fewer than ~20 elements, slower than Canvas for many.
|
|
249
|
+
|
|
250
|
+
### Smoothing
|
|
251
|
+
|
|
252
|
+
```js
|
|
253
|
+
let prev = null;
|
|
254
|
+
const smoothing = 0.25; // 0.1-0.2 snappy, 0.3-0.5 flowing
|
|
255
|
+
function smooth(f) {
|
|
256
|
+
const raw = AUDIO_DATA.frames[f];
|
|
257
|
+
if (!prev) {
|
|
258
|
+
prev = { rms: raw.rms, bands: [...raw.bands] };
|
|
259
|
+
return prev;
|
|
260
|
+
}
|
|
261
|
+
prev = {
|
|
262
|
+
rms: prev.rms * smoothing + raw.rms * (1 - smoothing),
|
|
263
|
+
bands: raw.bands.map((b, i) => prev.bands[i] * smoothing + b * (1 - smoothing)),
|
|
264
|
+
};
|
|
265
|
+
return prev;
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Spatial Mapping
|
|
270
|
+
|
|
271
|
+
- **Horizontal**: bass left, treble right (iterate bands left-to-right)
|
|
272
|
+
- **Vertical**: bass bottom, treble top
|
|
273
|
+
- **Circular**: bass at 12 o'clock, wrap clockwise; mirror for a full circle
|
|
274
|
+
|
|
275
|
+
### Motion Principles
|
|
276
|
+
|
|
277
|
+
- **Bass drives big moves** — scale, glow, position shifts.
|
|
278
|
+
- **Treble drives detail** — shimmer, flicker, edge effects.
|
|
279
|
+
- **RMS drives globals** — background brightness, overall energy.
|
|
280
|
+
- Pick 2-3 properties to animate. More looks noisy.
|
|
281
|
+
- Keep minimums above zero — quiet sections still need life.
|
|
282
|
+
|
|
283
|
+
### Band Count
|
|
284
|
+
|
|
285
|
+
| Bands | Detail | Good for |
|
|
286
|
+
| ----- | --------- | -------------------------- |
|
|
287
|
+
| 4 | Low | Background glow, pulsing |
|
|
288
|
+
| 8 | Medium | Bar charts, basic spectrum |
|
|
289
|
+
| 16 | High | Detailed EQ (default) |
|
|
290
|
+
| 32 | Very high | Dense radial layouts |
|
|
291
|
+
|
|
292
|
+
### Layering
|
|
293
|
+
|
|
294
|
+
Layer multiple canvases with CSS `z-index` for depth — a background layer driven by bass/rms and a foreground layer driven by individual bands creates depth without per-element complexity.
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<canvas id="bg-layer" style="position:absolute;top:0;left:0;z-index:1;"></canvas>
|
|
298
|
+
<canvas id="main-layer" style="position:absolute;top:0;left:0;z-index:2;"></canvas>
|
|
299
|
+
```
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hacker-flip-3d
|
|
3
|
+
description: Character-level 3D rotation with random glyph substitution for a decryption reveal effect.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: text, 3d, reveal, decode, hacker, randomization, perspective
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Hacker Flip 3D Reveal
|
|
9
|
+
|
|
10
|
+
Characters flip down from 90° in 3D while cycling through random glyphs, then settle on the target character. Creates a "decryption" or airport flap-display reveal.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
Each character gets its own per-char tween from `rotateX: 90deg` (hidden) to `rotateX: 0deg` (revealed), staggered across the word. During the flip:
|
|
15
|
+
|
|
16
|
+
1. **Phase A (0 → ~`REVEAL_THRESHOLD` progress)**: character displays a randomly-substituted glyph that flickers (changes every `FLICKER_RATE` frames)
|
|
17
|
+
2. **Phase B (`REVEAL_THRESHOLD` → 1.0 progress)**: character displays the REAL target character, settling into its final upright position
|
|
18
|
+
|
|
19
|
+
The `REVEAL_THRESHOLD` separates "scrambled" from "revealed" — by the time the flip is mostly done, viewer sees the correct letter clicking into place.
|
|
20
|
+
|
|
21
|
+
## HTML
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<div
|
|
25
|
+
class="scene"
|
|
26
|
+
id="hacker-flip-scene"
|
|
27
|
+
data-composition-id="hacker-flip-scene"
|
|
28
|
+
data-start="0"
|
|
29
|
+
data-duration="3"
|
|
30
|
+
data-track-index="0"
|
|
31
|
+
>
|
|
32
|
+
<div class="hacker-text-wrap" id="hacker-text" data-target="{phrase}">
|
|
33
|
+
<!-- Per-char spans get injected by setup script below.
|
|
34
|
+
Ghost placeholder (data-ghost) is rendered identically to reserve width. -->
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`{phrase}` is the target word the flip resolves to (typically a brand or short label).
|
|
40
|
+
|
|
41
|
+
## CSS
|
|
42
|
+
|
|
43
|
+
```css
|
|
44
|
+
.scene {
|
|
45
|
+
position: relative;
|
|
46
|
+
width: 100%;
|
|
47
|
+
height: 100%;
|
|
48
|
+
display: grid;
|
|
49
|
+
place-items: center;
|
|
50
|
+
background: {bgColor};
|
|
51
|
+
perspective: 1500px; /* REQUIRED — without this rotateX renders flat */
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.hacker-text-wrap {
|
|
55
|
+
font-family: {monoFont}; /* monospace recommended so flicker glyphs hold width */
|
|
56
|
+
font-weight: 900;
|
|
57
|
+
font-size: HACKER_FONT_SIZE;
|
|
58
|
+
color: {textColor};
|
|
59
|
+
letter-spacing: 4px;
|
|
60
|
+
display: flex;
|
|
61
|
+
/* Ghost / live chars are absolutely stacked; container reserves layout width */
|
|
62
|
+
position: relative;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.hacker-char {
|
|
66
|
+
display: inline-block;
|
|
67
|
+
/* Hinge at the bottom edge — flap-display look */
|
|
68
|
+
transform-origin: bottom;
|
|
69
|
+
transform-style: preserve-3d;
|
|
70
|
+
/* Will-change improves render perf */
|
|
71
|
+
will-change: transform, opacity;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Ghost placeholder is hidden but reserves width for variable-glyph fonts.
|
|
75
|
+
Without this, narrow target glyphs collapse width when displayed and
|
|
76
|
+
characters shift horizontally during flicker. */
|
|
77
|
+
.hacker-ghost {
|
|
78
|
+
opacity: 0;
|
|
79
|
+
pointer-events: none;
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## GSAP Timeline + Random Glyph Logic
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
87
|
+
<script>
|
|
88
|
+
window.__timelines = window.__timelines || {};
|
|
89
|
+
|
|
90
|
+
const wrap = document.getElementById("hacker-text");
|
|
91
|
+
const targetWord = wrap.dataset.target;
|
|
92
|
+
const GLYPHS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*";
|
|
93
|
+
|
|
94
|
+
// Build live chars + ghost placeholders (ghost keeps layout width stable)
|
|
95
|
+
wrap.innerHTML = "";
|
|
96
|
+
const ghostRow = document.createElement("div");
|
|
97
|
+
ghostRow.className = "hacker-ghost";
|
|
98
|
+
ghostRow.style.display = "inline-flex";
|
|
99
|
+
ghostRow.style.position = "absolute";
|
|
100
|
+
ghostRow.style.left = "0";
|
|
101
|
+
ghostRow.style.top = "0";
|
|
102
|
+
ghostRow.textContent = targetWord;
|
|
103
|
+
wrap.appendChild(ghostRow);
|
|
104
|
+
|
|
105
|
+
const charEls = [];
|
|
106
|
+
const liveRow = document.createElement("div");
|
|
107
|
+
liveRow.style.display = "inline-flex";
|
|
108
|
+
liveRow.style.position = "relative";
|
|
109
|
+
for (const ch of targetWord) {
|
|
110
|
+
const span = document.createElement("span");
|
|
111
|
+
span.className = "hacker-char";
|
|
112
|
+
span.textContent = ch === " " ? " " : ch;
|
|
113
|
+
span.dataset.target = ch;
|
|
114
|
+
liveRow.appendChild(span);
|
|
115
|
+
charEls.push(span);
|
|
116
|
+
}
|
|
117
|
+
wrap.appendChild(liveRow);
|
|
118
|
+
|
|
119
|
+
// Deterministic "random" — seeded by char index + frame group so the same
|
|
120
|
+
// frame always yields the same glyph (HF seek determinism).
|
|
121
|
+
function pseudoGlyph(seed) {
|
|
122
|
+
const h = ((seed * 9301 + 49297) % 233280) / 233280;
|
|
123
|
+
return GLYPHS[Math.floor(h * GLYPHS.length)];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const tl = gsap.timeline({ paused: true });
|
|
127
|
+
|
|
128
|
+
// Per-char flip — stagger across the word
|
|
129
|
+
charEls.forEach((el, i) => {
|
|
130
|
+
const state = { p: 0 };
|
|
131
|
+
tl.to(
|
|
132
|
+
state,
|
|
133
|
+
{
|
|
134
|
+
p: 1,
|
|
135
|
+
duration: FLIP_DURATION,
|
|
136
|
+
ease: "power3.out",
|
|
137
|
+
onUpdate: () => {
|
|
138
|
+
// Phase A: random glyph flickering. Phase B: real character.
|
|
139
|
+
const progress = state.p;
|
|
140
|
+
if (progress < REVEAL_THRESHOLD) {
|
|
141
|
+
// Update glyph every FLICKER_RATE worth of progress
|
|
142
|
+
const flickerSeed = i * 1000 + Math.floor(progress * 100);
|
|
143
|
+
el.textContent = pseudoGlyph(flickerSeed);
|
|
144
|
+
} else {
|
|
145
|
+
el.textContent = el.dataset.target === " " ? " " : el.dataset.target;
|
|
146
|
+
}
|
|
147
|
+
// Flip rotateX from 90 (down) to 0 (upright)
|
|
148
|
+
const rotateX = 90 - progress * 90;
|
|
149
|
+
const opacity = Math.min(1, progress * 2);
|
|
150
|
+
el.style.transform = `rotateX(${rotateX}deg)`;
|
|
151
|
+
el.style.opacity = opacity;
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
i * CHAR_STAGGER,
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
window.__timelines["hacker-flip-scene"] = tl;
|
|
159
|
+
</script>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## How to Choose Values
|
|
163
|
+
|
|
164
|
+
- **HACKER_FONT_SIZE** — font-size of the flip text in px.
|
|
165
|
+
- Range: 6-10% of viewport min-dimension; the flip text is the focal beat, scale accordingly
|
|
166
|
+
- Constraints: ghost row must use the identical size so layout width stays stable mid-flicker
|
|
167
|
+
- Reference: ../../examples/proof-logo-chain.html uses `163px` at 1920×1080
|
|
168
|
+
- **FLIP_DURATION** — per-character flip tween duration.
|
|
169
|
+
- Range: 0.4-1.0s; under 0.4s the random-glyph phase has no time to flicker, over 1.0s drags
|
|
170
|
+
- Effects: shorter feels snappy and modern; longer feels mechanical / typewriter
|
|
171
|
+
- Reference: ../../examples/proof-logo-chain.html uses `0.55s`
|
|
172
|
+
- **CHAR_STAGGER** — delay between consecutive characters starting their flips, in seconds.
|
|
173
|
+
- Range: 0.03-0.08s; too fast and chars overlap visually, too slow and the effect feels labored
|
|
174
|
+
- Constraints: total decode time = `CHAR_STAGGER × (charCount − 1) + FLIP_DURATION`; ensure this fits the phase budget
|
|
175
|
+
- Reference: ../../examples/proof-logo-chain.html uses `0.033s` (≈2 frames at 60fps)
|
|
176
|
+
- **REVEAL_THRESHOLD** — progress at which a glyph swaps from random → real.
|
|
177
|
+
- Range: 0.5-0.7; lower reveals too early (no decode tension), higher feels like a hard reveal at the end
|
|
178
|
+
- Effects: this is a discrete tuning of when the eye locks onto the real letter
|
|
179
|
+
- Reference: ../../examples/proof-logo-chain.html uses `0.6`
|
|
180
|
+
- **FLICKER_RATE** — frames between glyph reshuffles during the random phase.
|
|
181
|
+
- Range: 3-6; lower than 3 looks like noise, higher than 6 looks like discrete typing instead of flicker
|
|
182
|
+
- Constraints: must be ≥ ~3 frames (see Critical Constraints)
|
|
183
|
+
- Reference: ../../examples/proof-logo-chain.html uses an equivalent of `3` (one shuffle every 3 internal-clock frames)
|
|
184
|
+
- **{bgColor} / {textColor}** — stage background and live-character color tokens.
|
|
185
|
+
- **{monoFont}** — monospace family preferred so flicker glyphs don't change width per swap; if a proportional font is required, the ghost placeholder makes the cost recoverable.
|
|
186
|
+
- **{phrase}** — the target word the flip resolves to. Length feeds the total decode duration via `CHAR_STAGGER`.
|
|
187
|
+
|
|
188
|
+
## Variations
|
|
189
|
+
|
|
190
|
+
- **Top-down hinge** — swap `transform-origin: bottom` to `top` for a falling-flap look.
|
|
191
|
+
- **Center spin** — `transform-origin: center` reads as a barrel roll, not a flap.
|
|
192
|
+
- **Number-only pool** — restrict `GLYPHS` to digits for a price / countdown decode.
|
|
193
|
+
- **Two-pass decode** — chain two `FLIP_DURATION` tweens with different glyph pools (e.g. symbols → letters → real) for a longer reveal.
|
|
194
|
+
|
|
195
|
+
## Key Principles
|
|
196
|
+
|
|
197
|
+
- **Threshold at ~`REVEAL_THRESHOLD`** for swap from random → real glyph — close enough to settled that viewer's eye catches the right letter
|
|
198
|
+
- **Hinge at `transform-origin: bottom`** for flap-display look (vs `top` for top-down, vs `center` for spin)
|
|
199
|
+
- **Deterministic random** via seeded hash — HF runtime seeks frame-by-frame, so the same frame must show the same glyph (no `Math.random()`)
|
|
200
|
+
- **Ghost placeholder** sits behind the live chars with identical content + same font, reserving width — without it, narrow glyphs shift the layout mid-flicker
|
|
201
|
+
- **Stagger in the 0.04-0.08s range** per char — too fast and chars overlap visually, too slow and effect feels labored
|
|
202
|
+
- **Center the flip dead-center via `display: grid; place-items: center;`** on the scene root — and DO NOT add decorative headers/footers (timestamp lines, "// AUTH" tags, small status dots). The flip text IS the focal beat; surrounding clutter dilutes it. If a secondary label is necessary, promote it to BIG typography in the same stacked layout (56-72px caps + tracking), not a tiny corner annotation.
|
|
203
|
+
|
|
204
|
+
## Critical Constraints
|
|
205
|
+
|
|
206
|
+
- **`perspective` on scene root REQUIRED** — without parent perspective, `rotateX` looks like a 2D scale, not a 3D flip
|
|
207
|
+
- **`transform-style: preserve-3d` on each char** — keeps 3D context intact when chars have their own transforms
|
|
208
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
209
|
+
- **Registry key = `data-composition-id`**
|
|
210
|
+
- **Deterministic randomness**: don't use `Math.random()`. Use a seed derived from char index + frame group so seek determinism holds
|
|
211
|
+
- **`onUpdate` writes to DOM**: HF seeks every frame, so this runs many times — keep work O(1) per char per frame
|
|
212
|
+
- **Flicker rate ≥ ~3 frames per glyph swap**: faster looks like noise, slower looks like discrete typing
|
|
213
|
+
|
|
214
|
+
## Combinations
|
|
215
|
+
|
|
216
|
+
- [card-morph-anchor.md](card-morph-anchor.md) — pair: hacker-flip reveals a phrase, then card morphs into the next shot
|
|
217
|
+
- [counting-dynamic-scale.md](counting-dynamic-scale.md) — counterpart for numeric reveals (text vs number)
|
|
218
|
+
|
|
219
|
+
## Pairs with HF skills
|
|
220
|
+
|
|
221
|
+
- `/hyperframes-animation` — timeline + per-char stagger + `onUpdate`
|
|
222
|
+
- `/hyperframes-core` — composition wiring
|
|
223
|
+
- `/hyperframes-cli` — `hyperframes lint`
|