dsh-hyperframes 0.2.0 → 0.3.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/README.en.md +23 -6
- package/README.md +22 -7
- package/lib/index.d.ts +1 -1
- package/lib/index.js +22 -1
- package/package.json +1 -1
- package/skills/embedded-captions/CATALOG.md +91 -0
- package/skills/embedded-captions/SKILL.md +258 -0
- package/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/skills/embedded-captions/dna/README.md +148 -0
- package/skills/embedded-captions/dna/chrome.json +68 -0
- package/skills/embedded-captions/dna/cream.json +69 -0
- package/skills/embedded-captions/dna/documentary.json +62 -0
- package/skills/embedded-captions/dna/editorial.json +70 -0
- package/skills/embedded-captions/dna/glitch.json +82 -0
- package/skills/embedded-captions/dna/ink.json +65 -0
- package/skills/embedded-captions/dna/keynote.json +62 -0
- package/skills/embedded-captions/dna/loud.json +75 -0
- package/skills/embedded-captions/dna/neon.json +58 -0
- package/skills/embedded-captions/dna/velocity.json +89 -0
- package/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 +0 -0
- package/skills/embedded-captions/modes/standard/fonts/fonts.css +401 -0
- package/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/skills/embedded-captions/references/composition-craft.md +522 -0
- package/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/skills/embedded-captions/references/failure-modes.md +145 -0
- package/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/skills/embedded-captions/references/rail.md +68 -0
- package/skills/embedded-captions/references/reference-bar.md +47 -0
- package/skills/embedded-captions/references/scene-types.md +94 -0
- package/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/skills/embedded-captions/references/typography-presets.md +63 -0
- package/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/skills/embedded-captions/scripts/gen-stroke-path.py +57 -0
- package/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/skills/embedded-captions/scripts/make-cinematic.cjs +1206 -0
- package/skills/embedded-captions/scripts/make-composition.cjs +405 -0
- package/skills/embedded-captions/scripts/make-theme.cjs +8585 -0
- package/skills/embedded-captions/scripts/matte.cjs +280 -0
- package/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/skills/embedded-captions/scripts/render-and-composite.sh +469 -0
- package/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/skills/embedded-captions/scripts/transcribe.cjs +332 -0
- package/skills/embedded-captions/themes/README.md +243 -0
- package/skills/embedded-captions/themes/anchor.json +27 -0
- package/skills/embedded-captions/themes/arcade.json +51 -0
- package/skills/embedded-captions/themes/aurora.json +41 -0
- package/skills/embedded-captions/themes/biolume.json +35 -0
- package/skills/embedded-captions/themes/brush.json +74 -0
- package/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/skills/embedded-captions/themes/dossier.json +56 -0
- package/skills/embedded-captions/themes/graffiti.json +62 -0
- package/skills/embedded-captions/themes/hologram.json +41 -0
- package/skills/embedded-captions/themes/inkwater.json +43 -0
- package/skills/embedded-captions/themes/laser.json +46 -0
- package/skills/embedded-captions/themes/lastpage.json +33 -0
- package/skills/embedded-captions/themes/neonsign.json +53 -0
- package/skills/embedded-captions/themes/ordnance.json +54 -0
- package/skills/embedded-captions/themes/papercut.json +37 -0
- package/skills/embedded-captions/themes/popup.json +46 -0
- package/skills/embedded-captions/themes/ransom.json +62 -0
- package/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/skills/embedded-captions/themes/spectrum.json +46 -0
- package/skills/embedded-captions/themes/stardust.json +29 -0
- package/skills/embedded-captions/themes/stomp.json +43 -0
- package/skills/embedded-captions/themes/terminal.json +49 -0
- package/skills/embedded-captions/themes/thunder.json +44 -0
- package/skills/embedded-captions/themes/transit.json +44 -0
- package/skills/embedded-captions/themes/vhs.json +47 -0
- package/skills/faceless-explainer/SKILL.md +233 -0
- package/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/skills/faceless-explainer/references/motion-language.md +156 -0
- package/skills/faceless-explainer/references/story-design.md +255 -0
- package/skills/faceless-explainer/references/visual-design.md +146 -0
- package/skills/faceless-explainer/scripts/assemble-index.mjs +623 -0
- package/skills/faceless-explainer/scripts/assemble-index.test.mjs +72 -0
- package/skills/faceless-explainer/scripts/audio.mjs +291 -0
- package/skills/faceless-explainer/scripts/audio.test.mjs +176 -0
- package/skills/faceless-explainer/scripts/build-frame.mjs +551 -0
- package/skills/faceless-explainer/scripts/captions.mjs +521 -0
- package/skills/faceless-explainer/scripts/captions.test.mjs +219 -0
- package/skills/faceless-explainer/scripts/frame-packets.mjs +27 -0
- package/skills/faceless-explainer/scripts/frame-packets.test.mjs +66 -0
- package/skills/faceless-explainer/scripts/lib/assets.mjs +56 -0
- package/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/skills/faceless-explainer/scripts/lib/pad-frame-duration.mjs +36 -0
- package/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/skills/faceless-explainer/scripts/lib/tokens.mjs +211 -0
- package/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/skills/faceless-explainer/scripts/transitions.mjs +383 -0
- package/skills/faceless-explainer/scripts/transitions.test.mjs +68 -0
- package/skills/faceless-explainer/sub-agents/frame-worker.md +12 -0
- package/skills/figma/SKILL.md +132 -0
- package/skills/figma/scripts/verify-motion.mjs +153 -0
- package/skills/general-video/SKILL.md +165 -0
- package/skills/general-video/scripts/frame-packets.mjs +38 -0
- package/skills/general-video/scripts/frame-packets.test.mjs +80 -0
- package/skills/general-video/sub-agents/frame-worker.md +34 -0
- package/skills/hyperframes/SKILL.md +98 -337
- package/skills/hyperframes/references/capability-menu.md +47 -0
- package/skills/hyperframes/references/intent-interview.md +71 -0
- package/skills/hyperframes/references/pitch-round.md +40 -0
- package/skills/hyperframes/references/route-briefs.md +11 -0
- package/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/skills/hyperframes/references/routes/general-video.md +12 -0
- package/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/skills/hyperframes/references/skill-lifecycle.md +33 -0
- package/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/skills/hyperframes-animation/SKILL.md +84 -0
- package/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/skills/hyperframes-animation/adapters/animejs.md +130 -0
- package/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +199 -0
- package/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +129 -0
- package/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/skills/hyperframes-animation/adapters/three.md +131 -0
- package/skills/hyperframes-animation/adapters/typegpu.md +182 -0
- package/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/skills/hyperframes-animation/blueprints/agent-progress-theater.md +76 -0
- package/skills/hyperframes-animation/blueprints/camera-journey.md +61 -0
- package/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/skills/hyperframes-animation/blueprints/constellation-hub.md +63 -0
- package/skills/hyperframes-animation/blueprints/cta-morph-press.md +63 -0
- package/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +89 -0
- package/skills/hyperframes-animation/blueprints/dataviz-countup.md +59 -0
- package/skills/hyperframes-animation/blueprints/device-surface-showcase.md +68 -0
- package/skills/hyperframes-animation/blueprints/fixed-anchor-cycle.md +46 -0
- package/skills/hyperframes-animation/blueprints/grid-card-assemble.md +81 -0
- package/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +133 -0
- package/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +121 -0
- package/skills/hyperframes-animation/blueprints/overwhelm-surround.md +58 -0
- package/skills/hyperframes-animation/blueprints/panel-edit-live-sync.md +73 -0
- package/skills/hyperframes-animation/blueprints/prompt-type-submit-generate.md +85 -0
- package/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/skills/hyperframes-animation/blueprints/titlecard-reveal.md +80 -0
- package/skills/hyperframes-animation/blueprints/transcript-scroll-artifact-reveal.md +45 -0
- package/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/skills/hyperframes-animation/blueprints/zoom-out-workspace-reveal.md +68 -0
- package/skills/hyperframes-animation/blueprints-index.md +202 -0
- package/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/skills/hyperframes-animation/rules/3d-camera-flight.md +180 -0
- package/skills/hyperframes-animation/rules/3d-page-scroll.md +135 -0
- package/skills/hyperframes-animation/rules/3d-text-depth-layers.md +128 -0
- package/skills/hyperframes-animation/rules/ai-tracking-box.md +139 -0
- package/skills/hyperframes-animation/rules/ambient-glow-bloom.md +133 -0
- package/skills/hyperframes-animation/rules/anchored-layout-expand.md +148 -0
- package/skills/hyperframes-animation/rules/asr-keyword-glow.md +128 -0
- package/skills/hyperframes-animation/rules/avatar-cloud-network.md +145 -0
- package/skills/hyperframes-animation/rules/camera-cursor-tracking.md +133 -0
- package/skills/hyperframes-animation/rules/card-morph-anchor.md +134 -0
- package/skills/hyperframes-animation/rules/center-outward-expansion.md +88 -0
- package/skills/hyperframes-animation/rules/chart-scrub-readout.md +151 -0
- package/skills/hyperframes-animation/rules/chromatic-glitch.md +150 -0
- package/skills/hyperframes-animation/rules/context-sensitive-cursor.md +140 -0
- package/skills/hyperframes-animation/rules/control-target-sync.md +131 -0
- package/skills/hyperframes-animation/rules/coordinate-target-zoom.md +138 -0
- package/skills/hyperframes-animation/rules/counting-dynamic-scale.md +115 -0
- package/skills/hyperframes-animation/rules/css-marker-patterns.md +208 -0
- package/skills/hyperframes-animation/rules/cursor-click-ripple.md +104 -0
- package/skills/hyperframes-animation/rules/cursor-drag.md +141 -0
- package/skills/hyperframes-animation/rules/depth-of-field-blur.md +112 -0
- package/skills/hyperframes-animation/rules/depth-scatter-assemble.md +139 -0
- package/skills/hyperframes-animation/rules/discrete-text-sequence.md +146 -0
- package/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +149 -0
- package/skills/hyperframes-animation/rules/gradient-text-sweep.md +136 -0
- package/skills/hyperframes-animation/rules/gsap-effects.md +196 -0
- package/skills/hyperframes-animation/rules/hacker-flip-3d.md +123 -0
- package/skills/hyperframes-animation/rules/kinetic-beat-slam.md +137 -0
- package/skills/hyperframes-animation/rules/motion-blur-streak.md +130 -0
- package/skills/hyperframes-animation/rules/multi-cursor-choreography.md +133 -0
- package/skills/hyperframes-animation/rules/multi-phase-camera.md +129 -0
- package/skills/hyperframes-animation/rules/nudge-curve.md +47 -0
- package/skills/hyperframes-animation/rules/orbit-3d-entry.md +148 -0
- package/skills/hyperframes-animation/rules/particle-burst.md +149 -0
- package/skills/hyperframes-animation/rules/physics-press-reaction.md +101 -0
- package/skills/hyperframes-animation/rules/press-release-spring.md +108 -0
- package/skills/hyperframes-animation/rules/reactive-displacement.md +92 -0
- package/skills/hyperframes-animation/rules/scale-swap-transition.md +88 -0
- package/skills/hyperframes-animation/rules/sine-wave-loop.md +85 -0
- package/skills/hyperframes-animation/rules/split-tilt-cards.md +123 -0
- package/skills/hyperframes-animation/rules/spring-pop-entrance.md +107 -0
- package/skills/hyperframes-animation/rules/stat-bars-and-fills.md +145 -0
- package/skills/hyperframes-animation/rules/svg-icon-enrichment.md +141 -0
- package/skills/hyperframes-animation/rules/svg-path-draw.md +122 -0
- package/skills/hyperframes-animation/rules/theme-crossfade-morph.md +126 -0
- package/skills/hyperframes-animation/rules/vertical-spring-ticker.md +104 -0
- package/skills/hyperframes-animation/rules/viewport-change.md +148 -0
- package/skills/hyperframes-animation/rules/waterfall-entry.md +81 -0
- package/skills/hyperframes-animation/rules-index.md +113 -0
- package/skills/hyperframes-animation/scripts/animation-map-sampling.mjs +40 -0
- package/skills/hyperframes-animation/scripts/animation-map-sampling.test.mjs +48 -0
- package/skills/{hyperframes → hyperframes-animation}/scripts/animation-map.mjs +116 -53
- package/skills/hyperframes-animation/scripts/animation-map.test.mjs +444 -0
- package/skills/hyperframes-animation/scripts/package-loader.mjs +384 -0
- package/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/skills/{website-to-hyperframes/references → hyperframes-animation}/techniques.md +146 -26
- package/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +168 -0
- package/skills/{hyperframes/references → hyperframes-animation}/transitions/catalog.md +26 -16
- package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-destruction.md +1 -1
- package/skills/{hyperframes/references/transitions.md → hyperframes-animation/transitions/overview.md} +44 -3
- package/skills/hyperframes-audio/SKILL.md +470 -0
- package/skills/hyperframes-audio/references/attributes.md +138 -0
- package/skills/hyperframes-audio/references/diagnosis.md +276 -0
- package/skills/hyperframes-audio/references/fx-registry.md +84 -0
- package/skills/hyperframes-audio/references/presets.md +216 -0
- package/skills/hyperframes-audio/scripts/carve.mjs +569 -0
- package/skills/hyperframes-audio/scripts/carve.test.mjs +239 -0
- package/skills/hyperframes-cli/SKILL.md +121 -103
- package/skills/hyperframes-cli/references/beats.md +19 -0
- package/skills/hyperframes-cli/references/cloud.md +163 -0
- package/skills/hyperframes-cli/references/cloudrun.md +62 -0
- package/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
- package/skills/hyperframes-cli/references/doctor-browser.md +57 -0
- package/skills/hyperframes-cli/references/init-and-scaffold.md +72 -0
- package/skills/hyperframes-cli/references/lambda.md +185 -0
- package/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
- package/skills/hyperframes-cli/references/preview-render.md +190 -0
- package/skills/hyperframes-cli/references/upgrade-info-misc.md +77 -0
- package/skills/hyperframes-core/SKILL.md +94 -0
- package/skills/hyperframes-core/references/brief-contract.md +108 -0
- package/skills/hyperframes-core/references/brief-format.md +72 -0
- package/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/skills/hyperframes-core/references/creator-editing-recipes.md +367 -0
- package/skills/hyperframes-core/references/data-attributes.md +78 -0
- package/skills/hyperframes-core/references/determinism-rules.md +70 -0
- package/skills/hyperframes-core/references/frame-worker-core.md +80 -0
- package/skills/hyperframes-core/references/full-screen-motion.md +76 -0
- package/skills/hyperframes-core/references/minimal-composition.md +69 -0
- package/skills/hyperframes-core/references/production-loop.md +26 -0
- package/skills/hyperframes-core/references/review-loop.md +41 -0
- package/skills/hyperframes-core/references/script-format.md +52 -0
- package/skills/hyperframes-core/references/storyboard-format.md +130 -0
- package/skills/hyperframes-core/references/sub-compositions.md +239 -0
- package/skills/hyperframes-core/references/subagent-dispatch.md +35 -0
- package/skills/hyperframes-core/references/tailwind.md +123 -0
- package/skills/hyperframes-core/references/tracks-and-clips.md +91 -0
- package/skills/hyperframes-core/references/variables-and-media.md +107 -0
- package/skills/hyperframes-core/scripts/lib/frame-packets-core.mjs +212 -0
- package/skills/hyperframes-creative/SKILL.md +71 -0
- package/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/FRAME.md +277 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/caption-skin.html +224 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
- package/skills/hyperframes-creative/frame-presets/code-editorial/frame-showcase.html +1438 -0
- package/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/skills/{hyperframes → hyperframes-creative}/references/audio-reactive.md +1 -1
- package/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/skills/{hyperframes → hyperframes-creative/references}/data-in-motion.md +1 -1
- package/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/skills/{hyperframes → hyperframes-creative/references}/house-style.md +4 -2
- package/skills/hyperframes-creative/references/motion-principles.md +151 -0
- package/skills/{website-to-hyperframes/references/step-3-script.md → hyperframes-creative/references/narration.md} +5 -9
- package/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/skills/hyperframes-creative/references/story-spine.md +43 -0
- package/skills/{hyperframes → hyperframes-creative}/references/typography.md +45 -2
- package/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/skills/hyperframes-creative/scripts/contrast-report.mjs +538 -0
- package/skills/{gsap → hyperframes-creative}/scripts/extract-audio-data.py +13 -2
- package/skills/hyperframes-creative/scripts/package-loader.mjs +384 -0
- package/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/skills/hyperframes-keyframes/SKILL.md +262 -0
- package/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/skills/hyperframes-keyframes/references/keyframe-patterns.md +108 -0
- package/skills/hyperframes-registry/SKILL.md +55 -16
- package/skills/hyperframes-registry/references/component-quality-bar.md +250 -0
- package/skills/hyperframes-registry/references/contributing.md +174 -0
- package/skills/hyperframes-registry/references/discovery.md +191 -13
- package/skills/hyperframes-registry/references/placeholder-material.md +149 -0
- package/skills/hyperframes-registry/references/templates.md +417 -0
- package/skills/hyperframes-registry/references/wiring-blocks.md +1 -31
- package/skills/hyperframes-registry/references/wiring-components.md +1 -39
- package/skills/media-use/SKILL.md +96 -0
- package/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
- package/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/manifest.json +97 -0
- package/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
- package/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
- package/skills/media-use/audio/references/bgm.md +74 -0
- package/skills/media-use/audio/references/captions/authoring.md +159 -0
- package/skills/{hyperframes/references/dynamic-techniques.md → media-use/audio/references/captions/motion.md} +8 -11
- package/skills/{hyperframes/references/transcript-guide.md → media-use/audio/references/captions/transcript-handling.md} +5 -59
- package/skills/media-use/audio/references/remove-background.md +143 -0
- package/skills/media-use/audio/references/requirements.md +29 -0
- package/skills/media-use/audio/references/sfx.md +42 -0
- package/skills/media-use/audio/references/transcribe.md +52 -0
- package/skills/media-use/audio/references/tts-to-captions.md +26 -0
- package/skills/media-use/audio/references/tts.md +165 -0
- package/skills/media-use/audio/scripts/audio.mjs +293 -0
- package/skills/media-use/audio/scripts/audio.test.mjs +49 -0
- package/skills/media-use/audio/scripts/heygen-tts.mjs +121 -0
- package/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
- package/skills/media-use/audio/scripts/lib/bgm.test.mjs +30 -0
- package/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
- package/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
- package/skills/media-use/audio/scripts/lib/heygen.mjs +155 -0
- package/skills/media-use/audio/scripts/lib/heygen.test.mjs +103 -0
- package/skills/media-use/audio/scripts/lib/python.mjs +63 -0
- package/skills/media-use/audio/scripts/lib/python.test.mjs +68 -0
- package/skills/media-use/audio/scripts/lib/sfx.mjs +143 -0
- package/skills/media-use/audio/scripts/lib/sfx.test.mjs +69 -0
- package/skills/media-use/audio/scripts/lib/tts.mjs +378 -0
- package/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
- package/skills/media-use/audio/scripts/lib/tts.test.mjs +157 -0
- package/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
- package/skills/media-use/audio/scripts/wait-bgm.mjs +167 -0
- package/skills/media-use/luts/README.md +28 -0
- package/skills/media-use/luts/index.json +57 -0
- package/skills/media-use/references/audio.md +19 -0
- package/skills/media-use/references/grading.md +160 -0
- package/skills/media-use/references/media-treatment-recipes.md +929 -0
- package/skills/media-use/references/media-treatments.md +202 -0
- package/skills/media-use/references/memory.md +36 -0
- package/skills/media-use/references/meta.md +61 -0
- package/skills/media-use/references/operations.md +325 -0
- package/skills/media-use/references/resolve.md +139 -0
- package/skills/media-use/references/setup-providers.md +80 -0
- package/skills/media-use/references/telemetry-dashboard.md +49 -0
- package/skills/media-use/scripts/audio-duck.mjs +121 -0
- package/skills/media-use/scripts/dither.mjs +328 -0
- package/skills/media-use/scripts/dither.test.mjs +176 -0
- package/skills/media-use/scripts/eval.mjs +369 -0
- package/skills/media-use/scripts/lib/adopt.mjs +128 -0
- package/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
- package/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +108 -0
- package/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +85 -0
- package/skills/media-use/scripts/lib/cache.mjs +150 -0
- package/skills/media-use/scripts/lib/candidates.mjs +91 -0
- package/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
- package/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
- package/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
- package/skills/media-use/scripts/lib/coverage.test.mjs +117 -0
- package/skills/media-use/scripts/lib/cube-build.mjs +181 -0
- package/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
- package/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
- package/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
- package/skills/media-use/scripts/lib/cutlist.mjs +184 -0
- package/skills/media-use/scripts/lib/cutlist.test.mjs +148 -0
- package/skills/media-use/scripts/lib/duck.mjs +89 -0
- package/skills/media-use/scripts/lib/duck.test.mjs +118 -0
- package/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
- package/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
- package/skills/media-use/scripts/lib/freeze.mjs +70 -0
- package/skills/media-use/scripts/lib/freeze.test.mjs +46 -0
- package/skills/media-use/scripts/lib/grade-analyzer.mjs +264 -0
- package/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
- package/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
- package/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
- package/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
- package/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
- package/skills/media-use/scripts/lib/heygen-video-provider.mjs +127 -0
- package/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +344 -0
- package/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/skills/media-use/scripts/lib/local-models.mjs +318 -0
- package/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
- package/skills/media-use/scripts/lib/local-run.mjs +78 -0
- package/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
- package/skills/media-use/scripts/lib/logo-provider.mjs +222 -0
- package/skills/media-use/scripts/lib/logo-provider.test.mjs +137 -0
- package/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
- package/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
- package/skills/media-use/scripts/lib/lut-preset-provider.mjs +266 -0
- package/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +176 -0
- package/skills/media-use/scripts/lib/manifest.mjs +229 -0
- package/skills/media-use/scripts/lib/manifest.test.mjs +388 -0
- package/skills/media-use/scripts/lib/match.mjs +47 -0
- package/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
- package/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
- package/skills/media-use/scripts/lib/misses.mjs +49 -0
- package/skills/media-use/scripts/lib/misses.test.mjs +78 -0
- package/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
- package/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
- package/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
- package/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
- package/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
- package/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
- package/skills/media-use/scripts/lib/probe.mjs +39 -0
- package/skills/media-use/scripts/lib/probe.test.mjs +31 -0
- package/skills/media-use/scripts/lib/providers.mjs +5 -0
- package/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
- package/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
- package/skills/media-use/scripts/lib/registry.mjs +218 -0
- package/skills/media-use/scripts/lib/registry.test.mjs +261 -0
- package/skills/media-use/scripts/lib/search.mjs +24 -0
- package/skills/media-use/scripts/lib/search.test.mjs +32 -0
- package/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/skills/media-use/scripts/lib/specs.mjs +132 -0
- package/skills/media-use/scripts/lib/specs.test.mjs +157 -0
- package/skills/media-use/scripts/lib/stats.mjs +117 -0
- package/skills/media-use/scripts/lib/stats.test.mjs +165 -0
- package/skills/media-use/scripts/lib/telemetry.mjs +222 -0
- package/skills/media-use/scripts/lib/telemetry.test.mjs +373 -0
- package/skills/media-use/scripts/lib/tts-local-provider.mjs +92 -0
- package/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
- package/skills/media-use/scripts/lib/usage.mjs +57 -0
- package/skills/media-use/scripts/lib/usage.test.mjs +54 -0
- package/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
- package/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
- package/skills/media-use/scripts/lib/words.mjs +18 -0
- package/skills/media-use/scripts/prefs.mjs +70 -0
- package/skills/media-use/scripts/recipe.mjs +103 -0
- package/skills/media-use/scripts/resolve.mjs +1271 -0
- package/skills/media-use/scripts/resolve.test.mjs +1120 -0
- package/skills/media-use/scripts/transcribe.mjs +180 -0
- package/skills/media-use/scripts/transcript-cut.mjs +239 -0
- package/skills/motion-graphics/SKILL.md +176 -0
- package/skills/motion-graphics/agents/builder.md +40 -0
- package/skills/motion-graphics/agents/director.md +53 -0
- package/skills/motion-graphics/agents/finalize.md +17 -0
- package/skills/motion-graphics/catalog-map.md +40 -0
- package/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/skills/motion-graphics/categories/charts/module.md +21 -0
- package/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/skills/motion-graphics/categories/maps/module.md +61 -0
- package/skills/motion-graphics/categories/news/module.md +56 -0
- package/skills/motion-graphics/categories/stat/module.md +21 -0
- package/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/skills/motion-graphics/categories/webpage/module.md +30 -0
- package/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/skills/motion-graphics/grounding/locate.mjs +228 -0
- package/skills/motion-graphics/phases/source/guide.md +21 -0
- package/skills/motion-graphics/references/builder-contract.md +38 -0
- package/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/skills/music-to-video/SKILL.md +208 -0
- package/skills/music-to-video/references/frame-skeleton.md +100 -0
- package/skills/music-to-video/references/montage.md +58 -0
- package/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
- package/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -0
- package/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -0
- package/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -0
- package/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -0
- package/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -0
- package/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -0
- package/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -0
- package/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -0
- package/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -0
- package/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -0
- package/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -0
- package/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -0
- package/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -0
- package/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -0
- package/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -0
- package/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -0
- package/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -0
- package/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -0
- package/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -0
- package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +98 -0
- package/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -0
- package/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -0
- package/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -0
- package/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -0
- package/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -0
- package/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -0
- package/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -0
- package/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -0
- package/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -0
- package/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -0
- package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -0
- package/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -0
- package/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -0
- package/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
- package/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -0
- package/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -0
- package/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -0
- package/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -0
- package/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -0
- package/skills/music-to-video/references/planning.md +104 -0
- package/skills/music-to-video/references/storyboard-format.md +94 -0
- package/skills/music-to-video/references/template-catalog.md +106 -0
- package/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
- package/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
- package/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/asphalt-031.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bark-014.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/brick.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-075-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-101.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-102.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-104.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/carpet.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-034.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-042-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-046.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-047-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/diamond-plate-009.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-080.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-083.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-001.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-004.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-005.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-037.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-054.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-068.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-080.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-103.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-104.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/lava.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/leather-037.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-012.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-016.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-032.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-038.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-041-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-046-b.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-048-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-049-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-055-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-061-b.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/onyx.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/painted-plaster-017.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-138.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-150.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/plaster-001.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-007.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-008-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-009-c.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-b.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-013-a.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-058.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-063.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow-015.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/tiles-138.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/travertine-009.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-049.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-051.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-058.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-066.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-092.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-094.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-051.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-064.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-070.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood.png +0 -0
- package/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
- package/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
- package/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
- package/skills/music-to-video/references/templates/logo-split-lockup-pulse/assets/fredoka-700.woff2 +0 -0
- package/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
- package/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
- package/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
- package/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
- package/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
- package/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
- package/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
- package/skills/music-to-video/scripts/analyze-beatgrid.py +542 -0
- package/skills/music-to-video/scripts/assemble-index.mjs +220 -0
- package/skills/music-to-video/scripts/lib/storyboard.mjs +249 -0
- package/skills/music-to-video/scripts/stage-assets.mjs +58 -0
- package/skills/music-to-video/scripts/validate-plan.mjs +161 -0
- package/skills/music-to-video/sub-agents/frame-worker.md +49 -0
- package/skills/pr-to-video/SKILL.md +269 -0
- package/skills/pr-to-video/references/code-vocabulary.md +111 -0
- package/skills/pr-to-video/references/cut-catalog.md +215 -0
- package/skills/pr-to-video/references/motion-language.md +156 -0
- package/skills/pr-to-video/references/story-design.md +230 -0
- package/skills/pr-to-video/references/visual-design.md +164 -0
- package/skills/pr-to-video/scripts/assemble-index.mjs +629 -0
- package/skills/pr-to-video/scripts/assemble-index.test.mjs +75 -0
- package/skills/pr-to-video/scripts/audio.mjs +291 -0
- package/skills/pr-to-video/scripts/build-frame.mjs +586 -0
- package/skills/pr-to-video/scripts/captions.mjs +521 -0
- package/skills/pr-to-video/scripts/captions.test.mjs +219 -0
- package/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -0
- package/skills/pr-to-video/scripts/fetch-pr.mjs +234 -0
- package/skills/pr-to-video/scripts/frame-contract.test.mjs +209 -0
- package/skills/pr-to-video/scripts/frame-packets.mjs +62 -0
- package/skills/pr-to-video/scripts/ingest.mjs +561 -0
- package/skills/pr-to-video/scripts/lib/assets.mjs +56 -0
- package/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -0
- package/skills/pr-to-video/scripts/lib/frame-contract.mjs +54 -0
- package/skills/pr-to-video/scripts/lib/pad-frame-duration.mjs +36 -0
- package/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -0
- package/skills/pr-to-video/scripts/lib/tokens.mjs +211 -0
- package/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -0
- package/skills/pr-to-video/scripts/lib/transitions.json +71 -0
- package/skills/pr-to-video/scripts/preflight.mjs +51 -0
- package/skills/pr-to-video/scripts/project-dir.mjs +92 -0
- package/skills/pr-to-video/scripts/transitions.mjs +381 -0
- package/skills/pr-to-video/scripts/workflow-guardrails.test.mjs +198 -0
- package/skills/pr-to-video/sub-agents/frame-worker.md +38 -0
- package/skills/product-launch-video/SKILL.md +260 -0
- package/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/skills/product-launch-video/references/motion-language.md +156 -0
- package/skills/product-launch-video/references/story-design.md +508 -0
- package/skills/product-launch-video/references/visual-design.md +126 -0
- package/skills/product-launch-video/scripts/assemble-index.mjs +771 -0
- package/skills/product-launch-video/scripts/assemble-index.test.mjs +72 -0
- package/skills/product-launch-video/scripts/audio.mjs +291 -0
- package/skills/product-launch-video/scripts/audio.test.mjs +218 -0
- package/skills/product-launch-video/scripts/build-frame.mjs +549 -0
- package/skills/product-launch-video/scripts/captions.mjs +521 -0
- package/skills/product-launch-video/scripts/captions.test.mjs +219 -0
- package/skills/product-launch-video/scripts/capture-skill-guardrails.test.mjs +39 -0
- package/skills/product-launch-video/scripts/frame-packets.mjs +27 -0
- package/skills/product-launch-video/scripts/frame-packets.test.mjs +144 -0
- package/skills/product-launch-video/scripts/lib/assets.mjs +56 -0
- package/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
- package/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
- package/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/skills/product-launch-video/scripts/lib/tokens.mjs +218 -0
- package/skills/product-launch-video/scripts/lib/tokens.test.mjs +57 -0
- package/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/skills/product-launch-video/scripts/media-contract.test.mjs +200 -0
- package/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/skills/product-launch-video/scripts/stage-assets.test.mjs +52 -0
- package/skills/product-launch-video/scripts/transitions.mjs +381 -0
- package/skills/product-launch-video/sub-agents/frame-worker.md +21 -0
- package/skills/remotion-to-hyperframes/SKILL.md +129 -0
- package/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
- package/skills/remotion-to-hyperframes/references/api-map.md +142 -0
- package/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
- package/skills/remotion-to-hyperframes/references/eval.md +140 -0
- package/skills/remotion-to-hyperframes/references/fonts.md +112 -0
- package/skills/remotion-to-hyperframes/references/limitations.md +136 -0
- package/skills/remotion-to-hyperframes/references/lottie.md +121 -0
- package/skills/remotion-to-hyperframes/references/media.md +149 -0
- package/skills/remotion-to-hyperframes/references/parameters.md +167 -0
- package/skills/remotion-to-hyperframes/references/sequencing.md +198 -0
- package/skills/remotion-to-hyperframes/references/timing.md +165 -0
- package/skills/remotion-to-hyperframes/references/transitions.md +114 -0
- package/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
- package/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
- package/skills/remotion-to-hyperframes/scripts/lint_source.py +370 -0
- package/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
- package/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
- package/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
- package/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
- package/skills/slideshow/SKILL.md +529 -0
- package/skills/slideshow/references/standalone-harness.md +1020 -0
- package/skills/talking-head-recut/NOTICE.md +39 -0
- package/skills/talking-head-recut/SKILL.md +1211 -0
- package/skills/talking-head-recut/assets/fonts/Caveat-400-latin.woff2 +0 -0
- package/skills/talking-head-recut/assets/fonts/Caveat-700-latin.woff2 +0 -0
- package/skills/talking-head-recut/assets/fonts/Inter-400-latin.woff2 +0 -0
- package/skills/talking-head-recut/assets/fonts/Inter-700-latin.woff2 +0 -0
- package/skills/talking-head-recut/assets/fonts/LXGWWenKaiTC-400-latin.woff2 +0 -0
- package/skills/talking-head-recut/assets/fonts/Virgil.woff2 +0 -0
- package/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/skills/talking-head-recut/media-contract.test.mjs +35 -0
- package/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/skills/gsap/SKILL.md +0 -213
- package/skills/gsap/references/effects.md +0 -297
- package/skills/hyperframes/patterns.md +0 -118
- package/skills/hyperframes/references/captions.md +0 -132
- package/skills/hyperframes/references/css-patterns.md +0 -373
- package/skills/hyperframes/references/motion-principles.md +0 -69
- package/skills/hyperframes/references/tts.md +0 -75
- package/skills/hyperframes/scripts/contrast-report.mjs +0 -335
- package/skills/hyperframes/visual-styles.md +0 -211
- package/skills/website-to-hyperframes/SKILL.md +0 -125
- package/skills/website-to-hyperframes/references/step-1-capture.md +0 -74
- package/skills/website-to-hyperframes/references/step-2-design.md +0 -178
- package/skills/website-to-hyperframes/references/step-4-storyboard.md +0 -246
- package/skills/website-to-hyperframes/references/step-5-vo.md +0 -42
- package/skills/website-to-hyperframes/references/step-6-build.md +0 -229
- package/skills/website-to-hyperframes/references/step-7-validate.md +0 -114
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-3d.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-blur.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-cover.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-dissolve.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-distortion.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-grid.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-light.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-mechanical.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-other.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-push.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-radial.md +0 -0
- /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-scale.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/bold-energetic.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/clean-corporate.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/dark-premium.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/jewel-rich.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/monochrome.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/nature-earth.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/neon-electric.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/pastel-soft.md +0 -0
- /package/skills/{hyperframes → hyperframes-creative}/palettes/warm-editorial.md +0 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hyperframes-audio
|
|
3
|
+
description: >
|
|
4
|
+
Use when audio already placed in a HyperFrames composition needs to be mixed:
|
|
5
|
+
fade-in/fade-out, crossfade, track gain or volume, volume automation, ducking,
|
|
6
|
+
a music bed that fights a voiceover (voiceover carve), effects on a track
|
|
7
|
+
(EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser,
|
|
8
|
+
bitcrush), automation envelopes drawn on a track's volume or any effect
|
|
9
|
+
parameter, or one submix bus carrying a chain, a fader and an automation clock
|
|
10
|
+
for several tracks at once (`<hf-audio-group>`).
|
|
11
|
+
Don't use for sourcing or generating audio — finding BGM, SFX, or making a
|
|
12
|
+
voiceover is `/media-use`. Don't use for clip timing or track layout, which is
|
|
13
|
+
`/hyperframes-core`.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# HyperFrames Audio
|
|
17
|
+
|
|
18
|
+
A mix is a set of relationships, not a stack of processors. Two tracks that each
|
|
19
|
+
sound right alone can be unlistenable together, and the fix is almost never "turn
|
|
20
|
+
one down" — it is finding what they are fighting over and giving it to whichever
|
|
21
|
+
one needs it. Every tool here exists to express one of those relationships.
|
|
22
|
+
|
|
23
|
+
Effects live on the element as `data-fx-chain`, and preview and render run the
|
|
24
|
+
same Web Audio graph — the studio in a live context, the engine in an offline one
|
|
25
|
+
inside the browser it already drives. There is one implementation of each effect,
|
|
26
|
+
so what you hear while scrubbing is what gets written. You never tune twice.
|
|
27
|
+
|
|
28
|
+
Clip timing remains `/hyperframes-core`: audio/video trims and source ranges use
|
|
29
|
+
`data-start`, `data-duration`, and `data-media-start`, and crossfades overlap
|
|
30
|
+
clips on different tracks. This skill owns placed-track fade-in/fade-out,
|
|
31
|
+
crossfade envelopes, track gain/track volume, volume and effect automation,
|
|
32
|
+
ducking/voiceover carve, and the effect chain. `/media-use` owns sourcing,
|
|
33
|
+
generation, and preprocessing.
|
|
34
|
+
|
|
35
|
+
Constant `data-playback-rate` (`0.1..5`) is render-safe for picture and
|
|
36
|
+
pitch-preserved sound when matching audio/video elements use the same timing,
|
|
37
|
+
source offset, and rate. Source speed ramps are not supported because there is
|
|
38
|
+
no rate envelope; preprocess a derived synchronized asset. HyperFrames does not
|
|
39
|
+
provide automatic waveform sync or drift correction.
|
|
40
|
+
For copyable cut/crossfade/retime recipes, use `/hyperframes-core` → `references/creator-editing-recipes.md`.
|
|
41
|
+
|
|
42
|
+
Three attributes carry everything, on the audio/video element itself — or, for
|
|
43
|
+
the first two, on an `<hf-audio-group>` bus (see "One bus for many tracks"):
|
|
44
|
+
|
|
45
|
+
| Attribute | Holds |
|
|
46
|
+
| ----------------- | --------------------------------------------------------- |
|
|
47
|
+
| `data-fx-chain` | the effects, in signal order |
|
|
48
|
+
| `data-automation` | envelopes on this track's volume or its effect parameters |
|
|
49
|
+
| `data-fx-carve` | the carve's own settings, so it can be re-derived |
|
|
50
|
+
|
|
51
|
+
The shipped effect families are gain, EQ (highpass, lowpass, peaking, shelves),
|
|
52
|
+
compressor, limiter, gate, saturate, delay, reverb, chorus, phaser, and bitcrush.
|
|
53
|
+
|
|
54
|
+
Exact JSON for each, and the rules a lane must satisfy: `references/attributes.md`.
|
|
55
|
+
Every effect with its parameters, ranges and units: `references/fx-registry.md`.
|
|
56
|
+
How to work out what is wrong with a file you cannot hear:
|
|
57
|
+
`references/diagnosis.md`.
|
|
58
|
+
**Presets, named jobs and one-knob profiles, plus a symptom-to-fix table:
|
|
59
|
+
`references/presets.md`** — read that before hand-building a chain, because one
|
|
60
|
+
of the presets or named jobs usually already names the problem.
|
|
61
|
+
|
|
62
|
+
## How it fits together
|
|
63
|
+
|
|
64
|
+
Two authoring surfaces write those attributes; two runtimes read them through the
|
|
65
|
+
same builders. That shared middle is why preview predicts the render.
|
|
66
|
+
|
|
67
|
+
```mermaid
|
|
68
|
+
flowchart TB
|
|
69
|
+
voice["voice track<br/>media file"]
|
|
70
|
+
bed["music bed<br/>media file"]
|
|
71
|
+
|
|
72
|
+
subgraph AUTHOR["Authoring — the only things that write attributes"]
|
|
73
|
+
panel["Studio<br/>Voiceover carve control"]
|
|
74
|
+
script["scripts/carve.mjs<br/>detects the pair, dynamic by default"]
|
|
75
|
+
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
|
|
76
|
+
panel --> analysis
|
|
77
|
+
script --> analysis
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
voice --> analysis
|
|
81
|
+
bed --> analysis
|
|
82
|
+
|
|
83
|
+
subgraph ATTRS["Written onto the bed element"]
|
|
84
|
+
carveAttr["data-fx-carve<br/>source · strength · dynamic"]
|
|
85
|
+
chainAttr["data-fx-chain<br/>peaking xN + gain, tagged fromCarve"]
|
|
86
|
+
autoAttr["data-automation<br/>a lane per carved parameter"]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
analysis --> carveAttr
|
|
90
|
+
analysis --> chainAttr
|
|
91
|
+
analysis --> autoAttr
|
|
92
|
+
|
|
93
|
+
subgraph SHARED["One implementation, read by both"]
|
|
94
|
+
build["audioFxGraph.ts · buildFxChain"]
|
|
95
|
+
sched["audioFxAutomation.ts · scheduleChainAutomation"]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
chainAttr --> build
|
|
99
|
+
autoAttr --> sched
|
|
100
|
+
|
|
101
|
+
build --> preview["Preview<br/>live AudioContext<br/>attachElementFxChain"]
|
|
102
|
+
sched --> preview
|
|
103
|
+
build --> render["Render<br/>OfflineAudioContext in the headless browser<br/>applyAudioFxChain"]
|
|
104
|
+
sched --> render
|
|
105
|
+
|
|
106
|
+
preview --> heard["what you hear while scrubbing"]
|
|
107
|
+
render --> wav["processed WAV<br/>+ chainTailSeconds so the mix lets the tail through"]
|
|
108
|
+
wav --> mix["engine · audioMixer<br/>volume lane baked into the PCM here, not in the graph"]
|
|
109
|
+
mix --> out["the rendered mix"]
|
|
110
|
+
|
|
111
|
+
edit["editing the attribute mid-playback"] -.->|MutationObserver| preview
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The carve's own settings are never read at playback — the chain and lanes it
|
|
115
|
+
produced are what play. `data-fx-carve` exists so strength can be changed on an
|
|
116
|
+
existing carve instead of guessed back out of the filters.
|
|
117
|
+
|
|
118
|
+
Inside a carved bed the signal runs through the dips first, then the level match,
|
|
119
|
+
then anything you built yourself — which is why a limiter you add still acts as
|
|
120
|
+
the last ceiling:
|
|
121
|
+
|
|
122
|
+
```mermaid
|
|
123
|
+
flowchart LR
|
|
124
|
+
src["decoded bed"] --> p1["peaking<br/>400 Hz"]
|
|
125
|
+
p1 --> p2["peaking<br/>1 kHz"]
|
|
126
|
+
p2 --> p3["peaking<br/>1.6 kHz"]
|
|
127
|
+
p3 --> g["gain<br/>level match"]
|
|
128
|
+
g --> hand["your own effects<br/>e.g. limiter"]
|
|
129
|
+
hand --> dest["track gain, then out"]
|
|
130
|
+
|
|
131
|
+
l1["lane fx.n1.gain"] -.->|"envelope of the voice's<br/>level in that band"| p1
|
|
132
|
+
l4["lane fx.n4.gain"] -.->|"how far the bed<br/>ducks overall"| g
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
A static carve is the same graph with fixed values and no lanes at all.
|
|
136
|
+
|
|
137
|
+
## First, work out what is wrong
|
|
138
|
+
|
|
139
|
+
The table below starts from "it sounds boomy" — which presumes somebody already
|
|
140
|
+
listened and said so. Handed a file and "fix this", you have no such sentence
|
|
141
|
+
and you cannot listen, so you have to measure. One rule governs all of it:
|
|
142
|
+
|
|
143
|
+
> **The absolute spectrum of a single unknown voice cannot be diagnosed.**
|
|
144
|
+
> Formants are ±10 dB, fundamentals run 85–255 Hz, and sentences decline 5–6 dB
|
|
145
|
+
> as they end. Every one of those reads as a defect on its own, and every one of
|
|
146
|
+
> them is the speaker.
|
|
147
|
+
|
|
148
|
+
So compare, and compare against something **inside the same file**: the clean
|
|
149
|
+
original if it exists, otherwise the pauses — whatever is audible in a gap is
|
|
150
|
+
additive, and the gap's spectrum is the channel rather than the voice. Comparing
|
|
151
|
+
against a published average spectrum or a synthesised control voice does not
|
|
152
|
+
work: two speakers differ by more than most defects, and both wrong answers in
|
|
153
|
+
the evaluation behind this guidance came from exactly that.
|
|
154
|
+
|
|
155
|
+
When there is no original and no usable silence, a static tonal defect is
|
|
156
|
+
genuinely under-determined. Say so and offer the readings that fit, rather than
|
|
157
|
+
picking one and building a chain on it.
|
|
158
|
+
|
|
159
|
+
Commands, traps and worked recipes: **`references/diagnosis.md`**. Read it
|
|
160
|
+
before diagnosing a file nobody has described.
|
|
161
|
+
|
|
162
|
+
## Start from the symptom
|
|
163
|
+
|
|
164
|
+
Once you know the band and the kind, name what is wrong with the audio. Most bad audio is
|
|
165
|
+
one or two of these, and each has a shipped answer:
|
|
166
|
+
|
|
167
|
+
| It sounds like | Reach for |
|
|
168
|
+
| ---------------------------------- | -------------------------------------------------- |
|
|
169
|
+
| Hum or thump underneath | `rumble-cut`, or a `highpass` at 80 Hz |
|
|
170
|
+
| Boomy, chesty | **Tame Boominess** job (200 Hz) |
|
|
171
|
+
| Muffled, behind cardboard | **Reduce Mud** job (250 Hz) |
|
|
172
|
+
| Words hard to make out | **Add Clarity** job (3 kHz), or carve the bed |
|
|
173
|
+
| Harsh and tiring | **Soften Harshness** job (3.2 kHz) |
|
|
174
|
+
| Some words much louder than others | **Evenness** on a compressor, or Even Out Levels |
|
|
175
|
+
| Room tone between sentences | `room-gate` |
|
|
176
|
+
| Voice and music fighting | **Voiceover carve** — not an EQ on either |
|
|
177
|
+
| Dry, recorded nowhere | `room-tight` or `room-natural` |
|
|
178
|
+
| Just "amateur" | `voice-clean`, which is four of the above in order |
|
|
179
|
+
|
|
180
|
+
Full catalogue, what each preset contains, the band vocabulary, and what is
|
|
181
|
+
deliberately NOT covered (de-essing, noise removal, tone match):
|
|
182
|
+
`references/presets.md`.
|
|
183
|
+
|
|
184
|
+
Subtract before you add, level after you filter, relationships after level,
|
|
185
|
+
character and ceiling last. Each step changes what the next one hears — a
|
|
186
|
+
compressor set before a high-pass spends its time chasing rumble.
|
|
187
|
+
|
|
188
|
+
## Reach for a family by the problem, not the name
|
|
189
|
+
|
|
190
|
+
**Filters** (`highpass`, `lowpass`, `peaking`, `lowshelf`, `highshelf`) decide
|
|
191
|
+
which frequencies a track is allowed to occupy. This is the first tool for two
|
|
192
|
+
sources colliding, because collisions happen in bands: a bed and a voice both
|
|
193
|
+
want 1–3 kHz, and taking that from the bed costs the bed far less than turning
|
|
194
|
+
the whole thing down costs the mix. A high-pass on a voice is the standard fix
|
|
195
|
+
for rumble; a low-pass darkens or muffles deliberately.
|
|
196
|
+
|
|
197
|
+
**Dynamics** (`gain`, `compressor`, `limiter`, `gate`) decide how a track's level
|
|
198
|
+
behaves over time. Compression narrows the distance between loud and quiet so the
|
|
199
|
+
quiet parts can come up. A limiter is a ceiling — it does not shape anything, it
|
|
200
|
+
guarantees nothing gets past. A gate removes what is below a threshold, which is
|
|
201
|
+
how you silence room tone between phrases. `gain` is a plain level stage, and it
|
|
202
|
+
is what an automation lane rides when a track has to move out of the way.
|
|
203
|
+
|
|
204
|
+
**Nonlinear** (`saturate`, `bitcrush`) changes the waveform's shape, which adds
|
|
205
|
+
harmonics that were not there. Reach for it when a track needs character or
|
|
206
|
+
grit rather than correction — and remember it is generative: it makes a thin
|
|
207
|
+
source denser, not cleaner.
|
|
208
|
+
|
|
209
|
+
**Time** (`delay`, `reverb`, `chorus`, `phaser`) puts a track in a space or gives
|
|
210
|
+
it width. These are the ones that most easily wreck a mix, because a tail or a
|
|
211
|
+
detuned copy occupies the same room a voice needs. Use them on the thing that
|
|
212
|
+
should sit _behind_ something else, and keep the wet amount lower than sounds
|
|
213
|
+
right in isolation.
|
|
214
|
+
|
|
215
|
+
The chain is serial: each effect processes what the one before it produced. So
|
|
216
|
+
corrective filtering goes early, character in the middle, and a limiter last
|
|
217
|
+
where it can actually act as a ceiling.
|
|
218
|
+
|
|
219
|
+
## Voiceover carve
|
|
220
|
+
|
|
221
|
+
**The problem it solves.** A music bed under a voice makes the voice hard to
|
|
222
|
+
follow. The reflex is to duck the whole bed, which works and costs the bed all of
|
|
223
|
+
its presence — the music goes limp for the entire voiceover. But the voice does
|
|
224
|
+
not need the whole spectrum. It needs the few bands it actually occupies. Carve
|
|
225
|
+
takes only those, and the bed keeps its low end and its top, so it is still music
|
|
226
|
+
while the voice is still intelligible.
|
|
227
|
+
|
|
228
|
+
**It is a relationship, not an effect.** The settings live on the _bed_ — the
|
|
229
|
+
track that gets processed — and they name the voices to listen to, exactly as a
|
|
230
|
+
sidechain compressor does: you select the track that gets quieter and pick what
|
|
231
|
+
makes it quieter. **Never put a carve on a voice track.** A voice carved against
|
|
232
|
+
itself is a bug, not a subtle mix choice.
|
|
233
|
+
|
|
234
|
+
**Every voice, not one of them.** `sources` is a list, because a bed usually runs
|
|
235
|
+
under a whole sequence — a narrator, an interview answer, a second presenter. They
|
|
236
|
+
are summed onto the bed's own clock before anything is measured (`mixCarveSources`),
|
|
237
|
+
so one analysis covers all of them: the bands come from all the speech there is, and
|
|
238
|
+
the envelopes rise wherever any of it is happening. Voices that never play while the
|
|
239
|
+
bed does are left out; they cannot mask it.
|
|
240
|
+
|
|
241
|
+
**A carve against more than one clip id is wrong. Group the clips and carve
|
|
242
|
+
against the group.** This is an invariant, not a tip. Naming clips one by one has
|
|
243
|
+
to be exhaustively right and stays right only until the next edit — a fourth
|
|
244
|
+
narration clip added later plays outside the carve's awareness, and the bed
|
|
245
|
+
fails to duck under it silently. Naming the group instead resolves membership at
|
|
246
|
+
analysis time, so a clip added to the group later is covered without touching
|
|
247
|
+
`sources` at all:
|
|
248
|
+
|
|
249
|
+
```html
|
|
250
|
+
<!-- group the narration, then carve the bed against the group -->
|
|
251
|
+
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
|
|
252
|
+
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
|
|
253
|
+
<audio id="vo-outro" data-audio-group="voiceover" …></audio>
|
|
254
|
+
|
|
255
|
+
<audio
|
|
256
|
+
id="music"
|
|
257
|
+
data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.25}'
|
|
258
|
+
…
|
|
259
|
+
></audio>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
A `sources` list naming two or more plain clip ids instead of a group is caught
|
|
263
|
+
by the `audio_carve_ungrouped_sources` lint rule — it still works, but it is the
|
|
264
|
+
version that silently rots when a clip is added.
|
|
265
|
+
|
|
266
|
+
**Keep the carve group a voice group: no bed, no SFX, no music.** A group id in
|
|
267
|
+
`sources` resolves to every _current_ member on _every_ analysis, so the group
|
|
268
|
+
you name is the group you get later — not the tracks that were measured when it
|
|
269
|
+
was written. Two ways that bites:
|
|
270
|
+
|
|
271
|
+
- **The bed in its own source group.** It is handed to itself as a voice and
|
|
272
|
+
carved against its own content — the "never carve a track against itself" rule
|
|
273
|
+
arriving one re-analysis later.
|
|
274
|
+
- **An SFX or music clip in the voice group.** It enters the sidechain on the
|
|
275
|
+
next analysis and the bed starts ducking under a whoosh, even though the run
|
|
276
|
+
that wrote the attribute never measured it.
|
|
277
|
+
|
|
278
|
+
Both are invisible at the moment the carve is written: the analysis sums the
|
|
279
|
+
voices it detected and never round-trips through group resolution, so the first
|
|
280
|
+
pass is genuinely correct and only the next one is wrong. So give each role its
|
|
281
|
+
own group — `music` for the bed, `voiceover` for the narration, `sfx` for the
|
|
282
|
+
hits — and keep the group named in `sources` holding nothing but voices.
|
|
283
|
+
|
|
284
|
+
`carve.mjs` refuses to write the group form when it sees either case, records
|
|
285
|
+
clip ids, and says on stderr which member blocked it. The
|
|
286
|
+
`audio_carve_ungrouped_sources` rule then points at the arrangement instead of
|
|
287
|
+
the CLI quietly persisting a wider carve than it measured.
|
|
288
|
+
|
|
289
|
+
A voice that this run left out is **not** one of these cases and does not block
|
|
290
|
+
the group form: `carve.mjs` only analyses voices that overlap the bed, and
|
|
291
|
+
picking up a clip that plays later without an edit to `sources` is the whole
|
|
292
|
+
reason to name the group.
|
|
293
|
+
|
|
294
|
+
### One bus for many tracks
|
|
295
|
+
|
|
296
|
+
Membership alone is enough to carve against, as above — but add an
|
|
297
|
+
`<hf-audio-group>` element with that id and the group becomes a real submix bus:
|
|
298
|
+
one chain, one fader, one automation clock for every member.
|
|
299
|
+
|
|
300
|
+
```html
|
|
301
|
+
<hf-audio-group
|
|
302
|
+
id="voiceover"
|
|
303
|
+
data-label="Voiceover"
|
|
304
|
+
data-volume="0.9"
|
|
305
|
+
data-fx-chain='{"version":1,"nodes":[
|
|
306
|
+
{"type":"compressor","id":"g1","params":{"threshold":-18,"ratio":3}},
|
|
307
|
+
{"type":"peaking","id":"g2","params":{"frequency":3000,"gain":2,"q":1}}]}'
|
|
308
|
+
></hf-audio-group>
|
|
309
|
+
|
|
310
|
+
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
|
|
311
|
+
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Reach for the bus when the same treatment belongs on several tracks.** Four
|
|
315
|
+
narration clips that each want the same compressor is four chains to keep in
|
|
316
|
+
step, and they drift the moment one is edited; on the bus it is one chain, and
|
|
317
|
+
the compressor sees the whole voice rather than each clip in isolation — which is
|
|
318
|
+
the point, since a compressor cannot ride a sequence it only hears a third of.
|
|
319
|
+
Per-clip chains remain right for what is genuinely per-clip: one noisy take that
|
|
320
|
+
needs its own de-esser.
|
|
321
|
+
|
|
322
|
+
| On the bus | Does |
|
|
323
|
+
| ----------------- | ----------------------------------------- |
|
|
324
|
+
| `data-fx-chain` | one chain over the summed members |
|
|
325
|
+
| `data-automation` | envelopes on the bus, in COMPOSITION time |
|
|
326
|
+
| `data-volume` | one fader for every member (default 1) |
|
|
327
|
+
| `data-label` | the display name; falls back to the id |
|
|
328
|
+
| `data-hidden` | drops every member from the mix |
|
|
329
|
+
|
|
330
|
+
**Group automation is composition time, not clip time.** A bus has no
|
|
331
|
+
`data-start` — members are already at their composition positions when they
|
|
332
|
+
reach it — so `t: 0` in a group lane is the start of the composition, not of any
|
|
333
|
+
clip. A lane on a clip is clip-local; the same numbers mean different instants on
|
|
334
|
+
the two, which is the one thing to get right when moving an envelope from a clip
|
|
335
|
+
up onto its bus.
|
|
336
|
+
|
|
337
|
+
**A carve stays on the clip.** `data-fx-carve` is not a group attribute. The bed
|
|
338
|
+
being carved is a single track, and it is that track which carries
|
|
339
|
+
`data-fx-carve` — pointed AT a group, per the rule above. Group and carve meet in
|
|
340
|
+
`sources`, not on one element. A carve written onto a bus is half an effect
|
|
341
|
+
applied twice: the level half measures the bed's own audio, which a bus has none
|
|
342
|
+
of, so only the filters survive — and a bus and its members are one signal path,
|
|
343
|
+
so the bed then runs through the bus's filters AND its own. The
|
|
344
|
+
`audio_group_carve_attr` lint rule catches it.
|
|
345
|
+
|
|
346
|
+
**One clip is not a bus.** A group exists to give several tracks one chain, one
|
|
347
|
+
fader and one clock. Wrapping a single clip in a bus buys nothing the clip's own
|
|
348
|
+
`data-fx-chain` does not already do, and it doubles the places a later edit has
|
|
349
|
+
to land. The one reason to do it anyway: a bus's automation clock is composition
|
|
350
|
+
time, so a single-member bus is how a lane on that clip gets composition-time
|
|
351
|
+
timing.
|
|
352
|
+
|
|
353
|
+
**One knob.** `strength` is 0..1 and derives everything: how deep to cut, how
|
|
354
|
+
many bands, how wide, how far to favour intelligibility over raw voice energy,
|
|
355
|
+
how far the level may drop, how far under the voice to aim. Those six move
|
|
356
|
+
together in any real mix — a gentle carve is a shallow cut in few bands with
|
|
357
|
+
little ducking, a hard one is deeper in more bands with more — so they are one
|
|
358
|
+
relationship written once, in `carveProfile`. Default is `0.25` — a 6 dB dip in
|
|
359
|
+
three bands with 6 dB of level room, audible without sounding like a hole. At
|
|
360
|
+
`0.5` the dip reaches 10 dB, which is where a carve starts being heard as an
|
|
361
|
+
effect rather than as room for the voice; above that is deliberate territory for
|
|
362
|
+
a loud bed under a quiet voice. `0` is spectral only — one band, no level match
|
|
363
|
+
at all.
|
|
364
|
+
|
|
365
|
+
**Carve by default.** A bed playing under narration wants a carve; it is not a
|
|
366
|
+
polish step to get to if there is time. Place both tracks, run the command below,
|
|
367
|
+
listen. Skip it only when there is no narration for the music to sit under — a
|
|
368
|
+
music video, a title card, a montage cut to the track.
|
|
369
|
+
|
|
370
|
+
**It always follows the voice.** There is no static mode: a fixed depth thins the
|
|
371
|
+
bed through every pause, and once you have heard both there is no reason to want it.
|
|
372
|
+
Every value becomes an envelope of the speech's own level — silence leaves the bed
|
|
373
|
+
alone, a loud passage pushes the carve to full depth — written as ordinary automation,
|
|
374
|
+
which is why the lanes show up in the timeline and can be edited afterwards.
|
|
375
|
+
|
|
376
|
+
**Level matching is part of it.** Spectral carving cannot fix a bed that is
|
|
377
|
+
simply louder than the voice. So the carve also measures how far over the voice
|
|
378
|
+
the bed sits and writes a `gain` stage: held at one value for a static carve,
|
|
379
|
+
driven by an envelope for a dynamic one. That envelope releases slowly on
|
|
380
|
+
purpose — music that snaps back to full the instant a word ends sounds like a
|
|
381
|
+
machine doing it.
|
|
382
|
+
|
|
383
|
+
**Running it.** In Studio the carve is one module at the top of a track's effect
|
|
384
|
+
rack — voice, strength, dynamic, and the analysis it produced, in one card. It is
|
|
385
|
+
there whenever another track could be the voice, and a bed with exactly **one**
|
|
386
|
+
candidate above it is carved by default, dynamically, at the default strength:
|
|
387
|
+
that is what a bed under narration wants, and the module is where you change or
|
|
388
|
+
switch it off. Several candidates leaves the picker waiting rather than guessing.
|
|
389
|
+
Headless —
|
|
390
|
+
which is the path when you are authoring a composition rather than editing one:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
node <SKILL_DIR>/scripts/carve.mjs --comp index.html
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
That is the whole command. It finds the voice and the bed itself, carves
|
|
397
|
+
dynamically at the default strength, and prints what it decided:
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
bed music-bed (name looks like music)
|
|
401
|
+
voice narration (only track left)
|
|
402
|
+
carve strength 0.25 dynamic
|
|
403
|
+
bands 400Hz -6dB q1.4, 1000Hz -3dB q1.4, 1600Hz -3.17dB q1.4
|
|
404
|
+
level 216-point envelope, floor -6 dB
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Name the tracks with `--bed` / `--voice` (repeatable) when the automatic choice is
|
|
408
|
+
wrong, `--strength` to push it, `--dry-run` to see that report and write nothing.
|
|
409
|
+
|
|
410
|
+
**How it picks the tracks.** Names first, because that is what you already told it
|
|
411
|
+
and the answer is explainable — `classifyAudioName` in core, the same classifier
|
|
412
|
+
Studio's own picker uses, so the two cannot disagree. A track whose id or filename
|
|
413
|
+
looks like music (`music`, `bgm`, `bed`, `score`…) is the bed; everything else that
|
|
414
|
+
plays over it and is not SFX-shaped is a voice. Audio elements are preferred: video
|
|
415
|
+
counts only when no audio track is left to be the voice, or every B-roll clip in the
|
|
416
|
+
composition would read as somebody talking. **It refuses when it cannot tell which
|
|
417
|
+
track is the bed** rather than carving the wrong one — typing one id is cheap.
|
|
418
|
+
|
|
419
|
+
Same analysis functions as the panel, so the result is identical. Needs `ffmpeg`
|
|
420
|
+
on PATH and `@hyperframes/core` installed in the project (`npm i -D
|
|
421
|
+
@hyperframes/core`) — the CLI inlines core rather than shipping it, so it cannot
|
|
422
|
+
be borrowed from there.
|
|
423
|
+
|
|
424
|
+
**What it writes** is an ordinary chain of peaking filters plus a gain stage,
|
|
425
|
+
tagged `fromCarve`. That tagging is the whole trick: a re-run replaces the
|
|
426
|
+
previous carve and leaves every effect you built by hand — and every lane you
|
|
427
|
+
drew by hand — exactly where it was. So re-carving at a new strength is safe and
|
|
428
|
+
repeatable, and `data-fx-carve` exists so the settings can be read back rather
|
|
429
|
+
than guessed from the filters.
|
|
430
|
+
|
|
431
|
+
## Automation
|
|
432
|
+
|
|
433
|
+
A lane is a set of breakpoints on one parameter: `{t, v}` in clip-local seconds
|
|
434
|
+
and the parameter's own units. Targets are `volume` for the track's level, or
|
|
435
|
+
`fx.<nodeId>.<param>` for an effect's knob.
|
|
436
|
+
|
|
437
|
+
**Only some parameters can be automated, and a lane on the others is silently
|
|
438
|
+
inert.** A knob is automatable when a Web Audio `AudioParam` backs it. The four
|
|
439
|
+
worklet-based effects — `compressor`, `limiter`, `gate`, `bitcrush` — expose
|
|
440
|
+
none at all, so no lane on any of their parameters will ever move: to make a
|
|
441
|
+
compressor's behaviour change over time, automate a `gain` stage before it
|
|
442
|
+
instead. `references/fx-registry.md` marks every parameter.
|
|
443
|
+
|
|
444
|
+
## Verify
|
|
445
|
+
|
|
446
|
+
Almost no static gate covers the mix. The linter reads `data-automation` for
|
|
447
|
+
exactly one conflict — `audio_volume_double_automation`, a volume lane on a track
|
|
448
|
+
that also has a GSAP tween on `volume`, where the lane wins and the tween is
|
|
449
|
+
ignored — plus `audio_volume_tween_overrides_gain`, an authored `data-volume`
|
|
450
|
+
on a track whose `volume` is tweened, where the tween's values are absolute and
|
|
451
|
+
replace that gain instead of scaling it. Nothing validates the
|
|
452
|
+
chain or the effect lanes at all. What
|
|
453
|
+
enforces those is the render: a chain it cannot parse fails the whole mix rather
|
|
454
|
+
than quietly writing the dry signal, because a mix that sounds plausible and is
|
|
455
|
+
wrong is worse than a refusal. Preview is the opposite by design: an unreadable
|
|
456
|
+
chain plays dry so the composition stays workable.
|
|
457
|
+
|
|
458
|
+
A lane pointing at a node the chain does not have is pruned on read, not an
|
|
459
|
+
error — so a typo'd `nodeId` costs you the envelope silently. Read the ids back
|
|
460
|
+
out of the chain rather than assuming what was minted.
|
|
461
|
+
|
|
462
|
+
Effects with a tail (`reverb`, `delay`) make the rendered track **longer** than
|
|
463
|
+
its source, and the mix is told how much by the chain. So a bed with reverb no
|
|
464
|
+
longer ends exactly at its `data-duration`; that is expected, not a bug.
|
|
465
|
+
|
|
466
|
+
Beyond that, a mix is verified by rendering and listening. For a carve: the voice
|
|
467
|
+
should be legible without the bed sounding hollowed, and with `dynamic` the bed
|
|
468
|
+
should come back up between phrases rather than staying flat. If the bed sounds
|
|
469
|
+
notched rather than simply quieter under the voice, the strength is too high —
|
|
470
|
+
that is the one failure mode with an obvious sound.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# The three audio attributes
|
|
2
|
+
|
|
3
|
+
All three go on the `<audio>` / `<video>` element itself, JSON-encoded, so a
|
|
4
|
+
composition carries its whole mix in the HTML with nothing to load beside it.
|
|
5
|
+
`data-fx-chain` and `data-automation` also go on an `<hf-audio-group>` bus,
|
|
6
|
+
where they mean the same thing over the summed members — with one difference
|
|
7
|
+
worth knowing: a group's automation runs on COMPOSITION time, since a bus has no
|
|
8
|
+
`data-start` of its own. `data-fx-carve` is clip-only; a bus has no carve.
|
|
9
|
+
Nothing static validates them: preview plays an unreadable chain dry to stay
|
|
10
|
+
workable, and the render refuses the whole mix rather than shipping a dry track
|
|
11
|
+
that sounds plausible and is wrong.
|
|
12
|
+
|
|
13
|
+
## `data-fx-chain` — the effects
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"version": 1,
|
|
18
|
+
"nodes": [
|
|
19
|
+
{
|
|
20
|
+
"type": "highpass",
|
|
21
|
+
"id": "n1",
|
|
22
|
+
"label": "Remove Rumble",
|
|
23
|
+
"params": { "frequency": 120, "q": 0.707, "poles": "2" }
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "peaking",
|
|
27
|
+
"id": "n2",
|
|
28
|
+
"fromCarve": true,
|
|
29
|
+
"params": { "frequency": 1600, "gain": -6, "q": 1.4 }
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "limiter",
|
|
33
|
+
"id": "n3",
|
|
34
|
+
"enabled": false,
|
|
35
|
+
"params": { "limit": -1, "attack": 5, "release": 50, "level_out": 0 }
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Write these attributes double-quoted, with the JSON's own quotes as `"`.**
|
|
42
|
+
The browser reads them through `getAttribute` and does not care, but
|
|
43
|
+
`scripts/carve.mjs` finds them with a `name="..."` regex, so a single-quoted
|
|
44
|
+
attribute is invisible to it — the carve reports no existing chain and quietly
|
|
45
|
+
overwrites work it could not see. `&` becomes `&`; nothing else needs
|
|
46
|
+
escaping.
|
|
47
|
+
|
|
48
|
+
- **Order is signal order.** Each node processes what the one before produced.
|
|
49
|
+
- `type` is an effect id from the registry. `params` are in the units a person
|
|
50
|
+
thinks in — dB, ms, Hz — and out-of-range values are clamped on read, so a
|
|
51
|
+
chain that parses is always safe to realise.
|
|
52
|
+
- `id` is a stable handle. Automation addresses nodes by id, never by position,
|
|
53
|
+
so reordering the chain cannot re-point a lane at a different effect. A node
|
|
54
|
+
with no id loads fine but cannot be automated. Writing a chain by hand, any
|
|
55
|
+
unique string works; Studio hands out the first free `n1`, `n2`, … so matching
|
|
56
|
+
that convention keeps a hand-written chain and an edited one looking alike.
|
|
57
|
+
- `label` is what the rack calls this node, replacing the effect's own name.
|
|
58
|
+
Write one whenever the node is doing a named job — a chain with two `peaking`
|
|
59
|
+
nodes otherwise shows the same row twice and the author cannot tell which is
|
|
60
|
+
the mud cut and which is the clarity lift. Presets and jobs always set it; a
|
|
61
|
+
hand-written node should too. See `presets.md` for the names they use.
|
|
62
|
+
- `enabled: false` is bypass — the node stays in the chain, out of the signal
|
|
63
|
+
path. Absent means enabled.
|
|
64
|
+
- `fromCarve: true` marks a node the carve analysis generated. Re-running the
|
|
65
|
+
carve replaces exactly these and leaves hand-built effects alone. **Do not set
|
|
66
|
+
it by hand**: a node tagged this way will be deleted by the next carve.
|
|
67
|
+
|
|
68
|
+
## `data-automation` — the envelopes
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"version": 1,
|
|
73
|
+
"lanes": [
|
|
74
|
+
{
|
|
75
|
+
"target": "volume",
|
|
76
|
+
"points": [
|
|
77
|
+
{ "t": 0, "v": 1 },
|
|
78
|
+
{ "t": 2.5, "v": 0.4 }
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"target": "fx.n2.gain",
|
|
83
|
+
"points": [
|
|
84
|
+
{ "t": 0, "v": 0 },
|
|
85
|
+
{ "t": 1, "v": -6, "curve": 0.4 }
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- `target` is `volume` for the track's own level, or `fx.<nodeId>.<param>`.
|
|
93
|
+
- `t` is **seconds from the start of the clip**, not of the composition. A bed
|
|
94
|
+
starting at `data-start="8"` has `t: 0` at composition time 8.
|
|
95
|
+
- `v` is in the parameter's own unit: dB for a gain, Hz for a frequency, 0..1 for
|
|
96
|
+
volume.
|
|
97
|
+
- A lane holds its first value backwards to the start of its clip and its last
|
|
98
|
+
value forward to the end. So a bed that begins before the voice needs an
|
|
99
|
+
explicit "no cut" point at `t: 0`, or it starts out already ducked.
|
|
100
|
+
- `curve` (-1..1) bends the segment _leaving_ a point: positive holds low then
|
|
101
|
+
rises late. `viaX`/`viaY` name an interior point the segment passes through
|
|
102
|
+
(progress 0..1, value travelled 0..1) and supersede `curve` when both are
|
|
103
|
+
present — that is what the timeline writes when a bend is dragged.
|
|
104
|
+
- 512 points per lane, maximum.
|
|
105
|
+
- A lane whose node is gone is pruned on read rather than erroring.
|
|
106
|
+
|
|
107
|
+
**A lane on a non-automatable parameter is silently inert.** Automation is
|
|
108
|
+
delivered as native `AudioParam` scheduling, so a knob that no `AudioParam` backs
|
|
109
|
+
cannot move: worklet processor options, a WaveShaper curve and a convolution
|
|
110
|
+
impulse are all set wholesale. `fx-registry.md` marks each parameter; the four
|
|
111
|
+
worklet effects (`compressor`, `limiter`, `gate`, `bitcrush`) have none at all.
|
|
112
|
+
|
|
113
|
+
## `data-fx-carve` — the carve's settings
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{ "enabled": true, "sources": ["narration", "interview-guest"], "strength": 0.35 }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- `sources` are the **element ids of every voice this bed makes room for**. They live
|
|
120
|
+
on the bed being processed, not on the voices. Summed onto the bed's clock before
|
|
121
|
+
the analysis, so one set of filters and envelopes covers all of them.
|
|
122
|
+
- `strength` 0..1 derives the whole mechanism (see `carveProfile`).
|
|
123
|
+
- There is no `dynamic`: a carve always follows the speech.
|
|
124
|
+
- `enabled` is whether the carve applies. It exists because a bed with exactly one
|
|
125
|
+
candidate voice is carved by default: with "off" represented by an absent
|
|
126
|
+
attribute, switching it off would read as never-configured and the default would
|
|
127
|
+
put it back. `enabled: false` keeps the settings and stops the carve.
|
|
128
|
+
|
|
129
|
+
This attribute is not read at playback — the chain and lanes it produced are what
|
|
130
|
+
play. It exists so the settings can be read back and re-derived rather than
|
|
131
|
+
guessed from the filters, which is what makes changing strength on an existing
|
|
132
|
+
carve possible.
|
|
133
|
+
|
|
134
|
+
Older projects may carry the six mechanism numbers (`maxCutDb`, `bands`, `q`,
|
|
135
|
+
`intelligibilityBias`, `duckDb`, `headroomDb`) instead of `strength`. They still
|
|
136
|
+
load: the depth maps back onto a strength and everything else is re-derived. A
|
|
137
|
+
stored carve with no `enabled` reads as on, and a single `source` reads as a one-voice
|
|
138
|
+
`sources` list. A stored `dynamic` is ignored — every carve follows the speech now.
|