@mevdragon/vidfarm-devcli 0.14.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 +37 -0
- package/SKILL.platform.md +6 -1
- package/demo/dist/app.js +295 -11
- package/dist/src/app.js +317 -133
- package/dist/src/cli.js +529 -12
- package/dist/src/composition-runtime.js +262 -3
- 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/editor-chat.js +255 -0
- package/dist/src/hyperframes/composition.js +5 -5
- package/dist/src/services/composition-lint.js +199 -0
- package/dist/src/services/hyperframes.js +67 -13
- package/package.json +2 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Template: champion
|
|
2
|
+
|
|
3
|
+
**Look:** podcast / interview, upper-side column with intro→phrase→emph
|
|
4
|
+
beats building toward a center-stage CROWN that crosses the subject's body.
|
|
5
|
+
"Wimbledon Champion" energy.
|
|
6
|
+
|
|
7
|
+
**Visual identity (LOCKED):**
|
|
8
|
+
|
|
9
|
+
- 5 typography slots: intro / phrase / emph / dream / crown
|
|
10
|
+
- `mix-blend-mode: screen` over warm bone color (#fff5df)
|
|
11
|
+
- Deep text-shadow + brightness boost
|
|
12
|
+
- Single-caption-swap layout (caps stack at one point in the column)
|
|
13
|
+
- Center-stage crown crosses the subject for cinematic occlusion
|
|
14
|
+
|
|
15
|
+
## When to apply
|
|
16
|
+
|
|
17
|
+
✅ **Good fit:**
|
|
18
|
+
|
|
19
|
+
- Podcast / interview style with a single seated subject
|
|
20
|
+
- Cluttered backdrop (bookshelf, props, dark) — screen blend reads through
|
|
21
|
+
- Subject roughly centered with clear clean zones on one or both sides
|
|
22
|
+
- Speech has a clear payoff line that can become a "crown" (1-3 short words)
|
|
23
|
+
- 16:9 landscape, 1920×1080 ideal
|
|
24
|
+
|
|
25
|
+
❌ **Wrong fit:**
|
|
26
|
+
|
|
27
|
+
- Bright/sky/window backdrop (screen blend washes out)
|
|
28
|
+
- Subject heavily off-center such that there's no clean column zone
|
|
29
|
+
- Speech has no clear climax line
|
|
30
|
+
- Portrait 9:16 → use `portrait-header` template instead
|
|
31
|
+
|
|
32
|
+
## Layout decisions agent makes
|
|
33
|
+
|
|
34
|
+
| Field | What | Example (1920×1080) |
|
|
35
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
36
|
+
| `plane.top/left/width/height` | Where the side column sits. Pick the side opposite the subject's gaze (looking room) and hug the cleanest backdrop zone. | `{top: 40, left: 40, width: 720, height: 420}` |
|
|
37
|
+
| `plane.rotateY` | Slight perspective into the wall. Positive for left column (recedes right), negative for right column. Keep small (3-7°). | `4` |
|
|
38
|
+
| `crown_top` | Y position of the crown. Should fall on the subject's chest/neck so the body occludes the middle letters. | `420` |
|
|
39
|
+
| `font_scale` | Multiplier on locked sizes. | `1.0` for 1920×1080 |
|
|
40
|
+
| `crown_enabled` | Whether to render a crown. Skip if the speech has no clean payoff line, or if the subject is too far off-center for a center crown to land. | `true` |
|
|
41
|
+
|
|
42
|
+
### Crown placement rules
|
|
43
|
+
|
|
44
|
+
Before enabling the crown, verify all 3 conditions:
|
|
45
|
+
|
|
46
|
+
1. Subject body center within ±10% of frame horizontal center
|
|
47
|
+
2. Clean zones ≥15% of frame width on each side of subject
|
|
48
|
+
3. Crown text width (uppercase 140px × ~chars) > subject body width + 400px
|
|
49
|
+
|
|
50
|
+
If any fails: disable the crown OR use a smaller font + place it in the
|
|
51
|
+
larger clean zone instead of center. See `references/layout-heuristics.md`.
|
|
52
|
+
|
|
53
|
+
## Slot assignment
|
|
54
|
+
|
|
55
|
+
| Slot | Use for |
|
|
56
|
+
| ------ | ---------------------------------------------------------- |
|
|
57
|
+
| intro | Filler / discourse markers ("you know,", "for me,", "so…") |
|
|
58
|
+
| phrase | Main statement clauses |
|
|
59
|
+
| emph | Key achievement / superlative line |
|
|
60
|
+
| dream | Aspirational lines, past-tense reflection |
|
|
61
|
+
| crown | The single climax line — center-stage payoff |
|
|
62
|
+
|
|
63
|
+
Aim for ≤3 slots per video (excluding crown). Don't use all 4 in a 12s clip.
|
|
64
|
+
|
|
65
|
+
## Plan.json shape
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mode": "template",
|
|
70
|
+
"template": "champion",
|
|
71
|
+
"duration": 12.08, "fps": 24, "width": 1920, "height": 1080,
|
|
72
|
+
"plane": {
|
|
73
|
+
"top": 40, "left": 40, "width": 720, "height": 420,
|
|
74
|
+
"rotateY": 4
|
|
75
|
+
},
|
|
76
|
+
"crown_top": 420,
|
|
77
|
+
"font_scale": 1.0,
|
|
78
|
+
"groups": [
|
|
79
|
+
{ "id": "cg-0", "slot": "intro", "tone": "soft",
|
|
80
|
+
"in": 0.10, "out": 1.45, "words": [...] },
|
|
81
|
+
{ "id": "cg-1", "slot": "phrase", "tone": "soft",
|
|
82
|
+
"in": 1.55, "out": 4.20, "words": [...] },
|
|
83
|
+
{ "id": "cg-2", "slot": "emph", "tone": "present",
|
|
84
|
+
"in": 6.50, "out": 8.30, "words": [...] }
|
|
85
|
+
],
|
|
86
|
+
"crown_group": {
|
|
87
|
+
"id": "cg-crown", "tone": "present",
|
|
88
|
+
"in": 10.85, "out": 12.08,
|
|
89
|
+
"words": [
|
|
90
|
+
{"text": "Wimbledon", "start": 10.94, "end": 11.28},
|
|
91
|
+
{"text": "Champion", "start": 11.38, "end": 11.84}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`crown_group` always uses the crown slot — no need to specify `slot`.
|
|
98
|
+
Set `crown_group: null` to disable.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
TEMPLATE: champion
|
|
4
|
+
STYLE LOCKED. LAYOUT OPEN.
|
|
5
|
+
|
|
6
|
+
Look: podcast / interview, upper-left column with intro→phrase→emph
|
|
7
|
+
beats, big center-stage CROWN crossing the subject for the payoff.
|
|
8
|
+
|
|
9
|
+
Locked:
|
|
10
|
+
- 5 typography slots: intro / phrase / emph / dream / crown
|
|
11
|
+
- mix-blend-mode: screen, color #fff5df, deep text-shadow
|
|
12
|
+
- Single-caption-swap layout (caps absolute-positioned in left-plane)
|
|
13
|
+
- GSAP soft/present per-word reveal
|
|
14
|
+
|
|
15
|
+
Open via plan.json:
|
|
16
|
+
- left-plane geometry + perspective
|
|
17
|
+
- crown_plane top
|
|
18
|
+
- --font-scale
|
|
19
|
+
- GROUPS array + slot per group
|
|
20
|
+
- whether crown is enabled (crown_group)
|
|
21
|
+
-->
|
|
22
|
+
<html lang="en">
|
|
23
|
+
<head>
|
|
24
|
+
<meta charset="UTF-8" />
|
|
25
|
+
<meta name="viewport" content="width={{WIDTH}}, height={{HEIGHT}}" />
|
|
26
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
27
|
+
<style>
|
|
28
|
+
:root { --font-scale: {{FONT_SCALE}}; }
|
|
29
|
+
|
|
30
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
31
|
+
html, body {
|
|
32
|
+
margin: 0;
|
|
33
|
+
width: {{WIDTH}}px; height: {{HEIGHT}}px;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
background: #000;
|
|
36
|
+
font-family: "Inter", system-ui, sans-serif;
|
|
37
|
+
}
|
|
38
|
+
#a-roll { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
|
|
39
|
+
|
|
40
|
+
#stage {
|
|
41
|
+
position: absolute;
|
|
42
|
+
top: 0; left: 0;
|
|
43
|
+
width: {{WIDTH}}px; height: {{HEIGHT}}px;
|
|
44
|
+
perspective: 2400px;
|
|
45
|
+
perspective-origin: 25% 50%;
|
|
46
|
+
pointer-events: none;
|
|
47
|
+
z-index: 2;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* LAYOUT */
|
|
51
|
+
.left-plane {
|
|
52
|
+
position: absolute;
|
|
53
|
+
top: {{PLANE_TOP}}px;
|
|
54
|
+
left: {{PLANE_LEFT}}px;
|
|
55
|
+
width: {{PLANE_WIDTH}}px;
|
|
56
|
+
height: {{PLANE_HEIGHT}}px;
|
|
57
|
+
transform-style: preserve-3d;
|
|
58
|
+
transform: rotateY({{ROTATE_Y}}deg);
|
|
59
|
+
transform-origin: left center;
|
|
60
|
+
padding: 24px 36px;
|
|
61
|
+
}
|
|
62
|
+
.left-plane .cap {
|
|
63
|
+
position: absolute;
|
|
64
|
+
top: 24px;
|
|
65
|
+
right: 36px;
|
|
66
|
+
max-width: calc({{PLANE_WIDTH}}px - 72px);
|
|
67
|
+
}
|
|
68
|
+
.crown-plane {
|
|
69
|
+
position: absolute;
|
|
70
|
+
top: {{CROWN_TOP}}px;
|
|
71
|
+
left: {{CROWN_LEFT}}px;
|
|
72
|
+
right: {{CROWN_RIGHT}}px;
|
|
73
|
+
text-align: {{CROWN_ALIGN}};
|
|
74
|
+
pointer-events: none;
|
|
75
|
+
}
|
|
76
|
+
.crown-plane .cap-crown {
|
|
77
|
+
font-size: calc(140px * var(--font-scale) * {{CROWN_SCALE}});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* STYLE (locked) */
|
|
81
|
+
.cap {
|
|
82
|
+
display: block;
|
|
83
|
+
position: relative;
|
|
84
|
+
line-height: 1.02;
|
|
85
|
+
opacity: 0;
|
|
86
|
+
mix-blend-mode: {{BLEND_MODE}};
|
|
87
|
+
color: {{CAP_COLOR}};
|
|
88
|
+
text-shadow: {{TEXT_SHADOW}};
|
|
89
|
+
filter: {{TEXT_FILTER}};
|
|
90
|
+
will-change: transform, opacity;
|
|
91
|
+
}
|
|
92
|
+
.cap .w { display: inline-block; opacity: 0; will-change: opacity, transform; }
|
|
93
|
+
|
|
94
|
+
.cap-intro { font-size: calc(52px * var(--font-scale));
|
|
95
|
+
font-weight: 500; font-style: italic;
|
|
96
|
+
letter-spacing: -0.005em; }
|
|
97
|
+
.cap-phrase { font-size: calc(60px * var(--font-scale));
|
|
98
|
+
font-weight: 600;
|
|
99
|
+
letter-spacing: -0.015em; }
|
|
100
|
+
.cap-emph { font-size: calc(70px * var(--font-scale));
|
|
101
|
+
font-weight: 800;
|
|
102
|
+
letter-spacing: -0.025em; }
|
|
103
|
+
.cap-dream { font-size: calc(64px * var(--font-scale));
|
|
104
|
+
font-weight: 700; font-style: italic;
|
|
105
|
+
letter-spacing: -0.015em; }
|
|
106
|
+
.cap-crown { font-size: calc(140px * var(--font-scale));
|
|
107
|
+
font-weight: 900;
|
|
108
|
+
letter-spacing: -0.035em; text-transform: uppercase;
|
|
109
|
+
line-height: 1.0; }
|
|
110
|
+
</style>
|
|
111
|
+
</head>
|
|
112
|
+
<body>
|
|
113
|
+
<div
|
|
114
|
+
id="root"
|
|
115
|
+
data-composition-id="main"
|
|
116
|
+
data-start="0"
|
|
117
|
+
data-duration="{{DURATION}}"
|
|
118
|
+
data-width="{{WIDTH}}"
|
|
119
|
+
data-height="{{HEIGHT}}"
|
|
120
|
+
>
|
|
121
|
+
<video
|
|
122
|
+
id="a-roll"
|
|
123
|
+
src="source.mp4"
|
|
124
|
+
muted
|
|
125
|
+
playsinline
|
|
126
|
+
data-duration="{{DURATION}}"
|
|
127
|
+
data-track-index="0"
|
|
128
|
+
style="z-index: 1"
|
|
129
|
+
></video>
|
|
130
|
+
|
|
131
|
+
<div id="stage">
|
|
132
|
+
<div class="left-plane">{{GROUPS_HTML}}</div>
|
|
133
|
+
<div class="crown-plane">{{CROWN_HTML}}</div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<audio
|
|
137
|
+
id="a-roll-audio"
|
|
138
|
+
src="source.mp4"
|
|
139
|
+
data-start="0"
|
|
140
|
+
data-duration="{{DURATION}}"
|
|
141
|
+
data-track-index="3"
|
|
142
|
+
data-volume="1"
|
|
143
|
+
></audio>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<script>
|
|
147
|
+
window.__timelines = window.__timelines || {};
|
|
148
|
+
const tl = gsap.timeline({ paused: true });
|
|
149
|
+
const DUR = {{DURATION}};
|
|
150
|
+
const GROUPS = {{GROUPS_JSON}};
|
|
151
|
+
const CROWN = {{CROWN_JSON}};
|
|
152
|
+
|
|
153
|
+
function animateGroup(g) {
|
|
154
|
+
var sel = "#" + g.id;
|
|
155
|
+
var isSoft = g.tone === "soft";
|
|
156
|
+
tl.set(sel, { opacity: 1, y: 0 }, Math.max(0, g.in - 0.01));
|
|
157
|
+
|
|
158
|
+
g.words.forEach(function (w, i) {
|
|
159
|
+
var wsel = sel + " .w[data-i='" + i + "']";
|
|
160
|
+
if (isSoft) {
|
|
161
|
+
tl.fromTo(wsel,
|
|
162
|
+
{ opacity: 0, y: 8 },
|
|
163
|
+
{ opacity: 1, y: 0, duration: 0.42, ease: "power2.out", overwrite: "auto" },
|
|
164
|
+
w.start);
|
|
165
|
+
} else {
|
|
166
|
+
tl.fromTo(wsel,
|
|
167
|
+
{ opacity: 0, y: 6, scale: 1.04 },
|
|
168
|
+
{ opacity: 1, y: 0, scale: 1.0, duration: 0.22,
|
|
169
|
+
ease: "power3.out", overwrite: "auto", transformOrigin: "50% 50%" },
|
|
170
|
+
w.start);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
if (g.out < DUR) {
|
|
175
|
+
tl.to(sel, { opacity: 0, duration: 0.45, ease: "power2.in", overwrite: "auto" },
|
|
176
|
+
g.out - 0.45);
|
|
177
|
+
}
|
|
178
|
+
tl.set(sel, { opacity: 0, visibility: "hidden" }, g.out);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
GROUPS.forEach(animateGroup);
|
|
182
|
+
if (CROWN) animateGroup(CROWN);
|
|
183
|
+
|
|
184
|
+
tl.seek(0);
|
|
185
|
+
window.__timelines["main"] = tl;
|
|
186
|
+
</script>
|
|
187
|
+
</body>
|
|
188
|
+
</html>
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Template: memory-wall
|
|
2
|
+
|
|
3
|
+
**Look:** introspective monologue, italic poem stacking on a back wall,
|
|
4
|
+
right-aligned cascade for the climax. Sam Harris / Pico Iyer territory.
|
|
5
|
+
|
|
6
|
+
**Visual identity (LOCKED — do not change):**
|
|
7
|
+
|
|
8
|
+
- 4-slot typography arc: italic 600 → italic 500 hanging-indent → upright
|
|
9
|
+
700 pivot → uppercase 900 climax
|
|
10
|
+
- `mix-blend-mode: screen` over warm-bone color (#fff4dc)
|
|
11
|
+
- soft text-shadow + brightness boost
|
|
12
|
+
- Per-word fade with subtle Y-drift (soft tone) or pop+scale (present tone)
|
|
13
|
+
|
|
14
|
+
## When to apply
|
|
15
|
+
|
|
16
|
+
✅ **Good fit:**
|
|
17
|
+
|
|
18
|
+
- Talking-head with a flat back wall (acoustic foam, plain plaster, soft
|
|
19
|
+
bookshelf) on one side
|
|
20
|
+
- Single subject, fixed or near-fixed camera
|
|
21
|
+
- Voice-over feel: introspective, narrative, "I was thinking…"
|
|
22
|
+
- Mid-tone or dark backdrop (luminance < 180)
|
|
23
|
+
|
|
24
|
+
❌ **Wrong fit:**
|
|
25
|
+
|
|
26
|
+
- Bright window/sky backdrop → screen blend blows out
|
|
27
|
+
- Cluttered backdrop with text/graphics → conflicts with caption text
|
|
28
|
+
- Energetic / vlog / TikTok style → wrong vibe
|
|
29
|
+
- Multiple speakers / hard cuts → caption arc breaks
|
|
30
|
+
|
|
31
|
+
## What agent decides per scene
|
|
32
|
+
|
|
33
|
+
| Field | What | Example |
|
|
34
|
+
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
|
|
35
|
+
| `plane.top/right/width/height` | Where the wall plane sits in frame. Plane should HUG the side of the wall, not float over the subject. | `{top: 90, right: 30, width: 720, height: 520}` for 1280×720 |
|
|
36
|
+
| `plane.rotateY` | Match the wall's perspective angle. Negative for right-side wall (text recedes left), positive for left-side wall. | `-13` for a right-side wall at slight angle |
|
|
37
|
+
| `plane.rotateX` | Tiny vertical tilt if wall is angled up/down. Usually 0-2 deg. | `1` |
|
|
38
|
+
| `font_scale` | Multiplier on the locked cap-N base sizes. Tune for frame height. | `1.0` for 1280×720, `~1.5` for 1920×1080, `~0.7` for 720p portrait |
|
|
39
|
+
| `groups[].slot` | Which of the 4 typography slots this group uses (1/2/3/4). Drives the arc. | See below |
|
|
40
|
+
| `groups[].tone` | "soft" or "present" — drives motion curve | `"soft"` for opening lines, `"present"` for pivot+climax |
|
|
41
|
+
|
|
42
|
+
## Slot assignment rules
|
|
43
|
+
|
|
44
|
+
Aim for ONE arc across the video: `1 → 2 → 3 → 4`. Don't repeat slots if you
|
|
45
|
+
can avoid it; don't skip slots without reason.
|
|
46
|
+
|
|
47
|
+
| Slot | Use for |
|
|
48
|
+
| ---- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| 1 | The opener. The "I was thinking" line. Italic, soft entry. |
|
|
50
|
+
| 2 | The dreamy continuation / modifier. Smaller italic, hanging-indent — feels like the second half of a sentence with some staggered drift. |
|
|
51
|
+
| 3 | The pivot. Upright (no italic), the syntactic turn. ("but suddenly", "and then…") |
|
|
52
|
+
| 4 | The climax. Big uppercase 900. The payoff line. Aim for ≤4 short words so the right-aligned cascade naturally wraps to 2-3 lines. |
|
|
53
|
+
|
|
54
|
+
If the script is longer than 4 groups, repeat slot 1 or 2 for additional
|
|
55
|
+
soft lines, but reserve slot 4 for the SINGLE climax.
|
|
56
|
+
|
|
57
|
+
## Plan.json shape
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mode": "template",
|
|
62
|
+
"template": "memory-wall",
|
|
63
|
+
"duration": 8.04,
|
|
64
|
+
"fps": 24,
|
|
65
|
+
"width": 1280,
|
|
66
|
+
"height": 720,
|
|
67
|
+
"plane": {
|
|
68
|
+
"top": 90,
|
|
69
|
+
"right": 30,
|
|
70
|
+
"width": 720,
|
|
71
|
+
"height": 520,
|
|
72
|
+
"rotateY": -13,
|
|
73
|
+
"rotateX": 1
|
|
74
|
+
},
|
|
75
|
+
"font_scale": 1.0,
|
|
76
|
+
"groups": [
|
|
77
|
+
{
|
|
78
|
+
"id": "cg-0",
|
|
79
|
+
"slot": 1,
|
|
80
|
+
"tone": "soft",
|
|
81
|
+
"in": 0.2,
|
|
82
|
+
"out": 4.85,
|
|
83
|
+
"words": [
|
|
84
|
+
{ "text": "Some", "start": 0.24, "end": 0.44 },
|
|
85
|
+
{ "text": "memories", "start": 0.48, "end": 0.82 },
|
|
86
|
+
{ "text": "feel", "start": 0.92, "end": 1.14 },
|
|
87
|
+
{ "text": "soft", "start": 1.2, "end": 1.64 }
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "cg-1",
|
|
92
|
+
"slot": 2,
|
|
93
|
+
"tone": "soft",
|
|
94
|
+
"in": 2.55,
|
|
95
|
+
"out": 4.85,
|
|
96
|
+
"words": [
|
|
97
|
+
{ "text": "like", "start": 2.66, "end": 2.78 },
|
|
98
|
+
{ "text": "old", "start": 2.86, "end": 3.02 },
|
|
99
|
+
{ "text": "film", "start": 3.16, "end": 3.46 }
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "cg-2",
|
|
104
|
+
"slot": 3,
|
|
105
|
+
"tone": "present",
|
|
106
|
+
"in": 4.9,
|
|
107
|
+
"out": 8.04,
|
|
108
|
+
"words": [
|
|
109
|
+
{ "text": "but", "start": 5.04, "end": 5.18 },
|
|
110
|
+
{ "text": "suddenly", "start": 5.24, "end": 5.76 }
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "cg-3",
|
|
115
|
+
"slot": 4,
|
|
116
|
+
"tone": "present",
|
|
117
|
+
"in": 6.7,
|
|
118
|
+
"out": 8.04,
|
|
119
|
+
"words": [
|
|
120
|
+
{ "text": "everything", "start": 6.82, "end": 7.14 },
|
|
121
|
+
{ "text": "is", "start": 7.18, "end": 7.28 },
|
|
122
|
+
{ "text": "sharp", "start": 7.32, "end": 7.52 },
|
|
123
|
+
{ "text": "again", "start": 7.58, "end": 7.92 }
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Don't fight the template
|
|
131
|
+
|
|
132
|
+
If the user wants different typography, different blend, or different motion:
|
|
133
|
+
**use Standard mode** (`../../standard/`). Don't try to override the locked CSS — the
|
|
134
|
+
template's visual consistency is the whole point.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
TEMPLATE: memory-wall
|
|
4
|
+
STYLE LOCKED. LAYOUT OPEN.
|
|
5
|
+
|
|
6
|
+
Locked (do not edit — overriding breaks visual consistency):
|
|
7
|
+
- cap-1/2/3/4 typography (weights, italic, letter-spacing, padding-right)
|
|
8
|
+
- mix-blend-mode: screen
|
|
9
|
+
- color, text-shadow, filter
|
|
10
|
+
- GSAP motion: container fade-in via tl.set, per-word opacity+y reveal,
|
|
11
|
+
group fade-out 0.45s before g.out
|
|
12
|
+
|
|
13
|
+
Open (agent fills via plan.json):
|
|
14
|
+
- {{PLANE_TOP}} {{PLANE_RIGHT}} {{PLANE_WIDTH}} {{PLANE_HEIGHT}}
|
|
15
|
+
- {{ROTATE_Y}} {{ROTATE_X}} (perspective angle on the wall)
|
|
16
|
+
- --font-scale CSS var (multiplies all cap-N sizes — agent tunes for frame)
|
|
17
|
+
- GROUPS array (transcript groups, slot assignment 1/2/3/4, in/out/words)
|
|
18
|
+
|
|
19
|
+
Style typography is keyed to "slots", semantic positions in the arc:
|
|
20
|
+
cap-1: opener (italic, soft entry)
|
|
21
|
+
cap-2: continuation (smaller italic, hanging indent — ragged poem feel)
|
|
22
|
+
cap-3: pivot (upright, no italic, syntactic turn)
|
|
23
|
+
cap-4: climax (UPPERCASE 900, the payoff line)
|
|
24
|
+
-->
|
|
25
|
+
<html lang="en">
|
|
26
|
+
<head>
|
|
27
|
+
<meta charset="UTF-8" />
|
|
28
|
+
<meta name="viewport" content="width={{WIDTH}}, height={{HEIGHT}}" />
|
|
29
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
30
|
+
<style>
|
|
31
|
+
:root { --font-scale: {{FONT_SCALE}}; }
|
|
32
|
+
|
|
33
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
34
|
+
html, body {
|
|
35
|
+
margin: 0;
|
|
36
|
+
width: {{WIDTH}}px; height: {{HEIGHT}}px;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
background: #000;
|
|
39
|
+
font-family: "Inter", system-ui, sans-serif;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#a-roll {
|
|
43
|
+
position: absolute; inset: 0;
|
|
44
|
+
width: 100%; height: 100%;
|
|
45
|
+
object-fit: cover;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#stage {
|
|
49
|
+
position: absolute;
|
|
50
|
+
top: 0; left: 0;
|
|
51
|
+
width: {{WIDTH}}px; height: {{HEIGHT}}px;
|
|
52
|
+
perspective: 1400px;
|
|
53
|
+
perspective-origin: 30% 40%;
|
|
54
|
+
pointer-events: none;
|
|
55
|
+
z-index: 2;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* LAYOUT (agent-tunable via plan.json) */
|
|
59
|
+
.wall-plane {
|
|
60
|
+
position: absolute;
|
|
61
|
+
top: {{PLANE_TOP}}px;
|
|
62
|
+
right: {{PLANE_RIGHT}}px;
|
|
63
|
+
width: {{PLANE_WIDTH}}px;
|
|
64
|
+
height: {{PLANE_HEIGHT}}px;
|
|
65
|
+
transform-style: preserve-3d;
|
|
66
|
+
transform: rotateY({{ROTATE_Y}}deg) rotateX({{ROTATE_X}}deg);
|
|
67
|
+
transform-origin: right center;
|
|
68
|
+
padding: 24px 32px;
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
align-items: flex-end;
|
|
73
|
+
text-align: right;
|
|
74
|
+
gap: 14px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* STYLE (locked) */
|
|
78
|
+
.cap {
|
|
79
|
+
display: block;
|
|
80
|
+
position: relative;
|
|
81
|
+
line-height: 1.05;
|
|
82
|
+
opacity: 0;
|
|
83
|
+
mix-blend-mode: {{BLEND_MODE}};
|
|
84
|
+
color: {{CAP_COLOR}};
|
|
85
|
+
text-shadow: {{TEXT_SHADOW}};
|
|
86
|
+
filter: {{TEXT_FILTER}};
|
|
87
|
+
will-change: transform, opacity;
|
|
88
|
+
}
|
|
89
|
+
.cap .w { display: inline-block; opacity: 0; will-change: opacity, transform; }
|
|
90
|
+
|
|
91
|
+
.cap-1 { font-size: calc(78px * var(--font-scale));
|
|
92
|
+
font-weight: 600; font-style: italic;
|
|
93
|
+
letter-spacing: -0.01em; }
|
|
94
|
+
.cap-2 { font-size: calc(66px * var(--font-scale));
|
|
95
|
+
font-weight: 500; font-style: italic;
|
|
96
|
+
letter-spacing: -0.005em;
|
|
97
|
+
padding-right: calc(44px * var(--font-scale)); }
|
|
98
|
+
.cap-3 { font-size: calc(72px * var(--font-scale));
|
|
99
|
+
font-weight: 700;
|
|
100
|
+
letter-spacing: -0.015em; }
|
|
101
|
+
.cap-4 { font-size: calc(90px * var(--font-scale));
|
|
102
|
+
font-weight: 900;
|
|
103
|
+
letter-spacing: -0.03em;
|
|
104
|
+
text-transform: uppercase;
|
|
105
|
+
line-height: 1.0; }
|
|
106
|
+
</style>
|
|
107
|
+
</head>
|
|
108
|
+
<body>
|
|
109
|
+
<div
|
|
110
|
+
id="root"
|
|
111
|
+
data-composition-id="main"
|
|
112
|
+
data-start="0"
|
|
113
|
+
data-duration="{{DURATION}}"
|
|
114
|
+
data-width="{{WIDTH}}"
|
|
115
|
+
data-height="{{HEIGHT}}"
|
|
116
|
+
>
|
|
117
|
+
<video
|
|
118
|
+
id="a-roll"
|
|
119
|
+
src="source.mp4"
|
|
120
|
+
muted
|
|
121
|
+
playsinline
|
|
122
|
+
data-duration="{{DURATION}}"
|
|
123
|
+
data-track-index="0"
|
|
124
|
+
style="z-index: 1"
|
|
125
|
+
></video>
|
|
126
|
+
|
|
127
|
+
<div id="stage">
|
|
128
|
+
<div class="wall-plane">{{GROUPS_HTML}}</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<audio
|
|
132
|
+
id="a-roll-audio"
|
|
133
|
+
src="source.mp4"
|
|
134
|
+
data-start="0"
|
|
135
|
+
data-duration="{{DURATION}}"
|
|
136
|
+
data-track-index="3"
|
|
137
|
+
data-volume="1"
|
|
138
|
+
></audio>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<script>
|
|
142
|
+
window.__timelines = window.__timelines || {};
|
|
143
|
+
const tl = gsap.timeline({ paused: true });
|
|
144
|
+
const DUR = {{DURATION}};
|
|
145
|
+
const GROUPS = {{GROUPS_JSON}};
|
|
146
|
+
|
|
147
|
+
GROUPS.forEach(function (g) {
|
|
148
|
+
var sel = "#" + g.id;
|
|
149
|
+
var isSoft = g.tone === "soft";
|
|
150
|
+
tl.set(sel, { opacity: 1, y: 0 }, Math.max(0, g.in - 0.01));
|
|
151
|
+
|
|
152
|
+
g.words.forEach(function (w, i) {
|
|
153
|
+
var wsel = sel + " .w[data-i='" + i + "']";
|
|
154
|
+
if (isSoft) {
|
|
155
|
+
tl.fromTo(wsel,
|
|
156
|
+
{ opacity: 0, y: 8 },
|
|
157
|
+
{ opacity: 1, y: 0, duration: 0.45, ease: "power2.out", overwrite: "auto" },
|
|
158
|
+
w.start);
|
|
159
|
+
} else {
|
|
160
|
+
tl.fromTo(wsel,
|
|
161
|
+
{ opacity: 0, y: 6, scale: 1.04 },
|
|
162
|
+
{ opacity: 1, y: 0, scale: 1.0, duration: 0.22,
|
|
163
|
+
ease: "power3.out", overwrite: "auto", transformOrigin: "100% 50%" },
|
|
164
|
+
w.start);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
if (g.out < DUR) {
|
|
169
|
+
tl.to(sel, { opacity: 0, duration: 0.5, ease: "power2.in", overwrite: "auto" },
|
|
170
|
+
g.out - 0.5);
|
|
171
|
+
}
|
|
172
|
+
tl.set(sel, { opacity: 0, visibility: "hidden" }, g.out);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
tl.seek(0);
|
|
176
|
+
window.__timelines["main"] = tl;
|
|
177
|
+
</script>
|
|
178
|
+
</body>
|
|
179
|
+
</html>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Template: portrait-header
|
|
2
|
+
|
|
3
|
+
**Look:** 9:16 portrait talking-head with captions on a horizontal strip
|
|
4
|
+
across the top of the frame, above the subject's head. Optional crown at
|
|
5
|
+
the bottom for shots that include the subject's waist or below.
|
|
6
|
+
|
|
7
|
+
**Visual identity (LOCKED):**
|
|
8
|
+
|
|
9
|
+
- 5 typography slots: intro / phrase / emph / dream / crown (centered)
|
|
10
|
+
- `mix-blend-mode: screen` over warm bone color (#fff5df)
|
|
11
|
+
- Single-caption swap (caps stack at one position in the header strip)
|
|
12
|
+
- Per-word fade with subtle Y-drift (soft) or pop+scale (present)
|
|
13
|
+
|
|
14
|
+
## When to apply
|
|
15
|
+
|
|
16
|
+
✅ **Good fit:**
|
|
17
|
+
|
|
18
|
+
- 9:16 portrait video (1080×1920 typical)
|
|
19
|
+
- Single subject filling the center of the frame
|
|
20
|
+
- Clean band visible above the head
|
|
21
|
+
- Speech is relatively dense (many short phrases) — crown only for the
|
|
22
|
+
one true climax
|
|
23
|
+
|
|
24
|
+
❌ **Wrong fit:**
|
|
25
|
+
|
|
26
|
+
- Subject's head crops to the very top of frame (no header band exists)
|
|
27
|
+
- 16:9 landscape → use `champion` or `memory-wall` instead
|
|
28
|
+
- Multiple speakers / cuts
|
|
29
|
+
|
|
30
|
+
## Layout decisions
|
|
31
|
+
|
|
32
|
+
| Field | What | Example (1080×1920) |
|
|
33
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
|
|
34
|
+
| `header.top` | Y of the header strip. Should sit above the subject's head with ~30px breathing room. | `30` if hair top is around y=200 |
|
|
35
|
+
| `header.height` | Height of the strip. Bigger for longer captions / 2-line wraps. | `280` |
|
|
36
|
+
| `crown_top` | Y of the crown line (bottom of frame). Skip if no waist visible. | `1620` for a near-full-body shot |
|
|
37
|
+
| `crown_enabled` | Whether to render a bottom crown. Skip if subject body fills the lower half completely (matte will block crown anyway). | `false` for tight head-and-shoulders |
|
|
38
|
+
| `font_scale` | Scale multiplier on locked sizes. | `1.0` for 1080×1920 |
|
|
39
|
+
|
|
40
|
+
## Slot assignment
|
|
41
|
+
|
|
42
|
+
Same arc as champion: intro / phrase / emph / dream / crown.
|
|
43
|
+
|
|
44
|
+
For portrait-header specifically, header band is narrow (one strip), so:
|
|
45
|
+
|
|
46
|
+
- Most groups fit on 1-2 lines
|
|
47
|
+
- Don't use crown if it'd be hidden by the body matte (Pausch-style portraits
|
|
48
|
+
often need to skip crown entirely and promote the climax to `emph` in the
|
|
49
|
+
header instead)
|
|
50
|
+
|
|
51
|
+
## Plan.json shape
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mode": "template",
|
|
56
|
+
"template": "portrait-header",
|
|
57
|
+
"duration": 25.3, "fps": 24, "width": 1080, "height": 1920,
|
|
58
|
+
"header": { "top": 30, "height": 280 },
|
|
59
|
+
"crown_top": 1620,
|
|
60
|
+
"font_scale": 1.0,
|
|
61
|
+
"groups": [
|
|
62
|
+
{ "id": "cg-0", "slot": "intro", "tone": "soft",
|
|
63
|
+
"in": 0.10, "out": 3.20, "words": [...] },
|
|
64
|
+
{ "id": "cg-1", "slot": "phrase", "tone": "soft",
|
|
65
|
+
"in": 3.55, "out": 5.80, "words": [...] },
|
|
66
|
+
{ "id": "cg-2", "slot": "emph", "tone": "present",
|
|
67
|
+
"in": 17.85, "out": 22.10,
|
|
68
|
+
"words": [
|
|
69
|
+
{"text": "Time", "start": 17.94, "end": 18.26},
|
|
70
|
+
{"text": "is", "start": 18.38, "end": 18.54},
|
|
71
|
+
{"text": "all", "start": 18.66, "end": 18.80},
|
|
72
|
+
{"text": "we", "start": 18.92, "end": 19.02},
|
|
73
|
+
{"text": "have", "start": 19.12, "end": 19.38}
|
|
74
|
+
]}
|
|
75
|
+
],
|
|
76
|
+
"crown_group": null
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Set `crown_group: null` if you've checked that a crown would be blocked by
|
|
81
|
+
the subject body or the shot composition.
|