dsh-hyperframes 0.9.1 → 0.9.3

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.
Files changed (837) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.en.md +3 -1
  3. package/README.md +3 -1
  4. package/docs/USAGE.en.md +2 -2
  5. package/docs/USAGE.md +2 -2
  6. package/lib/client.js +84 -67
  7. package/lib/index.js +1 -1
  8. package/lib/media-templates.d.ts +3 -3
  9. package/lib/media-templates.js +1 -1
  10. package/package.json +4 -3
  11. package/plugin.json +5 -0
  12. package/skills/NOTICE.md +3 -0
  13. package/skills/UPSTREAM-LICENSE.txt +190 -0
  14. package/skills/UPSTREAM.json +355 -0
  15. package/skills/embedded-captions/SKILL.md +4 -277
  16. package/skills/faceless-explainer/SKILL.md +4 -231
  17. package/skills/figma/SKILL.md +34 -113
  18. package/skills/general-video/SKILL.md +4 -161
  19. package/skills/hyperframes/SKILL.md +52 -115
  20. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/biennale-yellow/caption-skin.html +7 -8
  21. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blockframe/caption-skin.html +7 -8
  22. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blue-professional/caption-skin.html +7 -8
  23. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/bold-poster/caption-skin.html +7 -8
  24. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/broadside/caption-skin.html +7 -8
  25. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/capsule/caption-skin.html +7 -8
  26. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cartesian/caption-skin.html +7 -8
  27. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cobalt-grid/caption-skin.html +7 -8
  28. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/FRAME.md +2 -2
  29. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/caption-skin.html +7 -8
  30. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/coral/caption-skin.html +7 -8
  31. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/creative-mode/caption-skin.html +7 -8
  32. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/daisy-days/caption-skin.html +7 -8
  33. package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/editorial-forest/caption-skin.html +7 -8
  34. package/skills/hyperframes/references/captions.md +46 -0
  35. package/skills/hyperframes/references/film.md +48 -0
  36. package/skills/hyperframes/references/format.md +158 -0
  37. package/skills/hyperframes/references/look.md +69 -0
  38. package/skills/hyperframes/references/motion.md +95 -0
  39. package/skills/hyperframes/references/overlays.md +39 -0
  40. package/skills/hyperframes/references/plugin-installation.md +3 -3
  41. package/skills/hyperframes/references/review.md +51 -0
  42. package/skills/hyperframes/references/runtimes.md +69 -0
  43. package/skills/hyperframes/references/skill-lifecycle.md +28 -14
  44. package/skills/hyperframes/references/sound.md +43 -0
  45. package/skills/hyperframes/references/spec.md +76 -0
  46. package/skills/hyperframes/references/story.md +103 -0
  47. package/skills/hyperframes/references/storyboard-format.md +30 -22
  48. package/skills/hyperframes/references/storyboard.md +36 -0
  49. package/skills/hyperframes/references/types/3d.md +25 -0
  50. package/skills/hyperframes/references/types/character.md +20 -0
  51. package/skills/hyperframes/references/types/data.md +19 -0
  52. package/skills/hyperframes/references/types/explainer.md +34 -0
  53. package/skills/hyperframes/references/types/launch.md +41 -0
  54. package/skills/hyperframes/references/types/music.md +24 -0
  55. package/skills/hyperframes/references/types/vertical.md +23 -0
  56. package/skills/{motion-graphics/categories/maps → hyperframes/scripts}/bake-basemap.mjs +71 -20
  57. package/skills/hyperframes/scripts/lib/main-module.mjs +13 -0
  58. package/skills/hyperframes/scripts/lib/main-module.test.mjs +46 -0
  59. package/skills/{motion-graphics/grounding → hyperframes/scripts}/locate.mjs +1 -1
  60. package/skills/hyperframes/scripts/plugin-cli.mjs +4 -3
  61. package/skills/hyperframes/scripts/plugin-cli.test.mjs +5 -1
  62. package/skills/hyperframes-animation/SKILL.md +4 -82
  63. package/skills/hyperframes-audio/SKILL.md +4 -472
  64. package/skills/hyperframes-cli/SKILL.md +76 -158
  65. package/skills/hyperframes-cli/references/beats.md +3 -7
  66. package/skills/hyperframes-cli/references/cloud.md +4 -4
  67. package/skills/hyperframes-cli/references/cloudrun.md +2 -2
  68. package/skills/hyperframes-cli/references/conventions.md +17 -0
  69. package/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  70. package/skills/hyperframes-cli/references/feedback.md +14 -0
  71. package/skills/hyperframes-cli/references/init-and-scaffold.md +13 -8
  72. package/skills/hyperframes-cli/references/lambda.md +6 -2
  73. package/skills/hyperframes-cli/references/lint-validate-inspect.md +34 -11
  74. package/skills/hyperframes-cli/references/preview-render.md +13 -4
  75. package/skills/hyperframes-cli/references/upgrade-info-misc.md +8 -0
  76. package/skills/hyperframes-core/SKILL.md +4 -94
  77. package/skills/hyperframes-creative/SKILL.md +4 -67
  78. package/skills/hyperframes-keyframes/SKILL.md +4 -258
  79. package/skills/hyperframes-registry/SKILL.md +37 -128
  80. package/skills/hyperframes-registry/references/discovery.md +2 -2
  81. package/skills/hyperframes-registry/references/search.md +67 -0
  82. package/skills/hyperframes-studio/SKILL.md +4 -71
  83. package/skills/media-use/SKILL.md +50 -88
  84. package/skills/media-use/audio/references/bgm.md +4 -2
  85. package/skills/media-use/audio/references/captions/authoring.md +1 -2
  86. package/skills/media-use/audio/references/captions/motion.md +5 -5
  87. package/skills/media-use/audio/references/requirements.md +7 -7
  88. package/skills/media-use/audio/references/sfx.md +20 -14
  89. package/skills/media-use/audio/references/transcribe.md +2 -2
  90. package/skills/media-use/audio/references/tts.md +26 -12
  91. package/skills/media-use/audio/scripts/audio.mjs +25 -17
  92. package/skills/media-use/audio/scripts/audio.test.mjs +121 -4
  93. package/skills/{hyperframes-audio → media-use/audio}/scripts/carve.mjs +2 -14
  94. package/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +20 -2
  95. package/skills/media-use/audio/scripts/heygen-tts.mjs +3 -2
  96. package/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
  97. package/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
  98. package/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
  99. package/skills/media-use/audio/scripts/lib/bgm.mjs +8 -4
  100. package/skills/media-use/audio/scripts/lib/bgm.test.mjs +45 -1
  101. package/skills/media-use/audio/scripts/lib/heygen.mjs +100 -16
  102. package/skills/media-use/audio/scripts/lib/heygen.test.mjs +205 -16
  103. package/skills/media-use/audio/scripts/lib/main-module.mjs +13 -0
  104. package/skills/media-use/audio/scripts/lib/media-record.mjs +118 -0
  105. package/skills/media-use/audio/scripts/lib/media-record.test.mjs +224 -0
  106. package/skills/media-use/audio/scripts/lib/openverse.mjs +134 -0
  107. package/skills/media-use/audio/scripts/lib/python.mjs +19 -5
  108. package/skills/media-use/audio/scripts/lib/python.test.mjs +69 -1
  109. package/skills/media-use/audio/scripts/lib/sfx.mjs +141 -88
  110. package/skills/media-use/audio/scripts/lib/sfx.test.mjs +270 -8
  111. package/skills/media-use/audio/scripts/lib/tts.cleanup.test.mjs +175 -0
  112. package/skills/media-use/audio/scripts/lib/tts.mjs +28 -24
  113. package/skills/media-use/audio/scripts/lib/tts.test.mjs +74 -1
  114. package/skills/media-use/audio/scripts/wait-bgm.mjs +4 -0
  115. package/skills/media-use/audio/scripts/wait-bgm.test.mjs +44 -1
  116. package/skills/media-use/references/audio.md +2 -2
  117. package/skills/media-use/references/grading.md +5 -4
  118. package/skills/media-use/references/local.md +24 -0
  119. package/skills/media-use/references/media-treatments.md +5 -1
  120. package/skills/media-use/references/memory.md +10 -5
  121. package/skills/media-use/references/meta.md +17 -17
  122. package/skills/media-use/references/mixing.md +72 -0
  123. package/skills/media-use/references/operations.md +10 -8
  124. package/skills/media-use/references/resolve.md +1 -1
  125. package/skills/media-use/references/setup-providers.md +31 -17
  126. package/skills/media-use/scripts/compatibility.test.mjs +1 -56
  127. package/skills/media-use/scripts/lib/cutlist.mjs +9 -2
  128. package/skills/media-use/scripts/lib/duck.mjs +20 -3
  129. package/skills/media-use/scripts/lib/index-gen.mjs +2 -2
  130. package/skills/media-use/scripts/lib/manifest.mjs +85 -32
  131. package/skills/media-use/scripts/lib/prefs-store.mjs +47 -29
  132. package/skills/media-use/scripts/lib/recipe-store.mjs +7 -3
  133. package/skills/media-use/scripts/lib/telemetry.mjs +4 -1
  134. package/skills/media-use/scripts/lib/telemetry.test.mjs +73 -0
  135. package/skills/media-use/scripts/lib/words.mjs +1 -1
  136. package/skills/media-use/scripts/prefs.mjs +2 -3
  137. package/skills/media-use/scripts/recipe.mjs +1 -3
  138. package/skills/media-use/scripts/transcript-cut.mjs +23 -4
  139. package/skills/media-use/scripts/transcript-cut.test.mjs +224 -0
  140. package/skills/motion-graphics/SKILL.md +4 -172
  141. package/skills/music-to-video/SKILL.md +4 -204
  142. package/skills/pr-to-video/SKILL.md +4 -267
  143. package/skills/product-launch-video/SKILL.md +4 -258
  144. package/skills/remotion-to-hyperframes/SKILL.md +32 -115
  145. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +3 -0
  146. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +3 -0
  147. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +8 -7
  148. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +3 -3
  149. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html +6 -2
  150. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html +3 -4
  151. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html +2 -2
  152. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +3 -0
  153. package/skills/remotion-to-hyperframes/references/api-map.md +41 -29
  154. package/skills/remotion-to-hyperframes/references/limitations.md +3 -3
  155. package/skills/remotion-to-hyperframes/references/lottie.md +21 -8
  156. package/skills/remotion-to-hyperframes/references/media.md +23 -6
  157. package/skills/remotion-to-hyperframes/references/timing.md +20 -8
  158. package/skills/remotion-to-hyperframes/scripts/tests/boxSizing.test.mjs +21 -0
  159. package/skills/slideshow/SKILL.md +42 -512
  160. package/skills/slideshow/references/standalone-harness.md +1 -1
  161. package/skills/talking-head-recut/SKILL.md +4 -1214
  162. package/skills/embedded-captions/CATALOG.md +0 -91
  163. package/skills/embedded-captions/assets/fonts/char-widths.json +0 -2211
  164. package/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +0 -242
  165. package/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +0 -242
  166. package/skills/embedded-captions/dna/README.md +0 -148
  167. package/skills/embedded-captions/dna/chrome.json +0 -68
  168. package/skills/embedded-captions/dna/cream.json +0 -69
  169. package/skills/embedded-captions/dna/documentary.json +0 -62
  170. package/skills/embedded-captions/dna/editorial.json +0 -70
  171. package/skills/embedded-captions/dna/glitch.json +0 -82
  172. package/skills/embedded-captions/dna/ink.json +0 -65
  173. package/skills/embedded-captions/dna/keynote.json +0 -62
  174. package/skills/embedded-captions/dna/loud.json +0 -75
  175. package/skills/embedded-captions/dna/neon.json +0 -58
  176. package/skills/embedded-captions/dna/velocity.json +0 -89
  177. package/skills/embedded-captions/modes/cinematic/README.md +0 -48
  178. package/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +0 -98
  179. package/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +0 -188
  180. package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +0 -134
  181. package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +0 -179
  182. package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +0 -81
  183. package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +0 -170
  184. package/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +0 -16
  185. package/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +0 -226
  186. package/skills/embedded-captions/modes/cinematic/engine.html +0 -355
  187. package/skills/embedded-captions/modes/standard/_anatomy.md +0 -233
  188. package/skills/embedded-captions/modes/standard/_motion.md +0 -192
  189. package/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +0 -97
  190. package/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 +0 -0
  191. package/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 +0 -0
  192. package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 +0 -0
  193. package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 +0 -0
  194. package/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 +0 -0
  195. package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 +0 -0
  196. package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 +0 -0
  197. package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 +0 -0
  198. package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 +0 -0
  199. package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 +0 -0
  200. package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 +0 -0
  201. package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 +0 -0
  202. package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 +0 -0
  203. package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 +0 -0
  204. package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 +0 -0
  205. package/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 +0 -0
  206. package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 +0 -0
  207. package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 +0 -0
  208. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 +0 -0
  209. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 +0 -0
  210. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 +0 -0
  211. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 +0 -0
  212. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 +0 -0
  213. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 +0 -0
  214. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 +0 -0
  215. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 +0 -0
  216. package/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 +0 -0
  217. package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 +0 -0
  218. package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 +0 -0
  219. package/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 +0 -0
  220. package/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 +0 -0
  221. package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 +0 -0
  222. package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 +0 -0
  223. package/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 +0 -0
  224. package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 +0 -0
  225. package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 +0 -0
  226. package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 +0 -0
  227. package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 +0 -0
  228. package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 +0 -0
  229. package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 +0 -0
  230. package/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 +0 -0
  231. package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 +0 -0
  232. package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 +0 -0
  233. package/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 +0 -0
  234. package/skills/embedded-captions/modes/standard/fonts/fonts.css +0 -401
  235. package/skills/embedded-captions/references/aesthetic-principles.md +0 -167
  236. package/skills/embedded-captions/references/anti-patterns.md +0 -188
  237. package/skills/embedded-captions/references/bespoke-vs-presets.md +0 -178
  238. package/skills/embedded-captions/references/caption-grouping.md +0 -130
  239. package/skills/embedded-captions/references/composition-craft.md +0 -522
  240. package/skills/embedded-captions/references/direction-catalog.md +0 -138
  241. package/skills/embedded-captions/references/example-renders/champion.html +0 -371
  242. package/skills/embedded-captions/references/example-renders/memory-wall.html +0 -334
  243. package/skills/embedded-captions/references/failure-modes.md +0 -145
  244. package/skills/embedded-captions/references/layout-heuristics.md +0 -238
  245. package/skills/embedded-captions/references/motion-vocabulary.md +0 -148
  246. package/skills/embedded-captions/references/rail.md +0 -68
  247. package/skills/embedded-captions/references/reference-bar.md +0 -47
  248. package/skills/embedded-captions/references/scene-types.md +0 -94
  249. package/skills/embedded-captions/references/typographic-moves.md +0 -266
  250. package/skills/embedded-captions/references/typography-presets.md +0 -63
  251. package/skills/embedded-captions/scripts/audio-envelope.cjs +0 -95
  252. package/skills/embedded-captions/scripts/check-occlusion.cjs +0 -253
  253. package/skills/embedded-captions/scripts/check-overflow.cjs +0 -195
  254. package/skills/embedded-captions/scripts/check-rail-climax.cjs +0 -237
  255. package/skills/embedded-captions/scripts/check-timing.cjs +0 -173
  256. package/skills/embedded-captions/scripts/fill-timings.cjs +0 -124
  257. package/skills/embedded-captions/scripts/fit-fonts.cjs +0 -158
  258. package/skills/embedded-captions/scripts/fixtures/heroless/theme.json +0 -11
  259. package/skills/embedded-captions/scripts/gen-stroke-path.py +0 -57
  260. package/skills/embedded-captions/scripts/hf-cli.cjs +0 -33
  261. package/skills/embedded-captions/scripts/inject-fonts.cjs +0 -169
  262. package/skills/embedded-captions/scripts/lib-dna.cjs +0 -201
  263. package/skills/embedded-captions/scripts/make-cinematic.cjs +0 -1206
  264. package/skills/embedded-captions/scripts/make-composition.cjs +0 -405
  265. package/skills/embedded-captions/scripts/make-theme.cjs +0 -8623
  266. package/skills/embedded-captions/scripts/make-theme.test.mjs +0 -131
  267. package/skills/embedded-captions/scripts/matte.cjs +0 -268
  268. package/skills/embedded-captions/scripts/measure-layout.cjs +0 -294
  269. package/skills/embedded-captions/scripts/prepare.sh +0 -39
  270. package/skills/embedded-captions/scripts/preview-frames.cjs +0 -296
  271. package/skills/embedded-captions/scripts/preview-frames.test.mjs +0 -24
  272. package/skills/embedded-captions/scripts/render-and-composite.sh +0 -425
  273. package/skills/embedded-captions/scripts/render-theme.sh +0 -34
  274. package/skills/embedded-captions/scripts/safe-zones.cjs +0 -816
  275. package/skills/embedded-captions/scripts/transcribe.cjs +0 -323
  276. package/skills/embedded-captions/scripts/transcribe.test.mjs +0 -41
  277. package/skills/embedded-captions/themes/README.md +0 -243
  278. package/skills/embedded-captions/themes/anchor.json +0 -27
  279. package/skills/embedded-captions/themes/arcade.json +0 -51
  280. package/skills/embedded-captions/themes/aurora.json +0 -41
  281. package/skills/embedded-captions/themes/biolume.json +0 -35
  282. package/skills/embedded-captions/themes/brush.json +0 -74
  283. package/skills/embedded-captions/themes/chalkboard.json +0 -52
  284. package/skills/embedded-captions/themes/dossier.json +0 -56
  285. package/skills/embedded-captions/themes/graffiti.json +0 -62
  286. package/skills/embedded-captions/themes/hologram.json +0 -41
  287. package/skills/embedded-captions/themes/inkwater.json +0 -43
  288. package/skills/embedded-captions/themes/laser.json +0 -46
  289. package/skills/embedded-captions/themes/lastpage.json +0 -33
  290. package/skills/embedded-captions/themes/neonsign.json +0 -53
  291. package/skills/embedded-captions/themes/ordnance.json +0 -54
  292. package/skills/embedded-captions/themes/papercut.json +0 -37
  293. package/skills/embedded-captions/themes/popup.json +0 -46
  294. package/skills/embedded-captions/themes/ransom.json +0 -62
  295. package/skills/embedded-captions/themes/scoreboard.json +0 -54
  296. package/skills/embedded-captions/themes/spectrum.json +0 -46
  297. package/skills/embedded-captions/themes/stardust.json +0 -29
  298. package/skills/embedded-captions/themes/stomp.json +0 -43
  299. package/skills/embedded-captions/themes/terminal.json +0 -49
  300. package/skills/embedded-captions/themes/thunder.json +0 -44
  301. package/skills/embedded-captions/themes/transit.json +0 -44
  302. package/skills/embedded-captions/themes/vhs.json +0 -47
  303. package/skills/faceless-explainer/references/cut-catalog.md +0 -215
  304. package/skills/faceless-explainer/references/motion-language.md +0 -156
  305. package/skills/faceless-explainer/references/story-design.md +0 -255
  306. package/skills/faceless-explainer/references/visual-design.md +0 -146
  307. package/skills/faceless-explainer/scripts/assemble-index.mjs +0 -625
  308. package/skills/faceless-explainer/scripts/assemble-index.test.mjs +0 -127
  309. package/skills/faceless-explainer/scripts/audio.mjs +0 -293
  310. package/skills/faceless-explainer/scripts/audio.test.mjs +0 -176
  311. package/skills/faceless-explainer/scripts/build-frame.mjs +0 -554
  312. package/skills/faceless-explainer/scripts/captions.mjs +0 -524
  313. package/skills/faceless-explainer/scripts/captions.test.mjs +0 -219
  314. package/skills/faceless-explainer/scripts/frame-packets.mjs +0 -27
  315. package/skills/faceless-explainer/scripts/frame-packets.test.mjs +0 -66
  316. package/skills/faceless-explainer/scripts/lib/assets.mjs +0 -56
  317. package/skills/faceless-explainer/scripts/lib/bgm-volume.mjs +0 -4
  318. package/skills/faceless-explainer/scripts/lib/captured-fonts.mjs +0 -58
  319. package/skills/faceless-explainer/scripts/lib/dimensions.mjs +0 -45
  320. package/skills/faceless-explainer/scripts/lib/frame-packets-core.mjs +0 -194
  321. package/skills/faceless-explainer/scripts/lib/pad-frame-duration.mjs +0 -36
  322. package/skills/faceless-explainer/scripts/lib/storyboard.mjs +0 -249
  323. package/skills/faceless-explainer/scripts/lib/tokens.mjs +0 -211
  324. package/skills/faceless-explainer/scripts/lib/transition-registry.mjs +0 -38
  325. package/skills/faceless-explainer/scripts/lib/transitions.json +0 -71
  326. package/skills/faceless-explainer/scripts/transitions.mjs +0 -384
  327. package/skills/faceless-explainer/scripts/transitions.test.mjs +0 -70
  328. package/skills/faceless-explainer/sub-agents/frame-worker.md +0 -12
  329. package/skills/general-video/scripts/frame-packets.mjs +0 -38
  330. package/skills/general-video/scripts/frame-packets.test.mjs +0 -80
  331. package/skills/general-video/scripts/lib/frame-packets-core.mjs +0 -194
  332. package/skills/general-video/sub-agents/frame-worker.md +0 -34
  333. package/skills/hyperframes/references/brief-contract.md +0 -108
  334. package/skills/hyperframes/references/brief-format.md +0 -72
  335. package/skills/hyperframes/references/capability-menu.md +0 -47
  336. package/skills/hyperframes/references/frame-worker-core.md +0 -80
  337. package/skills/hyperframes/references/intent-interview.md +0 -71
  338. package/skills/hyperframes/references/pitch-round.md +0 -40
  339. package/skills/hyperframes/references/production-loop.md +0 -26
  340. package/skills/hyperframes/references/review-loop.md +0 -37
  341. package/skills/hyperframes/references/route-briefs.md +0 -11
  342. package/skills/hyperframes/references/routes/embedded-captions.md +0 -11
  343. package/skills/hyperframes/references/routes/faceless-explainer.md +0 -12
  344. package/skills/hyperframes/references/routes/general-video.md +0 -12
  345. package/skills/hyperframes/references/routes/motion-graphics.md +0 -11
  346. package/skills/hyperframes/references/routes/music-to-video.md +0 -12
  347. package/skills/hyperframes/references/routes/pr-to-video.md +0 -28
  348. package/skills/hyperframes/references/routes/product-launch-video.md +0 -13
  349. package/skills/hyperframes/references/routes/remotion-to-hyperframes.md +0 -9
  350. package/skills/hyperframes/references/routes/slideshow.md +0 -11
  351. package/skills/hyperframes/references/routes/talking-head-recut.md +0 -11
  352. package/skills/hyperframes/references/script-format.md +0 -52
  353. package/skills/hyperframes/references/subagent-dispatch.md +0 -35
  354. package/skills/hyperframes/references/workflow-catalog.md +0 -10
  355. package/skills/hyperframes/scripts/lib/frame-packets-core.mjs +0 -194
  356. package/skills/hyperframes-animation/adapters/animate-text.md +0 -64
  357. package/skills/hyperframes-animation/adapters/animejs.md +0 -130
  358. package/skills/hyperframes-animation/adapters/css-animations.md +0 -143
  359. package/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +0 -199
  360. package/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +0 -96
  361. package/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +0 -129
  362. package/skills/hyperframes-animation/adapters/gsap.md +0 -105
  363. package/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +0 -507
  364. package/skills/hyperframes-animation/adapters/lottie.md +0 -130
  365. package/skills/hyperframes-animation/adapters/three.md +0 -145
  366. package/skills/hyperframes-animation/adapters/typegpu.md +0 -182
  367. package/skills/hyperframes-animation/adapters/waapi.md +0 -101
  368. package/skills/hyperframes-animation/blueprints/agent-progress-theater.md +0 -76
  369. package/skills/hyperframes-animation/blueprints/camera-journey.md +0 -61
  370. package/skills/hyperframes-animation/blueprints/comparison-split.md +0 -27
  371. package/skills/hyperframes-animation/blueprints/constellation-hub.md +0 -63
  372. package/skills/hyperframes-animation/blueprints/cta-morph-press.md +0 -63
  373. package/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +0 -89
  374. package/skills/hyperframes-animation/blueprints/dataviz-countup.md +0 -59
  375. package/skills/hyperframes-animation/blueprints/device-surface-showcase.md +0 -68
  376. package/skills/hyperframes-animation/blueprints/fixed-anchor-cycle.md +0 -46
  377. package/skills/hyperframes-animation/blueprints/grid-card-assemble.md +0 -81
  378. package/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +0 -133
  379. package/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +0 -121
  380. package/skills/hyperframes-animation/blueprints/overwhelm-surround.md +0 -58
  381. package/skills/hyperframes-animation/blueprints/panel-edit-live-sync.md +0 -73
  382. package/skills/hyperframes-animation/blueprints/prompt-type-submit-generate.md +0 -85
  383. package/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +0 -37
  384. package/skills/hyperframes-animation/blueprints/ticker-takeover.md +0 -29
  385. package/skills/hyperframes-animation/blueprints/titlecard-reveal.md +0 -80
  386. package/skills/hyperframes-animation/blueprints/transcript-scroll-artifact-reveal.md +0 -45
  387. package/skills/hyperframes-animation/blueprints/typewriter-reveal.md +0 -51
  388. package/skills/hyperframes-animation/blueprints/video-text-pivot.md +0 -30
  389. package/skills/hyperframes-animation/blueprints/zoom-out-workspace-reveal.md +0 -68
  390. package/skills/hyperframes-animation/blueprints-index.md +0 -202
  391. package/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +0 -382
  392. package/skills/hyperframes-animation/examples/comparison-split-cards.html +0 -649
  393. package/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +0 -520
  394. package/skills/hyperframes-animation/examples/cta-morph-press.html +0 -468
  395. package/skills/hyperframes-animation/examples/cta-orbit-collapse.html +0 -1298
  396. package/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +0 -759
  397. package/skills/hyperframes-animation/examples/hook-counter-burst.html +0 -729
  398. package/skills/hyperframes-animation/examples/messaging-multi-phrase.html +0 -352
  399. package/skills/hyperframes-animation/examples/metric-video-text-pivot.html +0 -779
  400. package/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +0 -1374
  401. package/skills/hyperframes-animation/examples/proof-logo-chain.html +0 -861
  402. package/skills/hyperframes-animation/examples/takeover-ticker-displace.html +0 -347
  403. package/skills/hyperframes-animation/examples/workflow-approve-press.html +0 -606
  404. package/skills/hyperframes-animation/references/motion-blur.md +0 -133
  405. package/skills/hyperframes-animation/rules/3d-camera-flight.md +0 -180
  406. package/skills/hyperframes-animation/rules/3d-page-scroll.md +0 -135
  407. package/skills/hyperframes-animation/rules/3d-text-depth-layers.md +0 -128
  408. package/skills/hyperframes-animation/rules/ai-tracking-box.md +0 -139
  409. package/skills/hyperframes-animation/rules/ambient-glow-bloom.md +0 -133
  410. package/skills/hyperframes-animation/rules/anchored-layout-expand.md +0 -148
  411. package/skills/hyperframes-animation/rules/asr-keyword-glow.md +0 -128
  412. package/skills/hyperframes-animation/rules/avatar-cloud-network.md +0 -145
  413. package/skills/hyperframes-animation/rules/camera-cursor-tracking.md +0 -133
  414. package/skills/hyperframes-animation/rules/card-morph-anchor.md +0 -134
  415. package/skills/hyperframes-animation/rules/center-outward-expansion.md +0 -88
  416. package/skills/hyperframes-animation/rules/chart-scrub-readout.md +0 -151
  417. package/skills/hyperframes-animation/rules/chromatic-glitch.md +0 -150
  418. package/skills/hyperframes-animation/rules/context-sensitive-cursor.md +0 -140
  419. package/skills/hyperframes-animation/rules/control-target-sync.md +0 -131
  420. package/skills/hyperframes-animation/rules/coordinate-target-zoom.md +0 -138
  421. package/skills/hyperframes-animation/rules/counting-dynamic-scale.md +0 -115
  422. package/skills/hyperframes-animation/rules/css-marker-patterns.md +0 -208
  423. package/skills/hyperframes-animation/rules/cursor-click-ripple.md +0 -104
  424. package/skills/hyperframes-animation/rules/cursor-drag.md +0 -141
  425. package/skills/hyperframes-animation/rules/depth-of-field-blur.md +0 -112
  426. package/skills/hyperframes-animation/rules/depth-scatter-assemble.md +0 -139
  427. package/skills/hyperframes-animation/rules/discrete-text-sequence.md +0 -146
  428. package/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +0 -149
  429. package/skills/hyperframes-animation/rules/gradient-text-sweep.md +0 -136
  430. package/skills/hyperframes-animation/rules/gsap-effects.md +0 -196
  431. package/skills/hyperframes-animation/rules/hacker-flip-3d.md +0 -123
  432. package/skills/hyperframes-animation/rules/kinetic-beat-slam.md +0 -137
  433. package/skills/hyperframes-animation/rules/motion-blur-streak.md +0 -130
  434. package/skills/hyperframes-animation/rules/multi-cursor-choreography.md +0 -133
  435. package/skills/hyperframes-animation/rules/multi-phase-camera.md +0 -129
  436. package/skills/hyperframes-animation/rules/nudge-curve.md +0 -47
  437. package/skills/hyperframes-animation/rules/orbit-3d-entry.md +0 -148
  438. package/skills/hyperframes-animation/rules/particle-burst.md +0 -149
  439. package/skills/hyperframes-animation/rules/physics-press-reaction.md +0 -101
  440. package/skills/hyperframes-animation/rules/press-release-spring.md +0 -108
  441. package/skills/hyperframes-animation/rules/reactive-displacement.md +0 -92
  442. package/skills/hyperframes-animation/rules/scale-swap-transition.md +0 -88
  443. package/skills/hyperframes-animation/rules/sine-wave-loop.md +0 -85
  444. package/skills/hyperframes-animation/rules/split-tilt-cards.md +0 -123
  445. package/skills/hyperframes-animation/rules/spring-pop-entrance.md +0 -107
  446. package/skills/hyperframes-animation/rules/stat-bars-and-fills.md +0 -145
  447. package/skills/hyperframes-animation/rules/svg-icon-enrichment.md +0 -141
  448. package/skills/hyperframes-animation/rules/svg-path-draw.md +0 -122
  449. package/skills/hyperframes-animation/rules/theme-crossfade-morph.md +0 -126
  450. package/skills/hyperframes-animation/rules/vertical-spring-ticker.md +0 -104
  451. package/skills/hyperframes-animation/rules/viewport-change.md +0 -148
  452. package/skills/hyperframes-animation/rules/waterfall-entry.md +0 -81
  453. package/skills/hyperframes-animation/rules-index.md +0 -113
  454. package/skills/hyperframes-animation/scripts/animation-map-sampling.mjs +0 -40
  455. package/skills/hyperframes-animation/scripts/animation-map-sampling.test.mjs +0 -48
  456. package/skills/hyperframes-animation/scripts/animation-map.mjs +0 -659
  457. package/skills/hyperframes-animation/scripts/animation-map.test.mjs +0 -444
  458. package/skills/hyperframes-animation/scripts/package-loader.mjs +0 -415
  459. package/skills/hyperframes-animation/scripts/package-loader.test.mjs +0 -114
  460. package/skills/hyperframes-animation/techniques.md +0 -507
  461. package/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +0 -168
  462. package/skills/hyperframes-animation/transitions/catalog.md +0 -127
  463. package/skills/hyperframes-animation/transitions/css-3d.md +0 -12
  464. package/skills/hyperframes-animation/transitions/css-blur.md +0 -51
  465. package/skills/hyperframes-animation/transitions/css-cover.md +0 -43
  466. package/skills/hyperframes-animation/transitions/css-destruction.md +0 -95
  467. package/skills/hyperframes-animation/transitions/css-dissolve.md +0 -66
  468. package/skills/hyperframes-animation/transitions/css-distortion.md +0 -45
  469. package/skills/hyperframes-animation/transitions/css-grid.md +0 -10
  470. package/skills/hyperframes-animation/transitions/css-light.md +0 -49
  471. package/skills/hyperframes-animation/transitions/css-mechanical.md +0 -30
  472. package/skills/hyperframes-animation/transitions/css-other.md +0 -25
  473. package/skills/hyperframes-animation/transitions/css-push.md +0 -41
  474. package/skills/hyperframes-animation/transitions/css-radial.md +0 -37
  475. package/skills/hyperframes-animation/transitions/css-scale.md +0 -24
  476. package/skills/hyperframes-animation/transitions/overview.md +0 -153
  477. package/skills/hyperframes-audio/references/attributes.md +0 -138
  478. package/skills/hyperframes-audio/references/diagnosis.md +0 -276
  479. package/skills/hyperframes-audio/references/fx-registry.md +0 -84
  480. package/skills/hyperframes-audio/references/presets.md +0 -216
  481. package/skills/hyperframes-core/references/composition-patterns.md +0 -224
  482. package/skills/hyperframes-core/references/creator-editing-recipes.md +0 -491
  483. package/skills/hyperframes-core/references/data-attributes.md +0 -78
  484. package/skills/hyperframes-core/references/determinism-rules.md +0 -53
  485. package/skills/hyperframes-core/references/full-screen-motion.md +0 -67
  486. package/skills/hyperframes-core/references/minimal-composition.md +0 -69
  487. package/skills/hyperframes-core/references/sub-compositions.md +0 -176
  488. package/skills/hyperframes-core/references/tailwind.md +0 -104
  489. package/skills/hyperframes-core/references/tracks-and-clips.md +0 -87
  490. package/skills/hyperframes-core/references/variables-and-media.md +0 -107
  491. package/skills/hyperframes-creative/palettes/bold-energetic.md +0 -14
  492. package/skills/hyperframes-creative/palettes/clean-corporate.md +0 -14
  493. package/skills/hyperframes-creative/palettes/dark-premium.md +0 -14
  494. package/skills/hyperframes-creative/palettes/jewel-rich.md +0 -14
  495. package/skills/hyperframes-creative/palettes/monochrome.md +0 -14
  496. package/skills/hyperframes-creative/palettes/nature-earth.md +0 -14
  497. package/skills/hyperframes-creative/palettes/neon-electric.md +0 -14
  498. package/skills/hyperframes-creative/palettes/pastel-soft.md +0 -14
  499. package/skills/hyperframes-creative/palettes/warm-editorial.md +0 -14
  500. package/skills/hyperframes-creative/references/audio-reactive.md +0 -76
  501. package/skills/hyperframes-creative/references/beat-direction.md +0 -164
  502. package/skills/hyperframes-creative/references/composition-patterns.md +0 -199
  503. package/skills/hyperframes-creative/references/data-in-motion.md +0 -19
  504. package/skills/hyperframes-creative/references/design-adherence.md +0 -19
  505. package/skills/hyperframes-creative/references/design-picker.md +0 -123
  506. package/skills/hyperframes-creative/references/design-spec.md +0 -55
  507. package/skills/hyperframes-creative/references/house-style.md +0 -73
  508. package/skills/hyperframes-creative/references/motion-principles.md +0 -151
  509. package/skills/hyperframes-creative/references/narration.md +0 -92
  510. package/skills/hyperframes-creative/references/prompt-expansion.md +0 -68
  511. package/skills/hyperframes-creative/references/story-spine.md +0 -45
  512. package/skills/hyperframes-creative/references/storyboard-recipe.md +0 -57
  513. package/skills/hyperframes-creative/references/typography.md +0 -218
  514. package/skills/hyperframes-creative/references/video-composition.md +0 -63
  515. package/skills/hyperframes-creative/references/visual-styles.md +0 -457
  516. package/skills/hyperframes-creative/scripts/contrast-report.mjs +0 -538
  517. package/skills/hyperframes-creative/scripts/package-loader.mjs +0 -415
  518. package/skills/hyperframes-creative/scripts/package-loader.test.mjs +0 -114
  519. package/skills/hyperframes-creative/templates/design-picker.html +0 -1432
  520. package/skills/hyperframes-keyframes/agents/openai.yaml +0 -4
  521. package/skills/hyperframes-keyframes/references/keyframe-patterns.md +0 -108
  522. package/skills/motion-graphics/agents/builder.md +0 -41
  523. package/skills/motion-graphics/agents/director.md +0 -54
  524. package/skills/motion-graphics/agents/finalize.md +0 -17
  525. package/skills/motion-graphics/catalog-map.md +0 -52
  526. package/skills/motion-graphics/categories/asset-fusion/module.md +0 -37
  527. package/skills/motion-graphics/categories/charts/module.md +0 -22
  528. package/skills/motion-graphics/categories/kinetic-type/module.md +0 -19
  529. package/skills/motion-graphics/categories/logo-reveal/module.md +0 -17
  530. package/skills/motion-graphics/categories/lower-thirds/module.md +0 -20
  531. package/skills/motion-graphics/categories/maps/module.md +0 -61
  532. package/skills/motion-graphics/categories/news/module.md +0 -56
  533. package/skills/motion-graphics/categories/stat/module.md +0 -21
  534. package/skills/motion-graphics/categories/tweet/module.md +0 -16
  535. package/skills/motion-graphics/categories/webpage/module.md +0 -30
  536. package/skills/motion-graphics/grounding/PROTOCOL.md +0 -64
  537. package/skills/motion-graphics/phases/source/guide.md +0 -21
  538. package/skills/motion-graphics/references/builder-contract.md +0 -38
  539. package/skills/motion-graphics/references/motion-vocabulary.md +0 -47
  540. package/skills/motion-graphics/references/shot-plan-ir.md +0 -54
  541. package/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +0 -306
  542. package/skills/music-to-video/references/frame-skeleton.md +0 -100
  543. package/skills/music-to-video/references/montage.md +0 -55
  544. package/skills/music-to-video/references/motion-primitive-catalog.md +0 -75
  545. package/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +0 -53
  546. package/skills/music-to-video/references/motion-primitives/3d-card-flip/scene.html +0 -119
  547. package/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +0 -11
  548. package/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +0 -53
  549. package/skills/music-to-video/references/motion-primitives/bg-flow-field/scene.html +0 -294
  550. package/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +0 -54
  551. package/skills/music-to-video/references/motion-primitives/binary-decrypt/scene.html +0 -85
  552. package/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +0 -53
  553. package/skills/music-to-video/references/motion-primitives/blur-resolve/scene.html +0 -60
  554. package/skills/music-to-video/references/motion-primitives/braam-punch/index.html +0 -53
  555. package/skills/music-to-video/references/motion-primitives/braam-punch/scene.html +0 -100
  556. package/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +0 -53
  557. package/skills/music-to-video/references/motion-primitives/chromatic-split/scene.html +0 -111
  558. package/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +0 -53
  559. package/skills/music-to-video/references/motion-primitives/chrome-sweep/scene.html +0 -68
  560. package/skills/music-to-video/references/motion-primitives/counting-punch/index.html +0 -54
  561. package/skills/music-to-video/references/motion-primitives/counting-punch/scene.html +0 -119
  562. package/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +0 -53
  563. package/skills/music-to-video/references/motion-primitives/crash-zoom-in/scene.html +0 -120
  564. package/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +0 -55
  565. package/skills/music-to-video/references/motion-primitives/datamosh-smear/scene.html +0 -131
  566. package/skills/music-to-video/references/motion-primitives/directional-fill/index.html +0 -53
  567. package/skills/music-to-video/references/motion-primitives/directional-fill/scene.html +0 -103
  568. package/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +0 -53
  569. package/skills/music-to-video/references/motion-primitives/dolly-zoom/scene.html +0 -102
  570. package/skills/music-to-video/references/motion-primitives/electric-arc/index.html +0 -54
  571. package/skills/music-to-video/references/motion-primitives/electric-arc/scene.html +0 -105
  572. package/skills/music-to-video/references/motion-primitives/flash-cut/index.html +0 -53
  573. package/skills/music-to-video/references/motion-primitives/flash-cut/scene.html +0 -97
  574. package/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +0 -54
  575. package/skills/music-to-video/references/motion-primitives/gooey-metaball/scene.html +0 -206
  576. package/skills/music-to-video/references/motion-primitives/hard-cut/index.html +0 -53
  577. package/skills/music-to-video/references/motion-primitives/hard-cut/scene.html +0 -82
  578. package/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +0 -53
  579. package/skills/music-to-video/references/motion-primitives/hypercut-whip/scene.html +0 -44
  580. package/skills/music-to-video/references/motion-primitives/iris-open/index.html +0 -53
  581. package/skills/music-to-video/references/motion-primitives/iris-open/scene.html +0 -69
  582. package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +0 -53
  583. package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/scene.html +0 -64
  584. package/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +0 -53
  585. package/skills/music-to-video/references/motion-primitives/liquid-morph/scene.html +0 -96
  586. package/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +0 -53
  587. package/skills/music-to-video/references/motion-primitives/mask-reveal/scene.html +0 -74
  588. package/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +0 -53
  589. package/skills/music-to-video/references/motion-primitives/mosaic-pack/scene.html +0 -89
  590. package/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +0 -53
  591. package/skills/music-to-video/references/motion-primitives/neon-flicker/scene.html +0 -73
  592. package/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +0 -53
  593. package/skills/music-to-video/references/motion-primitives/outline-to-fill/scene.html +0 -82
  594. package/skills/music-to-video/references/motion-primitives/palette-flip/index.html +0 -53
  595. package/skills/music-to-video/references/motion-primitives/palette-flip/scene.html +0 -97
  596. package/skills/music-to-video/references/motion-primitives/particle-burst/index.html +0 -53
  597. package/skills/music-to-video/references/motion-primitives/particle-burst/scene.html +0 -106
  598. package/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +0 -53
  599. package/skills/music-to-video/references/motion-primitives/pixel-dissolve/scene.html +0 -86
  600. package/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +0 -53
  601. package/skills/music-to-video/references/motion-primitives/radial-burst-lines/scene.html +0 -130
  602. package/skills/music-to-video/references/motion-primitives/screen-shake/index.html +0 -53
  603. package/skills/music-to-video/references/motion-primitives/screen-shake/scene.html +0 -78
  604. package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +0 -53
  605. package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/scene.html +0 -100
  606. package/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +0 -53
  607. package/skills/music-to-video/references/motion-primitives/spotlight-sweep/scene.html +0 -102
  608. package/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +0 -53
  609. package/skills/music-to-video/references/motion-primitives/staggered-exit/scene.html +0 -82
  610. package/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +0 -42
  611. package/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +0 -53
  612. package/skills/music-to-video/references/motion-primitives/text-spectral-rays/scene.html +0 -280
  613. package/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +0 -54
  614. package/skills/music-to-video/references/motion-primitives/text-wave-distort/scene.html +0 -106
  615. package/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +0 -53
  616. package/skills/music-to-video/references/motion-primitives/tile-mosaic/scene.html +0 -109
  617. package/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +0 -53
  618. package/skills/music-to-video/references/motion-primitives/typewriter-reveal/scene.html +0 -91
  619. package/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +0 -53
  620. package/skills/music-to-video/references/motion-primitives/word-grid-burst/scene.html +0 -96
  621. package/skills/music-to-video/references/planning.md +0 -104
  622. package/skills/music-to-video/references/storyboard-format.md +0 -94
  623. package/skills/music-to-video/references/template-catalog.md +0 -106
  624. package/skills/music-to-video/references/templates/card-flyby/index.html +0 -527
  625. package/skills/music-to-video/references/templates/card-flyby/program.json +0 -13
  626. package/skills/music-to-video/references/templates/held-message-living-field/index.html +0 -485
  627. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/asphalt-031.png +0 -0
  628. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bark-014.png +0 -0
  629. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/brick.png +0 -0
  630. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-075-a.png +0 -0
  631. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-101.png +0 -0
  632. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-102.png +0 -0
  633. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-104.png +0 -0
  634. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/carpet.png +0 -0
  635. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-034.png +0 -0
  636. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-042-a.png +0 -0
  637. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-046.png +0 -0
  638. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-047-a.png +0 -0
  639. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete.png +0 -0
  640. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/diamond-plate-009.png +0 -0
  641. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-080.png +0 -0
  642. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-083.png +0 -0
  643. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-001.png +0 -0
  644. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-004.png +0 -0
  645. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-005.png +0 -0
  646. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-037.png +0 -0
  647. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-054.png +0 -0
  648. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-068.png +0 -0
  649. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-080.png +0 -0
  650. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-103.png +0 -0
  651. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-104.png +0 -0
  652. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/lava.png +0 -0
  653. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/leather-037.png +0 -0
  654. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-012.png +0 -0
  655. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-016.png +0 -0
  656. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-032.png +0 -0
  657. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-038.png +0 -0
  658. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-041-a.png +0 -0
  659. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-046-b.png +0 -0
  660. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-048-a.png +0 -0
  661. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-049-a.png +0 -0
  662. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-055-a.png +0 -0
  663. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-061-b.png +0 -0
  664. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal.png +0 -0
  665. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/onyx.png +0 -0
  666. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/painted-plaster-017.png +0 -0
  667. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-138.png +0 -0
  668. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-150.png +0 -0
  669. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/plaster-001.png +0 -0
  670. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-007.png +0 -0
  671. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-008-a.png +0 -0
  672. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-009-c.png +0 -0
  673. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-a.png +0 -0
  674. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-b.png +0 -0
  675. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-013-a.png +0 -0
  676. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-058.png +0 -0
  677. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-063.png +0 -0
  678. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock.png +0 -0
  679. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow-015.png +0 -0
  680. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow.png +0 -0
  681. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/tiles-138.png +0 -0
  682. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/travertine-009.png +0 -0
  683. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-049.png +0 -0
  684. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-051.png +0 -0
  685. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-058.png +0 -0
  686. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-066.png +0 -0
  687. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-092.png +0 -0
  688. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-094.png +0 -0
  689. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-051.png +0 -0
  690. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-064.png +0 -0
  691. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-070.png +0 -0
  692. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood.png +0 -0
  693. package/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +0 -302
  694. package/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +0 -610
  695. package/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +0 -41
  696. package/skills/music-to-video/references/templates/logo-split-lockup-pulse/assets/fredoka-700.woff2 +0 -0
  697. package/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +0 -596
  698. package/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +0 -589
  699. package/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +0 -25
  700. package/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +0 -267
  701. package/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +0 -594
  702. package/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +0 -39
  703. package/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +0 -238
  704. package/skills/music-to-video/scripts/analyze-beatgrid.py +0 -542
  705. package/skills/music-to-video/scripts/assemble-index.mjs +0 -220
  706. package/skills/music-to-video/scripts/lib/storyboard.mjs +0 -249
  707. package/skills/music-to-video/scripts/stage-assets.mjs +0 -58
  708. package/skills/music-to-video/scripts/validate-plan.mjs +0 -161
  709. package/skills/music-to-video/sub-agents/frame-worker.md +0 -49
  710. package/skills/pr-to-video/references/code-vocabulary.md +0 -113
  711. package/skills/pr-to-video/references/cut-catalog.md +0 -215
  712. package/skills/pr-to-video/references/motion-language.md +0 -156
  713. package/skills/pr-to-video/references/story-design.md +0 -230
  714. package/skills/pr-to-video/references/visual-design.md +0 -164
  715. package/skills/pr-to-video/scripts/assemble-index.mjs +0 -631
  716. package/skills/pr-to-video/scripts/assemble-index.test.mjs +0 -130
  717. package/skills/pr-to-video/scripts/audio.mjs +0 -293
  718. package/skills/pr-to-video/scripts/build-frame.mjs +0 -589
  719. package/skills/pr-to-video/scripts/captions.mjs +0 -524
  720. package/skills/pr-to-video/scripts/captions.test.mjs +0 -260
  721. package/skills/pr-to-video/scripts/fetch-people-avatars.mjs +0 -157
  722. package/skills/pr-to-video/scripts/fetch-pr.mjs +0 -234
  723. package/skills/pr-to-video/scripts/frame-contract.test.mjs +0 -209
  724. package/skills/pr-to-video/scripts/frame-packets.mjs +0 -62
  725. package/skills/pr-to-video/scripts/ingest.mjs +0 -561
  726. package/skills/pr-to-video/scripts/lib/assets.mjs +0 -56
  727. package/skills/pr-to-video/scripts/lib/bgm-volume.mjs +0 -4
  728. package/skills/pr-to-video/scripts/lib/captured-fonts.mjs +0 -58
  729. package/skills/pr-to-video/scripts/lib/dimensions.mjs +0 -45
  730. package/skills/pr-to-video/scripts/lib/frame-contract.mjs +0 -54
  731. package/skills/pr-to-video/scripts/lib/frame-packets-core.mjs +0 -194
  732. package/skills/pr-to-video/scripts/lib/pad-frame-duration.mjs +0 -36
  733. package/skills/pr-to-video/scripts/lib/storyboard.mjs +0 -249
  734. package/skills/pr-to-video/scripts/lib/tokens.mjs +0 -211
  735. package/skills/pr-to-video/scripts/lib/transition-registry.mjs +0 -38
  736. package/skills/pr-to-video/scripts/lib/transitions.json +0 -71
  737. package/skills/pr-to-video/scripts/preflight.mjs +0 -51
  738. package/skills/pr-to-video/scripts/project-dir.mjs +0 -92
  739. package/skills/pr-to-video/scripts/transitions.mjs +0 -383
  740. package/skills/pr-to-video/scripts/workflow-guardrails.test.mjs +0 -198
  741. package/skills/pr-to-video/sub-agents/frame-worker.md +0 -38
  742. package/skills/product-launch-video/references/cut-catalog.md +0 -220
  743. package/skills/product-launch-video/references/motion-language.md +0 -156
  744. package/skills/product-launch-video/references/story-design.md +0 -508
  745. package/skills/product-launch-video/references/visual-design.md +0 -126
  746. package/skills/product-launch-video/scripts/assemble-index.mjs +0 -773
  747. package/skills/product-launch-video/scripts/assemble-index.test.mjs +0 -127
  748. package/skills/product-launch-video/scripts/audio.mjs +0 -293
  749. package/skills/product-launch-video/scripts/audio.test.mjs +0 -234
  750. package/skills/product-launch-video/scripts/build-frame-subsets.test.mjs +0 -152
  751. package/skills/product-launch-video/scripts/build-frame.mjs +0 -552
  752. package/skills/product-launch-video/scripts/captions.mjs +0 -524
  753. package/skills/product-launch-video/scripts/captions.test.mjs +0 -219
  754. package/skills/product-launch-video/scripts/capture-skill-guardrails.test.mjs +0 -39
  755. package/skills/product-launch-video/scripts/frame-packets.mjs +0 -27
  756. package/skills/product-launch-video/scripts/frame-packets.test.mjs +0 -144
  757. package/skills/product-launch-video/scripts/lib/assets.mjs +0 -56
  758. package/skills/product-launch-video/scripts/lib/bgm-volume.mjs +0 -4
  759. package/skills/product-launch-video/scripts/lib/captured-fonts.mjs +0 -58
  760. package/skills/product-launch-video/scripts/lib/dimensions.mjs +0 -45
  761. package/skills/product-launch-video/scripts/lib/frame-packets-core.mjs +0 -194
  762. package/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +0 -36
  763. package/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +0 -76
  764. package/skills/product-launch-video/scripts/lib/storyboard.mjs +0 -249
  765. package/skills/product-launch-video/scripts/lib/tokens.mjs +0 -218
  766. package/skills/product-launch-video/scripts/lib/tokens.test.mjs +0 -57
  767. package/skills/product-launch-video/scripts/lib/transition-registry.mjs +0 -38
  768. package/skills/product-launch-video/scripts/lib/transitions.json +0 -71
  769. package/skills/product-launch-video/scripts/media-contract.test.mjs +0 -200
  770. package/skills/product-launch-video/scripts/stage-assets.mjs +0 -39
  771. package/skills/product-launch-video/scripts/stage-assets.test.mjs +0 -52
  772. package/skills/product-launch-video/scripts/transitions.mjs +0 -383
  773. package/skills/product-launch-video/scripts/transitions.test.mjs +0 -68
  774. package/skills/product-launch-video/sub-agents/frame-worker.md +0 -21
  775. package/skills/talking-head-recut/NOTICE.md +0 -39
  776. package/skills/talking-head-recut/assets/fonts/Caveat-400-latin.woff2 +0 -0
  777. package/skills/talking-head-recut/assets/fonts/Caveat-700-latin.woff2 +0 -0
  778. package/skills/talking-head-recut/assets/fonts/Inter-400-latin.woff2 +0 -0
  779. package/skills/talking-head-recut/assets/fonts/Inter-700-latin.woff2 +0 -0
  780. package/skills/talking-head-recut/assets/fonts/LXGWWenKaiTC-400-latin.woff2 +0 -0
  781. package/skills/talking-head-recut/assets/fonts/Virgil.woff2 +0 -0
  782. package/skills/talking-head-recut/assets/vendor/gsap.min.js +0 -10
  783. package/skills/talking-head-recut/media-contract.test.mjs +0 -35
  784. package/skills/talking-head-recut/references/DESIGN_INDEX.md +0 -145
  785. package/skills/talking-head-recut/references/frames/clean.html +0 -92
  786. package/skills/talking-head-recut/references/frames/hairline.html +0 -171
  787. package/skills/talking-head-recut/references/frames/polaroid.html +0 -131
  788. package/skills/talking-head-recut/references/layouts/overlay.html +0 -164
  789. package/skills/talking-head-recut/references/layouts/pip.html +0 -143
  790. package/skills/talking-head-recut/references/layouts/split.html +0 -121
  791. package/skills/talking-head-recut/references/layouts/stack.html +0 -109
  792. package/skills/talking-head-recut/references/styles/academic.html +0 -172
  793. package/skills/talking-head-recut/references/styles/audit.html +0 -170
  794. package/skills/talking-head-recut/references/styles/editorial.html +0 -189
  795. package/skills/talking-head-recut/references/styles/geom.html +0 -181
  796. package/skills/talking-head-recut/references/styles/minimal.html +0 -130
  797. package/skills/talking-head-recut/references/styles/spotlight.html +0 -142
  798. package/skills/talking-head-recut/references/styles/swiss.html +0 -188
  799. package/skills/talking-head-recut/references/styles/terminal.html +0 -196
  800. package/skills/talking-head-recut/references/styles/whiteboard.html +0 -170
  801. package/skills/talking-head-recut/references/styles/xhs.html +0 -206
  802. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/biennale-yellow/FRAME.md +0 -0
  803. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/biennale-yellow/frame-showcase.html +0 -0
  804. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blockframe/FRAME.md +0 -0
  805. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blockframe/frame-showcase.html +0 -0
  806. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blue-professional/FRAME.md +0 -0
  807. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/blue-professional/frame-showcase.html +0 -0
  808. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/bold-poster/FRAME.md +0 -0
  809. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/bold-poster/frame-showcase.html +0 -0
  810. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/broadside/FRAME.md +0 -0
  811. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/broadside/frame-showcase.html +0 -0
  812. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/capsule/FRAME.md +0 -0
  813. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/capsule/frame-showcase.html +0 -0
  814. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cartesian/FRAME.md +0 -0
  815. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cartesian/frame-showcase.html +0 -0
  816. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cobalt-grid/FRAME.md +0 -0
  817. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/cobalt-grid/frame-showcase.html +0 -0
  818. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
  819. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
  820. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
  821. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
  822. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
  823. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
  824. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +0 -0
  825. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/OFL-inter.txt +0 -0
  826. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +0 -0
  827. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/code-editorial/frame-showcase.html +0 -0
  828. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/coral/FRAME.md +0 -0
  829. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/coral/frame-showcase.html +0 -0
  830. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/creative-mode/FRAME.md +0 -0
  831. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/creative-mode/frame-showcase.html +0 -0
  832. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/daisy-days/FRAME.md +0 -0
  833. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/daisy-days/frame-showcase.html +0 -0
  834. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/editorial-forest/FRAME.md +0 -0
  835. /package/skills/{hyperframes-creative → hyperframes/assets}/frame-presets/editorial-forest/frame-showcase.html +0 -0
  836. /package/skills/{hyperframes-audio → media-use/audio}/scripts/carve.test.mjs +0 -0
  837. /package/skills/{hyperframes-creative → media-use/audio}/scripts/extract-audio-data.py +0 -0
@@ -1,1220 +1,10 @@
1
1
  ---
2
2
  name: talking-head-recut
3
- description: Package an existing talking-head / interview / podcast video with timed, designed GRAPHIC OVERLAY cards — kinetic titles, lower-thirds, data callouts, quotes, side panels, picture-in-picture — synced to the transcript, on a 16:9 / 9:16 / 4:5 canvas of your choice; the clip plays untouched underneath. Trigger on "graphic overlays", "on-screen graphics", "package / dress up my video". Not plain subtitles (/embedded-captions). Unclear → /hyperframes.
3
+ description: Compatibility entry for the retired talking-head-recut skill; routes to the current official hyperframes skill.
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.
6
+ # talking-head-recut: compatibility entry
7
7
 
8
- > **First, keep this skill fresh — confirm with the user before running:** `npx hyperframes skills update talking-head-recut`. A fast no-op when everything is current; otherwise it refreshes this skill plus the core domain skills it depends on before you rely on them.
8
+ The current official HyperFrames release merged this workflow into the `hyperframes` skill. Load `hyperframes` from the DSH skill registry and follow its current instructions for the user's task. Use its bundled resources; do not reconstruct the retired workflow or download standalone skills.
9
9
 
10
- # Talking Head Recut
11
-
12
- Talking Head Recut takes a local video that **plays in full** and layers a sequence of
13
- timed, designed **graphic cards** onto it — titles, lower-thirds, data callouts,
14
- quotes, side panels, picture-in-picture — synced to what's being said. The agent
15
- designs the cards (timing + content) and **writes each card's HTML directly in the
16
- conversation**, then assembles a single composition HTML and renders it to MP4 via
17
- `hyperframes`. There is no fixed archetype list and no prescribed card structure —
18
- the overlays emerge from what the transcript actually says.
19
-
20
- > **The front door is `/hyperframes`.** This skill packages an **existing talking-head clip** with **designed graphic cards** (titles, lower-thirds, data callouts, quotes, side panels, PiP) — not plain captions (the spoken words as text). **The clip plays untouched.** Any other intent — plain subtitles, a standalone graphic, a from-scratch video — or any uncertainty → read `/hyperframes` first: the intent layer owns every route decision.
21
-
22
- > **Graphic-packaging sibling of `embedded-captions`.** Captions add the _spoken words_
23
- > as a readable subtitle; this adds _designed graphics_ on top of the playing video.
24
- > Plain subtitles → `embedded-captions`. Build a video from scratch → the creation
25
- > workflows (`product-launch-video` / `faceless-explainer` / …).
26
-
27
- Routed through `/hyperframes`, the intent layer confirms only the input (which clip) and **announces** the render-strategy questions as deferred asks — aspect, layout, style group, and card count stay at Step 7, where the probed footage and transcript ground the recommendations; the layer's run-shape questions don't apply. A `BRIEF.md`, when present, carries the confirmed input and any user notes — read it first.
28
-
29
- Inspectable intermediate files in the work directory:
30
-
31
- - `metadata.json` — duration / width / height / fps
32
- - `audio.mp3` — extracted audio
33
- - `transcript.json` — a flat **word array** `[{ text, start, end }, …]` (Whisper; no `segments`, no `words` wrapper)
34
- - `storyboard.json` — lightweight card outline (the agent's plan)
35
- - `public/cards/card-XX.html` — one HTML fragment per card
36
- - `public/index.html` — final assembled composition
37
- - `output.mp4` — rendered video
38
-
39
- ## CLI Resolution
40
-
41
- ```bash
42
- # hyperframes — transcription (local Whisper) + rendering the assembled HTML to MP4
43
- npx hyperframes --help
44
- ```
45
-
46
- This skill runs entirely on the **hyperframes** CLI plus system `ffmpeg` / `ffprobe`.
47
- Transcription is local **Whisper** via `hyperframes transcribe` — no third-party
48
- service, API key, or rate-limited proxy.
49
-
50
- ## Workflow
51
-
52
- ### 1. Check Environment
53
-
54
- ```bash
55
- npx hyperframes doctor # ffmpeg, headless browser, render deps
56
- # confirm bundled assets:
57
- ls "<SKILL_DIR>/assets/fonts" "<SKILL_DIR>/assets/vendor/gsap.min.js"
58
- ```
59
-
60
- Required:
61
-
62
- - `ffmpeg` / `ffprobe` (system)
63
- - `<SKILL_DIR>/assets/fonts/*.woff2`, `<SKILL_DIR>/assets/vendor/gsap.min.js` (bundled inside this skill, staged to work dir in Step 9)
64
-
65
- Transcription needs no key — `hyperframes transcribe` runs Whisper locally (Step 4).
66
-
67
- Strongly recommended on macOS for `hyperframes render`:
68
-
69
- ```bash
70
- export PRODUCER_BROWSER_GPU_MODE=hardware
71
- ```
72
-
73
- ### 2. Create a Work Directory
74
-
75
- All artifacts live under `videos/<project-name>/` — the same convention as the other
76
- video workflows (`product-launch-video` / `faceless-explainer` / `pr-to-video`). Keep
77
- the cwd at the workspace root; everything below writes under this one subdirectory.
78
-
79
- ```bash
80
- VIDEO_PATH="/absolute/path/input.mp4"
81
- WORK_DIR="videos/$(basename "$VIDEO_PATH" | sed 's/\.[^.]*$//')"
82
- mkdir -p "$WORK_DIR"
83
- ```
84
-
85
- ### 3. Extract Audio and Metadata
86
-
87
- ```bash
88
- # metadata — duration / width / height / fps
89
- ffprobe -v error -select_streams v:0 \
90
- -show_entries stream=width,height,r_frame_rate \
91
- -show_entries format=duration -of json "$VIDEO_PATH" > "$WORK_DIR/metadata.json"
92
- # audio
93
- ffmpeg -y -i "$VIDEO_PATH" -vn -acodec libmp3lame -q:a 2 "$WORK_DIR/audio.mp3"
94
- ```
95
-
96
- Outputs: `metadata.json` (read `width`/`height`/`duration`; fps = the `r_frame_rate`
97
- fraction evaluated, e.g. `30000/1001 → 29.97`) + `audio.mp3`.
98
-
99
- ### 4. Transcribe
100
-
101
- ```bash
102
- npx hyperframes transcribe "$WORK_DIR/audio.mp3" -d "$WORK_DIR" --json --model small.en
103
- ```
104
-
105
- Local **Whisper** — no API key, no proxy, no rate limit. Writes a word-level
106
- `transcript.json` into the work dir (word `text` + `start` / `end` timestamps).
107
- Read it for the word / sentence timings that drive card timing in Step 6; group
108
- words into sentences yourself at punctuation / pauses if you need segment-level
109
- chunks.
110
-
111
- **Clamp to media duration.** Whisper can return the final word's `end` a hair past the
112
- actual clip length — clamp every card `endSec` and `composition.durationSeconds` to the
113
- `metadata.json` duration, or the render will show a black tail past the video.
114
-
115
- ### 5. Correct Transcript
116
-
117
- `transcript.json` is a **flat array of word objects** — `[{ "text": "...", "start": s, "end": s }, …]` (no `segments` array, no `words` wrapper; the per-word key is **`text`**). Read it and fix obvious ASR errors:
118
-
119
- - Homophones, product names, technical terms, punctuation
120
- - Edit a word's `text` in place; **preserve its `start` / `end`** timestamps
121
- - There is no pre-grouped `segments` array — **group words into sentences yourself** (split at terminal punctuation / pauses) when you need segment-level chunks for card timing
122
-
123
- ### 6. Draft a Lightweight Storyboard (in chat)
124
-
125
- **No CLI involved.** Read `transcript.json` + `metadata.json` and design
126
- cards directly. `storyboard.json` is an agent-internal planning artifact
127
- — no CLI command consumes it; it exists so you can think clearly
128
- about timing and content before writing each card's HTML. Keep the
129
- shape consistent with the example below so the same outline can drive
130
- the composition you author in Step 9:
131
-
132
- ```json
133
- {
134
- "schemaVersion": 3,
135
- "composition": {
136
- "fps": 30,
137
- "width": 1080,
138
- "height": 1920,
139
- "durationSeconds": 121.2,
140
- "layout": "portrait",
141
- "themeId": "noir",
142
- "seed": 42
143
- },
144
- "videoTrack": {
145
- "sourcePath": "input-video.mp4",
146
- "startSec": 0,
147
- "endSec": 121.2,
148
- "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }
149
- },
150
- "subtitles": { "enabled": false },
151
- "cards": [
152
- {
153
- "id": "card-01",
154
- "intent": "Hook with the speaker's anxious midnight question",
155
- "startSec": 0.5,
156
- "endSec": 13.0,
157
- "accentIndex": 0,
158
- "zone": "fullscreen",
159
- "contentHints": {
160
- "kicker": "AN HONEST QUESTION",
161
- "title": "The soul-searching question at 11 PM",
162
- "detail": "Client's 60-second voice message: 'If the RMB appreciates, does that mean my USD policy is a terrible loss?'"
163
- }
164
- }
165
- ]
166
- }
167
- ```
168
-
169
- **Required Card fields:**
170
-
171
- | field | type | purpose |
172
- | ----------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
173
- | `id` | string | stable id used in card HTML & GSAP selectors |
174
- | `intent` | string | natural-language description; fed to card synthesis |
175
- | `startSec` / `endSec` | number | times in seconds (endSec > startSec) |
176
- | `accentIndex` | 0 \| 1 \| 2 \| 3 \| 4 | which of the 5 theme accent colors this card pulls |
177
- | `zone` | enum (see below) | where on the canvas the card lives |
178
- | `contentHints` | object | free-form bag; agent puts kicker/title/detail/data/quote here |
179
- | `archetype` (optional) | string | free-form label you may attach to remember a card's pattern; absent = free-form, which is the default |
180
- | `transition` (optional) | enum: `cut` \| `fade` \| `slide` \| `wipe` | declarative card-to-card transition |
181
-
182
- **Five `zone` values:**
183
-
184
- | zone | resolved bounds | when to use |
185
- | ----------------- | ---------------------------------------------- | --------------------------------------- |
186
- | `fullscreen` | covers whole canvas | hero moments, big numbers, mantras |
187
- | `whiteboard-area` | inset 40px margin (or 45% of portrait height) | dense data / annotated content |
188
- | `lower-third` | bottom 30% band | annotation over visible video |
189
- | `side-panel` | right 42% (landscape) or bottom 40% (portrait) | data side, video other side |
190
- | `video-overlay` | full canvas, expects mostly-transparent card | annotation overlays on full-bleed video |
191
-
192
- When you assemble the composition in Step 9, resolve each card's `zone`
193
- into pixel bounds on the card-host wrapper following the table above.
194
- Video bounds are set **once** at composition level (`videoTrack.bounds`);
195
- to make video appear to "move between cards", author GSAP tweens against
196
- `#video-wrap` in the composition's `<script>` (see Step 9).
197
-
198
- **No prescribed card roles, no prescribed narrative arc.** Cards emerge
199
- from what the video actually says — could be all quotes or all data,
200
- could open with a number or with a story. Let the transcript drive the
201
- rhythm.
202
-
203
- **How many takeaways? — auto-infer from duration + density.** No fixed
204
- upper limit. Pick a **base pace** from the video duration, then adjust
205
- by **information density**. Only **floor is fixed: minimum 5 cards** so
206
- even short videos have rhythm.
207
-
208
- **Step 1 — base pace by duration** (the natural sec/card for medium density):
209
-
210
- | video duration | base pace (sec per card) | rationale |
211
- | ------------------ | ------------------------ | ------------------------------------------- |
212
- | < 60s (short reel) | **6–8s** | viewers expect fast cuts in short-form |
213
- | 60s – 3 min | **8–12s** | normal social pace |
214
- | 3 – 10 min | **12–20s** | give breathing room; each card carries more |
215
- | 10 – 30 min | **20–35s** | long-form lecture / interview rhythm |
216
- | > 30 min | **30–60s** | episodic, near-chapter feel |
217
-
218
- **Step 2 — density multiplier** (multiplies the base pace):
219
-
220
- | signal in the transcript | multiplier | effect |
221
- | --------------------------------------------------------------------------------------------------------------------------- | ---------- | ------------------------ |
222
- | **High density** — many numbers, distinct claims, staccato pacing, list-like enumeration, every 1–2 sentences is a new idea | **× 0.7** | cuts faster, more cards |
223
- | **Medium density** — mixed flow with both data and narrative | **× 1.0** | base pace |
224
- | **Low density** — one extended story, repeated reframing, slow reflective pacing, single argument unfolding | **× 1.5** | cuts slower, fewer cards |
225
-
226
- **Step 3 — compute:**
227
-
228
- ```
229
- secPerCard = basePace × densityMultiplier
230
- cardCount = max(5, round(videoDurationSec / secPerCard))
231
- ```
232
-
233
- Examples (notice — **no upper clamp**; long videos naturally produce more cards):
234
-
235
- - **30s reel, single punchline (low density)** → 7 × 1.5 = 10.5s/card → round(30/10.5)=3 → floor to **5** cards
236
- - **60s reflective monologue (low density)** → 10 × 1.5 = 15s/card → **4** → floor to **5** cards
237
- - **121s talking-head with rich data (high density)** → 10 × 0.7 = 7s/card → **17** cards
238
- - **5 min interview, mixed density** → 16 × 1.0 = 16s/card → **19** cards
239
- - **10 min deep-dive, high density** → 16 × 0.7 = 11s/card → **55** cards
240
- - **30 min lecture, medium density** → 28 × 1.0 = 28s/card → **64** cards
241
- - **1 hr podcast, low density** → 45 × 1.5 = 67.5s/card → **53** cards
242
-
243
- When a card holds longer than ~15s, plan for a richer card (data block,
244
- multi-step reveal, several sub-points unfolding with staggered
245
- animations) — a static one-liner gets boring past 8s. For long pieces
246
- where many cards exceed 30s, consider **chunking the timeline into
247
- sub-compositions** (one .html per chapter, mounted with
248
- `data-composition-src`) so the GSAP timeline per file stays manageable
249
- — see the `timeline_track_too_dense` HyperFrames lint warning.
250
-
251
- `content` can be a plain string ("Title: annualized 5.69%\nNotes: ...") or any JSON
252
- shape that captures the data. The agent decides the shape per card.
253
-
254
- **Optional outro.** This skill ships **no fixed brand outro**. If the user wants a closing card, design a neutral one yourself (wordmark + one-line tagline, ~1.5-2s, fade in -> short hold -> fade out), append it to `cards[]`, and extend `composition.durationSeconds` to its `endSec`. Otherwise end on the last content card.
255
-
256
- ### 7. Decide Render Strategy
257
-
258
- #### Confirm Visual Direction with User (DO THIS FIRST)
259
-
260
- Before you start designing cards or deciding bounds, **ask the user to
261
- pick the output ratio, the layout, the style, and the card-density
262
- preset**. Frames are auto-selected from the chosen layout × style
263
- combination (see "Auto-pick frame" table below). Before sending the
264
- question, **precompute two things**:
265
-
266
- 1. **`recommendedRatio`** from the source video's aspect ratio
267
- (`metadata.json` width / height):
268
- - `sourceAspect = width / height`
269
- - `sourceAspect ≥ 1.5` (≥ ~3:2 wide) → recommend **`16:9`**
270
- - `sourceAspect ≤ 0.7` (≤ ~9:13 tall) → recommend **`9:16`**
271
- - `0.7 < sourceAspect < 1.5` (near-square) → recommend **`4:5`**
272
-
273
- Mark the recommended option's label with " (recommended · matches source video X:Y)"
274
- so the user sees why it's recommended.
275
-
276
- 2. **`autoCount`** from Step 6 (`max(5, round(videoSec / (basePace ×
277
- densityMultiplier)))`) so the "auto" option's label can show the
278
- concrete number.
279
-
280
- **Environment compatibility — pick the best available question channel.**
281
- Not every runtime exposes the same structured-question tool. Apply this
282
- order:
283
-
284
- 1. **Native clarification tool** — use the structured 4-question call below.
285
- 2. **Other native clarification tool** (e.g. `ask_question`,
286
- `request_user_input`, IDE-specific prompt) — use that tool with the
287
- same 4 question texts and option lists. Preserve the recommendation
288
- markers and the precomputed values.
289
- 3. **No native tool** (Codex CLI, plain text-only runtimes) — **ask
290
- directly in normal conversation**. Use the plain-text template at the
291
- end of this section. Keep it to **one message, 4 numbered questions**
292
- (the global cap is 2–5 questions per round; we stay inside it).
293
-
294
- Rules that apply to every channel:
295
-
296
- - Ask **at most 2–5 questions per round**. Our 4 here fits.
297
- - Even if missing info doesn't block rendering, **ask once to confirm
298
- the parameters that materially affect the final output** (ratio,
299
- layout, style, cardCount).
300
- - If the user has already pre-approved defaults ("just use defaults",
301
- "no need to ask", "auto-pick everything"), asked you not to ask, or the
302
- run carries an ongoing autonomous signal ("surprise me" / "decide for me" —
303
- `../hyperframes/references/brief-contract.md` § 1) — **skip
304
- the question entirely** and use: `recommendedRatio`, `layout="stack"`
305
- (safest cross-ratio default), `style` chosen from transcript tone in
306
- the most neutral group (editorial/data), `autoCount`. Tell the user
307
- what you picked in one sentence and continue.
308
-
309
- **Channel A — native `AskUserQuestion`:**
310
-
311
- ```
312
- // Precompute before the call:
313
- // recommendedRatio = "16:9" | "9:16" | "4:5"
314
- // autoCount = integer (from Step 6)
315
-
316
- AskUserQuestion({
317
- questions: [
318
- {
319
- question: "Output video aspect ratio (canvas):",
320
- header: "Aspect ratio",
321
- multiSelect: false,
322
- // Reorder so the recommended option appears FIRST (per AskUserQuestion convention).
323
- // Append " (recommended · matches source video W×H)" to the recommended option's label.
324
- options: [
325
- { label: "16:9 (1920×1080) landscape", description: "TV / YouTube / desktop playback. Most natural when the source video is already landscape; widest canvas." },
326
- { label: "9:16 (1080×1920) portrait", description: "TikTok / Reels / short-form mobile. Most natural for portrait source; native mobile experience." },
327
- { label: "4:5 (1080×1350) near-portrait", description: "Instagram feed / WeChat Moments. Best when source is near-square or you want to cover both platforms." }
328
- ]
329
- },
330
- {
331
- question: "Choose the overall layout: how should the video and cards coexist on the canvas?",
332
- header: "Layout",
333
- multiSelect: false,
334
- options: [
335
- { label: "side-by-side (split)", description: "Video and card each take half the canvas. Most stable for interview / data side-by-side; clear visual separation." },
336
- { label: "top-bottom (stack)", description: "Video on top (~52%), card below. Classic combo of speaker face + summary card; works well in portrait too." },
337
- { label: "picture-in-picture (pip)", description: "Card fills the canvas, video shrinks to a rounded corner window. Use when content is primary and speaker is secondary." },
338
- { label: "full-screen overlay (overlay)", description: "Video plays full-bleed, card floats as a glass layer on top. Strong cinematic / emotional feel." }
339
- ]
340
- },
341
- {
342
- question: "Choose the card visual style (style):",
343
- header: "Style group",
344
- multiSelect: false,
345
- // NOTE: these 3 groups intentionally match the frame auto-pick matrix
346
- // rows below, so picking a group resolves both `style` group AND the
347
- // frame matrix column in one step. Memberships are mutually exclusive.
348
- options: [
349
- { label: "warm paper (warm-paper)", description: "academic notebook · editorial big-type · whiteboard hand-drawn · xhs social. Best for interview reflections, product launches, lifestyle, emotional stories." },
350
- { label: "clinical / cold (clinical)", description: "audit magazine · swiss grid · terminal CLI · minimal modern. Best for financial analysis, investigative reports, technical tutorials, serious presentations." },
351
- { label: "experimental / avant-garde (experimental)", description: "geom color-clash geometry · spotlight dark-background. Best for short-form highlights, product launches, strong emotion, cinematic feel." }
352
- ]
353
- },
354
- {
355
- question: "Card count (takeaway pacing): how many cards to cut?",
356
- header: "Card count",
357
- multiSelect: false,
358
- options: [
359
- { label: "Auto (recommended) · approx N cards", description: "Inferred automatically from video duration and information density (see Step 6 rules). This run estimates approx N cards. Substitute the real N (your autoCount) into the label." },
360
- { label: "Fewer · approx round(N × 0.6) cards", description: "Sparser cuts, each card holds longer — suits reflective / slow-paced content." },
361
- { label: "More · approx round(N × 1.5) cards", description: "Tighter cuts, faster rhythm — suits staccato / data-dense / short-form highlight content." }
362
- ]
363
- }
364
- ]
365
- })
366
- ```
367
-
368
- **About "Other"** — `AskUserQuestion` automatically adds an "Other" option to the card count question. The user can type a number directly (e.g. "8", "20") as the cardCount target. Parse the input as an integer: if parsing succeeds → use that value (minimum 5 as a floor); if parsing fails → fall back to "auto".
369
-
370
- **Channel B — plain-text fallback** (Codex CLI, runtimes without a
371
- native question tool). Post this as one normal message, then wait for
372
- the reply. Bullet-style 1/2/3/4 keeps the reply parseable:
373
-
374
- ```
375
- I need to confirm four visual decisions with you before I start cutting cards:
376
-
377
- 1) Output aspect ratio (canvas):
378
- A. 16:9 landscape (1920×1080) — TV / YouTube / desktop playback
379
- B. 9:16 portrait (1080×1920) — TikTok / Reels / short-form mobile
380
- C. 4:5 near-portrait (1080×1350) — Instagram feed / works for both platforms
381
- ▸ My recommendation: <recommendedRatio> (matches source video W×H = <sourceW>×<sourceH>)
382
-
383
- 2) Overall layout (how video & card coexist):
384
- A. split side-by-side (50/50)
385
- B. stack top-bottom (video top, card bottom)
386
- C. pip picture-in-picture (card full canvas, video rounded corner window)
387
- D. overlay full-screen glass overlay (video full-bleed, card glass layer)
388
-
389
- 3) Card style group (maps to frame auto-pick matrix, pick 1 of 3):
390
- A. warm paper (warm-paper) (academic / editorial / whiteboard / xhs)
391
- B. clinical / cold (clinical) (audit / swiss / terminal / minimal)
392
- C. experimental (experimental) (geom / spotlight)
393
-
394
- 4) Card count (takeaway pacing):
395
- A. Auto (recommended) — approx <autoCount> cards
396
- B. Fewer — approx round(<autoCount> × 0.6) cards
397
- C. More — approx round(<autoCount> × 1.5) cards
398
- D. Give me a specific number (e.g. "8", "20")
399
-
400
- Reply format: "1A 2C 3B 4A" or natural language is fine.
401
- If you want all recommended defaults, reply "default" / "auto" / "use all recommendations".
402
- ```
403
-
404
- Parsing the plain-text reply:
405
-
406
- - Accept loose formats: `"1A 2C 3B 4A"`, `"A C B A"`, `"16:9 / pip /
407
- data / auto"`, full sentences, or `default`.
408
- - If any answer is ambiguous → re-ask only the ambiguous ones (still
409
- inside the 2–5 cap).
410
- - If the user says "default / auto / use all recommendations" → skip without re-asking.
411
-
412
- After the user answers (any channel):
413
-
414
- 1. **Resolve the output canvas** from the ratio answer — these are the
415
- exact `storyboard.composition.width / height` values to write:
416
-
417
- | user choice | composition.width × height | storyboard.layout field |
418
- | ----------- | -------------------------- | ------------------------------------------------------------- |
419
- | `16:9` | **1920 × 1080** | `"landscape"` |
420
- | `9:16` | **1080 × 1920** | `"portrait"` |
421
- | `4:5` | **1080 × 1350** | `"portrait"` (schema treats 4:5 as portrait — height > width) |
422
-
423
- For **4:5 bounds inside `references/layouts/*.html`** — those files
424
- only document landscape (1920×1080) and portrait (1080×1920). For
425
- 4:5 (1080×1350) derive bounds by **proportional scaling from
426
- portrait**: keep horizontal values, scale vertical values by
427
- `1350/1920 ≈ 0.703`. Example: `overlay` portrait card =
428
- `{ x: 24, y: 1280, w: 1032, h: 564 }` → 4:5 card =
429
- `{ x: 24, y: round(1280 × 0.703), w: 1032, h: round(564 × 0.703) }`
430
- = `{ x: 24, y: 900, w: 1032, h: 397 }`.
431
-
432
- 2. **Map the style group to a specific style** by looking at the
433
- transcript tone — pick the one that best fits, but stay inside the
434
- user's chosen group. If you're unsure between two specific styles
435
- inside the group, send a second `AskUserQuestion` with those 2–4
436
- specific style options.
437
-
438
- 3. **Resolve final cardCount** from the density answer:
439
-
440
- | user choice | final cardCount |
441
- | ----------------------- | ----------------------------------------- |
442
- | Auto (recommended) | the `autoCount` you already computed |
443
- | Fewer | `max(5, round(autoCount × 0.6))` |
444
- | More | `round(autoCount × 1.5)` (no upper clamp) |
445
- | Other = "<n>" (integer) | `max(5, parseInt(n))` |
446
- | Other = anything else | fall back to `autoCount` |
447
-
448
- 4. **Auto-pick the video frame** from this table (frames don't ask the
449
- user — they follow from layout × style):
450
-
451
- | layout | warm-paper styles (academic / whiteboard / editorial / xhs) | clinical styles (audit / swiss / terminal / minimal) | experimental styles (geom / spotlight) |
452
- | --------- | ----------------------------------------------------------- | ---------------------------------------------------- | -------------------------------------- |
453
- | `split` | `polaroid` | `hairline` | `clean` |
454
- | `stack` | `polaroid` | `hairline` | `clean` |
455
- | `pip` | `clean` (pip pill already has chrome) | `clean` | `clean` |
456
- | `overlay` | `clean` (full-bleed forbids deco frames) | `clean` | `clean` |
457
-
458
- 5. **Tell the user what you chose** in one sentence — ratio (+ canvas
459
- size), layout, specific style, frame, and final cardCount — then
460
- proceed with the rest of Step 7 (per-card layouts, motion patterns).
461
- 6. Record the five values (ratio / layout / style / frame / cardCount)
462
- in working memory (no schema field needed); you'll reference them
463
- while writing each card's HTML in Step 8 and while reading the
464
- matching `references/<dim>/<key>.html` for tokens and structure.
465
-
466
- If the user picks an answer via "Other" with a free-text style name not
467
- in the 10-style library, treat it as a hint to design a fresh card
468
- visual yourself, but still anchor on the chosen layout's bounds.
469
-
470
- #### Render Strategy Inputs
471
-
472
- With ratio / layout / style / cardCount / frame locked from Step 7.0,
473
- the remaining per-card decisions are:
474
-
475
- - **Source-video fit inside the GSAP target**: video element has
476
- `object-fit: cover` and is clipped to `#video-wrap`'s tween bounds.
477
- If you want NO cropping (e.g. portrait source on landscape canvas
478
- shouldn't get its top/bottom chopped), aim the tween at a rect that
479
- matches the source's aspect ratio and let surrounding canvas show
480
- through (or fill with the card / a backdrop).
481
- - **`card.zone` per card**: derive from your chosen composition layout
482
- (split → side-panel, stack → lower-third, pip → fullscreen, overlay
483
- → video-overlay), OR pick a different zone for one-off variants
484
- (fullscreen for hero / quote, whiteboard-area for dense data).
485
- - **`accentIndex` per card**: each card pulls one of the 5 theme accent
486
- colors. Vary across cards for rhythm; reuse the same index when two
487
- cards belong to the same narrative beat.
488
- - **Motion vocabulary**: pick 2–3 repeatable patterns from
489
- `data-anim` kinds (see the table later) and stick to them so the
490
- composition feels coherent.
491
-
492
- Pick from these `themeId` palettes (use them as `--accent-N` /
493
- `--bg` / `--text` CSS variables in your composition `<style>` block):
494
-
495
- | themeId | accent palette (5 colors) | board bg | text |
496
- | ------- | ----------------------------------------- | ----------------- | --------- |
497
- | classic | `#1971c2 #e03131 #2f9e44 #e8590c #9c36b5` | `#FFF9E3` (paper) | `#1e1e1e` |
498
- | noir | `#4cc9f0 #f72585 #4ade80 #fb923c #a78bfa` | `#1a1a1a` | `#f1f1f1` |
499
- | mint | `#0077b6 #d62828 #2d6a4f #e76f51 #7209b7` | `#e8faf0` | `#1b4332` |
500
- | craft | `#bf5700 #d62728 #6c757d #e9b54a #3d5a80` | `#f6efe1` | `#2d2d2d` |
501
- | slate | `#0ea5e9 #ef4444 #22c55e #f97316 #a855f7` | `#1e293b` | `#f1f5f9` |
502
- | mono | `#000 #555 #888 #aaa #ccc` | `#fff` | `#000` |
503
-
504
- Available fonts (woff2 in `<SKILL_DIR>/assets/fonts/`, staged to work dir in Step 9): `Caveat` (handwriting),
505
- `LXGW WenKai TC` (Chinese hand-script), `Inter` (modern sans), `Virgil`
506
- (geometric hand). Reference via `@font-face` or `font-family` directly.
507
-
508
- For inspiration on visual patterns, `<SKILL_DIR>/references/styles/`
509
- ships 10 self-contained reference cards (academic / editorial / minimal
510
- / spotlight / geom / whiteboard / audit / terminal / swiss / xhs) that
511
- you can copy as starting points — but **do not feel constrained to
512
- match any of these**. Each card is your own design.
513
-
514
- #### Visual Design Library (<SKILL_DIR>/references/)
515
-
516
- Beyond the composition-level `themeId`, the skill ships a richer **reference
517
- library** at `<SKILL_DIR>/references/` covering three **orthogonal**
518
- visual dimensions you can freely mix:
519
-
520
- ```
521
- Style × Layout × VideoFrame
522
- (10) (4) (3)
523
- ```
524
-
525
- | dimension | keys | what it decides |
526
- | ---------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
527
- | **style** | `academic` `editorial` `minimal` `spotlight` `geom` `whiteboard` `audit` `terminal` `swiss` `xhs` | the card's visual language — fonts, colors, ornament, layout-within-card |
528
- | **layout** | `split` `stack` `pip` `overlay` | how the source video and the card share the canvas |
529
- | **frame** | `clean` `hairline` `polaroid` | the decorative chrome around the video element |
530
-
531
- Read `<SKILL_DIR>/references/DESIGN_INDEX.md`
532
- for the full matrix and a loose decision guide (interview / product launch / data analysis /
533
- social clip / technical tutorial / emotional story …). When you decide to use a specific
534
- style / layout / frame, Read the corresponding file:
535
-
536
- - `references/styles/<key>.html` — self-contained card fragment with that
537
- style's CSS tokens (colors, fonts, padding, ornament) and a placeholder
538
- takeaway. Copy the `.card[data-card-id="ref-<key>"]` style block, rename
539
- the data-card-id to your card's id, swap the placeholder content for the
540
- real takeaway, and you're done.
541
- - `references/layouts/<key>.html` — exact `videoBounds` + `cardBounds` for
542
- both landscape and portrait, with a copy-paste JSON snippet for
543
- `storyboard.json`'s per-card `layout` field.
544
- - `references/frames/<key>.html` — decorative HTML to add as a sibling of
545
- `#video-wrap`, plus placement instructions for the composition CSS.
546
-
547
- Pick `style × layout × frame` **per card** — you can change all three
548
- between cards as long as the transitions read smoothly. A common rhythm:
549
- open `editorial × overlay × clean`, switch to `audit × split × hairline`
550
- for the data card, close on `whiteboard × pip × polaroid`.
551
-
552
- The 10 styles are skill-side design tokens, **not composition-level themes** —
553
- they don't need to be declared in `storyboard.composition`; they live
554
- inside each card's HTML. The `themeId` field can still pick a
555
- composition-level palette (table above) that controls page-body background
556
- and video border chrome.
557
-
558
- #### Layout Compositions (Card + Video)
559
-
560
- Two coordinated decisions per card define how it shares the canvas with
561
- the source video:
562
-
563
- - **`card.zone`** (declared in `storyboard.json`) — one of the 5 schema
564
- values; resolve it into pixel bounds (per the table in Step 6) when
565
- you write the card-host wrapper's inline `style` in Step 9.
566
- - **`#video-wrap` bounds at this card's time window** (declared
567
- imperatively in the composition's GSAP timeline) — the agent tweens
568
- `#video-wrap` to a target rect for each layout transition.
569
-
570
- Schema does NOT store per-card video bounds. `videoTrack.bounds` is
571
- **one-time** at composition level (defaults to full canvas). Video
572
- "moving" between cards is purely a GSAP animation authored in
573
- `index.html`. There is no `card.layout` field — earlier versions of this
574
- doc invented one; the real schema only has `card.zone`.
575
-
576
- **4 composition layouts** (from `references/layouts/`) — each is a
577
- recipe pairing a `zone` with a `#video-wrap` tween target:
578
-
579
- | composition layout | recommended `card.zone` | GSAP target for `#video-wrap` (landscape 1920×1080) | GSAP target for `#video-wrap` (portrait 1080×1920) | when to use |
580
- | ------------------ | ----------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------- |
581
- | `split` | `side-panel` | `{ left: 960, top: 0, width: 960, height: 1080 }` | `{ left: 0, top: 960, width: 1080, height: 960 }` (bottom half) | speaker + data side-by-side / 50:50 weight |
582
- | `stack` | `lower-third` | `{ left: 14, top: 14, width: 1892, height: 548 }` (top 52%) | `{ left: 0, top: 0, width: 1080, height: 844 }` (top 44%) | speaker on top + summary card below |
583
- | `pip` | `fullscreen` | `{ left: 1480, top: 760, width: 400, height: 300 }` + add `.framed` class | `{ left: 690, top: 28, width: 360, height: 203 }` + add `.framed` | content-heavy card + corner pip |
584
- | `overlay` | `video-overlay` | `{ left: 0, top: 0, width: 1920, height: 1080 }` (full-bleed) | `{ left: 0, top: 0, width: 1080, height: 1920 }` | cinematic / dramatic / glass card on full video |
585
-
586
- For 4:5 (1080×1350), scale portrait y/h values by `1350/1920 ≈ 0.703`
587
- (see Step 7.0 Channel A / Channel B `recommendedRatio` resolution
588
- table).
589
-
590
- **Other zone values for one-off variants** (still uses `card.zone`; no
591
- fake "layout" field):
592
-
593
- | `zone` | resolved bounds | common use |
594
- | ----------------- | ------------------------------------------------------ | ------------------------------------- |
595
- | `fullscreen` | covers whole canvas | hero card, video tweens to hidden/pip |
596
- | `whiteboard-area` | inset 40px margin (landscape) or bottom 45% (portrait) | dense data card, free margins |
597
- | `lower-third` | bottom 30% band | talking-head annotation |
598
- | `side-panel` | right 42% (landscape) or bottom 40% (portrait) | sidebar / "split" recipe |
599
- | `video-overlay` | full canvas; expect transparent card root | glass overlay on full-bleed video |
600
-
601
- You can mix recipes per card — choose `card.zone` based on what suits
602
- the moment, then write the GSAP tween for `#video-wrap` between cards.
603
-
604
- #### Storyboard Render Contract
605
-
606
- `storyboard.json` is an agent-internal planning artifact — no CLI
607
- command parses it. It exists to keep your timing and content decisions
608
- explicit before you write each card's HTML. Stick to the v3-style
609
- shape below so the same outline drives the composition you assemble in
610
- Step 9.
611
-
612
- Required structure (see Step 6 for the full example):
613
-
614
- - `schemaVersion: 3`
615
- - `composition: { fps, width, height, durationSeconds, layout, themeId, seed }` — note `durationSeconds`/`fps`/`themeId`/`layout` live **inside** `composition`, NOT at top level
616
- - `videoTrack: { sourcePath, startSec, endSec, bounds? }` — video bounds default to full canvas
617
- - `subtitles: { enabled, ... }`
618
- - `cards[]` — each card has the 6 required fields: `id`, `intent`, `startSec`, `endSec`, `accentIndex`, `zone`, `contentHints`
619
-
620
- Rules:
621
-
622
- - Card times stay inside `composition.durationSeconds` and should not overlap unless intentional (use `data-track-index` to control z-order when they do).
623
- - Visual details live in card HTML fragments (Step 8), NOT in `contentHints`. `contentHints` is your own structured prompt for designing the card; the rendered look is the HTML.
624
- - Keep the storyboard shape stable — even though nothing parses it, you read it back while authoring Step 8/9, and consistency keeps card IDs and timing in sync.
625
- - Agent-side decisions like "I picked overlay × geom × clean" do NOT belong in `storyboard.json` — keep them in working memory and use them when authoring card HTML + GSAP tweens.
626
-
627
- **Transparent card backgrounds for cards that share canvas with video.**
628
- When the GSAP tween leaves video visible behind/beside the card (overlay
629
- recipe, pip recipe, or any `card.zone = 'lower-third' | 'video-overlay'`
630
- moment), the card's `.root` MUST NOT paint a full opaque background —
631
- otherwise it occludes the video. Two patterns:
632
-
633
- ```css
634
- /* Pattern A: transparent root, page body provides the cream backdrop */
635
- html,
636
- body {
637
- background: var(--bg);
638
- }
639
- .card[data-card-id="card-X"] .root {
640
- background: transparent;
641
- }
642
-
643
- /* Pattern B: explicit per-card background ONLY for fullscreen cards */
644
- .card[data-card-id="card-hero"] .root {
645
- background: var(--bg);
646
- }
647
- .card[data-card-id="card-overlay"] .root {
648
- background: transparent;
649
- }
650
- ```
651
-
652
- For `side-panel`-zone cards (split recipe), the card-host is already
653
- only half the canvas, so an opaque card bg is fine — it only covers its
654
- half.
655
-
656
- ### 8. Write Each Card's HTML
657
-
658
- Create `$WORK_DIR/public/cards/{card-id}.html` for each card. Each file
659
- contains a single rooted HTML fragment that follows this contract:
660
-
661
- #### Card HTML Contract
662
-
663
- ```html
664
- <div class="card" data-card-id="{cardId}">
665
- <style>
666
- /* MUST: every rule starts with .card[data-card-id="{cardId}"] */
667
- .card[data-card-id="card-01"] .root {
668
- width: 100%; height: 100%;
669
- display: flex; ...;
670
- font-family: 'Caveat', 'LXGW WenKai TC', serif;
671
- color: var(--text);
672
- background: var(--bg);
673
- }
674
- .card[data-card-id="card-01"] .title { font-size: 84px; ... }
675
- </style>
676
-
677
- <div class="root">
678
- <h1
679
- id="card-01-title"
680
- data-anim="kinetic-chars"
681
- data-anim-at="0.3"
682
- data-anim-duration="0.5"
683
- data-anim-stagger="0.04"
684
- data-anim-pattern="pop"
685
- >
686
- <span class="char">S</span>
687
- <span class="char">u</span>
688
- </h1>
689
- <div
690
- id="card-01-line"
691
- data-anim="grow-x"
692
- data-anim-at="0.65"
693
- data-anim-duration="0.5"
694
- data-anim-target-w="420"
695
- style="width:0;height:8px;background:var(--accent-0);border-radius:4px;"
696
- ></div>
697
- </div>
698
- </div>
699
- ```
700
-
701
- **Hard rules** (`hyperframes` lint will reject violations):
702
-
703
- - Single root `<div class="card" data-card-id="{cardId}">`
704
- - Inline `<style>` rules MUST be prefixed with the scope selector above
705
- - **No `<script>` tags**
706
- - **No external URLs** in `src=` / `href=` (no CDN, no remote fonts)
707
- - **No inline event handlers** (`onclick=` etc.)
708
- - All assets via relative paths into the same `public/` directory
709
- - Colors via `var(--accent-N)` etc. for portability across themes
710
-
711
- **Animations are declared, not coded.** Use `data-anim-*` attributes
712
- only; never write `<script>` to animate. You compile every `data-anim-*`
713
- declaration into the single master GSAP timeline in Step 9.
714
-
715
- #### Card Sizing — Mobile-First in Portrait
716
-
717
- The 10 `references/styles/*.html` are sized for a **1920×1080 landscape**
718
- preview. When `storyboard.layout = "portrait"` (1080×1920, the dominant
719
- case for social / mobile), **scale every visual size up** — phones hold
720
- the screen close, and the same pixel count reads smaller than on a
721
- landscape TV-style canvas.
722
-
723
- | token | landscape baseline | **portrait target** | scale |
724
- | ------------------------- | ------------------ | ------------------- | ------------- |
725
- | title (h1/h2 hero) | 64–96px | **88–132px** | ×1.35 |
726
- | detail / body | 24–30px | **30–40px** | ×1.30 |
727
- | kicker / chip label | 14–16px | **18–22px** | ×1.30 |
728
- | timecode / meta | 12–14px | **16–18px** | ×1.30 |
729
- | data block primary number | 48–60px | **64–88px** | ×1.40 |
730
- | line-height multiplier | 1.05–1.5 | same | (don't scale) |
731
-
732
- **Rule of thumb:** `portraitPx = round(landscapePx × 1.3)`, then floor
733
- to a nearby 4px multiple for visual rhythm. Hero headlines may go up to
734
- ×1.4; small meta text stays at ×1.2 to avoid crowding.
735
-
736
- Padding **shrinks slightly** in portrait — the card is narrower so big
737
- landscape padding (40–64px) eats too much width. Use 24–36px horizontal
738
- padding in portrait.
739
-
740
- If you're producing a single card that must work in **both** layouts,
741
- prefer a `@container` query on the card root over hard-coding sizes:
742
-
743
- ```css
744
- .card[data-card-id="X"] .root {
745
- container-type: inline-size;
746
- }
747
- .card[data-card-id="X"] .title {
748
- font-size: clamp(64px, 8.5cqi, 132px);
749
- }
750
- .card[data-card-id="X"] .detail {
751
- font-size: clamp(24px, 3.2cqi, 40px);
752
- }
753
- ```
754
-
755
- But for most cards, a single layout choice is fine — just pick the size
756
- table column that matches the storyboard's `layout` field.
757
-
758
- #### Available `data-anim` Kinds
759
-
760
- This list is closed, and deliberately so: a card is an HTML fragment whose motion this
761
- skill compiles into the shared overlay timeline in Step 9 (see the GSAP mapping table
762
- there). That is why this workflow does not search the HyperFrames component registry the
763
- way the composition workflows do — `npx hyperframes catalog` returns standalone
764
- compositions that carry their own timeline, and a card has no place to mount one. Reach a
765
- look the kinds below cannot express with plain CSS inside the card's scoped `<style>`.
766
-
767
- | kind | use for | key params |
768
- | --------------- | ------------------- | ----------------------------------------------------------------------------------------------- |
769
- | `fade-in` | enter | `at`, `duration`, `ease?` |
770
- | `fade-out` | exit | `at`, `duration`, `ease?` |
771
- | `slide-in` | slide enter | `at`, `duration`, `from=left\|right\|top\|bottom`, `distance` |
772
- | `kinetic-chars` | per-char pop | `at`, `duration`, `stagger`, `pattern=pop\|fade` — element needs `<span class="char">` children |
773
- | `typewriter` | per-char fade | same as kinetic-chars but slower default stagger |
774
- | `count-up` | animate number | `at`, `duration`, `from`, `to`, `format=.0f\|.1f\|.2f\|,d` |
775
- | `draw-path` | SVG path reveal | `at`, `duration` — element should be a `<path>` |
776
- | `grow-y` | bar height | `at`, `duration`, `target-h` (px) — element starts `height:0` |
777
- | `grow-x` | bar width | `at`, `duration`, `target-w` (px) — element starts `width:0` |
778
- | `scale-pop` | pop entrance | `at`, `duration` |
779
- | `blur-in` | unfocused → focused | `at`, `duration` |
780
- | `mask-reveal` | clip reveal | `at`, `duration`, `direction=left\|right\|top\|bottom` |
781
- | `morph-to` | tween any CSS | `at`, `duration`, `props='{...JSON...}'` |
782
-
783
- `data-anim-at` is **seconds relative to the card's startSec** — when you
784
- compile each declaration into the GSAP timeline in Step 9, add the
785
- card's `startSec` to get the absolute time and quantize to 1/fps.
786
-
787
- ### 9. Assemble the Composition HTML
788
-
789
- Stage the assets and write `$WORK_DIR/public/index.html`:
790
-
791
- ```bash
792
- # SKILL_DIR is injected by the host ("Base directory for this skill: …")
793
- SKILL_DIR="<SKILL_DIR>"
794
-
795
- mkdir -p "$WORK_DIR/public/fonts" "$WORK_DIR/public/vendor" "$WORK_DIR/public/cards"
796
- cp -n "$SKILL_DIR/assets/fonts/"* "$WORK_DIR/public/fonts/"
797
- cp -n "$SKILL_DIR/assets/vendor/gsap.min.js" "$WORK_DIR/public/vendor/"
798
- # stage the input video — RE-ENCODE with dense keyframes. Sources with a sparse GOP
799
- # (keyframe interval > ~1s) freeze on seek in the renderer (a frozen frame under the
800
- # overlays); -g / -keyint_min set to your composition fps make every frame seekable.
801
- # (Set both to your fps — 30 shown; use 24/25/60 to match.)
802
- ffmpeg -y -i "$VIDEO_PATH" -c:v libx264 -crf 18 -g 30 -keyint_min 30 \
803
- -pix_fmt yuv420p -movflags +faststart -c:a aac "$WORK_DIR/public/input-video.mp4"
804
- ```
805
-
806
- #### Composition Template
807
-
808
- ```html
809
- <!doctype html>
810
- <html lang="en">
811
- <head>
812
- <meta charset="utf-8" />
813
- <style>
814
- @font-face {
815
- font-family: "Caveat";
816
- src: url("fonts/Caveat-400-latin.woff2") format("woff2");
817
- font-weight: 400;
818
- font-display: block;
819
- }
820
- @font-face {
821
- font-family: "Caveat";
822
- src: url("fonts/Caveat-700-latin.woff2") format("woff2");
823
- font-weight: 700;
824
- font-display: block;
825
- }
826
- @font-face {
827
- font-family: "LXGW WenKai TC";
828
- src: url("fonts/LXGWWenKaiTC-400-latin.woff2") format("woff2");
829
- font-weight: 400;
830
- font-display: block;
831
- }
832
- @font-face {
833
- font-family: "Inter";
834
- src: url("fonts/Inter-400-latin.woff2") format("woff2");
835
- font-weight: 400;
836
- font-display: block;
837
- }
838
- @font-face {
839
- font-family: "Inter";
840
- src: url("fonts/Inter-700-latin.woff2") format("woff2");
841
- font-weight: 700;
842
- font-display: block;
843
- }
844
- @font-face {
845
- font-family: "Virgil";
846
- src: url("fonts/Virgil.woff2") format("woff2");
847
- font-display: block;
848
- }
849
-
850
- :root {
851
- /* Pick from the themeId palette table in Step 7 — example: classic */
852
- --bg: #fff9e3;
853
- --text: #1e1e1e;
854
- --accent-0: #1971c2;
855
- --accent-1: #e03131;
856
- --accent-2: #2f9e44;
857
- --accent-3: #e8590c;
858
- --accent-4: #9c36b5;
859
- --font-family: "Caveat", "LXGW WenKai TC", serif;
860
- }
861
- * {
862
- box-sizing: border-box;
863
- }
864
- /* Body font-family MUST list concrete font names (not just var(--font-family)) —
865
- the HyperFrames renderer's static analyzer doesn't expand CSS variables when
866
- resolving fonts, so a var-only chain triggers `font_family_without_font_face`
867
- lint and falls back to a generic. Use the concrete chain here; cards that
868
- want the theme font can still reference var(--font-family) internally. */
869
- html,
870
- body {
871
- margin: 0;
872
- padding: 0;
873
- width: 100%;
874
- height: 100%;
875
- overflow: hidden;
876
- background: #000;
877
- font-family: "Inter", "Caveat", "LXGW WenKai TC", ui-sans-serif, system-ui, sans-serif;
878
- }
879
- #stage {
880
- position: relative;
881
- width: 100%;
882
- height: 100%;
883
- overflow: hidden;
884
- }
885
-
886
- /* video-wrapper holds the source video. Its position / size are animated
887
- over time by the master timeline (one tween per layout transition). */
888
- .video-wrapper {
889
- position: absolute;
890
- left: 0;
891
- top: 0;
892
- width: 1920px;
893
- height: 1080px;
894
- overflow: hidden;
895
- border-radius: 0;
896
- box-shadow: none;
897
- }
898
- .video-wrapper video {
899
- width: 100%;
900
- height: 100%;
901
- object-fit: cover;
902
- }
903
-
904
- .card-host {
905
- position: absolute;
906
- pointer-events: none;
907
- overflow: hidden;
908
- }
909
- .card-host .card {
910
- position: relative;
911
- width: 100%;
912
- height: 100%;
913
- overflow: hidden;
914
- }
915
- .card-host .char {
916
- display: inline-block;
917
- visibility: visible;
918
- }
919
-
920
- /* Subtle drop shadow + rounded corners for non-fullscreen video framings */
921
- .video-wrapper.framed {
922
- border-radius: 16px;
923
- box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
924
- }
925
- </style>
926
- </head>
927
- <body>
928
- <div
929
- id="stage"
930
- data-composition-id="talking-head-recut"
931
- data-start="0"
932
- data-duration="121.2"
933
- data-fps="30"
934
- data-width="1920"
935
- data-height="1080"
936
- >
937
- <!-- Layer 1: source video — initial position matches card-01's layout -->
938
- <div class="video-wrapper" id="video-wrap">
939
- <video
940
- id="bg-video"
941
- src="input-video.mp4"
942
- muted
943
- playsinline
944
- data-start="0"
945
- data-duration="121.2"
946
- data-track-index="1"
947
- ></video>
948
- </div>
949
- <!-- Preserve the source program audio while the visual video stays muted. -->
950
- <audio
951
- id="source-audio"
952
- src="input-video.mp4"
953
- data-start="0"
954
- data-duration="121.2"
955
- data-track-index="10"
956
- data-volume="1"
957
- ></audio>
958
-
959
- <!-- Layer 2: each card-host sits at the bounds dictated by its layout. -->
960
- <!-- IMPORTANT: every card-host MUST carry BOTH "card-host" and "clip" classes. -->
961
- <!-- - "card-host" → our positioning + pointer-events styles -->
962
- <!-- - "clip" → the marker Studio and the linter use to recognise a -->
963
- <!-- clip. Visibility itself comes from data-start / -->
964
- <!-- data-duration, which the runtime honours with or -->
965
- <!-- without this class -->
966
- <!-- (lint: timed_element_missing_clip_class, a warning). -->
967
- <!-- Example: card-01 with zone="fullscreen" → card-host covers (0,0,1920,1080) -->
968
- <div
969
- class="card-host clip"
970
- data-card-id="card-01"
971
- data-start="1.0000"
972
- data-duration="6.5000"
973
- data-track-index="2"
974
- style="left:0;top:0;width:1920px;height:1080px;visibility:hidden;opacity:0;"
975
- >
976
- <!-- paste the contents of public/cards/card-01.html here -->
977
- </div>
978
-
979
- <!-- Example: card-02 with zone="side-panel" (split composition layout) → card on left half -->
980
- <div
981
- class="card-host clip"
982
- data-card-id="card-02"
983
- data-start="8.0000"
984
- data-duration="12.0000"
985
- data-track-index="2"
986
- style="left:0;top:0;width:960px;height:1080px;visibility:hidden;opacity:0;"
987
- >
988
- <!-- card-02 HTML -->
989
- </div>
990
-
991
- <!-- ...one "card-host clip" per card with inline bounds matching resolveZoneBounds(card.zone)... -->
992
-
993
- <script src="vendor/gsap.min.js"></script>
994
- <script>
995
- (function () {
996
- // count-up formatter helper
997
- window.__fmt = function (v, fmt) {
998
- if (typeof fmt === "string" && /^\.[0-9]+f$/.test(fmt)) {
999
- return Number(v).toFixed(Number(fmt.slice(1, -1)));
1000
- }
1001
- if (fmt === ",d") return Math.round(v).toLocaleString();
1002
- return String(Math.round(v));
1003
- };
1004
-
1005
- const tl = window.gsap.timeline({ paused: true });
1006
-
1007
- // ── Card lifecycle (one block per card) ──
1008
- // Example for card-01 [1.0, 7.5] with kinetic-chars at +0.3, grow-x at +0.65:
1009
-
1010
- // Enter (fade in over 0.4s)
1011
- tl.set('.card-host[data-card-id="card-01"]', { visibility: "visible" }, 1.0);
1012
- tl.fromTo(
1013
- '.card-host[data-card-id="card-01"]',
1014
- { opacity: 0 },
1015
- { opacity: 1, duration: 0.4, ease: "power2.out" },
1016
- 1.0,
1017
- );
1018
-
1019
- // Card-internal anims (compile each data-anim-* declaration here)
1020
- tl.from(
1021
- '.card[data-card-id="card-01"] #card-01-title .char',
1022
- { opacity: 0, y: 8, scale: 0.8, duration: 0.5, ease: "power2.out", stagger: 0.04 },
1023
- 1.3,
1024
- );
1025
- tl.fromTo(
1026
- '.card[data-card-id="card-01"] #card-01-line',
1027
- { width: 0 },
1028
- { width: 420, duration: 0.5, ease: "power2.out" },
1029
- 1.65,
1030
- );
1031
-
1032
- // Exit (fade out over 0.35s, ending at endSec)
1033
- tl.to(
1034
- '.card-host[data-card-id="card-01"]',
1035
- { opacity: 0, duration: 0.35, ease: "power2.in" },
1036
- 7.15,
1037
- );
1038
- tl.set('.card-host[data-card-id="card-01"]', { visibility: "hidden" }, 7.5);
1039
-
1040
- // ── Video framing transitions ──
1041
- // When the next card uses a different composition layout, animate the
1042
- // video-wrapper to its new bounds. Example: card-01 = fullscreen
1043
- // (video hidden behind), card-02 = split composition (zone="side-panel"
1044
- // → video on right, card on left).
1045
-
1046
- // Card-02 enters at 8.0s with the split composition. Animate video to
1047
- // the right half during the card-01 → card-02 gap (between 7.5 and 8.0s).
1048
- tl.set("#video-wrap", { className: "video-wrapper framed" }, 7.5);
1049
- tl.to(
1050
- "#video-wrap",
1051
- { left: 960, top: 0, width: 960, height: 1080, duration: 0.6, ease: "power2.inOut" },
1052
- 7.5,
1053
- );
1054
-
1055
- // Card-02 enter — same pattern as card-01
1056
- tl.set('.card-host[data-card-id="card-02"]', { visibility: "visible" }, 8.0);
1057
- tl.fromTo(
1058
- '.card-host[data-card-id="card-02"]',
1059
- { opacity: 0 },
1060
- { opacity: 1, duration: 0.4, ease: "power2.out" },
1061
- 8.0,
1062
- );
1063
- // ...card-02 internal anims...
1064
-
1065
- // ── repeat for each card; if the NEXT card's layout differs,
1066
- // insert another tl.to('#video-wrap', ...) tween before its enter ──
1067
-
1068
- window.__timelines = window.__timelines || {};
1069
- window.__timelines["talking-head-recut"] = tl;
1070
- })();
1071
- </script>
1072
- </div>
1073
- </body>
1074
- </html>
1075
- ```
1076
-
1077
- #### GSAP Statement Cheat Sheet
1078
-
1079
- Compile each `data-anim` attribute into a GSAP statement. Times are
1080
- **absolute seconds** = card.startSec + data-anim-at, quantized to 1/fps.
1081
- Selector is `.card[data-card-id="X"] #elementId`.
1082
-
1083
- | data-anim | GSAP statement template |
1084
- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1085
- | `fade-in` | `tl.fromTo(SEL, { opacity: 0 }, { opacity: 1, duration: D, ease: 'power2.out' }, T);` |
1086
- | `fade-out` | `tl.to(SEL, { opacity: 0, duration: D, ease: 'power2.in' }, T);` |
1087
- | `slide-in` (from=left, dist=80) | `tl.fromTo(SEL, { opacity: 0, x: -80 }, { opacity: 1, x: 0, duration: D, ease: 'power2.out' }, T);` |
1088
- | `kinetic-chars` (pop) | `tl.from(SEL + ' .char', { opacity: 0, y: 8, scale: 0.8, duration: D, ease: 'power2.out', stagger: S }, T);` |
1089
- | `count-up` | `(function(){const o={v:FROM};tl.to(o,{v:TO,duration:D,ease:'power2.out',onUpdate:function(){const el=document.querySelector(SEL);if(el)el.textContent=__fmt(o.v,'FMT');}},T);})();` |
1090
- | `draw-path` | `(function(){const el=document.querySelector(SEL);if(el){const L=el.getTotalLength();tl.set(SEL,{strokeDasharray:L,strokeDashoffset:L},T);tl.to(SEL,{strokeDashoffset:0,duration:D,ease:'power2.inOut'},T);}})();` |
1091
- | `grow-x` (target-w=W) | `tl.fromTo(SEL, { width: 0 }, { width: W, duration: D, ease: 'power2.out' }, T);` |
1092
- | `grow-y` (target-h=H) | `tl.fromTo(SEL, { height: 0 }, { height: H, duration: D, ease: 'power2.out' }, T);` |
1093
- | `scale-pop` | `tl.fromTo(SEL, { opacity: 0, scale: 0.6 }, { opacity: 1, scale: 1, duration: D, ease: 'back.out(1.6)' }, T);` |
1094
- | `mask-reveal` (direction=left) | `tl.fromTo(SEL, { clipPath: 'inset(0 100% 0 0)' }, { clipPath: 'inset(0 0 0 0)', duration: D, ease: 'power2.inOut' }, T);` |
1095
-
1096
- Quantize: `T = Math.round(absSec * fps) / fps`. At 30fps the smallest
1097
- step is `1/30 ≈ 0.0333s`; rounding to 4 decimals (`.toFixed(4)`) is fine
1098
- inside the JS literal.
1099
-
1100
- #### Video Framing Reference (per `layout` value)
1101
-
1102
- The selector for the video container is `#video-wrap`. Animate its
1103
- bounds between cards using `tl.to('#video-wrap', { ...bounds }, T)`.
1104
- Initial bounds should be set inline on the element to match card-01's
1105
- layout. Pick a transition duration of 0.5–0.7s with `ease: 'power2.inOut'`.
1106
-
1107
- **Decorative frames** (`clean` / `hairline` / `polaroid`) sit as a
1108
- **sibling** of `#video-wrap` and follow it through layout transitions.
1109
- See
1110
- [`references/frames/`](references/frames/) for each frame's placement
1111
- HTML, suggested CSS, and which layouts it pairs with. Quick rule:
1112
- `overlay` layout suppresses decorative frames (the full-bleed video
1113
- clashes with chrome); PiP layouts already have their own pill treatment
1114
- (border-radius + white ring + shadow), so add a decorative frame only on
1115
- top of `split` / `stack`.
1116
-
1117
- **GSAP target lookup table** for `#video-wrap` per composition layout
1118
- (landscape 1920×1080 — for portrait & 4:5 see `references/layouts/*.html`
1119
- which list all three ratios):
1120
-
1121
- | composition layout | typical card.zone | `#video-wrap` GSAP target | extra css class |
1122
- | ------------------------------------ | ----------------- | ------------------------------------------------------------------------- | ------------------------------------------ |
1123
- | `split` | `side-panel` | `{ left: 960, top: 0, width: 960, height: 1080 }` | — |
1124
- | `stack` | `lower-third` | `{ left: 14, top: 14, width: 1892, height: 548 }` (top 52%) | — |
1125
- | `pip` (bottom-right) | `fullscreen` | `{ left: 1480, top: 760, width: 400, height: 300 }` | `pip-pill` (border-radius + ring + shadow) |
1126
- | `pip` (top-left) | `fullscreen` | `{ left: 40, top: 40, width: 400, height: 300 }` | `pip-pill` |
1127
- | `overlay` (video full-bleed) | `video-overlay` | `{ left: 0, top: 0, width: 1920, height: 1080 }` (no change from default) | — |
1128
- | **hide video** (pure-graphic moment) | `fullscreen` | `{ opacity: 0 }` (or move off-canvas) | — |
1129
-
1130
- To toggle the pip-pill chrome (border-radius + white ring + drop shadow)
1131
- when entering or leaving a pip moment:
1132
-
1133
- ```js
1134
- // Enter pip — add chrome
1135
- tl.set("#video-wrap", { className: "video-wrapper pip-pill" }, T);
1136
- tl.to(
1137
- "#video-wrap",
1138
- { left: 1480, top: 760, width: 400, height: 300, duration: 0.6, ease: "power2.inOut" },
1139
- T,
1140
- );
1141
-
1142
- // Leave pip — back to clean full-bleed
1143
- tl.set("#video-wrap", { className: "video-wrapper" }, T_NEXT);
1144
- tl.to(
1145
- "#video-wrap",
1146
- { left: 0, top: 0, width: 1920, height: 1080, duration: 0.6, ease: "power2.inOut" },
1147
- T_NEXT,
1148
- );
1149
- ```
1150
-
1151
- **Card-host bounds match the zone**. Resolve the card's `zone` into
1152
- pixel bounds using the table at the top of Step 6, then write those
1153
- into the card-host's inline `style="left:Xpx;top:Ypx;width:Wpx;
1154
- height:Hpx;..."`. For `video-overlay` zone (overlay recipe), the
1155
- card-host fills the full canvas — your CSS inside `.card .root`
1156
- decides where the actual visible card sits.
1157
-
1158
- #### HyperFrames Layout / Animation QA Rules
1159
-
1160
- - Build each card's static hero frame first: the moment where the card is fully visible and readable.
1161
- - Confirm video, cards, subtitles/captions, and diagrams do not unintentionally overlap.
1162
- - Confirm hidden video areas are clipped by the frame and not visible outside intended bounds.
1163
- - Register one paused master timeline as `window.__timelines["talking-head-recut"]`.
1164
- - Build timelines synchronously at page load; no `async`, `setTimeout`, Promises, or media `play()` calls.
1165
- - Do not use `Math.random()` or `Date.now()` in render paths.
1166
- - Do not use `repeat: -1`; calculate finite repeats from the video duration.
1167
- - Prefer GSAP transforms and opacity (`x`, `y`, `scale`, `rotation`, `opacity`) over layout properties (`top`, `left`, `width`, `height`) for motion.
1168
- - Animate wrappers such as `#video-wrap`, not the video element dimensions directly.
1169
- - Avoid animating the same property on the same element from multiple timelines at the same time.
1170
- - Use `data-track-index`, not `data-layer`; use `data-duration`, not `data-end`.
1171
- - Every timed element (`card-host`, sub-composition, etc.) should include `class="clip"` alongside its own classes — e.g. `class="card-host clip"`. Visibility itself is driven by `data-start` / `data-duration`: the runtime gates every `[data-start]` element to its window whether or not this class is present. `.clip` is the marker Studio and the GSAP clip-ownership rules read to recognise a clip, so leaving it off makes the element harder to edit and to lint (lint: `timed_element_missing_clip_class`, a warning).
1172
- - For body / global `font-family`, list **concrete font names** (`'Inter', 'Caveat', …`) — not a CSS variable like `var(--font-family)`. The HyperFrames font resolver doesn't expand CSS vars during static analysis (lint: `font_family_without_font_face`). Cards may still use `var(--font-family)` internally since their `@font-face` declarations are loaded.
1173
-
1174
- ### 10. Render to MP4
1175
-
1176
- ```bash
1177
- cd "$WORK_DIR"
1178
- PRODUCER_BROWSER_GPU_MODE=hardware npx hyperframes render public \
1179
- --skill=talking-head-recut \
1180
- -o output.mp4 \
1181
- --fps 30
1182
- ```
1183
-
1184
- `hyperframes render <dir>` reads `<dir>/index.html` and produces the MP4.
1185
- The canonical composition keeps the visual `<video>` muted and mounts the same
1186
- source as the root `#source-audio` track, so the rendered MP4 preserves the
1187
- talking-head audio without a manual remux. This uses a separate audio track
1188
- rather than `data-has-audio="true"` so its volume and ducking remain independently
1189
- controllable on the timeline.
1190
- The flag `PRODUCER_BROWSER_GPU_MODE=hardware` (or `--browser-gpu`) is
1191
- strongly recommended on macOS — software-only Chrome rendering times out
1192
- on most laptops.
1193
-
1194
- For a sanity check before the full render, capture a single frame at a
1195
- specific timestamp:
1196
-
1197
- ```bash
1198
- npx hyperframes snapshot public --at 5 # → public/snapshots/frame-00-at-5s.png (a single --at ignores --out)
1199
- ```
1200
-
1201
- ### 11. Report Results
1202
-
1203
- Tell the user:
1204
-
1205
- - Work directory path
1206
- - `storyboard.json` (the card outline you designed)
1207
- - `public/cards/*.html` (one HTML per card)
1208
- - `public/index.html` (the assembled composition)
1209
- - `output.mp4` (the final video)
1210
- - ASR provider used
1211
- - Card count + how you chose them (in 1 sentence)
1212
- - Any missing keys or quality caveats
1213
-
1214
- **Optional live preview (on request only).** The clip plays unchanged inside `public/index.html` with the overlays on top, so it previews faithfully. **Don't open it during the run.** When the user asks, start a long-lived server **after** render and report the URL:
1215
-
1216
- ```bash
1217
- (cd "$WORK_DIR/public" && npx hyperframes preview --background) # or `npx hyperframes play` for a shareable link
1218
- ```
1219
-
1220
- Do not delete the work directory unless the user asks.
10
+ For an existing project, preserve its files and dependencies. DSH plugin management owns this installed skill bundle. The upstream plugin launcher pins HyperFrames 0.8.207 and suppresses standalone skill installation; run it in the user's project directory. This entry preserves the previous DSH skill name while using the current workflow.