dsh-hyperframes 0.3.1 → 0.4.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 +6 -5
- package/README.md +7 -6
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -0
- package/package.json +63 -63
- package/skills/embedded-captions/SKILL.md +28 -3
- package/skills/embedded-captions/references/aesthetic-principles.md +2 -3
- package/skills/embedded-captions/references/rail.md +1 -1
- package/skills/embedded-captions/scripts/check-occlusion.cjs +4 -1
- package/skills/embedded-captions/scripts/check-overflow.cjs +1 -0
- package/skills/embedded-captions/scripts/check-rail-climax.cjs +5 -1
- package/skills/embedded-captions/scripts/fixtures/heroless/theme.json +11 -0
- package/skills/embedded-captions/scripts/hf-cli.cjs +33 -0
- package/skills/embedded-captions/scripts/make-theme.cjs +95 -57
- package/skills/embedded-captions/scripts/make-theme.test.mjs +131 -0
- package/skills/embedded-captions/scripts/matte.cjs +1 -13
- package/skills/embedded-captions/scripts/measure-layout.cjs +2 -1
- package/skills/embedded-captions/scripts/preview-frames.cjs +39 -11
- package/skills/embedded-captions/scripts/preview-frames.test.mjs +24 -0
- package/skills/embedded-captions/scripts/render-and-composite.sh +8 -52
- package/skills/embedded-captions/scripts/safe-zones.cjs +4 -1
- package/skills/embedded-captions/scripts/transcribe.cjs +5 -14
- package/skills/embedded-captions/scripts/transcribe.test.mjs +41 -0
- package/skills/faceless-explainer/SKILL.md +20 -16
- package/skills/faceless-explainer/references/story-design.md +1 -1
- package/skills/faceless-explainer/scripts/assemble-index.mjs +6 -4
- package/skills/faceless-explainer/scripts/assemble-index.test.mjs +57 -2
- package/skills/faceless-explainer/scripts/audio.mjs +2 -0
- package/skills/faceless-explainer/scripts/build-frame.mjs +6 -3
- package/skills/faceless-explainer/scripts/captions.mjs +7 -4
- package/skills/faceless-explainer/scripts/frame-packets.mjs +4 -4
- package/skills/faceless-explainer/scripts/lib/bgm-volume.mjs +4 -0
- package/skills/faceless-explainer/scripts/lib/captured-fonts.mjs +58 -0
- package/skills/{hyperframes-core → faceless-explainer}/scripts/lib/frame-packets-core.mjs +5 -23
- package/skills/faceless-explainer/scripts/lib/storyboard.mjs +1 -1
- package/skills/faceless-explainer/scripts/lib/transitions.json +3 -3
- package/skills/faceless-explainer/scripts/transitions.mjs +1 -0
- package/skills/faceless-explainer/scripts/transitions.test.mjs +2 -0
- package/skills/faceless-explainer/sub-agents/frame-worker.md +1 -1
- package/skills/figma/SKILL.md +2 -0
- package/skills/general-video/SKILL.md +13 -11
- package/skills/general-video/scripts/frame-packets.mjs +4 -4
- package/skills/general-video/scripts/lib/frame-packets-core.mjs +194 -0
- package/skills/general-video/sub-agents/frame-worker.md +1 -1
- package/skills/hyperframes/SKILL.md +40 -30
- package/skills/{hyperframes-core → hyperframes}/references/brief-contract.md +15 -15
- package/skills/{hyperframes-core → hyperframes}/references/brief-format.md +8 -8
- package/skills/hyperframes/references/capability-menu.md +2 -2
- package/skills/{hyperframes-core → hyperframes}/references/frame-worker-core.md +1 -1
- package/skills/hyperframes/references/intent-interview.md +16 -16
- package/skills/hyperframes/references/plugin-installation.md +43 -0
- package/skills/{hyperframes-core → hyperframes}/references/production-loop.md +11 -11
- package/skills/hyperframes/references/review-loop.md +37 -0
- package/skills/hyperframes/references/route-briefs.md +1 -1
- package/skills/hyperframes/references/routes/motion-graphics.md +1 -1
- package/skills/{hyperframes-core → hyperframes}/references/script-format.md +3 -3
- package/skills/hyperframes/references/skill-lifecycle.md +2 -0
- package/skills/{hyperframes-core → hyperframes}/references/storyboard-format.md +3 -34
- package/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
- package/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
- package/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
- package/skills/hyperframes-animation/SKILL.md +5 -1
- package/skills/hyperframes-animation/adapters/gsap.md +1 -1
- package/skills/hyperframes-animation/adapters/lottie.md +15 -2
- package/skills/hyperframes-animation/adapters/three.md +14 -0
- package/skills/hyperframes-animation/blueprints/titlecard-reveal.md +1 -1
- package/skills/hyperframes-animation/references/motion-blur.md +133 -0
- package/skills/hyperframes-animation/rules/cursor-click-ripple.md +1 -1
- package/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +1 -1
- package/skills/hyperframes-animation/rules/hacker-flip-3d.md +1 -1
- package/skills/hyperframes-animation/rules/kinetic-beat-slam.md +2 -2
- package/skills/hyperframes-animation/rules/motion-blur-streak.md +1 -1
- package/skills/hyperframes-animation/rules/vertical-spring-ticker.md +1 -1
- package/skills/hyperframes-animation/scripts/package-loader.mjs +47 -16
- package/skills/hyperframes-animation/scripts/package-loader.test.mjs +52 -0
- package/skills/hyperframes-animation/techniques.md +1 -1
- package/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +3 -3
- package/skills/hyperframes-animation/transitions/css-push.md +4 -4
- package/skills/hyperframes-audio/SKILL.md +30 -22
- package/skills/hyperframes-audio/scripts/carve.mjs +6 -3
- package/skills/hyperframes-audio/scripts/carve.test.mjs +16 -1
- package/skills/hyperframes-cli/SKILL.md +44 -35
- package/skills/hyperframes-cli/references/init-and-scaffold.md +8 -6
- package/skills/hyperframes-cli/references/lint-validate-inspect.md +3 -3
- package/skills/hyperframes-cli/references/preview-render.md +35 -32
- package/skills/hyperframes-cli/references/upgrade-info-misc.md +50 -1
- package/skills/hyperframes-core/SKILL.md +30 -24
- package/skills/hyperframes-core/references/composition-patterns.md +3 -42
- package/skills/hyperframes-core/references/creator-editing-recipes.md +131 -7
- package/skills/hyperframes-core/references/data-attributes.md +11 -11
- package/skills/hyperframes-core/references/determinism-rules.md +2 -19
- package/skills/hyperframes-core/references/full-screen-motion.md +0 -9
- package/skills/hyperframes-core/references/minimal-composition.md +2 -2
- package/skills/hyperframes-core/references/sub-compositions.md +3 -66
- package/skills/hyperframes-core/references/tailwind.md +1 -20
- package/skills/hyperframes-core/references/tracks-and-clips.md +2 -6
- package/skills/hyperframes-core/references/variables-and-media.md +3 -3
- package/skills/hyperframes-creative/SKILL.md +2 -0
- package/skills/hyperframes-creative/references/house-style.md +15 -15
- package/skills/hyperframes-creative/references/story-spine.md +3 -1
- package/skills/hyperframes-creative/references/storyboard-recipe.md +57 -0
- package/skills/hyperframes-creative/references/typography.md +1 -1
- package/skills/hyperframes-creative/scripts/package-loader.mjs +47 -16
- package/skills/hyperframes-creative/scripts/package-loader.test.mjs +52 -0
- package/skills/hyperframes-keyframes/SKILL.md +4 -2
- package/skills/hyperframes-registry/SKILL.md +3 -1
- package/skills/hyperframes-registry/references/contributing.md +8 -2
- package/skills/hyperframes-registry/references/discovery.md +20 -34
- package/skills/hyperframes-studio/SKILL.md +77 -0
- package/skills/media-use/SKILL.md +14 -12
- package/skills/media-use/audio/references/captions/authoring.md +4 -0
- package/skills/media-use/audio/references/remove-background.md +1 -1
- package/skills/media-use/audio/references/tts-to-captions.md +11 -2
- package/skills/media-use/audio/references/tts.md +84 -6
- package/skills/media-use/audio/scripts/audio.mjs +15 -6
- package/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +113 -0
- package/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
- package/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
- package/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
- package/skills/media-use/audio/scripts/lib/bgm.mjs +2 -6
- package/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
- package/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
- package/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
- package/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
- package/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
- package/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
- package/skills/media-use/audio/scripts/lib/heygen.mjs +2 -1
- package/skills/media-use/audio/scripts/lib/tts.mjs +15 -3
- package/skills/media-use/audio/scripts/wait-bgm.mjs +8 -4
- package/skills/media-use/audio/scripts/wait-bgm.test.mjs +65 -0
- package/skills/media-use/references/audio.md +3 -2
- package/skills/media-use/references/grading.md +7 -7
- package/skills/media-use/references/media-treatment-recipes.md +1 -1
- package/skills/media-use/references/memory.md +2 -2
- package/skills/media-use/references/meta.md +2 -2
- package/skills/media-use/references/operations.md +15 -13
- package/skills/media-use/references/resolve.md +22 -11
- package/skills/media-use/references/setup-providers.md +11 -11
- package/skills/media-use/scripts/audio-duck.mjs +19 -27
- package/skills/media-use/scripts/compatibility.test.mjs +96 -0
- package/skills/media-use/scripts/lib/config-lock.mjs +45 -0
- package/skills/media-use/scripts/lib/duck.mjs +16 -10
- package/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
- package/skills/media-use/scripts/lib/media-home.mjs +20 -0
- package/skills/media-use/scripts/lib/npx-sync.mjs +28 -2
- package/skills/media-use/scripts/lib/prefs-store.mjs +2 -2
- package/skills/media-use/scripts/lib/recipe-store.mjs +2 -2
- package/skills/media-use/scripts/lib/telemetry.mjs +29 -41
- package/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
- package/skills/media-use/scripts/prefs.mjs +1 -1
- package/skills/media-use/scripts/recipe.mjs +1 -1
- package/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
- package/skills/media-use/scripts/resolve.mjs +27 -1267
- package/skills/media-use/scripts/transcribe.mjs +39 -25
- package/skills/media-use/scripts/transcribe.test.mjs +112 -0
- package/skills/media-use/scripts/transcript-cut.mjs +39 -8
- package/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
- package/skills/motion-graphics/SKILL.md +3 -1
- package/skills/motion-graphics/agents/builder.md +1 -0
- package/skills/motion-graphics/agents/director.md +2 -1
- package/skills/motion-graphics/catalog-map.md +25 -13
- package/skills/motion-graphics/categories/charts/module.md +2 -1
- package/skills/motion-graphics/categories/lower-thirds/module.md +4 -0
- package/skills/motion-graphics/categories/news/module.md +1 -1
- package/skills/motion-graphics/references/motion-vocabulary.md +4 -0
- package/skills/music-to-video/SKILL.md +8 -6
- package/skills/music-to-video/references/montage.md +3 -6
- package/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +10 -111
- package/skills/music-to-video/references/motion-primitives/3d-card-flip/scene.html +119 -0
- package/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +11 -284
- package/skills/music-to-video/references/motion-primitives/bg-flow-field/scene.html +294 -0
- package/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +10 -76
- package/skills/music-to-video/references/motion-primitives/binary-decrypt/scene.html +85 -0
- package/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +10 -52
- package/skills/music-to-video/references/motion-primitives/blur-resolve/scene.html +60 -0
- package/skills/music-to-video/references/motion-primitives/braam-punch/index.html +10 -92
- package/skills/music-to-video/references/motion-primitives/braam-punch/scene.html +100 -0
- package/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +10 -103
- package/skills/music-to-video/references/motion-primitives/chromatic-split/scene.html +111 -0
- package/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +10 -60
- package/skills/music-to-video/references/motion-primitives/chrome-sweep/scene.html +68 -0
- package/skills/music-to-video/references/motion-primitives/counting-punch/index.html +10 -110
- package/skills/music-to-video/references/motion-primitives/counting-punch/scene.html +119 -0
- package/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +10 -112
- package/skills/music-to-video/references/motion-primitives/crash-zoom-in/scene.html +120 -0
- package/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +10 -121
- package/skills/music-to-video/references/motion-primitives/datamosh-smear/scene.html +131 -0
- package/skills/music-to-video/references/motion-primitives/directional-fill/index.html +10 -90
- package/skills/music-to-video/references/motion-primitives/directional-fill/scene.html +103 -0
- package/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +10 -94
- package/skills/music-to-video/references/motion-primitives/dolly-zoom/scene.html +102 -0
- package/skills/music-to-video/references/motion-primitives/electric-arc/index.html +10 -100
- package/skills/music-to-video/references/motion-primitives/electric-arc/scene.html +105 -0
- package/skills/music-to-video/references/motion-primitives/flash-cut/index.html +10 -89
- package/skills/music-to-video/references/motion-primitives/flash-cut/scene.html +97 -0
- package/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +10 -197
- package/skills/music-to-video/references/motion-primitives/gooey-metaball/scene.html +206 -0
- package/skills/music-to-video/references/motion-primitives/hard-cut/index.html +10 -74
- package/skills/music-to-video/references/motion-primitives/hard-cut/scene.html +82 -0
- package/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +10 -36
- package/skills/music-to-video/references/motion-primitives/hypercut-whip/scene.html +44 -0
- package/skills/music-to-video/references/motion-primitives/iris-open/index.html +10 -61
- package/skills/music-to-video/references/motion-primitives/iris-open/scene.html +69 -0
- package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +10 -55
- package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/scene.html +64 -0
- package/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +10 -88
- package/skills/music-to-video/references/motion-primitives/liquid-morph/scene.html +96 -0
- package/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +10 -66
- package/skills/music-to-video/references/motion-primitives/mask-reveal/scene.html +74 -0
- package/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +10 -81
- package/skills/music-to-video/references/motion-primitives/mosaic-pack/scene.html +89 -0
- package/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +10 -65
- package/skills/music-to-video/references/motion-primitives/neon-flicker/scene.html +73 -0
- package/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +10 -74
- package/skills/music-to-video/references/motion-primitives/outline-to-fill/scene.html +82 -0
- package/skills/music-to-video/references/motion-primitives/palette-flip/index.html +10 -89
- package/skills/music-to-video/references/motion-primitives/palette-flip/scene.html +97 -0
- package/skills/music-to-video/references/motion-primitives/particle-burst/index.html +10 -98
- package/skills/music-to-video/references/motion-primitives/particle-burst/scene.html +106 -0
- package/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +10 -78
- package/skills/music-to-video/references/motion-primitives/pixel-dissolve/scene.html +86 -0
- package/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +10 -117
- package/skills/music-to-video/references/motion-primitives/radial-burst-lines/scene.html +130 -0
- package/skills/music-to-video/references/motion-primitives/screen-shake/index.html +10 -70
- package/skills/music-to-video/references/motion-primitives/screen-shake/scene.html +78 -0
- package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +10 -87
- package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/scene.html +100 -0
- package/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +10 -94
- package/skills/music-to-video/references/motion-primitives/spotlight-sweep/scene.html +102 -0
- package/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +10 -74
- package/skills/music-to-video/references/motion-primitives/staggered-exit/scene.html +82 -0
- package/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +11 -271
- package/skills/music-to-video/references/motion-primitives/text-spectral-rays/scene.html +280 -0
- package/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +10 -92
- package/skills/music-to-video/references/motion-primitives/text-wave-distort/scene.html +106 -0
- package/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +10 -101
- package/skills/music-to-video/references/motion-primitives/tile-mosaic/scene.html +109 -0
- package/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +10 -79
- package/skills/music-to-video/references/motion-primitives/typewriter-reveal/scene.html +91 -0
- package/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +10 -83
- package/skills/music-to-video/references/motion-primitives/word-grid-burst/scene.html +96 -0
- package/skills/music-to-video/references/planning.md +2 -2
- package/skills/music-to-video/scripts/lib/storyboard.mjs +1 -1
- package/skills/music-to-video/sub-agents/frame-worker.md +2 -2
- package/skills/pr-to-video/SKILL.md +20 -16
- package/skills/pr-to-video/references/code-vocabulary.md +14 -12
- package/skills/pr-to-video/references/story-design.md +1 -1
- package/skills/pr-to-video/scripts/assemble-index.mjs +6 -4
- package/skills/pr-to-video/scripts/assemble-index.test.mjs +57 -2
- package/skills/pr-to-video/scripts/audio.mjs +2 -0
- package/skills/pr-to-video/scripts/build-frame.mjs +6 -3
- package/skills/pr-to-video/scripts/captions.mjs +7 -4
- package/skills/pr-to-video/scripts/captions.test.mjs +41 -0
- package/skills/pr-to-video/scripts/frame-packets.mjs +4 -4
- package/skills/pr-to-video/scripts/lib/bgm-volume.mjs +4 -0
- package/skills/pr-to-video/scripts/lib/captured-fonts.mjs +58 -0
- package/skills/pr-to-video/scripts/lib/frame-packets-core.mjs +194 -0
- package/skills/pr-to-video/scripts/lib/storyboard.mjs +1 -1
- package/skills/pr-to-video/scripts/lib/transitions.json +3 -3
- package/skills/pr-to-video/scripts/transitions.mjs +7 -5
- package/skills/pr-to-video/sub-agents/frame-worker.md +1 -1
- package/skills/product-launch-video/SKILL.md +20 -16
- package/skills/product-launch-video/references/story-design.md +1 -1
- package/skills/product-launch-video/scripts/assemble-index.mjs +6 -4
- package/skills/product-launch-video/scripts/assemble-index.test.mjs +57 -2
- package/skills/product-launch-video/scripts/audio.mjs +2 -0
- package/skills/product-launch-video/scripts/audio.test.mjs +16 -0
- package/skills/product-launch-video/scripts/build-frame-subsets.test.mjs +152 -0
- package/skills/product-launch-video/scripts/build-frame.mjs +6 -3
- package/skills/product-launch-video/scripts/captions.mjs +7 -4
- package/skills/product-launch-video/scripts/frame-packets.mjs +4 -4
- package/skills/product-launch-video/scripts/lib/bgm-volume.mjs +4 -0
- package/skills/product-launch-video/scripts/lib/captured-fonts.mjs +58 -0
- package/skills/product-launch-video/scripts/lib/frame-packets-core.mjs +194 -0
- package/skills/product-launch-video/scripts/lib/storyboard.mjs +1 -1
- package/skills/product-launch-video/scripts/lib/transitions.json +3 -3
- package/skills/product-launch-video/scripts/transitions.mjs +7 -5
- package/skills/product-launch-video/scripts/transitions.test.mjs +68 -0
- package/skills/product-launch-video/sub-agents/frame-worker.md +1 -1
- package/skills/remotion-to-hyperframes/SKILL.md +7 -4
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +5 -5
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/compositions/title.html +31 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +10 -25
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +8 -8
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +9 -9
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-1.html +35 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.html +35 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-3.html +36 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +28 -71
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +3 -3
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html +52 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html +99 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html +55 -0
- package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +13 -212
- package/skills/remotion-to-hyperframes/references/api-map.md +16 -16
- package/skills/remotion-to-hyperframes/references/limitations.md +7 -7
- package/skills/remotion-to-hyperframes/references/lottie.md +5 -7
- package/skills/remotion-to-hyperframes/references/media.md +3 -3
- package/skills/remotion-to-hyperframes/references/parameters.md +5 -0
- package/skills/remotion-to-hyperframes/references/sequencing.md +71 -18
- package/skills/slideshow/SKILL.md +4 -1
- package/skills/slideshow/references/standalone-harness.md +0 -3
- package/skills/talking-head-recut/SKILL.md +10 -1
- package/skills/hyperframes-core/references/review-loop.md +0 -41
- package/skills/media-use/scripts/lib/adopt.mjs +0 -128
- package/skills/media-use/scripts/lib/adopt.test.mjs +0 -95
- package/skills/media-use/scripts/lib/bgm-provider.mjs +0 -20
- package/skills/media-use/scripts/lib/brand-provider.mjs +0 -59
- package/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +0 -108
- package/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +0 -85
- package/skills/media-use/scripts/lib/cache.mjs +0 -150
- package/skills/media-use/scripts/lib/candidates.mjs +0 -91
- package/skills/media-use/scripts/lib/candidates.test.mjs +0 -155
- package/skills/media-use/scripts/lib/codex-provider.mjs +0 -161
- package/skills/media-use/scripts/lib/codex-provider.test.mjs +0 -34
- package/skills/media-use/scripts/lib/coverage.test.mjs +0 -117
- package/skills/media-use/scripts/lib/cube-build.mjs +0 -181
- package/skills/media-use/scripts/lib/cube-build.test.mjs +0 -80
- package/skills/media-use/scripts/lib/cube-validate.mjs +0 -198
- package/skills/media-use/scripts/lib/cube-validate.test.mjs +0 -125
- package/skills/media-use/scripts/lib/cutlist.test.mjs +0 -148
- package/skills/media-use/scripts/lib/duck.test.mjs +0 -118
- package/skills/media-use/scripts/lib/error-diffusion.test.mjs +0 -102
- package/skills/media-use/scripts/lib/freeze.mjs +0 -70
- package/skills/media-use/scripts/lib/freeze.test.mjs +0 -46
- package/skills/media-use/scripts/lib/grade-analyzer.mjs +0 -264
- package/skills/media-use/scripts/lib/grade-analyzer.test.mjs +0 -285
- package/skills/media-use/scripts/lib/heygen-cli.mjs +0 -191
- package/skills/media-use/scripts/lib/heygen-cli.test.mjs +0 -301
- package/skills/media-use/scripts/lib/heygen-search.mjs +0 -45
- package/skills/media-use/scripts/lib/heygen-search.test.mjs +0 -49
- package/skills/media-use/scripts/lib/heygen-video-provider.mjs +0 -127
- package/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +0 -344
- package/skills/media-use/scripts/lib/image-provider.mjs +0 -44
- package/skills/media-use/scripts/lib/local-models.mjs +0 -318
- package/skills/media-use/scripts/lib/local-models.test.mjs +0 -220
- package/skills/media-use/scripts/lib/local-run.mjs +0 -78
- package/skills/media-use/scripts/lib/local-run.test.mjs +0 -121
- package/skills/media-use/scripts/lib/logo-provider.mjs +0 -222
- package/skills/media-use/scripts/lib/logo-provider.test.mjs +0 -137
- package/skills/media-use/scripts/lib/ltx-video-provider.mjs +0 -94
- package/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +0 -316
- package/skills/media-use/scripts/lib/lut-preset-provider.mjs +0 -266
- package/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +0 -176
- package/skills/media-use/scripts/lib/manifest.test.mjs +0 -388
- package/skills/media-use/scripts/lib/match.mjs +0 -47
- package/skills/media-use/scripts/lib/mflux-provider.mjs +0 -128
- package/skills/media-use/scripts/lib/mflux-provider.test.mjs +0 -174
- package/skills/media-use/scripts/lib/misses.mjs +0 -49
- package/skills/media-use/scripts/lib/misses.test.mjs +0 -78
- package/skills/media-use/scripts/lib/npx-sync.test.mjs +0 -50
- package/skills/media-use/scripts/lib/parakeet-words.test.mjs +0 -44
- package/skills/media-use/scripts/lib/prefs-store.test.mjs +0 -189
- package/skills/media-use/scripts/lib/probe.mjs +0 -39
- package/skills/media-use/scripts/lib/probe.test.mjs +0 -31
- package/skills/media-use/scripts/lib/providers.mjs +0 -5
- package/skills/media-use/scripts/lib/recipe-store.test.mjs +0 -367
- package/skills/media-use/scripts/lib/registry.mjs +0 -218
- package/skills/media-use/scripts/lib/registry.test.mjs +0 -261
- package/skills/media-use/scripts/lib/search.mjs +0 -24
- package/skills/media-use/scripts/lib/search.test.mjs +0 -32
- package/skills/media-use/scripts/lib/sfx-provider.mjs +0 -23
- package/skills/media-use/scripts/lib/specs.mjs +0 -132
- package/skills/media-use/scripts/lib/specs.test.mjs +0 -157
- package/skills/media-use/scripts/lib/stats.mjs +0 -117
- package/skills/media-use/scripts/lib/stats.test.mjs +0 -165
- package/skills/media-use/scripts/lib/telemetry.test.mjs +0 -373
- package/skills/media-use/scripts/lib/tts-local-provider.mjs +0 -92
- package/skills/media-use/scripts/lib/tts-local-provider.test.mjs +0 -72
- package/skills/media-use/scripts/lib/usage.mjs +0 -57
- package/skills/media-use/scripts/lib/usage.test.mjs +0 -54
- package/skills/media-use/scripts/lib/voice-provider.mjs +0 -57
- package/skills/media-use/scripts/lib/voice-provider.test.mjs +0 -46
- package/skills/media-use/scripts/resolve.test.mjs +0 -1120
- /package/skills/{hyperframes-core → hyperframes}/references/subagent-dispatch.md +0 -0
|
@@ -6,7 +6,7 @@ Creative direction for compositions when no design spec (`frame.md` or `design.m
|
|
|
6
6
|
|
|
7
7
|
1. **Interpret the prompt.** Generate real content. A recipe lists real ingredients. A HUD has real readouts.
|
|
8
8
|
2. **Pick a palette.** Light or dark? Declare bg, fg, accent before writing code.
|
|
9
|
-
3. **Pick typefaces.** Run the font discovery script in [
|
|
9
|
+
3. **Pick typefaces.** Run the font discovery script in [typography.md](typography.md) — or pick a font you already know that fits the theme. The script broadens your options; it's not the only source.
|
|
10
10
|
|
|
11
11
|
## Lazy Defaults to Question
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@ These patterns are AI design tells — the first thing every LLM reaches for. If
|
|
|
18
18
|
- Pure `#000` or `#fff` (tint toward your accent hue instead)
|
|
19
19
|
- Identical card grids (same-size cards repeated)
|
|
20
20
|
- Everything centered with equal weight (lead the eye somewhere)
|
|
21
|
-
- Banned fonts (see [
|
|
21
|
+
- Banned fonts (see [typography.md](typography.md) for full list)
|
|
22
22
|
|
|
23
23
|
If the content genuinely calls for one of these — centered layout for a solemn closing, cards for a real product UI mockup, a banned font because it's the perfect thematic match — use it. The goal is intentionality, not avoidance.
|
|
24
24
|
|
|
@@ -48,26 +48,26 @@ All decoratives should have slow ambient GSAP animation — breathing, drift, pu
|
|
|
48
48
|
|
|
49
49
|
## Motion
|
|
50
50
|
|
|
51
|
-
See [
|
|
51
|
+
See [motion-principles.md](motion-principles.md) for full rules. Quick: 0.3–0.6s, vary eases, combine transforms on entrances, overlap entries.
|
|
52
52
|
|
|
53
53
|
## Typography
|
|
54
54
|
|
|
55
|
-
See [
|
|
55
|
+
See [typography.md](typography.md) for full rules. Quick: 700-900 headlines / 300-400 body, serif + sans (not two sans), 60px+ headlines / 20px+ body.
|
|
56
56
|
|
|
57
57
|
## Palettes
|
|
58
58
|
|
|
59
59
|
Declare one background, one foreground, one accent before writing HTML.
|
|
60
60
|
|
|
61
|
-
| Category | Use for | File
|
|
62
|
-
| ----------------- | --------------------------------------------- |
|
|
63
|
-
| Bold / Energetic | Product launches, social media, announcements | [palettes/bold-energetic.md](palettes/bold-energetic.md) |
|
|
64
|
-
| Warm / Editorial | Storytelling, documentaries, case studies | [palettes/warm-editorial.md](palettes/warm-editorial.md) |
|
|
65
|
-
| Dark / Premium | Tech, finance, luxury, cinematic | [palettes/dark-premium.md](palettes/dark-premium.md) |
|
|
66
|
-
| Clean / Corporate | Explainers, tutorials, presentations | [palettes/clean-corporate.md](palettes/clean-corporate.md) |
|
|
67
|
-
| Nature / Earth | Sustainability, outdoor, organic | [palettes/nature-earth.md](palettes/nature-earth.md) |
|
|
68
|
-
| Neon / Electric | Gaming, tech, nightlife | [palettes/neon-electric.md](palettes/neon-electric.md) |
|
|
69
|
-
| Pastel / Soft | Fashion, beauty, lifestyle, wellness | [palettes/pastel-soft.md](palettes/pastel-soft.md) |
|
|
70
|
-
| Jewel / Rich | Luxury, events, sophisticated | [palettes/jewel-rich.md](palettes/jewel-rich.md) |
|
|
71
|
-
| Monochrome | Dramatic, typography-focused | [palettes/monochrome.md](palettes/monochrome.md) |
|
|
61
|
+
| Category | Use for | File |
|
|
62
|
+
| ----------------- | --------------------------------------------- | ------------------------------------------------------------- |
|
|
63
|
+
| Bold / Energetic | Product launches, social media, announcements | [palettes/bold-energetic.md](../palettes/bold-energetic.md) |
|
|
64
|
+
| Warm / Editorial | Storytelling, documentaries, case studies | [palettes/warm-editorial.md](../palettes/warm-editorial.md) |
|
|
65
|
+
| Dark / Premium | Tech, finance, luxury, cinematic | [palettes/dark-premium.md](../palettes/dark-premium.md) |
|
|
66
|
+
| Clean / Corporate | Explainers, tutorials, presentations | [palettes/clean-corporate.md](../palettes/clean-corporate.md) |
|
|
67
|
+
| Nature / Earth | Sustainability, outdoor, organic | [palettes/nature-earth.md](../palettes/nature-earth.md) |
|
|
68
|
+
| Neon / Electric | Gaming, tech, nightlife | [palettes/neon-electric.md](../palettes/neon-electric.md) |
|
|
69
|
+
| Pastel / Soft | Fashion, beauty, lifestyle, wellness | [palettes/pastel-soft.md](../palettes/pastel-soft.md) |
|
|
70
|
+
| Jewel / Rich | Luxury, events, sophisticated | [palettes/jewel-rich.md](../palettes/jewel-rich.md) |
|
|
71
|
+
| Monochrome | Dramatic, typography-focused | [palettes/monochrome.md](../palettes/monochrome.md) |
|
|
72
72
|
|
|
73
73
|
Or derive from OKLCH — pick a hue, build bg/fg/accent at different lightnesses, tint everything toward that hue.
|
|
@@ -21,7 +21,7 @@ Structure is value-first; the **voice** stays whatever the workflow prescribes (
|
|
|
21
21
|
|
|
22
22
|
## 3. The storyboard is a proposal, not a listing
|
|
23
23
|
|
|
24
|
-
When Step 3 presents the plan (a checkpoint gate — `hyperframes
|
|
24
|
+
When Step 3 presents the plan (a checkpoint gate — `hyperframes/references/brief-contract.md` § 1):
|
|
25
25
|
|
|
26
26
|
- Open by echoing the strategy line: **"This video tells [audience] that [message]."**
|
|
27
27
|
- Present the frames as a markdown table, one row per frame:
|
|
@@ -34,6 +34,8 @@ When Step 3 presents the plan (a checkpoint gate — `hyperframes-core/reference
|
|
|
34
34
|
|
|
35
35
|
- Recommendations keep their receipts (brief-contract § 3): the archetype choice, the beat count, and any beat the user might question each state their basis.
|
|
36
36
|
|
|
37
|
+
How to write the storyboard itself, and the `storyboard.html` page it is reviewed on, is `storyboard-recipe.md`.
|
|
38
|
+
|
|
37
39
|
The proposal shape — echo line → frame table → style / duration footer → "approve or adjust" — is the cheapest place to iterate: a frame change here costs 30 seconds; the same change after build costs minutes.
|
|
38
40
|
|
|
39
41
|
## 4. Visuals point back to the source
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Storyboard recipe — plan a video like the launch films
|
|
2
|
+
|
|
3
|
+
Applies wherever a run plans on a storyboard (`storyboard: yes` in `brief-contract.md`). This file owns **how to make the storyboard**: what goes in it, and the one HTML page the user reviews. `review-loop.md` owns when the user is asked; `storyboard-format.md` owns the `STORYBOARD.md` file the scripts parse; `story-spine.md` owns the order of the story. The method is distilled from the shipped launch films' storyboards (a header, a named spine, a beat list, a contact sheet, a review round) and how their handoffs describe them, plus a few rules (the held frame, the slideshow/screensaver bans, the caption keep-out) that show up consistently in the wider storyboard corpus even where a given launch film omits them. Nothing here is a Studio feature: the agent writes the storyboard, the user reads it in chat and in a browser.
|
|
4
|
+
|
|
5
|
+
## 1. Open with the decisions, before any beat
|
|
6
|
+
|
|
7
|
+
Message, audience, arc and format go in the `STORYBOARD.md` frontmatter (`storyboard-format.md`); the rest go in sections above the first `## Frame` heading. Frame packets take everything after a frame heading to the next one, so a section placed after the last frame leaks into that frame's packet. Repeat the first three in the chat proposal:
|
|
8
|
+
|
|
9
|
+
- **Message**: one sentence, written as a claim, not a topic ("Close isn't final", not "About the inspector").
|
|
10
|
+
- **Audience and arc**: who watches, and the arc named in one line (pain → turn → proof → logo, or the workflow's own archetype).
|
|
11
|
+
- **Format**: aspect, target length, voiceover yes/no, music yes/no. Caption keep-out (content in the top ~83% when captions run).
|
|
12
|
+
- **The spine**: the one device that threads every beat, named now, not discovered while building (a persistent window, a silent button that finally has sound, one background that leads every transition).
|
|
13
|
+
- **Brand, from a capture**: palette by role with hex, three type roles (display, sans, mono) with sizes, radii and easings, each token noting where it came from. Take them from the real site or product, never from memory; `frame.md` holds them.
|
|
14
|
+
- **Bans**: a short per-video "do not" list (no glow, no side-by-side explainer layouts, no fake product UI, no static endcard). Name two motion failures to avoid: the slideshow (every beat a fresh card) and the screensaver (motion that says nothing).
|
|
15
|
+
- **Held frame**: allocate one beat on purpose where nothing moves and the line lands.
|
|
16
|
+
|
|
17
|
+
## 2. The beat list
|
|
18
|
+
|
|
19
|
+
One beat per idea, one focus per beat. Give each beat a short semantic name that will also be its composition filename.
|
|
20
|
+
|
|
21
|
+
| Field | Rule |
|
|
22
|
+
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
23
|
+
| Heading | `NN — Name (start–end, ~dur)`, absolute times. Sum the durations and state the total; check it against the target length by arithmetic. |
|
|
24
|
+
| Beat length | 1.5–3.5 s. A beat that must be read gets ~3 s; a beat that only hands off gets 1.5–2 s; a line of 5–7 words gets 2–2.5 s. |
|
|
25
|
+
| On screen | What is visible, in concrete terms (the object, its count, its position), with every on-screen word verbatim in quotes. |
|
|
26
|
+
| Voiceover | Verbatim, or `onscreen` for silent films. Reveals land on the word or beat cue that names them. |
|
|
27
|
+
| Hero prop | The object that persists, and the beat where it returns (callback). A callback beat states which earlier beat it answers. |
|
|
28
|
+
| Motion | Named moves with easing and duration, from a small vocabulary. First visible motion within 0.2 s of the beat starting. |
|
|
29
|
+
| Seam out | The named transition into the next beat and its direction. One direction rule for the whole film (leftward is the default). |
|
|
30
|
+
| Audio cue | Sound effect or music cue with its time, when the film has sound. |
|
|
31
|
+
| Constraint | At least one explicit "no …" per beat that could go generic. |
|
|
32
|
+
| Why | The beat's job in the story, traced to the message. A beat whose why cannot be traced is cut. |
|
|
33
|
+
|
|
34
|
+
Real product proof is real: a captured screen, the real command output, or a labelled placeholder beat that holds the slot. Never draw a vendor's UI in DOM. Where the film depicts something real, add a truthfulness line saying what is real.
|
|
35
|
+
|
|
36
|
+
Craft devices that make a storyboard specific are taught with examples in `docs/prompting/storyboards.mdx` (breather, callback, two-color discipline) and `docs/prompting/motion.mdx` (hero prop, accumulation); use them by name.
|
|
37
|
+
|
|
38
|
+
## 3. `storyboard.html`: the page the user reviews
|
|
39
|
+
|
|
40
|
+
Write one self-contained HTML file in the project root, `storyboard.html`, from `STORYBOARD.md`. Tell the user the path and to open it in a browser. It is the review surface, and it must be beautiful enough to judge the film from.
|
|
41
|
+
|
|
42
|
+
- **Header**: title with a version (`v1`), one-line dek, and a tag with resolution, length and beat count.
|
|
43
|
+
- **Grid**: three columns of 16:9 cells (`aspect-ratio: 16 / 9`, `container-type: inline-size`, sizes in `cqw` so the sheet matches the build), chronological, grouped under an act bar when there are acts.
|
|
44
|
+
- **Each cell** carries `id="frame-NN"` (the build reads its layout from there) and shows the beat's key moment drawn with the real words in the real fonts and brand colors, plain shapes for panels, charts and media, one accent on the focal. Then a label row (`NN · NAME` left, `id · start–end` right), a note that says what moves first and which way the seam goes (bold lead-in, one or two sentences), and a small chip naming the seam.
|
|
45
|
+
- **Two closing cells**: a seam map (every seam on one strip) and a tokens cell (palette, type roles, bans).
|
|
46
|
+
- **No motion, no scripts, no external assets.** Fonts are local `@font-face` or a system stack; images are inlined or relative. It must open from `file://`.
|
|
47
|
+
|
|
48
|
+
A sketch is a few dozen lines of HTML per cell; the whole sheet lands in minutes. Sketch fidelity is the point: a reviewer reacts to placement, hierarchy and copy, which is why the build later dresses the layout and never redraws it.
|
|
49
|
+
|
|
50
|
+
## 4. The review round
|
|
51
|
+
|
|
52
|
+
1. Present the chat proposal (`story-spine.md` § 3), then the sheet.
|
|
53
|
+
2. Record the user's notes verbatim under `## Changes from v1` and unresolved questions under `## Still open` (above the first frame), then bump the version and revise **only the beats named**.
|
|
54
|
+
3. Repeat until the user says the layout is locked, then list what is locked under `## Locked` (above the first frame, same reason as § 1). Build only after the lock.
|
|
55
|
+
4. When the build lands, the compositions are the truth: regenerate the timing table from `index.html` (and the transcript when there is voiceover) and update `STORYBOARD.md` and `storyboard.html` to match, because every launch film drifted from its storyboard. State the final length.
|
|
56
|
+
|
|
57
|
+
Do not render until asked.
|
|
@@ -60,7 +60,7 @@ You know these rules but you violate them. Stop.
|
|
|
60
60
|
- **Don't pair two sans-serifs.** You do this constantly — one for headlines, one for body. Cross the boundary: serif + sans, or sans + mono.
|
|
61
61
|
- **One expressive font per scene.** You pick two interesting fonts trying to make it "better." One performs, one recedes.
|
|
62
62
|
- **Weight contrast must be extreme.** You default to 400 vs 700. Video needs 300 vs 900. The difference must be visible in motion at a glance.
|
|
63
|
-
- **Video sizes, not web sizes.** Full-screen viewing (YouTube / website embed): body 20px minimum, headlines 60px+, data labels 16px. **In-feed viewing** (destination = X / LinkedIn / Instagram feed — `hyperframes
|
|
63
|
+
- **Video sizes, not web sizes.** Full-screen viewing (YouTube / website embed): body 20px minimum, headlines 60px+, data labels 16px. **In-feed viewing** (destination = X / LinkedIn / Instagram feed — `hyperframes/references/brief-contract.md` § 2): the video plays small inside a scrolling feed, so scale up — body ≥32px, headlines ≥90px, data labels ≥24px (first-pass values; calibrate against real renders). You will try to use 14px. Don't.
|
|
64
64
|
|
|
65
65
|
## What You Don't Do Without Being Told
|
|
66
66
|
|
|
@@ -12,7 +12,7 @@ import { spawnSync } from "node:child_process";
|
|
|
12
12
|
import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { createRequire } from "node:module";
|
|
14
14
|
import { tmpdir } from "node:os";
|
|
15
|
-
import { basename, delimiter, dirname, join, parse, resolve } from "node:path";
|
|
15
|
+
import { basename, delimiter, dirname, join, parse, resolve, win32 as win32Path } from "node:path";
|
|
16
16
|
import { createInterface } from "node:readline/promises";
|
|
17
17
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
18
18
|
|
|
@@ -339,23 +339,54 @@ function ancestors(start) {
|
|
|
339
339
|
return dirs;
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
+
export function resolveNpmSpawnCommand(
|
|
343
|
+
args,
|
|
344
|
+
platform = process.platform,
|
|
345
|
+
env = process.env,
|
|
346
|
+
nodeExecPath = process.execPath,
|
|
347
|
+
pathExists = existsSync,
|
|
348
|
+
) {
|
|
349
|
+
if (platform !== "win32") {
|
|
350
|
+
return { cmd: "npm", args, opts: { stdio: "inherit" } };
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const bundledNpmCli = win32Path.join(
|
|
354
|
+
win32Path.dirname(nodeExecPath),
|
|
355
|
+
"node_modules",
|
|
356
|
+
"npm",
|
|
357
|
+
"bin",
|
|
358
|
+
"npm-cli.js",
|
|
359
|
+
);
|
|
360
|
+
const npmCli = [env.npm_execpath, bundledNpmCli].find(
|
|
361
|
+
(candidate) => candidate && pathExists(candidate),
|
|
362
|
+
);
|
|
363
|
+
if (!npmCli) return null;
|
|
364
|
+
return {
|
|
365
|
+
cmd: env.npm_node_execpath || nodeExecPath,
|
|
366
|
+
args: [npmCli, ...args],
|
|
367
|
+
opts: { stdio: "inherit", windowsHide: true },
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
342
371
|
function bootstrapWithNpmInstall(packageNames) {
|
|
343
372
|
const installRoot = mkdtempSync(join(tmpdir(), "hyperframes-skill-deps-"));
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
{
|
|
358
|
-
|
|
373
|
+
const npmArgs = [
|
|
374
|
+
"install",
|
|
375
|
+
"--silent",
|
|
376
|
+
"--no-audit",
|
|
377
|
+
"--no-fund",
|
|
378
|
+
"--ignore-scripts",
|
|
379
|
+
"--no-save",
|
|
380
|
+
"--prefix",
|
|
381
|
+
installRoot,
|
|
382
|
+
...packageNames,
|
|
383
|
+
];
|
|
384
|
+
const npmCommand = resolveNpmSpawnCommand(npmArgs);
|
|
385
|
+
if (!npmCommand) {
|
|
386
|
+
rmSync(installRoot, { recursive: true, force: true });
|
|
387
|
+
throw new Error("Could not locate npm-cli.js for dependency bootstrap on Windows.");
|
|
388
|
+
}
|
|
389
|
+
const installResult = spawnSync(npmCommand.cmd, npmCommand.args, npmCommand.opts);
|
|
359
390
|
|
|
360
391
|
if (installResult.error) throw installResult.error;
|
|
361
392
|
if (installResult.status !== 0) {
|
|
@@ -5,10 +5,62 @@ import { copyFileSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { resolveNpmSpawnCommand } from "./package-loader.mjs";
|
|
8
9
|
|
|
9
10
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
const ENV = "HYPERFRAMES_SKILL_PKG_VERSION";
|
|
11
12
|
|
|
13
|
+
test("resolveNpmSpawnCommand routes Windows npm through node and npm-cli.js", () => {
|
|
14
|
+
const npmCli = "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js";
|
|
15
|
+
const node = "C:\\Program Files\\nodejs\\node.exe";
|
|
16
|
+
const resolved = resolveNpmSpawnCommand(
|
|
17
|
+
["install", "@hyperframes/producer@0.7.55", "value & calc"],
|
|
18
|
+
"win32",
|
|
19
|
+
{ npm_execpath: npmCli, npm_node_execpath: node },
|
|
20
|
+
node,
|
|
21
|
+
(path) => path === npmCli,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
assert.deepEqual(resolved, {
|
|
25
|
+
cmd: node,
|
|
26
|
+
args: [npmCli, "install", "@hyperframes/producer@0.7.55", "value & calc"],
|
|
27
|
+
opts: { stdio: "inherit", windowsHide: true },
|
|
28
|
+
});
|
|
29
|
+
assert.equal(resolved.opts.shell, undefined);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test("resolveNpmSpawnCommand finds npm-cli.js beside node for direct Windows runs", () => {
|
|
33
|
+
const node = "C:\\Program Files\\nodejs\\node.exe";
|
|
34
|
+
const npmCli = "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js";
|
|
35
|
+
const resolved = resolveNpmSpawnCommand(
|
|
36
|
+
["install", "@hyperframes/producer@0.7.55"],
|
|
37
|
+
"win32",
|
|
38
|
+
{},
|
|
39
|
+
node,
|
|
40
|
+
(path) => path === npmCli,
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
assert.equal(resolved?.cmd, node);
|
|
44
|
+
assert.deepEqual(resolved?.args, [npmCli, "install", "@hyperframes/producer@0.7.55"]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test(
|
|
48
|
+
"resolveNpmSpawnCommand launches the installed npm CLI on Windows",
|
|
49
|
+
{ skip: process.platform !== "win32" },
|
|
50
|
+
() => {
|
|
51
|
+
const resolved = resolveNpmSpawnCommand(["--version"]);
|
|
52
|
+
assert.ok(resolved);
|
|
53
|
+
|
|
54
|
+
const result = spawnSync(resolved.cmd, resolved.args, {
|
|
55
|
+
encoding: "utf8",
|
|
56
|
+
windowsHide: true,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
assert.equal(result.status, 0, result.stderr);
|
|
60
|
+
assert.match(result.stdout.trim(), /^\d+\./);
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
|
|
12
64
|
// (a) env override wins — no ancestor lookup, exact version echoed back.
|
|
13
65
|
test("hyperframesPackageSpec: env override wins", async () => {
|
|
14
66
|
const prev = process.env[ENV];
|
|
@@ -9,6 +9,8 @@ description: >
|
|
|
9
9
|
general video planning.
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
**Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
|
|
13
|
+
|
|
12
14
|
# HyperFrames Keyframes
|
|
13
15
|
|
|
14
16
|
Keyframes are a pose contract: visible states, continuous subject identity, seek-safe runtime, verified pixels.
|
|
@@ -34,8 +36,8 @@ fades use `/hyperframes-audio`.
|
|
|
34
36
|
| Crop and mask reframe | Interpolate `clip-path` or a mask on an inner visual wrapper to crop/reframe without changing source time. Polygon keyframes can form a polygon/mask transition. |
|
|
35
37
|
| Directional wipe cut or iris/reveal cut | Animate a mask/clip boundary across overlapping visual clips; `/hyperframes-animation` owns the handoff choreography. |
|
|
36
38
|
| Split-screen handoff | Keep both visual clips placed by core, then keyframe their inner crop/mask wrappers and divider geometry. |
|
|
37
|
-
| Constant source retime | `/hyperframes-core` owns normalized `data-playback-rate` (`0.1..
|
|
38
|
-
| Source speed ramps |
|
|
39
|
+
| Constant source retime | `/hyperframes-core` owns normalized `data-playback-rate` (`0.1..10`) for render-safe picture and pitch-preserved sound. It is constant for the whole media element. |
|
|
40
|
+
| Source speed ramps | A `rate` lane in `data-automation` on the `<video>`/`<audio>` (`t` in clip seconds, `v` 0.1..10, log interpolation); it wins over the constant rate. |
|
|
39
41
|
| Freeze / hold | A visual pose, final source frame, or finished sub-composition can hold. Arbitrary mid-source freeze is not supported; preprocess a still/derived segment, place it as its own clip, then resume with another source range. |
|
|
40
42
|
|
|
41
43
|
When editing picture and sound together, load `/hyperframes-core`, this skill for
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hyperframes-registry
|
|
3
|
-
description:
|
|
3
|
+
description: Search, install, and wire registry blocks and components into HyperFrames compositions. Use BEFORE hand-building any named visual — whenever a brief, a user, or a storyboard names a look, effect, treatment, or transition such as CRT scanlines, glitch, chromatic aberration, film grain, a shimmer sweep, a chart, a code or terminal window, a map, or a confetti burst — because roughly 400 hosted items already cover many of them and the search ranks all of them with nothing installed, no project, and no account. Also use when running hyperframes add or hyperframes catalog, installing one item or every block matching a tag, wiring an installed item into index.html, or working with hyperframes.json. Covers discovery, install locations, block sub-composition wiring, component snippet merging, and authoring a new block or component to contribute upstream (idea → scaffold → validate → PR).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
**Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
|
|
7
|
+
|
|
6
8
|
# HyperFrames Registry
|
|
7
9
|
|
|
8
10
|
The registry provides reusable blocks and components installable via `hyperframes add <name>`.
|
|
@@ -89,6 +89,12 @@ Apply the correct template based on type. See [templates.md](templates.md) for c
|
|
|
89
89
|
|
|
90
90
|
#### All types
|
|
91
91
|
|
|
92
|
+
- **Load files the block ships through `__hyperframes.assetUrl("assets/...")`** whenever a script
|
|
93
|
+
builds the path (textures, fonts, JSON, models). Attributes like `src` and `href` are rebased
|
|
94
|
+
when the block is mounted; strings in a script are not, so a bare `"assets/..."` 404s once the
|
|
95
|
+
block lives under `compositions/<name>/`. A separate `.js` file gets the URLs from the block's
|
|
96
|
+
inline script. A block whose assets install to the project's own `assets/` (target
|
|
97
|
+
`compositions/<name>.html`) keeps plain project-root paths; `assetUrl` would look beside the file.
|
|
92
98
|
- **Placeholder content is monochrome** — read
|
|
93
99
|
[placeholder-material.md](placeholder-material.md) before choosing a single colour. Stand-in
|
|
94
100
|
screens, images, cards, avatars, logos and chart series use four alpha steps of the
|
|
@@ -118,9 +124,9 @@ hyperframes snapshot --at "1.0,3.0,5.0,7.0"
|
|
|
118
124
|
npx hyperframes publish
|
|
119
125
|
```
|
|
120
126
|
|
|
121
|
-
**Catalog preview image** —
|
|
127
|
+
**Catalog preview image** — For the default PNG preview, save your snapshot at `docs/images/catalog/{kind}/{name}.png` in the repository checkout (`{kind}` is `blocks` or `components`). After upload, the catalog serves it from `https://static.heygen.ai/hyperframes-oss/docs/images/catalog/{kind}/{name}.png`. If `registry-item.json` declares `preview`, the card uses its `poster` URL; a `preview` without `poster` has no image fallback.
|
|
122
128
|
|
|
123
|
-
- **HeyGen internal contributors:** run `scripts/upload-docs-images.sh` (requires AWS profile `engineering-767398024897`)
|
|
129
|
+
- **HeyGen internal contributors:** run `scripts/upload-docs-images.sh` from the repository root (requires AWS profile `engineering-767398024897`)
|
|
124
130
|
- **External contributors:** attach the preview MP4 to your PR description. A maintainer will generate and upload the catalog image before merging.
|
|
125
131
|
|
|
126
132
|
### Step 6: Ship
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Registry discovery
|
|
2
2
|
|
|
3
|
+
<!-- registry-items: allow=data-composition-id,data-start,data-track-index -->
|
|
4
|
+
|
|
3
5
|
## Use the catalog command first
|
|
4
6
|
|
|
5
7
|
```bash
|
|
@@ -54,7 +56,7 @@ Where `<type-dir>` is `examples`, `blocks`, or `components`.
|
|
|
54
56
|
|
|
55
57
|
### Blocks
|
|
56
58
|
|
|
57
|
-
For an always-current list run `npx hyperframes catalog --type block`. The tables below group the
|
|
59
|
+
For an always-current list run `npx hyperframes catalog --type block`. **The search is the source of truth; the tables below are a hand-maintained sample and under-cover by design** — they group 97 of the registry's 180 blocks by category, so a block missing from them is not evidence the registry lacks it. Only an empty `npx hyperframes catalog --query "<what you want>" --json` is that evidence. Do not grow these tables toward the full set; search instead. **Block name ≠ shader name**: shader-transition blocks (e.g. `domain-warp-dissolve`) wrap a HyperShader runtime whose internal name omits the `-dissolve`/`-warp` suffix — see the showcase HTML installed alongside the block for the canonical name.
|
|
58
60
|
|
|
59
61
|
#### Shader transitions (14)
|
|
60
62
|
|
|
@@ -101,15 +103,13 @@ Showcase compositions grouping multiple CSS / GSAP transition styles by family.
|
|
|
101
103
|
|
|
102
104
|
WebGPU + html-in-canvas frosted-glass surfaces. **Require Brave / Chrome canary** with WebGPU enabled — set `PRODUCER_HEADLESS_SHELL_PATH` to point at the browser; engine auto-passes `--enable-unsafe-webgpu`. See `/hyperframes-animation` → `adapters/typegpu.md`.
|
|
103
105
|
|
|
104
|
-
| Name
|
|
105
|
-
|
|
|
106
|
-
| `ios26-liquid-glass`
|
|
107
|
-
| `macos-tahoe-liquid-glass`
|
|
108
|
-
| `liquid-glass-widgets`
|
|
109
|
-
| `liquid-glass-notification`
|
|
110
|
-
| `liquid-glass
|
|
111
|
-
| `liquid-glass-media-controls` | Frosted media-control panels spreading over aurora shader |
|
|
112
|
-
| `vfx-liquid-glass` | Bare VFX composition shell for liquid-glass effects |
|
|
106
|
+
| Name | Description |
|
|
107
|
+
| --------------------------- | --------------------------------------------------------------------------------------- |
|
|
108
|
+
| `ios26-liquid-glass` | 3D iPhone (GLTF) + iOS 26 home screen, glass app icons, shader wallpaper, notifications |
|
|
109
|
+
| `macos-tahoe-liquid-glass` | 3D MacBook (GLTF) + macOS Tahoe-style desktop, glass menu bar, Finder, dock |
|
|
110
|
+
| `liquid-glass-widgets` | Frosted stat cards, showcase panel, pill chips over aurora shader |
|
|
111
|
+
| `liquid-glass-notification` | Frosted notification cards floating over aurora shader |
|
|
112
|
+
| `vfx-liquid-glass` | Bare VFX composition shell for liquid-glass effects |
|
|
113
113
|
|
|
114
114
|
#### VFX (6)
|
|
115
115
|
|
|
@@ -177,24 +177,11 @@ Platform-recognizable UI overlays. Stamp on top of a beat or use as a beat close
|
|
|
177
177
|
|
|
178
178
|
A code/terminal window that **types a code or shell session per-character**. Theme = visual chrome only; structure, wiring, and install are identical across all 24 — pick one by name, wire it like any block (`data-composition-id` + `data-start` + `data-track-index`, see `wiring-blocks.md`). Two chrome families:
|
|
179
179
|
|
|
180
|
-
**VS Code workbench (12)** — full editor chrome (activity bar, sidebar, tabs, integrated terminal, status bar). Theme variants: `code-snippet-dark-2026`, `code-snippet-dark-modern`, `code-snippet-dark-plus`, `code-snippet-light-2026`, `code-snippet-light-modern`, `code-snippet-light-plus`, `code-snippet-high-contrast`, `code-snippet-high-contrast-light`, `code-snippet-monokai`, `code-snippet-solarized-light`, `code-snippet-visual-studio-dark`, `code-snippet-visual-studio-light`.
|
|
181
|
-
|
|
182
180
|
**Apple Terminal (12)** — macOS Terminal.app window typing a shell session. Profile = window colors:
|
|
183
181
|
|
|
184
|
-
| Name
|
|
185
|
-
|
|
|
186
|
-
| `code-snippet-apple-terminal-
|
|
187
|
-
| `code-snippet-apple-terminal-clear-dark` | Semi-transparent dark bg |
|
|
188
|
-
| `code-snippet-apple-terminal-clear-light` | Semi-transparent light bg |
|
|
189
|
-
| `code-snippet-apple-terminal-grass` | Black bg, green text |
|
|
190
|
-
| `code-snippet-apple-terminal-homebrew` | Black bg, bright green text, lime cursor |
|
|
191
|
-
| `code-snippet-apple-terminal-man-page` | Pale yellow bg, black text |
|
|
192
|
-
| `code-snippet-apple-terminal-novel` | Warm parchment bg, dark brown text |
|
|
193
|
-
| `code-snippet-apple-terminal-ocean` | Deep blue bg, white text |
|
|
194
|
-
| `code-snippet-apple-terminal-pro` | Black bg, grey text, lime cursor |
|
|
195
|
-
| `code-snippet-apple-terminal-red-sands` | Deep red bg, sandy text |
|
|
196
|
-
| `code-snippet-apple-terminal-silver-aerogel` | Dark grey bg, white text |
|
|
197
|
-
| `code-snippet-apple-terminal-solid-colors` | Deep purple bg, white text |
|
|
182
|
+
| Name | Look |
|
|
183
|
+
| --------------------------------- | -------------------------------- |
|
|
184
|
+
| `code-snippet-apple-terminal-pro` | Black bg, grey text, lime cursor |
|
|
198
185
|
|
|
199
186
|
#### Code Animations (9)
|
|
200
187
|
|
|
@@ -202,14 +189,13 @@ The richer, motion-first counterpart to the static `code-snippet-*` window theme
|
|
|
202
189
|
|
|
203
190
|
**DOM / text reveal (6):**
|
|
204
191
|
|
|
205
|
-
| Name
|
|
206
|
-
|
|
|
207
|
-
| `code-typing`
|
|
208
|
-
| `code-diff`
|
|
209
|
-
| `code-morph`
|
|
210
|
-
| `code-highlight`
|
|
211
|
-
| `code-scroll`
|
|
212
|
-
| `code-snippet-flight` | Discrete snippets fly in from the side and assemble into a stacked program (block-level FLIP) |
|
|
192
|
+
| Name | Description |
|
|
193
|
+
| ---------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
194
|
+
| `code-typing` | Token-streamed typing reveal, caret tracks the frontier (no CSS animation) — live-coding on screen |
|
|
195
|
+
| `code-diff` | An edit shown as a colored diff: removed lines collapse red, added expand green — before/after at line level |
|
|
196
|
+
| `code-morph` | One snippet transforms into another, tokens glide between positions (Shiki Magic Move) — a refactor / one state to another |
|
|
197
|
+
| `code-highlight` | A highlight band sweeps a target line while surrounding context dims — spotlight one line |
|
|
198
|
+
| `code-scroll` | Camera scrolls a long file to center + spotlight a target line — walk through a real module |
|
|
213
199
|
|
|
214
200
|
**GPU / WebGL hero reveals (3):** heavier, for a title-card / hero code moment.
|
|
215
201
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hyperframes-studio
|
|
3
|
+
description: >
|
|
4
|
+
Use when building or editing a HyperFrames project that people open in
|
|
5
|
+
Studio: how the timeline should be laid out so it reads well (one caption
|
|
6
|
+
track, one element kind per track, every scene a sub-composition) and where
|
|
7
|
+
captions and key content may sit (safe zones). Don't use for how to perform an
|
|
8
|
+
individual edit (split, trim, retime, volume, copy, swap): that is
|
|
9
|
+
`creator-editing-recipes.md` in `/hyperframes-core`.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
**Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
|
|
13
|
+
|
|
14
|
+
# HyperFrames Studio conventions
|
|
15
|
+
|
|
16
|
+
Studio draws one timeline row per top-level element. A project that follows the
|
|
17
|
+
rules below opens as a short, readable timeline; one that does not opens as a wall
|
|
18
|
+
of unlabeled rows the user cannot edit. These are conventions for what to build.
|
|
19
|
+
For how to change a clip, follow `/hyperframes-core` `references/creator-editing-recipes.md`
|
|
20
|
+
and never invent a different form of the same edit.
|
|
21
|
+
|
|
22
|
+
## 1. Every scene is a sub-composition
|
|
23
|
+
|
|
24
|
+
The root composition holds only timed hosts, media and audio. Any scene with nested
|
|
25
|
+
structure (a div containing children, a title with a subtitle, a chart) is its own
|
|
26
|
+
file loaded with `data-composition-src`, wiring in
|
|
27
|
+
`references/sub-compositions.md`.
|
|
28
|
+
|
|
29
|
+
Nested markup left inside the root does not become a row of its own. It hides inside
|
|
30
|
+
one opaque row that cannot be trimmed or moved part by part.
|
|
31
|
+
|
|
32
|
+
Author as if a structure lint rejects any violation.
|
|
33
|
+
|
|
34
|
+
## 2. One caption track
|
|
35
|
+
|
|
36
|
+
- All captions live on one track: a single sub-composition host (one `data-track-index`)
|
|
37
|
+
marked `data-track-kind="captions"` that carries every caption group in order.
|
|
38
|
+
- Never one row per caption group, and never captions mixed onto a track with
|
|
39
|
+
another kind.
|
|
40
|
+
- Word-timing rules are unchanged: see `/embedded-captions` and the `caption_*` lint rules.
|
|
41
|
+
|
|
42
|
+
## 3. One element kind per track
|
|
43
|
+
|
|
44
|
+
Group by kind so each row is one thing the user can select, mute or drag as a set.
|
|
45
|
+
|
|
46
|
+
| Kind | `data-track-kind` |
|
|
47
|
+
| --------------------------------------- | ---------------------- |
|
|
48
|
+
| Base video / A-roll | `video` (from the tag) |
|
|
49
|
+
| Scenes, overlays, graphics | `graphics` |
|
|
50
|
+
| Captions | `captions` |
|
|
51
|
+
| Audio (voiceover, music, sound effects) | `audio` (from the tag) |
|
|
52
|
+
|
|
53
|
+
Put `data-track-kind` on sub-composition hosts. Video and audio kinds come from the tag, so
|
|
54
|
+
`<video>` and `<audio>` need no attribute. Give each kind its own `data-track-index`; the number
|
|
55
|
+
is display only; it never changes what renders on top. Use CSS for
|
|
56
|
+
layering.
|
|
57
|
+
|
|
58
|
+
## 4. Safe zones
|
|
59
|
+
|
|
60
|
+
Any ruler or safe-box overlay lives in the preview pane, never inside the composition, so
|
|
61
|
+
do not add guide elements to the HTML.
|
|
62
|
+
Both framings (wide and vertical) use the same two safe boxes, Premiere's defaults. The preview
|
|
63
|
+
toggle draws them with a tick at the midpoint of every edge. Source:
|
|
64
|
+
`ACTION_SAFE_PERCENT` and `TITLE_SAFE_PERCENT` in `packages/studio/src/utils/previewSafeMargins.ts`.
|
|
65
|
+
|
|
66
|
+
| Box | Share of the frame | Inset on every edge |
|
|
67
|
+
| ----------- | ------------------ | ------------------- |
|
|
68
|
+
| Action-safe | 90% | 5% |
|
|
69
|
+
| Title-safe | 80% | 10% |
|
|
70
|
+
|
|
71
|
+
- Safe margins: everything visible stays inside the action-safe box (90%), and captions and key content stay inside the title-safe box (80%).
|
|
72
|
+
- Two-up and 50/50 layouts keep each half's content inside the title-safe box.
|
|
73
|
+
|
|
74
|
+
## Checking your work
|
|
75
|
+
|
|
76
|
+
Run `hyperframes lint` and fix every finding. Then open the project in Studio and
|
|
77
|
+
check that the timeline shows a base row, one row per scene host, one caption row and the audio rows.
|
|
@@ -3,30 +3,32 @@ name: media-use
|
|
|
3
3
|
description: Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
**Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
|
|
7
|
+
|
|
6
8
|
# media-use
|
|
7
9
|
|
|
8
10
|
The media OS for HyperFrames: resolve · generate · operate · remember — every media type, one skill, zero context noise.
|
|
9
11
|
|
|
10
|
-
First run: install and sign in to the `heygen` CLI (the free-usage path), then verify with `
|
|
12
|
+
First run: install and sign in to the `heygen` CLI (the free-usage path), then verify with `npx hyperframes media-use resolve --doctor`. Setup and providers: `references/setup-providers.md`.
|
|
11
13
|
|
|
12
14
|
## Resolve — the one verb
|
|
13
15
|
|
|
14
16
|
```bash
|
|
15
|
-
|
|
17
|
+
npx hyperframes media-use resolve --type <type> --intent "<description>" --project <dir>
|
|
16
18
|
```
|
|
17
19
|
|
|
18
20
|
Returns one line: `resolved <id> → <path> (<type>, <metadata>)`. All search noise stays on disk.
|
|
19
21
|
|
|
20
|
-
| Type | One-line intent
|
|
21
|
-
| ------- |
|
|
22
|
-
| `bgm` | background music (HeyGen catalog, 10k+ tracks)
|
|
23
|
-
| `sfx` | sound effects (bundled 19-file library + catalog)
|
|
24
|
-
| `image` | photos, backgrounds (HeyGen asset search, 75k+ vectors)
|
|
25
|
-
| `icon` | icons, symbols (transparent)
|
|
26
|
-
| `logo` | official brand marks (
|
|
27
|
-
| `voice` | TTS voiceover (HeyGen free-usage path; optional local Kokoro)
|
|
28
|
-
| `grade` | measured correction candidate; broad polish/stylization follows Media Treatments
|
|
29
|
-
| `lut` | user-provided or explicitly chosen reusable validated `.cube` file
|
|
22
|
+
| Type | One-line intent |
|
|
23
|
+
| ------- | -------------------------------------------------------------------------------- |
|
|
24
|
+
| `bgm` | background music (HeyGen catalog, 10k+ tracks) |
|
|
25
|
+
| `sfx` | sound effects (bundled 19-file library + catalog) |
|
|
26
|
+
| `image` | photos, backgrounds (HeyGen asset search, 75k+ vectors) |
|
|
27
|
+
| `icon` | icons, symbols (transparent) |
|
|
28
|
+
| `logo` | official brand marks (theSVG → GitHub avatar → favicon; never redrawn) |
|
|
29
|
+
| `voice` | TTS voiceover (HeyGen free-usage path; optional local Kokoro) |
|
|
30
|
+
| `grade` | measured correction candidate; broad polish/stylization follows Media Treatments |
|
|
31
|
+
| `lut` | user-provided or explicitly chosen reusable validated `.cube` file |
|
|
30
32
|
|
|
31
33
|
Before resolving fresh, list reusable candidates with `--candidates` and judge fit yourself — reuse rules, all flags, ingest (`--from`), and adopt are in `references/resolve.md`.
|
|
32
34
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Captions
|
|
2
2
|
|
|
3
|
+
<!-- registry-items: allow=max-width,data-composition-src,hyperframes-registry,blend-mode,caption-style,font-family -->
|
|
4
|
+
|
|
5
|
+
**The live search is the source of truth for what the registry has.** The table(s) below are a hand-maintained sample and under-cover by design: run `npx hyperframes catalog --query "<what you want>" --json` — it needs nothing installed — before concluding the registry lacks something. Item names here are checked against `registry/registry.json` by `bun run lint:skills`.
|
|
6
|
+
|
|
3
7
|
Before authoring: confirm the transcript came from the right Whisper model. CLI default `small.en` silently translates non-English audio — see [`../transcribe.md`](../transcribe.md) → "Language Rule" and [`transcript-handling.md`](transcript-handling.md) for the mandatory quality check.
|
|
4
8
|
|
|
5
9
|
Analyze spoken content to determine caption style. If user specifies a style, use that. Otherwise, detect tone from the transcript.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Background Removal
|
|
2
2
|
|
|
3
|
-
Make a transparent overlay (typical: a talking head over an arbitrary scene). Uses `u2net_human_seg` (
|
|
3
|
+
Make a transparent overlay (typical: a talking head over an arbitrary scene). Uses `u2net_human_seg` (Apache-2.0).
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npx hyperframes remove-background subject.mp4 -o transparent.webm # default: VP9 + alpha
|
|
@@ -14,9 +14,14 @@ node skills/media-use/audio/scripts/heygen-tts.mjs \
|
|
|
14
14
|
|
|
15
15
|
`narration.words.json` is already in the `[{ id, text, start, end }]` shape the captions pipeline consumes — no separate transcribe pass.
|
|
16
16
|
|
|
17
|
-
## Path B — ElevenLabs / Kokoro (TTS →
|
|
17
|
+
## Path B — Gemini / ElevenLabs / Kokoro (TTS → transcription)
|
|
18
18
|
|
|
19
|
-
These
|
|
19
|
+
These adapters supply audio without word data. The shared audio engine runs
|
|
20
|
+
transcription automatically when timings are absent. For Gemini, use the
|
|
21
|
+
request in [Text to speech](tts.md#gemini-narration), then consume
|
|
22
|
+
`audio_meta.json` → `voices[].words`.
|
|
23
|
+
|
|
24
|
+
For a standalone local Kokoro generation, generate the audio, then transcribe:
|
|
20
25
|
|
|
21
26
|
```bash
|
|
22
27
|
npx hyperframes tts script.txt --voice af_heart --output narration.wav
|
|
@@ -24,3 +29,7 @@ npx hyperframes transcribe narration.wav --model small.en # voice af_heart is
|
|
|
24
29
|
```
|
|
25
30
|
|
|
26
31
|
Whisper extracts precise word boundaries from the generated audio, so caption timing matches delivery without hand-tuning. Match `--model` to the voice's language (use `small.en` for `a`/`b` prefixes, `small --language <code>` otherwise). Then consume `transcript.json` via the caption references in `captions/`.
|
|
32
|
+
|
|
33
|
+
For Gemini, verify that transcription preserved the script, especially names,
|
|
34
|
+
numbers, and delivery pauses. If `words` is empty, resolve the transcription
|
|
35
|
+
failure before captioning. Generate and align again after changing the read.
|