@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,153 @@
|
|
|
1
|
+
# Scene Transitions
|
|
2
|
+
|
|
3
|
+
A transition tells the viewer how two scenes relate. A crossfade says "this continues." A push slide says "next point." A blur crossfade says "drift with me." Choose transitions that match what the content is doing emotionally, not just technically.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- Animation rules for multi-scene compositions
|
|
8
|
+
- Energy and mood transition selection
|
|
9
|
+
- Narrative position
|
|
10
|
+
- Blur intensity
|
|
11
|
+
- Presets
|
|
12
|
+
- Implementation
|
|
13
|
+
- CSS vs shader guidance
|
|
14
|
+
- Shader-compatible CSS rules
|
|
15
|
+
- Visual pattern warnings
|
|
16
|
+
|
|
17
|
+
## Animation Rules for Multi-Scene Compositions
|
|
18
|
+
|
|
19
|
+
These are non-negotiable for every multi-scene composition:
|
|
20
|
+
|
|
21
|
+
1. **Every composition uses transitions.** No exceptions. Scenes without transitions feel like jump cuts.
|
|
22
|
+
2. **Every scene uses entrance animations.** Elements animate IN — opacity, position, scale, etc. No scene should pop fully-formed onto screen. Use `gsap.fromTo()` (not `gsap.from()`) so the start state is explicit: `from()` animates _to_ current CSS, so pairing it with CSS `opacity: 0` is a 0→0 noop and the element never appears (see `/hyperframes-core` → sub-compositions).
|
|
23
|
+
3. **Exit animations are BANNED** except on the final scene. Do NOT use `gsap.to()` to animate elements out before a transition fires. The transition IS the exit. Outgoing scene content must be fully visible when the transition starts — the transition handles the visual handoff.
|
|
24
|
+
4. **Final scene exception:** The last scene MAY fade elements out (e.g., fade to black at the end of the composition). This is the only scene where exit animations are allowed.
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
// ❌ BANNED — fading the outgoing scene out, then the next scene just runs its entrance.
|
|
28
|
+
// This is a jump cut with a dip, not a transition.
|
|
29
|
+
tl.to("#s1", { opacity: 0, duration: 0.4 }, 4.0);
|
|
30
|
+
tl.from("#s2 .headline", { y: 40, opacity: 0 }, 4.4);
|
|
31
|
+
|
|
32
|
+
// ✅ CORRECT — outgoing and incoming animate AT THE SAME TIME T; the motion IS the handoff.
|
|
33
|
+
const T = 4.0;
|
|
34
|
+
tl.to("#s1", { yPercent: -100, filter: "blur(8px)", duration: 0.5, ease: "power3.in" }, T);
|
|
35
|
+
tl.fromTo("#s2", { yPercent: 100 }, { yPercent: 0, duration: 0.5, ease: "power3.out" }, T);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
> **You are NOT done after this file.** This overview gives you _which_ transition and _when_. Before writing any transition you MUST open **`catalog.md`** in this directory for the GSAP code and the hard rule every transition follows — _position new scene → animate outgoing → swap → animate incoming → clean up overlays_ — plus the per-category `css-*.md` files for specifics. Authoring transitions from this overview alone is how you end up shipping the ❌ pattern above.
|
|
39
|
+
|
|
40
|
+
## Energy → Primary Transition
|
|
41
|
+
|
|
42
|
+
| Energy | CSS Primary | Shader Primary | Accent | Duration | Easing |
|
|
43
|
+
| ---------------------------------------- | ---------------------------- | ------------------------------------ | ------------------------------ | --------- | ---------------------- |
|
|
44
|
+
| **Calm** (wellness, brand story, luxury) | Blur crossfade, focus pull | Cross-warp morph, thermal distortion | Light leak, circle iris | 0.5-0.8s | `sine.inOut`, `power1` |
|
|
45
|
+
| **Medium** (corporate, SaaS, explainer) | Push slide, staggered blocks | Whip pan, cinematic zoom | Squeeze, vertical push | 0.3-0.5s | `power2`, `power3` |
|
|
46
|
+
| **High** (promos, sports, music, launch) | Zoom through, overexposure | Ridged burn, glitch, chromatic split | Staggered blocks, gravity drop | 0.15-0.3s | `power4`, `expo` |
|
|
47
|
+
|
|
48
|
+
Pick ONE primary (60-70% of scene changes) + 1-2 accents. Never use a different transition for every scene.
|
|
49
|
+
|
|
50
|
+
## Mood → Transition Type
|
|
51
|
+
|
|
52
|
+
Think about what the transition _communicates_, not just what it looks like.
|
|
53
|
+
|
|
54
|
+
| Mood | Transitions | Why it works |
|
|
55
|
+
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
|
|
56
|
+
| **Warm / inviting** | Light leak, blur crossfade, focus pull, film burn · **Shader:** thermal distortion, light leak, cross-warp morph | Soft edges, warm color washes. Nothing sharp or mechanical. |
|
|
57
|
+
| **Cold / clinical** | Squeeze, zoom out, blinds, shutter, grid dissolve · **Shader:** gravitational lens | Content transforms mechanically — compressed, shrunk, sliced, gridded. |
|
|
58
|
+
| **Editorial / magazine** | Push slide, vertical push, diagonal split, shutter · **Shader:** whip pan | Like turning a page or slicing a layout. Clean directional movement. |
|
|
59
|
+
| **Tech / futuristic** | Grid dissolve, staggered blocks, blinds, chromatic aberration · **Shader:** glitch, chromatic split | Grid dissolve is the core "data" transition. Shader glitch adds posterization + scan lines. |
|
|
60
|
+
| **Tense / edgy** | Glitch, VHS, chromatic aberration, ripple · **Shader:** ridged burn, glitch, domain warp | Instability, distortion, digital breakdown. Ridged burn adds sharp lightning-crack edges. |
|
|
61
|
+
| **Playful / fun** | Elastic push, 3D flip, circle iris, morph circle, clock wipe · **Shader:** ripple waves, swirl vortex | Overshoot, bounce, rotation, expansion. Swirl vortex adds organic spiral distortion. |
|
|
62
|
+
| **Dramatic / cinematic** | Zoom through, zoom out, gravity drop, overexposure, color dip to black · **Shader:** cinematic zoom, gravitational lens, domain warp | Scale, weight, light extremes. Shader transitions add per-pixel depth. |
|
|
63
|
+
| **Premium / luxury** | Focus pull, blur crossfade, color dip to black · **Shader:** cross-warp morph, thermal distortion | Restraint. Cross-warp morph flows both scenes into each other organically. |
|
|
64
|
+
| **Retro / analog** | Film burn, light leak, VHS, clock wipe · **Shader:** light leak | Organic imperfection. Warm color bleeds, scan line displacement. |
|
|
65
|
+
|
|
66
|
+
## Narrative Position
|
|
67
|
+
|
|
68
|
+
| Position | Use | Why |
|
|
69
|
+
| -------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------- |
|
|
70
|
+
| **Opening** | Your most distinctive transition. Match the mood. 0.4-0.6s | Sets the visual language for the entire piece. |
|
|
71
|
+
| **Between related points** | Your primary transition. Consistent. 0.3s | Don't distract — the content is continuing. |
|
|
72
|
+
| **Topic change** | Something different from your primary. Staggered blocks, shutter, squeeze. | Signals "new section" — the viewer's brain resets. |
|
|
73
|
+
| **Climax / hero reveal** | Your boldest accent. Fastest or most dramatic. | This is the payoff — spend your best transition here. |
|
|
74
|
+
| **Wind-down** | Return to gentle. Blur crossfade, crossfade. 0.5-0.7s | Let the viewer exhale after the climax. |
|
|
75
|
+
| **Outro** | Slowest, simplest. Crossfade, color dip to black. 0.6-1.0s | Closure. Don't introduce new energy at the end. |
|
|
76
|
+
|
|
77
|
+
## Blur Intensity by Energy
|
|
78
|
+
|
|
79
|
+
| Energy | Blur | Duration | Hold at peak |
|
|
80
|
+
| ---------- | ------- | -------- | ------------ |
|
|
81
|
+
| **Calm** | 20-30px | 0.8-1.2s | 0.3-0.5s |
|
|
82
|
+
| **Medium** | 8-15px | 0.4-0.6s | 0.1-0.2s |
|
|
83
|
+
| **High** | 3-6px | 0.2-0.3s | 0s |
|
|
84
|
+
|
|
85
|
+
## Presets
|
|
86
|
+
|
|
87
|
+
| Preset | Duration | Easing |
|
|
88
|
+
| ---------- | -------- | ----------------- |
|
|
89
|
+
| `snappy` | 0.2s | `power4.inOut` |
|
|
90
|
+
| `smooth` | 0.4s | `power2.inOut` |
|
|
91
|
+
| `gentle` | 0.6s | `sine.inOut` |
|
|
92
|
+
| `dramatic` | 0.5s | `power3.in` → out |
|
|
93
|
+
| `instant` | 0.15s | `expo.inOut` |
|
|
94
|
+
| `luxe` | 0.7s | `power1.inOut` |
|
|
95
|
+
|
|
96
|
+
## Implementation
|
|
97
|
+
|
|
98
|
+
Read `catalog.md` in this directory for GSAP code and hard rules for every transition type, and the `css-*.md` files for per-category implementation details.
|
|
99
|
+
|
|
100
|
+
| Category | CSS | Shader (WebGL) |
|
|
101
|
+
| ----------- | -------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
102
|
+
| Push/slide | Push slide, vertical push, elastic push, squeeze | Whip pan |
|
|
103
|
+
| Scale/zoom | Zoom through, zoom out, gravity drop, 3D flip | Cinematic zoom, gravitational lens |
|
|
104
|
+
| Reveal/mask | Circle iris, diamond iris, diagonal split, clock wipe, shutter | SDF iris |
|
|
105
|
+
| Dissolve | Crossfade, blur crossfade, focus pull, color dip | Cross-warp morph, domain warp |
|
|
106
|
+
| Cover | Staggered blocks, horizontal blinds, vertical blinds | — |
|
|
107
|
+
| Light | Light leak, overexposure burn, film burn | Light leak (shader), thermal distortion |
|
|
108
|
+
| Distortion | Glitch, chromatic aberration, ripple, VHS tape | Glitch (shader), chromatic split, ridged burn, ripple waves, swirl vortex |
|
|
109
|
+
| Pattern | Grid dissolve, morph circle | — |
|
|
110
|
+
|
|
111
|
+
## Transitions That Don't Work in CSS
|
|
112
|
+
|
|
113
|
+
Avoid: star iris, tilt-shift, lens flare, hinge/door. See catalog.md for why.
|
|
114
|
+
|
|
115
|
+
## CSS vs Shader
|
|
116
|
+
|
|
117
|
+
CSS transitions animate scene containers with opacity, transforms, clip-path, and filters. Shader transitions composite both scene textures per-pixel on a WebGL canvas — they can warp, dissolve, and morph in ways CSS cannot.
|
|
118
|
+
|
|
119
|
+
**Both are first-class options.** Shaders are provided by the `@hyperframes/shader-transitions` package — import from the package instead of writing raw GLSL. CSS transitions are simpler to set up. Choose based on the effect you want, not based on which is easier.
|
|
120
|
+
|
|
121
|
+
**Mixing is supported.** You can have some transitions use WebGL shaders and others use a CSS crossfade in the same composition. Omit the `shader` field on any `TransitionConfig` entry to get a smooth opacity crossfade instead of a WebGL effect:
|
|
122
|
+
|
|
123
|
+
```js
|
|
124
|
+
var tl = HyperShader.init({
|
|
125
|
+
bgColor: "#000",
|
|
126
|
+
accentColor: "#6366f1",
|
|
127
|
+
scenes: ["s1", "s2", "s3", "s4"],
|
|
128
|
+
transitions: [
|
|
129
|
+
{ time: 4.0, shader: "sdf-iris", duration: 0.7 }, // WebGL shader
|
|
130
|
+
{ time: 8.5, duration: 0.8 }, // no shader → CSS crossfade
|
|
131
|
+
{ time: 13.0, shader: "domain-warp", duration: 0.6 }, // WebGL shader
|
|
132
|
+
],
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
HyperShader manages all scene visibility regardless of transition type. Let it create the timeline (don't pass `timeline:` into `init()`) and add your beat animations to the returned `tl` after the call.
|
|
137
|
+
|
|
138
|
+
## Shader-Compatible CSS Rules
|
|
139
|
+
|
|
140
|
+
Shader transitions capture DOM scenes to WebGL textures via html2canvas. The canvas 2D rendering pipeline doesn't match CSS exactly. Follow these rules to avoid visible artifacts at transition boundaries:
|
|
141
|
+
|
|
142
|
+
1. **No `transparent` keyword in gradients.** Canvas interpolates `transparent` as `rgba(0,0,0,0)` (black at zero alpha), creating dark fringes. Always use the target color at zero alpha: `rgba(200,117,51,0)` not `transparent`.
|
|
143
|
+
2. **No gradient backgrounds on elements thinner than 4px.** Canvas can't match CSS gradient rendering on 1-2px elements. Use solid `background-color` on thin accent lines.
|
|
144
|
+
3. **No CSS variables (`var()`) on elements visible during capture.** html2canvas doesn't reliably resolve custom properties. Use literal color values in inline styles.
|
|
145
|
+
4. **Mark uncapturable decorative elements with `data-no-capture`.** The capture function skips these. They're present on the live DOM but absent from the shader texture. Use for elements that can't follow the rules above.
|
|
146
|
+
5. **No gradient opacity below 0.15.** Gradient elements below 10% opacity render differently in canvas vs CSS. Increase to 0.15+ or use a solid color at equivalent brightness.
|
|
147
|
+
6. **Every `.scene` div must have explicit `background-color`, AND pass the same color as `bgColor` in the `init()` config.** The package captures scene elements via html2canvas. Both the CSS `background-color` on `.scene` and the `bgColor` config must match. Without either, the texture renders as black.
|
|
148
|
+
|
|
149
|
+
These rules only apply to shader transition compositions. CSS-only compositions have no restrictions.
|
|
150
|
+
|
|
151
|
+
## Visual Pattern Warning
|
|
152
|
+
|
|
153
|
+
Avoid transitions that create visible repeating geometric patterns — grids of tiles, hexagonal cells, uniform dot arrays, evenly-spaced blob circles. These look cheap and artificial regardless of the math behind them. Organic noise (FBM, domain warping) is good because it's irregular. Geometric repetition is bad because the eye instantly sees the grid.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hyperframes-cli
|
|
3
|
+
description: HyperFrames CLI dev loop. Use when running npx hyperframes init, add, catalog, capture, lint, validate, inspect, layout, snapshot, preview, play, render, publish, lambda, doctor, browser, info, upgrade, skills, compositions, docs, benchmark, telemetry, transcribe, tts, or remove-background, or when troubleshooting the HyperFrames build/render environment. Entry point for AWS Lambda cloud rendering (`hyperframes lambda deploy / render / progress / destroy / policies`).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# HyperFrames CLI
|
|
7
|
+
|
|
8
|
+
Everything runs through `npx hyperframes` unless project instructions specify a local wrapper. Obey the local wrapper exactly. Requires Node.js >= 22 and FFmpeg.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. **Scaffold** — `npx hyperframes init my-video` (or `capture` from a URL). Upstream `init` would also refresh the installed skills from GitHub, but vidfarm-managed environments set `HYPERFRAMES_SKIP_SKILLS=1` so `init` never touches the vidfarm-scrubbed skill copies — skills are installed and refreshed via `vidfarm skills` (`list` / `add <name>` / `update`) instead.
|
|
13
|
+
2. **Write** — author HTML composition (see the `hyperframes-core` skill)
|
|
14
|
+
3. **Lint** — `npx hyperframes lint`
|
|
15
|
+
4. **Validate** — `npx hyperframes validate` (runtime errors + contrast)
|
|
16
|
+
5. **Visual inspect** — `npx hyperframes inspect`
|
|
17
|
+
6. **Preview / edit** — `npx hyperframes preview` opens **Studio**, the timeline editor where the user can manually edit anything (not just watch). Review there, then ask before rendering.
|
|
18
|
+
7. **Render** — pick the variant:
|
|
19
|
+
- Iterate: `npx hyperframes render --quality draft`
|
|
20
|
+
- Deliver: `npx hyperframes render --quality high --output out.mp4`
|
|
21
|
+
- CI / cross-host repro: `npx hyperframes render --docker --strict --output out.mp4`
|
|
22
|
+
- Cloud (long / large): `npx hyperframes lambda render ./my-project --width 1920 --height 1080 --wait` (see Lambda below)
|
|
23
|
+
|
|
24
|
+
Run lint, validate, and inspect before preview. `lint` catches missing `data-composition-id`, overlapping tracks, and unregistered timelines. `validate` loads the composition in headless Chrome and reports runtime console errors plus WCAG contrast issues. `inspect` seeks through the timeline and reports text spilling out of bubbles/containers or off the canvas — and, when a `*.motion.json` sidecar is present, verifies motion intent (entrances firing under seek, stagger order, in-frame, liveness) against that same seeked timeline.
|
|
25
|
+
|
|
26
|
+
For motion-heavy work, prefer snapshot-driven iteration and a `*.motion.json` sidecar — see `references/lint-validate-inspect.md` for the discipline and motion-verification spec.
|
|
27
|
+
|
|
28
|
+
## Agent Conventions
|
|
29
|
+
|
|
30
|
+
Cross-cutting rules that hold for every command:
|
|
31
|
+
|
|
32
|
+
- **`--json` is available on every command except `render`, `preview`, and `play` server modes.** Use it for any agent / CI invocation of the supported commands; output includes a `_meta` envelope (cli version, latest available, update advice). `render` reports status via stdout + exit code only — verify success with the post-render check below. `preview --selection --json` and `preview --context --json` are the preview exceptions: they do not start a server, they query the user's running Studio session and exit.
|
|
33
|
+
- **`doctor --json` always exits 0**, even when the environment is broken. Gate on the payload's `ok` field: `npx hyperframes doctor --json | jq -e '.ok' > /dev/null`. This insulates pipelines from CLI release churn.
|
|
34
|
+
- **Non-TTY mode is auto-detected.** When `stdout` is not a TTY (CI, agents, piped output) the CLI auto-switches to non-interactive; `init` then **requires `--example`**. Pass `--non-interactive` to force this mode even on a TTY.
|
|
35
|
+
- **CI gating on render**: `--strict` fails on lint errors, `--strict-all` fails on warnings too, `--strict-variables` fails on undeclared `--variables` keys.
|
|
36
|
+
- **Paths in `--json` are redacted** — `$HOME` becomes the literal `$HOME` so output is safe to paste into bug reports and agent contexts.
|
|
37
|
+
- **Render is user-gated.** Never auto-render once the checks pass. Pause at `preview`, tell the user the video is editable in Studio, and render only after they approve.
|
|
38
|
+
- **Use Studio context for user-directed edits.** When the user says "this selected element", "the thing I clicked", "current selection", or similar, ask them to select it in Studio, then run `npx hyperframes preview --context --json --context-fields selection`. Use the returned `selection.target.hfId` / `selector`, `selection.sourceFile`, `selection.currentTime`, and `selection.thumbnailUrl` to anchor the edit. If `selection` is `null` and `errors.selection.code` is `no-selection`, ask the user to click the element and rerun; do not guess from screenshots.
|
|
39
|
+
- **Keep Studio context compact.** `preview --context --json` returns compact selection by default. Add `--context-fields selection`, `--context-fields selection,lint`, or `--context-fields lint` to avoid bloating agent context. Use `--context-detail full` only when you need heavy fields like computed styles, inline styles, or text-field metadata.
|
|
40
|
+
- **Post-render verification.** After `render` returns exit 0, confirm the output file exists and has plausible size before reporting success: `[ -s "$OUTPUT" ] || echo "render produced no output"`. The CLI prints `◇ <path>` on success; for long renders also sanity-check duration with `ffprobe -i "$OUTPUT" -show_format -v error`.
|
|
41
|
+
- **Do not run `hyperframes feedback` or `hyperframes telemetry` in vidfarm environments.** Telemetry is disabled via `HYPERFRAMES_NO_TELEMETRY=1`, and `feedback` phones home to the upstream maintainers. Report issues through vidfarm channels instead.
|
|
42
|
+
- **Never use `hyperframes cloud` or `hyperframes auth` in vidfarm flows** — they bind to a third-party account. Cloud rendering is covered by `hyperframes lambda` (your OWN AWS account, fine to use) or `vidfarm render` (vidfarm's own AWS).
|
|
43
|
+
|
|
44
|
+
## Routing
|
|
45
|
+
|
|
46
|
+
| Want to… | Read |
|
|
47
|
+
| ---------------------------------------------------------------------------------------------------------- | ------------------------------------- |
|
|
48
|
+
| Scaffold a project (`init`, `capture`, `skills`) | `references/init-and-scaffold.md` |
|
|
49
|
+
| Check correctness (`lint`, `validate`, `inspect`, `snapshot`) | `references/lint-validate-inspect.md` |
|
|
50
|
+
| Preview or render (`preview`, `play`, `render`; `publish` is **do not use** — uploads to third-party hosting; share via `vidfarm render` + `vidfarm approve`) | `references/preview-render.md` |
|
|
51
|
+
| Diagnose the environment (`doctor`, `browser`) | `references/doctor-browser.md` |
|
|
52
|
+
| Cloud render on AWS Lambda (`lambda deploy / sites / render / progress / destroy / policies`) | `references/lambda.md` |
|
|
53
|
+
| Everything else (`info`, `upgrade`, `compositions`, `docs`, `benchmark`, `telemetry`, asset preprocessing) | `references/upgrade-info-misc.md` |
|
|
54
|
+
|
|
55
|
+
## Cross-Skill Hand-Offs
|
|
56
|
+
|
|
57
|
+
- **Tailwind projects** (`init --tailwind`) → use `hyperframes-core` (Tailwind reference) before editing classes or theme tokens.
|
|
58
|
+
- **Registry blocks/components** (`hyperframes add`, `hyperframes catalog`) → use `hyperframes-registry` for install paths, sub-composition wiring, and snippet merging.
|
|
59
|
+
- **Asset preprocessing** (`tts`, `transcribe`, `remove-background`) → use `vidfarm-media` for voice selection, Whisper model rules, captions, and TTS-to-captions chain (TTS / word timings / BGM / SFX resolve through vidfarm).
|
|
60
|
+
- **Parametrized renders** (`--variables`) → declared via `data-composition-variables` on `<html>`; see `hyperframes-core` for the full schema.
|
|
61
|
+
|
|
62
|
+
## Lambda (Cloud Rendering)
|
|
63
|
+
|
|
64
|
+
`hyperframes lambda` deploys distributed rendering to AWS Lambda and drives renders from your laptop or CI. End-to-end is three commands:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx hyperframes lambda deploy # provision SAM stack (Lambda + Step Functions + S3)
|
|
68
|
+
npx hyperframes lambda render ./my-project --width 1920 --height 1080 --wait
|
|
69
|
+
npx hyperframes lambda destroy # tear down (S3 bucket is retained)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Use Lambda when a render is too long / too large for one host (multi-minute videos, 4K, large parallel batches) and you have AWS credentials configured. For dev-loop iteration stay on local `render`.
|
|
73
|
+
|
|
74
|
+
See `references/lambda.md` for prerequisites, all 6 subcommands (`deploy`, `sites create`, `render`, `progress`, `destroy`, `policies`), IAM policy validation, state files, and cost / cleanup rules.
|
|
75
|
+
|
|
76
|
+
## Minimum Completion Gate
|
|
77
|
+
|
|
78
|
+
### Static gates
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npx hyperframes lint
|
|
82
|
+
npx hyperframes validate
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Add `inspect` for layout-sensitive work and `render --strict` in CI to fail on lint errors.
|
|
86
|
+
|
|
87
|
+
### Visual smoke test — required when the project uses sub-compositions
|
|
88
|
+
|
|
89
|
+
`lint` / `validate` / `inspect` evaluate each composition **in isolation**. They never load `index.html` and mount sub-compositions via `data-composition-src`, so they cannot catch cross-file mount failures (see `hyperframes-core` → `references/sub-compositions.md`, "Common pitfalls"). The only gate that catches them is one that actually loads `index.html` and seeks the timeline.
|
|
90
|
+
|
|
91
|
+
Use `hyperframes snapshot` — it loads the project the same way `render` does (so it exercises the same mount path) but only captures the timestamps you request, so it's seconds instead of a full render:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Capture one frame at the midpoint of every sub-composition.
|
|
95
|
+
# Midpoints = data-start + data-duration/2 for each host slot in index.html.
|
|
96
|
+
npx hyperframes snapshot --at <t1>,<t2>,<t3>,...
|
|
97
|
+
|
|
98
|
+
# Or, if you don't need per-scene targeting, an evenly-spaced sample:
|
|
99
|
+
npx hyperframes snapshot --frames 9
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Output lands in `snapshots/frame-NN-at-Xs.png`. Eyeball each frame against the scene plan.
|
|
103
|
+
|
|
104
|
+
Per-frame red flags (each maps to a specific failure mode the static gates miss):
|
|
105
|
+
|
|
106
|
+
| What you see | Root cause |
|
|
107
|
+
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
108
|
+
| Text shows up tiny + unstyled in the top-left corner | `<style>` block left in `<head>` outside `<template>` (Pitfall 1) — no CSS reached live DOM |
|
|
109
|
+
| SVG/icon elements blown up to canvas-size | Same as above — no width/height constraints applied |
|
|
110
|
+
| Hero element of the scene is missing entirely; only background + watermark visible | Host-id ≠ template id (Pitfall 2) — timeline never ran, frame captured at initial state |
|
|
111
|
+
| Snapshot command logs `Sub-composition timelines not registered after 45000ms` | Pitfall 2 — direct confirmation |
|
|
112
|
+
|
|
113
|
+
`snapshots/` can be deleted after eyeballing; the user-facing final render is a separate pass with `npx hyperframes render`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# doctor, browser
|
|
2
|
+
|
|
3
|
+
Environment diagnosis and bundled-Chrome management. Run these first when a render or preview fails.
|
|
4
|
+
|
|
5
|
+
## doctor
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx hyperframes doctor
|
|
9
|
+
npx hyperframes doctor --json # CI / agent output (always exit 0; gate on payload `ok`)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Runs independent checks and reports each as ok/warn/fail:
|
|
13
|
+
|
|
14
|
+
- **Version** — installed CLI vs latest on npm (hints upgrade when stale)
|
|
15
|
+
- **Node.js** — ≥ 22 required
|
|
16
|
+
- **CPU**, **Memory**, **Disk** — host resources
|
|
17
|
+
- **Environment** — env vars that affect the renderer
|
|
18
|
+
- **FFmpeg** / **FFprobe** — found, version, codecs
|
|
19
|
+
- **Chrome** — bundled or system, version, path
|
|
20
|
+
- **Docker** / **Docker running** — required only for `render --docker`
|
|
21
|
+
- **/dev/shm** — inside containers only
|
|
22
|
+
|
|
23
|
+
Run `doctor` first when:
|
|
24
|
+
|
|
25
|
+
- `render` fails with a Chrome or FFmpeg error.
|
|
26
|
+
- `preview` opens but the composition fails to load.
|
|
27
|
+
- A fresh machine has never run HyperFrames.
|
|
28
|
+
|
|
29
|
+
Common issues:
|
|
30
|
+
|
|
31
|
+
- **Missing FFmpeg** — install via `brew install ffmpeg` (macOS) or your package manager.
|
|
32
|
+
- **Missing bundled Chrome** — run `npx hyperframes browser ensure`.
|
|
33
|
+
- **Low memory** — close other Chromes, reduce `--workers`, or use `--quality draft`.
|
|
34
|
+
|
|
35
|
+
## browser
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx hyperframes browser ensure # find or download the pinned Chrome
|
|
39
|
+
npx hyperframes browser path # print the browser executable path (for scripting)
|
|
40
|
+
npx hyperframes browser clear # remove the cached Chrome download
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Manage the Chrome build HyperFrames uses for rendering. The pinned version exists because pixel output drifts across Chrome versions — using the bundled build keeps rendered output reproducible across machines.
|
|
44
|
+
|
|
45
|
+
Use `path` to embed the binary in scripts: `$(npx hyperframes browser path)`.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# init, capture, skills
|
|
2
|
+
|
|
3
|
+
Scaffolding commands. Use these instead of creating files by hand — they set up the right file structure, copy media, run transcription, and install AI coding skills.
|
|
4
|
+
|
|
5
|
+
## init
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx hyperframes init my-video # TTY: interactive wizard
|
|
9
|
+
npx hyperframes init my-video --example warm-grain # pick an example
|
|
10
|
+
npx hyperframes init my-video --example blank --resolution portrait
|
|
11
|
+
npx hyperframes init my-video --video clip.mp4 # with video file
|
|
12
|
+
npx hyperframes init my-video --audio track.mp3 # with audio file
|
|
13
|
+
npx hyperframes init my-video --example blank --tailwind # Tailwind v4 browser runtime
|
|
14
|
+
npx hyperframes init my-video --non-interactive --example blank # CI/agents — flag-only
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Default depends on TTY**: in a terminal, the CLI prompts for example/options. Outside a TTY (CI, agents, piped output) it auto-switches to non-interactive and **requires `--example`** (the CLI errors with a usage example if missing). Pass `--non-interactive` to force flag-only mode even on a TTY.
|
|
18
|
+
|
|
19
|
+
Templates: `blank`, `warm-grain`, `play-mode`, `swiss-grid`, `vignelli`, `decision-tree`, `kinetic-type`, `product-promo`, `nyt-graph`.
|
|
20
|
+
|
|
21
|
+
Other useful flags:
|
|
22
|
+
|
|
23
|
+
- `--resolution` — preset: `landscape` (1920×1080), `portrait` (1080×1920), `landscape-4k`, `portrait-4k`, `square` (1080×1080), `square-4k`. Aliases: `1080p`, `4k`, `uhd`, `1080p-square`, `4k-square`.
|
|
24
|
+
- `--skip-skills` — moot in vidfarm environments: vidfarm sets `HYPERFRAMES_SKIP_SKILLS=1`, so `init` never checks GitHub or overwrites the vidfarm-scrubbed skill copies. Skills are refreshed with `vidfarm skills update` instead.
|
|
25
|
+
- `--skip-transcribe` — don't auto-transcribe `--audio` / `--video` with Whisper.
|
|
26
|
+
- `--model`, `--language` — Whisper model / language for the auto-transcription.
|
|
27
|
+
|
|
28
|
+
When using `--tailwind`, invoke the `hyperframes-core` (Tailwind reference) skill before editing classes or theme tokens. The scaffold uses Tailwind v4 browser runtime patterns, not Studio's Tailwind v3 setup.
|
|
29
|
+
|
|
30
|
+
When `--audio` or `--video` is supplied, `init` transcribes the file with Whisper. For voice/model selection see the `vidfarm-media` skill.
|
|
31
|
+
|
|
32
|
+
## capture
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx hyperframes capture https://stripe.com # scaffold from a website
|
|
36
|
+
npx hyperframes capture https://linear.app -o linear-video # custom output directory
|
|
37
|
+
npx hyperframes capture https://example.com --json # JSON output for agents
|
|
38
|
+
npx hyperframes capture https://example.com --skip-assets # skip image/SVG download
|
|
39
|
+
npx hyperframes capture https://example.com --max-screenshots 12
|
|
40
|
+
npx hyperframes capture https://example.com --timeout 60000 # page-load timeout in ms
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Captures a live URL as an editable HyperFrames project: screenshots become layered scenes, assets are downloaded locally, and the result is a normal project you can `lint` / `preview` / `render`. Use this when the user supplies a URL as the starting point for a video.
|
|
44
|
+
|
|
45
|
+
## skills
|
|
46
|
+
|
|
47
|
+
Do **not** run `npx hyperframes skills` in vidfarm environments — it installs the upstream skill pack from GitHub and would overwrite the vidfarm-scrubbed copies. Vidfarm manages the skill pack itself:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
vidfarm skills list # show installed vs available skills
|
|
51
|
+
vidfarm skills add <name> # install one pinned, vidfarm-scrubbed skill
|
|
52
|
+
vidfarm skills update # refresh all installed skills to vidfarm's pinned snapshot
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Skills install into `.agents/skills` + `.claude/skills` with a lock file, so agents follow the framework conventions. Re-run `vidfarm skills update` after vidfarm upgrades.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# lambda — Cloud Rendering on AWS Lambda
|
|
2
|
+
|
|
3
|
+
Deploy HyperFrames distributed rendering to AWS Lambda and drive renders from your laptop or CI. Wraps `@hyperframes/aws-lambda` SDK plus AWS SAM. End-to-end is three commands:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx hyperframes lambda deploy
|
|
7
|
+
npx hyperframes lambda render ./my-project --width 1920 --height 1080 --wait
|
|
8
|
+
npx hyperframes lambda destroy
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## When to Use Lambda vs Local Render
|
|
12
|
+
|
|
13
|
+
- **Local `render`** — dev-loop iteration, single host, anything under a few minutes at 1080p.
|
|
14
|
+
- **`lambda render`** — long videos, 4K, large parallel batches, or anything where local Chrome would time out / exhaust RAM. Pay-per-invocation, no idle cost.
|
|
15
|
+
|
|
16
|
+
For one-off short renders Lambda is not worth the deploy overhead.
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
- AWS credentials configured (env vars, `~/.aws/credentials`, SSO, or IMDS).
|
|
21
|
+
- AWS SAM CLI on `PATH`.
|
|
22
|
+
- `bun` on `PATH` (builds the Lambda handler ZIP).
|
|
23
|
+
|
|
24
|
+
## Subcommands
|
|
25
|
+
|
|
26
|
+
### deploy
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx hyperframes lambda deploy \
|
|
30
|
+
--stack-name=hyperframes-prod \
|
|
31
|
+
--region=us-east-1 \
|
|
32
|
+
--concurrency=8 \
|
|
33
|
+
--memory=10240
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Builds `packages/aws-lambda/dist/handler.zip` and SAM-deploys the stack (Lambda + Step Functions + S3 + IAM). Idempotent — re-running on the same `--stack-name` is a no-op when nothing changed. Writes `<cwd>/.hyperframes/lambda-stack-<name>.json` so later subcommands don't need to call `describe-stacks`.
|
|
37
|
+
|
|
38
|
+
| Flag | Default | Description |
|
|
39
|
+
| --------------- | ------------------------------- | ----------------------------- |
|
|
40
|
+
| `--stack-name` | `hyperframes-default` | CloudFormation stack name |
|
|
41
|
+
| `--region` | `AWS_REGION` env or `us-east-1` | AWS region |
|
|
42
|
+
| `--profile` | `AWS_PROFILE` env | Named AWS credentials profile |
|
|
43
|
+
| `--concurrency` | `8` | Lambda reserved concurrency |
|
|
44
|
+
| `--memory` | `10240` | Lambda memory in MB |
|
|
45
|
+
| `--skip-build` | off | Reuse existing `handler.zip` |
|
|
46
|
+
|
|
47
|
+
### sites create
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx hyperframes lambda sites create ./my-project
|
|
51
|
+
# → siteId: abc1234deadbeef0 (stable across re-runs of the same tree)
|
|
52
|
+
|
|
53
|
+
npx hyperframes lambda render ./my-project --site-id=abc1234deadbeef0 ...
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Tars + uploads `<projectDir>` to S3 with a content-addressed key. Returns a stable `siteId` you can reuse — re-renders of the same tree skip the upload.
|
|
57
|
+
|
|
58
|
+
### render
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npx hyperframes lambda render ./my-project \
|
|
62
|
+
--width 1920 --height 1080 --fps 30 --format mp4 \
|
|
63
|
+
--chunk-size 240 --max-parallel-chunks 16 \
|
|
64
|
+
--wait
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Starts a Step Functions execution. Returns immediately with a `renderId` unless `--wait` is set, in which case the CLI blocks until completion and streams per-chunk progress lines. Add `--json` for machine-parseable output.
|
|
68
|
+
|
|
69
|
+
| Flag | Description |
|
|
70
|
+
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| `--width` / `--height` | Output dimensions in pixels |
|
|
72
|
+
| `--output-resolution` | Supersampling preset (engages Chrome `deviceScaleFactor`) — `landscape` / `landscape-4k` / `portrait` / `portrait-4k` / `square` / `square-4k`, plus aliases (`1080p`, `4k`, `uhd`, `hd`, `1080p-portrait`, `4k-portrait`, `1080p-square`, `4k-square`). Use this to render an authored-at-1080p composition at 4K without re-laying-out — see footgun below. |
|
|
73
|
+
| `--fps` | `24` / `30` / `60` |
|
|
74
|
+
| `--format` | `mp4` / `mov` / `png-sequence` (default `mp4`) |
|
|
75
|
+
| `--codec` | `h264` / `h265` (mp4 only) |
|
|
76
|
+
| `--quality` | `draft` / `standard` / `high` |
|
|
77
|
+
| `--chunk-size` | Frames per chunk (default `240`) |
|
|
78
|
+
| `--max-parallel-chunks` | Max concurrent chunks (default `16`) |
|
|
79
|
+
| `--site-id` | Reuse an existing site (skip upload) |
|
|
80
|
+
| `--wait` | Block until completion, stream progress |
|
|
81
|
+
| `--json` | Machine-parseable progress snapshot |
|
|
82
|
+
|
|
83
|
+
**`--width` / `--height` footgun.** Setting `--width 3840 --height 2160` against a composition whose `data-width="1920"` silently produces 1080p — the runtime lays out the page at the composition's authored dimensions and the CLI flags are ignored for layout. To actually output at 4K, use `--output-resolution 4k` (supersamples via `deviceScaleFactor`). The CLI now prints a warning when CLI dimensions disagree with the composition's `data-width` / `data-height` and `--output-resolution` is not set; the warning is suppressed when `--json` is on or `index.html` isn't on disk (`--site-id` flows).
|
|
84
|
+
|
|
85
|
+
### progress
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx hyperframes lambda progress hf-render-abcd1234
|
|
89
|
+
npx hyperframes lambda progress arn:aws:states:us-east-1:...:execution:...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Prints one snapshot — overall percent, frames rendered, Lambda invocations, accrued cost, and any errors. Accepts a bare `renderId` (resolved against the stack's state-machine ARN) or a full SFN execution ARN.
|
|
93
|
+
|
|
94
|
+
### destroy
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx hyperframes lambda destroy
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Calls `sam delete --no-prompts` and drops the local state file. **The render S3 bucket is configured `Retain`** so it survives stack destruction — empty + delete it via the AWS console / CLI if you want the storage back.
|
|
101
|
+
|
|
102
|
+
### Non-retryable errors
|
|
103
|
+
|
|
104
|
+
A subset of failures the Step Functions state machine short-circuits instead of running through its 4× 15-min retry budget. `progress` surfaces these immediately with the error class name; do not re-issue `lambda render` blindly when you see one.
|
|
105
|
+
|
|
106
|
+
- **`ChromeBinaryUnavailableError`** — `@sparticuz/chromium` returned an empty/missing executable path. A prior chunk hit `Sandbox.Timedout` mid-extraction and the warm instance is wedged until the execution environment recycles. Remedy: bump a Lambda env var (forces a new exec env) or `lambda deploy` again. Not a transient render failure; retries will burn budget on the same wedged instance.
|
|
107
|
+
- **`FFMPEG_VERSION_MISMATCH`** / **`PLAN_HASH_MISMATCH`** — planner / executor version drift. Re-deploy.
|
|
108
|
+
|
|
109
|
+
### policies
|
|
110
|
+
|
|
111
|
+
Print or validate the minimum IAM permissions the CLI needs.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npx hyperframes lambda policies user # inline policy for an IAM user
|
|
115
|
+
npx hyperframes lambda policies role --principal=cloudformation # { TrustRelationship, InlinePolicy }
|
|
116
|
+
npx hyperframes lambda policies validate ./infra/iam/hf-deploy.json # CI gate
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`validate` reads a JSON policy doc and checks the union of its `Effect: Allow` actions (expanding `s3:*` / `s3:Get*` / `*` wildcards) against the CLI's required action set. Missing actions print to stderr; the command exits non-zero. Wire it into CI to catch policy drift before the next deploy fails.
|
|
120
|
+
|
|
121
|
+
The default action set is deliberately broad (`Resource: "*"`) because CloudFormation creates new ARNs on every adopter's first deploy. Tighten `Resource` after that first run if security posture requires it.
|
|
122
|
+
|
|
123
|
+
## State Files
|
|
124
|
+
|
|
125
|
+
`hyperframes lambda` stores per-stack metadata under `<cwd>/.hyperframes/lambda-stack-<name>.json` (bucket name, state-machine ARN, region). Not secret, but AWS-account-identifying. Commit it to a repo or `.gitignore` it per your workflow.
|
|
126
|
+
|
|
127
|
+
## Cost and Cleanup
|
|
128
|
+
|
|
129
|
+
- `lambda destroy` removes the SAM stack but **leaves the S3 bucket** (`Retain`). Delete it manually if you want the storage back.
|
|
130
|
+
- Lambda billing is per-invocation + duration. `progress` reports the accrued cost.
|
|
131
|
+
- `--concurrency` caps parallel Lambda invocations — keep it aligned with your account quota.
|
|
132
|
+
- `--chunk-size` and `--max-parallel-chunks` trade off per-chunk overhead against parallelism; larger chunks reduce coordinator overhead, smaller chunks parallelize more aggressively.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# lint, validate, inspect, snapshot
|
|
2
|
+
|
|
3
|
+
The correctness pipeline. Run in this order: `lint` (static, fast) → `validate` (runtime, headless Chrome) → `inspect` (layout sweep). `snapshot` is a separate utility for capturing still frames.
|
|
4
|
+
|
|
5
|
+
## Discipline (motion-heavy work)
|
|
6
|
+
|
|
7
|
+
When the composition is animation-driven, run the checks before you reach for `preview` or `render`:
|
|
8
|
+
|
|
9
|
+
- Run `lint` after the first HTML pass — earlier, not later.
|
|
10
|
+
- Capture `snapshot` at meaningful timeline states; look at the PNGs.
|
|
11
|
+
- Inspect snapshots _before_ tuning automated warnings — your eye catches what the auditor misses.
|
|
12
|
+
- Treat layout warnings as defects unless a snapshot proves the overflow is intentional, in which case mark it with `data-layout-allow-overflow`.
|
|
13
|
+
- State motion intent in a `*.motion.json` sidecar so `inspect` checks it automatically — entrances firing under seek, stagger order, in-frame, liveness. This is the closest automated proxy for "watch the MP4" and catches render-≠-preview bugs the eye misses (see **Motion verification** below).
|
|
14
|
+
|
|
15
|
+
## lint
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx hyperframes lint # current directory
|
|
19
|
+
npx hyperframes lint ./my-project # specific project
|
|
20
|
+
npx hyperframes lint --verbose # info-level findings
|
|
21
|
+
npx hyperframes lint --json # machine-readable
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Lints `index.html` and all files in `compositions/`. Reports errors (must fix), warnings (should fix), and info (with `--verbose`). Catches missing `data-composition-id`, overlapping tracks on the same `data-track-index`, and unregistered timelines.
|
|
25
|
+
|
|
26
|
+
**Blind spot — media inside a sub-composition (not yet a lint rule).** A `<video>`/`<audio>` inside a `compositions/*.html` `<template>` (or nested in a wrapper `<div>` anywhere) is never seeked/decoded and renders blank/black; `lint`/`validate`/`inspect` all pass. Media must be a direct child of the host root (`index.html`) — see `hyperframes-core` → `variables-and-media.md`. Until a rule exists, check manually before render:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
grep -nE '<(video|audio)\b' compositions/*.html # expect NO matches; media belongs in index.html
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
A non-empty result is a defect. Then `snapshot` each scene that has a video and confirm the panel actually shows footage (a blank/black panel where a clip should play is a bug, not a placeholder — treat it as render-blocking).
|
|
33
|
+
|
|
34
|
+
## validate
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx hyperframes validate # current directory
|
|
38
|
+
npx hyperframes validate ./my-project # specific project
|
|
39
|
+
npx hyperframes validate --json # agent-readable findings
|
|
40
|
+
npx hyperframes validate --timeout 5000 # ms to wait for scripts (default 3000)
|
|
41
|
+
npx hyperframes validate --no-contrast # skip WCAG contrast audit while iterating
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Static lint is fast but blind to runtime failures. `validate` loads the composition in headless Chrome, plays through it, and reports:
|
|
45
|
+
|
|
46
|
+
- JavaScript console errors and unhandled exceptions
|
|
47
|
+
- Failed network requests (media-file `ERR_ABORTED` filtered out)
|
|
48
|
+
- WCAG AA contrast violations on visible text — sampled at 5 timestamps across the timeline. Disable with `--no-contrast`.
|
|
49
|
+
|
|
50
|
+
**Fixing contrast warnings** — thresholds are 4.5:1 for normal text, 3:1 for large text (24px+, or 19px+ bold):
|
|
51
|
+
|
|
52
|
+
- On dark backgrounds, brighten the failing color until it clears the threshold; on light backgrounds, darken it.
|
|
53
|
+
- Stay within the palette family — don't invent a new color, adjust the existing one.
|
|
54
|
+
- Re-run `validate` until clean.
|
|
55
|
+
|
|
56
|
+
Run `validate` before `inspect` when an animation has scripts, fetched data, or theming. Combine with `render --strict` in CI.
|
|
57
|
+
|
|
58
|
+
## inspect
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npx hyperframes inspect # inspect rendered layout over the timeline
|
|
62
|
+
npx hyperframes inspect ./my-project # specific project
|
|
63
|
+
npx hyperframes inspect --json # agent-readable findings (schemaVersion, samples, issues, bboxes)
|
|
64
|
+
npx hyperframes inspect --samples 15 # denser timeline sweep (default 9)
|
|
65
|
+
npx hyperframes inspect --at 1.5,4,7.25 # explicit hero-frame timestamps
|
|
66
|
+
npx hyperframes inspect --tolerance 4 # allowed overflow in px before reporting (default 2)
|
|
67
|
+
npx hyperframes inspect --strict # exit non-zero on warnings too (default: only errors)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Use this after `lint` and `validate`, especially for compositions with speech bubbles, cards, captions, or tight typography. It reports:
|
|
71
|
+
|
|
72
|
+
- Text extending outside the nearest visual container or bubble
|
|
73
|
+
- Text clipped by its own fixed-width/fixed-height box
|
|
74
|
+
- Text extending outside the composition canvas
|
|
75
|
+
- Children escaping clipping containers
|
|
76
|
+
|
|
77
|
+
Errors should be fixed before rendering. Warnings are surfaced for agent review; add `--strict` to fail on warnings too. Repeated static issues are collapsed by default so JSON output stays compact for LLM context windows.
|
|
78
|
+
|
|
79
|
+
**Escape hatches:**
|
|
80
|
+
|
|
81
|
+
- `data-layout-allow-overflow` — mark an element or ancestor when overflow is intentional for an entrance/exit animation.
|
|
82
|
+
- `data-layout-ignore` — mark a decorative element that should never be audited.
|
|
83
|
+
|
|
84
|
+
`npx hyperframes layout` remains available as a compatibility alias for the same visual inspection pass.
|
|
85
|
+
|
|
86
|
+
### Motion verification (`*.motion.json` sidecar)
|
|
87
|
+
|
|
88
|
+
`inspect` also checks **motion intent** against the same seeked timeline the renderer uses — the closest automated proxy for "render the MP4 and watch it". It catches render-≠-preview bugs layout sampling can't: an entrance reveal the seek lands past, a broken stagger order, an element drifting off-frame mid-tween, a frozen shot.
|
|
89
|
+
|
|
90
|
+
Drop a `*.motion.json` sidecar next to the composition (matching the html basename when several compositions share a dir). `inspect` discovers it automatically — no flag, no authoring-framework changes. With no sidecar, `inspect` behaves exactly as before.
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"duration": 6,
|
|
95
|
+
"assertions": [
|
|
96
|
+
{ "kind": "appearsBy", "selector": "#headline", "bySec": 0.5 },
|
|
97
|
+
{ "kind": "before", "a": "#headline", "b": "#cta" },
|
|
98
|
+
{ "kind": "staysInFrame", "selector": ".card" },
|
|
99
|
+
{ "kind": "keepsMoving", "withinSelector": ".scene" }
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
| Assertion | Fails (code) when |
|
|
105
|
+
| ------------------------------ | --------------------------------------------------------------------------- |
|
|
106
|
+
| `appearsBy(selector, bySec)` | not visible (opacity ≥ 0.5) by `bySec` — `motion_appears_late` |
|
|
107
|
+
| `before(a, b)` | `a` does not first appear strictly before `b` — `motion_out_of_order` |
|
|
108
|
+
| `staysInFrame(selector)` | once visible, its box leaves the canvas — `motion_off_frame` |
|
|
109
|
+
| `keepsMoving(withinSelector?)` | a fully-static window exceeds `maxStaticSec` (default 2s) — `motion_frozen` |
|
|
110
|
+
|
|
111
|
+
`duration`, `withinSelector`, and `maxStaticSec` are optional. Findings are **errors by default** (a failed assertion fails the run, like a layout error — `--strict` still gates warnings) and appear in the same human and `--json` output as layout findings. A selector that matches nothing is reported as `motion_selector_missing` rather than silently passing — so a typo'd selector fails loudly. Use this in the feedback loop instead of eyeballing the render: assert what the motion is supposed to do, and let `inspect` tell you when the seek diverges from intent.
|
|
112
|
+
|
|
113
|
+
## snapshot
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx hyperframes snapshot # 5 key frames as PNG
|
|
117
|
+
npx hyperframes snapshot ./my-project # specific project
|
|
118
|
+
npx hyperframes snapshot --frames 10 # evenly-spaced N frames
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Captures still PNGs from the composition for visual diffing, thumbnails, or attaching to a PR. Faster than rendering a video when you only need a few hero frames. Output lands in the project's snapshots directory.
|