dsh-hyperframes 0.9.1 → 0.9.2

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 +7 -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 +60 -58
  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,219 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- import test from "node:test";
6
- import { fileURLToPath } from "node:url";
7
- import { brandFontFaces, buildFromSkin } from "./captions.mjs";
8
-
9
- const presetsDir = fileURLToPath(
10
- new URL("../../hyperframes-creative/frame-presets/", import.meta.url),
11
- );
12
- const skins = readdirSync(presetsDir, { withFileTypes: true })
13
- .filter((entry) => entry.isDirectory())
14
- .map((entry) => ({
15
- name: entry.name,
16
- source: readFileSync(
17
- new URL(
18
- `../../hyperframes-creative/frame-presets/${entry.name}/caption-skin.html`,
19
- import.meta.url,
20
- ),
21
- "utf8",
22
- ),
23
- }))
24
- .filter(({ source }) => source.includes(".caption-word.is-active"));
25
-
26
- for (const canvas of ["#f7f3e8", "#111827"]) {
27
- for (const skin of skins) {
28
- test(`${skin.name} preserves word-state rules on ${canvas}`, () => {
29
- const active = skin.source.match(/\.caption-word\.is-active\s*\{[^}]*\}/s)?.[0];
30
- const spoken = skin.source.match(/\.caption-word\.is-spoken\s*\{[^}]*\}/s)?.[0];
31
- assert.ok(active, "skin must define an active-word rule");
32
- assert.ok(spoken, "skin must define a spoken-word rule");
33
-
34
- const output = buildFromSkin(
35
- skin.source,
36
- [],
37
- 1,
38
- 1920,
39
- 1080,
40
- `:root { --cap-canvas: ${canvas}; --cap-ink: #111111; --cap-accent: #ffcc00; }`,
41
- (message) => {
42
- throw new Error(message);
43
- },
44
- );
45
-
46
- assert.ok(output.includes(active));
47
- assert.ok(output.includes(spoken));
48
- assert.equal(output.match(/\.caption-word\.is-active\s*\{/g)?.length, 1);
49
- assert.equal(output.match(/\.caption-word\.is-spoken\s*\{/g)?.length, 1);
50
- });
51
- }
52
- }
53
-
54
- // @font-face is document-global on purpose — the composition CSS scoper exempts it, and it
55
- // has to, since a face declaration cannot be scoped. That makes brandFontFaces the one part
56
- // of the captions sub-composition whose output reaches every sibling composition, so it has
57
- // to describe each face exactly: get an axis wrong and the whole document renders the brand
58
- // family wrong.
59
- function withFontProject(files, run) {
60
- const dir = mkdtempSync(join(tmpdir(), "hf-captions-fonts-"));
61
- try {
62
- mkdirSync(join(dir, "assets/fonts"), { recursive: true });
63
- for (const name of files) writeFileSync(join(dir, "assets/fonts", name), "");
64
- writeFileSync(
65
- join(dir, "frame.md"),
66
- 'typography:\n display: { fontFamily: "Newsreader", weight: 400 }\n body: { fontFamily: "Inter", weight: 400 }\n',
67
- );
68
- return run(join(dir, "frame.md"), dir);
69
- } finally {
70
- rmSync(dir, { recursive: true, force: true });
71
- }
72
- }
73
-
74
- test("an italic file is declared italic, and never squats the family's upright slot", () => {
75
- // Google Fonts' own Newsreader download. The italic sorts first, so before the style axis
76
- // existed it claimed the family's only 400 slot, the upright was dropped as a duplicate,
77
- // and the face shipped with no font-style — italicizing every sibling composition that
78
- // used Newsreader.
79
- const faces = withFontProject(
80
- ["Newsreader-Italic-VariableFont_opsz,wght.ttf", "Newsreader-VariableFont_opsz,wght.ttf"],
81
- brandFontFaces,
82
- );
83
- const lines = faces.split("\n").filter((line) => line.includes("Newsreader"));
84
- assert.equal(lines.length, 2, "both the upright and the italic file must be declared");
85
-
86
- const upright = lines.find((line) => line.includes("Newsreader-VariableFont"));
87
- const italic = lines.find((line) => line.includes("Newsreader-Italic-VariableFont"));
88
- assert.ok(upright, "the upright file must survive");
89
- assert.match(upright, /font-style: normal/);
90
- assert.ok(italic, "the italic file must survive");
91
- assert.match(italic, /font-style: italic/);
92
- });
93
-
94
- test("a numeric weight in the filename is read as the weight", () => {
95
- // Fontsource names every face numerically and carries no weight WORD, so word-only
96
- // parsing scored the whole family 400 and shipped exactly one of its four faces.
97
- const faces = withFontProject(
98
- [
99
- "inter-latin-400-normal.woff2",
100
- "inter-latin-500-normal.woff2",
101
- "inter-latin-600-italic.woff2",
102
- "inter-latin-700-normal.woff2",
103
- ],
104
- brandFontFaces,
105
- );
106
- const lines = faces.split("\n").filter((line) => line.includes("Inter"));
107
- assert.equal(lines.length, 4, "each face is a distinct weight/style pair");
108
- for (const [file, weight, style] of [
109
- ["inter-latin-400-normal", 400, "normal"],
110
- ["inter-latin-500-normal", 500, "normal"],
111
- ["inter-latin-600-italic", 600, "italic"],
112
- ["inter-latin-700-normal", 700, "normal"],
113
- ]) {
114
- const line = lines.find((candidate) => candidate.includes(file));
115
- assert.ok(line, `${file} must be declared`);
116
- assert.match(line, new RegExp(`font-weight: ${weight};`));
117
- assert.match(line, new RegExp(`font-style: ${style};`));
118
- }
119
- });
120
-
121
- test("word-named weights still parse when the filename carries no numeric axis", () => {
122
- const faces = withFontProject(
123
- ["Newsreader_Bold.woff2", "Newsreader_Regular.woff2"],
124
- brandFontFaces,
125
- );
126
- const lines = faces.split("\n").filter((line) => line.includes("Newsreader"));
127
- assert.equal(lines.length, 2);
128
- assert.match(
129
- lines.find((line) => line.includes("Bold")),
130
- /font-weight: 700; font-style: normal/,
131
- );
132
- assert.match(
133
- lines.find((line) => line.includes("Regular")),
134
- /font-weight: 400; font-style: normal/,
135
- );
136
- });
137
-
138
- // build-frame.mjs stages captured brand fonts under a REWRITTEN name, and brandFontFaces
139
- // derives the face's axes back out of that name. The two are a contract, and it is easy to
140
- // break silently from either side: build-frame used to drop the style token while renaming,
141
- // so an italic file arrived as "Newsreader-Regular.ttf" and was declared upright — leaving
142
- // the document-global normal slot pointing at italic bytes even once brandFontFaces learned
143
- // about styles. These two tests pin both ends of that contract.
144
- test("the names build-frame.mjs stages round-trip back to the right face", () => {
145
- const faces = withFontProject(
146
- [
147
- "Newsreader-Regular.ttf",
148
- "Newsreader-Regular-Italic.ttf",
149
- "Inter-400.woff2",
150
- "Inter-600-Italic.woff2",
151
- ],
152
- brandFontFaces,
153
- );
154
- for (const [file, weight, style] of [
155
- ["Newsreader-Regular.ttf", 400, "normal"],
156
- ["Newsreader-Regular-Italic.ttf", 400, "italic"],
157
- ["Inter-400.woff2", 400, "normal"],
158
- ["Inter-600-Italic.woff2", 600, "italic"],
159
- ]) {
160
- const line = faces.split("\n").find((candidate) => candidate.includes(`/${file}'`));
161
- assert.ok(line, `${file} must be declared`);
162
- assert.match(line, new RegExp(`font-weight: ${weight};`));
163
- assert.match(line, new RegExp(`font-style: ${style};`));
164
- }
165
- });
166
-
167
- test("a weight token buried in a longer run is not read as a weight", () => {
168
- // capture/assets/fonts commonly holds hash-named files, and a hash is not a weight.
169
- const faces = withFontProject(
170
- ["Newsreader-a1b200c3.woff2", "Inter-2100.woff2", "Inter900.woff2"],
171
- brandFontFaces,
172
- );
173
- const weightOf = (file) =>
174
- Number(/font-weight: (\d+);/.exec(faces.split("\n").find((l) => l.includes(file)))?.[1]);
175
-
176
- // "200" sits mid-run (…b200c3), so the word path decides: Regular.
177
- assert.equal(weightOf("Newsreader-a1b200c3.woff2"), 400);
178
- // 4-digit guard: "2100" must not read as 100.
179
- assert.equal(weightOf("Inter-2100.woff2"), 400);
180
- // ...but a trailing weight with no separator is still a weight.
181
- assert.equal(weightOf("Inter900.woff2"), 900);
182
- });
183
-
184
- // captions.mjs ships once per creation workflow because each skill installs standalone,
185
- // and the three copies are meant to be byte-identical. This PR alone had to land the same
186
- // two-axis fix in all three; a future one that lands in only one drifts silently.
187
- test("captions.mjs is byte-identical across the three workflows that ship it", () => {
188
- const [first, ...rest] = ["product-launch-video", "faceless-explainer", "pr-to-video"].map(
189
- (skill) => ({
190
- skill,
191
- source: readFileSync(new URL(`../../${skill}/scripts/captions.mjs`, import.meta.url), "utf8"),
192
- }),
193
- );
194
- for (const other of rest) {
195
- assert.equal(other.source, first.source, `${other.skill} drifted from ${first.skill}`);
196
- }
197
- });
198
-
199
- test("every build-frame.mjs copy stages the style axis it promises", () => {
200
- for (const skill of ["product-launch-video", "faceless-explainer", "pr-to-video"]) {
201
- const source = readFileSync(
202
- new URL(`../../${skill}/scripts/build-frame.mjs`, import.meta.url),
203
- "utf8",
204
- );
205
- // The staged filename must carry the style, or the italic and upright faces of one
206
- // weight collide on a single name and only whichever sorts first survives.
207
- assert.match(
208
- source,
209
- /const clean = `\$\{fam\.replace\(\/\[\^A-Za-z0-9\]\/g, ""\)\}-\$\{w\}\$\{style === "italic" \? "-Italic" : ""\}\./,
210
- `${skill}/build-frame.mjs must keep the style token in the staged name`,
211
- );
212
- // ...and the emitted descriptor must report the real style, not a hardcoded normal.
213
- assert.doesNotMatch(
214
- source,
215
- /font-weight:\$\{n\};font-style:normal/,
216
- `${skill}/build-frame.mjs must not assert font-style:normal over captured bytes`,
217
- );
218
- }
219
- });
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // Thin wrapper over the shared packet builder in hyperframes — this file only
4
- // pins the paths that are specific to this workflow skill. The logic (frame
5
- // splitting, rule citation, packet bounds, `_role.md` assembly) has one owner:
6
- // ../../hyperframes/scripts/lib/frame-packets-core.mjs
7
-
8
- import { dirname, resolve } from "node:path";
9
- import { fileURLToPath } from "node:url";
10
- import * as core from "./lib/frame-packets-core.mjs";
11
-
12
- const SKILL_DIR = resolve(dirname(fileURLToPath(import.meta.url)), "..");
13
- const CONFIG = {
14
- animationDir: resolve(SKILL_DIR, "../hyperframes-animation"),
15
- corePath: resolve(SKILL_DIR, "../hyperframes/references/frame-worker-core.md"),
16
- deltaPath: resolve(SKILL_DIR, "sub-agents/frame-worker.md"),
17
- };
18
-
19
- export function buildRolePayload({ outDir }) {
20
- return core.buildRolePayload({ ...CONFIG, outDir });
21
- }
22
-
23
- export function buildFramePackets(options) {
24
- return core.buildFramePackets({ ...CONFIG, ...options });
25
- }
26
-
27
- if (core.isMainModule(import.meta.url)) core.runCli({ buildFramePackets, buildRolePayload });
@@ -1,66 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { dirname, join } from "node:path";
5
- import test from "node:test";
6
-
7
- import { buildFramePackets } from "./frame-packets.mjs";
8
-
9
- function write(path, contents) {
10
- mkdirSync(dirname(path), { recursive: true });
11
- writeFileSync(path, contents);
12
- }
13
-
14
- test("packets inline the blueprint body and the Scene-cited rule recipes", () => {
15
- const project = mkdtempSync(join(tmpdir(), "fev-packets-"));
16
- write(join(project, "frame.md"), "# tokens\n");
17
- write(
18
- join(project, "STORYBOARD.md"),
19
- `---\nformat: 1920x1080\n---\n\n## Frame 1 — Hook\n\n- duration: 3s\n- src: compositions/frames/01-hook.html\n- blueprint: dataviz-countup\n- scene: hero stat punches in\n\nScene 1 (0.0–1.5s): the stat enters via spring-pop-entrance, then counting-dynamic-scale runs the tally.\n\n## Frame 2 — Freeform\n\n- duration: 4s\n- src: compositions/frames/02-freeform.html\n- blueprint: compose\n\nScene 1 (0.0–4.0s): a quiet hold, no named motion.\n`,
20
- );
21
-
22
- const result = buildFramePackets({ projectDir: project });
23
- assert.equal(result.length, 2);
24
-
25
- const hook = readFileSync(result[0].path, "utf8");
26
- assert.match(hook, /## Selected blueprint: dataviz-countup/);
27
- assert.match(hook, /## Selected motion rule: spring-pop-entrance/);
28
- assert.match(hook, /## Selected motion rule: counting-dynamic-scale/);
29
- assert.match(hook, /RULES_DIR: /);
30
-
31
- const freeform = readFileSync(result[1].path, "utf8");
32
- assert.doesNotMatch(freeform, /## Selected blueprint/);
33
- assert.doesNotMatch(freeform, /## Selected motion rule/);
34
- });
35
-
36
- test("_role.md is the core contract + this workflow's delta, verbatim", () => {
37
- const project = mkdtempSync(join(tmpdir(), "fev-role-"));
38
- write(join(project, "frame.md"), "# tokens\n");
39
- write(
40
- join(project, "STORYBOARD.md"),
41
- `---\nformat: 1920x1080\n---\n\n## Frame 1 — Hook\n\n- duration: 3s\n- src: compositions/frames/01-hook.html\n`,
42
- );
43
-
44
- buildFramePackets({ projectDir: project });
45
- const rolePath = join(project, ".hyperframes", "frame-packets", "_role.md");
46
- assert.ok(existsSync(rolePath));
47
- const role = readFileSync(rolePath, "utf8");
48
- assert.match(role, /# Frame worker — core contract/);
49
- assert.match(role, /# Frame worker — faceless-explainer delta/);
50
- });
51
-
52
- test("packet validation is atomic and leaves no partial output on overflow", () => {
53
- const project = mkdtempSync(join(tmpdir(), "fev-atomic-"));
54
- const outDir = join(project, ".hyperframes", "frame-packets");
55
- write(join(project, "frame.md"), "# tokens\n");
56
- write(
57
- join(project, "STORYBOARD.md"),
58
- `---\nformat: 1920x1080\n---\n\n## Frame 1 — Big\n\n- duration: 3s\n- src: compositions/frames/01-big.html\n\n${"padding line\n".repeat(300)}`,
59
- );
60
-
61
- assert.throws(
62
- () => buildFramePackets({ projectDir: project, outDir, maxPacketBytes: 2_000 }),
63
- /limit 2000/,
64
- );
65
- assert.equal(existsSync(outDir), false);
66
- });
@@ -1,56 +0,0 @@
1
- // assets.mjs — stage frame-named capture assets into assets/.
2
- // Shared by stage-assets.mjs (Step 4 close, BEFORE the frame workers run) and
3
- // assemble-index.mjs (Step 5, idempotent backstop). Only assets a frame names
4
- // in `asset_candidates` are staged; unnamed assets never reach the project.
5
- // asset_candidates value form: "assets/<basename> — desc; assets/… — …".
6
-
7
- import { copyFileSync, existsSync, mkdirSync } from "node:fs";
8
- import { basename, join } from "node:path";
9
-
10
- export function basenamesFromCandidates(value) {
11
- if (typeof value !== "string") return [];
12
- return value
13
- .split(";")
14
- .map((seg) => seg.split(/\s+[—–-]\s+/)[0].trim()) // strip the " — description"
15
- .filter(Boolean)
16
- .map((p) => basename(p.replace(/^assets\//, "")));
17
- }
18
-
19
- // Copy each frame's asset_candidates from capture/{assets,assets/videos,
20
- // assets/svgs, screenshots} into assets/. Already-staged files are left as is
21
- // (first-wins), so calling this twice is safe. Returns { staged, wanted, anomalies }.
22
- export function stageAssets({ hyperframesDir, frames }) {
23
- const wanted = new Set();
24
- for (const f of frames) {
25
- for (const b of basenamesFromCandidates(f.extra?.asset_candidates)) wanted.add(b);
26
- }
27
- const captureDirs = [
28
- join(hyperframesDir, "capture/assets"),
29
- join(hyperframesDir, "capture/assets/videos"), // videos download into a subdir
30
- join(hyperframesDir, "capture/assets/svgs"), // inline SVGs extract into a subdir
31
- join(hyperframesDir, "capture/screenshots"),
32
- ];
33
- const assetsDir = join(hyperframesDir, "assets");
34
- const anomalies = [];
35
- let staged = 0;
36
- if (wanted.size > 0) {
37
- mkdirSync(assetsDir, { recursive: true });
38
- for (const b of wanted) {
39
- const dest = join(assetsDir, b);
40
- if (existsSync(dest)) {
41
- staged++;
42
- continue;
43
- } // first-wins / already staged
44
- const src = captureDirs.map((d) => join(d, b)).find((p) => existsSync(p));
45
- if (src) {
46
- copyFileSync(src, dest);
47
- staged++;
48
- } else {
49
- anomalies.push(
50
- `asset "${b}" named by a frame but not found under capture/ — frame will 404 it`,
51
- );
52
- }
53
- }
54
- }
55
- return { staged, wanted, anomalies };
56
- }
@@ -1,4 +0,0 @@
1
- // Music sits under narration; a silent film brings music forward.
2
- export const BGM_BED_VOLUME = 0.12;
3
- export const BGM_SILENT_VOLUME = 0.9;
4
- export const bgmDefaultVolume = (hasVoice) => (hasVoice ? BGM_BED_VOLUME : BGM_SILENT_VOLUME);
@@ -1,58 +0,0 @@
1
- import { copyFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
-
4
- // Capture preserves subset and variable-axis descriptors in extracted/page.html.
5
- // Filenames alone cannot identify a face's character coverage.
6
- export function stageCapturedFonts(projectDir, families) {
7
- const page = join(projectDir, "capture/extracted/page.html");
8
- const result = { faces: [], families: new Set(), files: new Set() };
9
- if (!existsSync(page)) return result;
10
- const wanted = new Set(families.map((family) => family.toLowerCase()));
11
- const html = readFileSync(page, "utf8");
12
- const copied = new Set();
13
- for (const style of html.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style\s*>/gi)) {
14
- const css = style[1].replace(/\/\*[\s\S]*?\*\//g, "");
15
- for (const match of css.matchAll(/@font-face\s*\{([^}]+)\}/gi)) {
16
- const body = match[1];
17
- const familyValue = /(?:^|;)\s*font-family\s*:\s*([^;]+)/i.exec(body)?.[1]?.trim();
18
- if (!familyValue) continue;
19
- const family = familyValue.replace(/^(['"])(.*)\1$/, "$2");
20
- if (!wanted.has(family.toLowerCase())) continue;
21
- result.families.add(family.toLowerCase());
22
- const source = /(?:^|;)\s*src\s*:\s*([^;]+)/i.exec(body);
23
- if (!source) continue;
24
- const sources = localFontSources(source[1], projectDir);
25
- if (!sources.length) {
26
- console.warn("Captured font has no downloaded source: " + family);
27
- continue;
28
- }
29
- for (const file of sources) {
30
- if (copied.has(file.name)) continue;
31
- if (!copied.size) mkdirSync(join(projectDir, "assets/fonts"), { recursive: true });
32
- copyFileSync(file.source, join(projectDir, file.target));
33
- copied.add(file.name);
34
- result.files.add(file.target);
35
- }
36
- const src = sources.map((file) => file.css).join(", ");
37
- const rule = "@font-face{" + body.replace(source[1], src) + "}";
38
- if (!result.faces.includes(rule)) result.faces.push(rule);
39
- }
40
- }
41
- return result;
42
- }
43
-
44
- function localFontSources(source, projectDir) {
45
- const files = [];
46
- for (const match of source.matchAll(
47
- /url\(\s*(?:"([^"]+)"|'([^']+)'|([^\s)]+))\s*\)(\s*format\([^)]*\))?/gi,
48
- )) {
49
- const url = match[1] ?? match[2] ?? match[3];
50
- const name = /^assets\/fonts\/([a-z0-9_.-]+\.(?:woff2?|ttf|otf))$/i.exec(url)?.[1];
51
- if (!name) continue;
52
- const path = join(projectDir, "capture/assets/fonts", name);
53
- if (!existsSync(path)) continue;
54
- const target = "assets/fonts/captured-" + name;
55
- files.push({ name, source: path, target, css: 'url("' + target + '")' + (match[4] ?? "") });
56
- }
57
- return files;
58
- }
@@ -1,45 +0,0 @@
1
- // dimensions.mjs — canvas size + caption-band geometry for the video
2
- // pipeline. Single source of truth = the STORYBOARD frontmatter `format` global
3
- // ("1920x1080" / "1080x1920" / "1080x1080", or a named orientation). Every
4
- // script and the index assembler reads the size from here; none hardcodes it.
5
-
6
- // Named orientation presets. Square/portrait are 1080-based so they share the
7
- // long-edge pixel budget with landscape (same render-cost ballpark).
8
- export const ORIENTATION_PRESETS = {
9
- landscape: { width: 1920, height: 1080 }, // 16:9 — default
10
- portrait: { width: 1080, height: 1920 }, // 9:16 — reels / shorts / TikTok
11
- square: { width: 1080, height: 1080 }, // 1:1 — feed
12
- };
13
-
14
- export const DEFAULT_DIMENSIONS = ORIENTATION_PRESETS.landscape;
15
-
16
- function sane(w, h) {
17
- return Number.isFinite(w) && Number.isFinite(h) && w >= 240 && h >= 240 && w <= 8192 && h <= 8192;
18
- }
19
-
20
- // Parse a STORYBOARD `format` global into { width, height, source }. Accepts
21
- // "WxH" (e.g. "1920x1080"; `x` or `×`, any inner spacing) or a named orientation;
22
- // falls back to landscape so a storyboard with a missing/garbled format still
23
- // renders (no behavior change vs the old landscape lock).
24
- export function parseFormat(format) {
25
- const s = typeof format === "string" ? format.trim().toLowerCase() : "";
26
- if (ORIENTATION_PRESETS[s]) return { ...ORIENTATION_PRESETS[s], source: `orientation=${s}` };
27
- const m = s.match(/^(\d+)\s*[x×]\s*(\d+)$/);
28
- if (m) {
29
- const w = parseInt(m[1] ?? "", 10);
30
- const h = parseInt(m[2] ?? "", 10);
31
- if (sane(w, h)) return { width: w, height: h, source: "format" };
32
- }
33
- return { ...DEFAULT_DIMENSIONS, source: "default(landscape)" };
34
- }
35
-
36
- // Caption band geometry, derived from canvas height: the bottom ~16.67% (180px
37
- // at h=1080). Frame content must end `safetyPx` above the band top. Holds even
38
- // when captions are disabled (bottom-edge consistency).
39
- export const CAPTION_BAND_FRACTION = 0.1667;
40
- export function captionBand(height, safetyPx = 20) {
41
- const h = Number.isFinite(height) ? height : DEFAULT_DIMENSIONS.height;
42
- const bandHeight = Math.round(h * CAPTION_BAND_FRACTION);
43
- const bandTopY = h - bandHeight; // foreground must end at/above this y
44
- return { bandHeight, bandTopY, foregroundMaxY: bandTopY - safetyPx };
45
- }
@@ -1,194 +0,0 @@
1
- // Frame packets inline the storyboard frame, blueprint and cited recipes.
2
- // Workflow wrappers supply resource paths and workflow-specific sections.
3
- // The role combines the shared worker contract with the workflow delta.
4
-
5
- import {
6
- existsSync,
7
- mkdirSync,
8
- readFileSync,
9
- readdirSync,
10
- realpathSync,
11
- writeFileSync,
12
- } from "node:fs";
13
- import { basename, join, resolve } from "node:path";
14
- import { pathToFileURL } from "node:url";
15
-
16
- export function field(block, name) {
17
- const match = block.match(new RegExp(`^-\\s+${name}:\\s*(.+)$`, "im"));
18
- return match?.[1]?.trim() ?? null;
19
- }
20
-
21
- export function splitFrames(storyboard) {
22
- const matches = [...storyboard.matchAll(/^## Frame\s+([^\n]+)$/gm)];
23
- return matches.map((match, index) => {
24
- const start = match.index;
25
- const end = matches[index + 1]?.index ?? storyboard.length;
26
- return {
27
- heading: match[1].trim(),
28
- block: storyboard.slice(start, end).trim(),
29
- };
30
- });
31
- }
32
-
33
- export function frameId(frame) {
34
- const src = field(frame.block, "src");
35
- if (!src) throw new Error(`${frame.heading}: missing src`);
36
- return basename(src).replace(/\.html?$/i, "");
37
- }
38
-
39
- export function selectedFile(path, heading) {
40
- if (!path || !existsSync(path)) return "";
41
- return `\n## ${heading}\n\n${readFileSync(path, "utf8").trim()}\n`;
42
- }
43
-
44
- function escapeRegExp(id) {
45
- return id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
46
- }
47
-
48
- export function knownRuleIds(animationDir) {
49
- const rulesDir = join(animationDir, "rules");
50
- if (!existsSync(rulesDir)) {
51
- console.warn(
52
- `frame-packets: no rules dir at ${rulesDir} — packets will inline no motion recipes`,
53
- );
54
- return [];
55
- }
56
- return readdirSync(rulesDir)
57
- .filter((name) => name.endsWith(".md"))
58
- .map((name) => name.replace(/\.md$/, ""));
59
- }
60
-
61
- export function citedRules(block, ruleIds) {
62
- const explicit = (field(block, "rules") ?? "")
63
- .split(/[,\s]+/)
64
- .map((rule) => rule.trim())
65
- .filter(Boolean);
66
- const mentioned = ruleIds.filter((id) =>
67
- new RegExp(`(?<![\\w-])${escapeRegExp(id)}(?![\\w-])`, "i").test(block),
68
- );
69
- return [...new Set([...explicit, ...mentioned])].filter((id) => ruleIds.includes(id));
70
- }
71
-
72
- // visual-design.md tells the author to write the blueprint as `<id> (Reproduce)`
73
- // or `<id> (Adapt)` — the qualifier is direction for the frame worker, not part of
74
- // the filename. Parse the field into the id it names (or null for `compose`), so
75
- // no caller ever resolves a raw field value against the blueprints directory.
76
- export function blueprintId(block) {
77
- const raw = field(block, "blueprint");
78
- if (!raw) return null;
79
- const id = raw.replace(/\s*\([^)]*\)\s*$/, "").trim();
80
- return id && id.toLowerCase() !== "compose" ? id : null;
81
- }
82
-
83
- export function resourceSections(block, { animationDir, ruleIds, frameId }) {
84
- let sections = "";
85
- const blueprint = blueprintId(block);
86
- if (blueprint) {
87
- const blueprintsDir = join(animationDir, "blueprints");
88
- const path = join(blueprintsDir, `${blueprint}.md`);
89
- // An installed library must contain the named blueprint.
90
- // An absent on-demand library warns, like missing motion rules.
91
- if (!existsSync(blueprintsDir)) {
92
- console.warn(
93
- `frame-packets: no blueprints dir at ${blueprintsDir} — packets will inline no blueprint`,
94
- );
95
- } else if (!existsSync(path)) {
96
- throw new Error(`${frameId ?? "frame"}: blueprint "${blueprint}" has no file at ${path}`);
97
- } else {
98
- sections += selectedFile(path, `Selected blueprint: ${blueprint}`);
99
- }
100
- }
101
- for (const rule of citedRules(block, ruleIds)) {
102
- sections += selectedFile(
103
- join(animationDir, "rules", `${rule}.md`),
104
- `Selected motion rule: ${rule}`,
105
- );
106
- }
107
- return sections;
108
- }
109
-
110
- export function buildRolePayload({ corePath, deltaPath, outDir }) {
111
- const core = readFileSync(corePath, "utf8").trim();
112
- const delta = readFileSync(deltaPath, "utf8").trim();
113
- const role = `${core}\n\n---\n\n${delta}\n`;
114
- mkdirSync(outDir, { recursive: true });
115
- const path = join(outDir, "_role.md");
116
- writeFileSync(path, role);
117
- return { path, bytes: Buffer.byteLength(role) };
118
- }
119
-
120
- export function buildFramePackets({
121
- projectDir,
122
- storyboardPath = join(projectDir, "STORYBOARD.md"),
123
- outDir = join(projectDir, ".hyperframes", "frame-packets"),
124
- maxPacketBytes = 48_000,
125
- animationDir,
126
- corePath,
127
- deltaPath,
128
- // Per-workflow hooks (all optional):
129
- // designTruthLine(projectDir) -> the packet's design-truth input line
130
- // validateFrame(frame, id) -> throw to reject a frame before packing
131
- // extraSections(block) -> extra packet sections appended after the rule recipes
132
- designTruthLine = (dir) => `- Design tokens: ${join(resolve(dir), "frame.md")}`,
133
- validateFrame,
134
- extraSections,
135
- }) {
136
- const storyboard = readFileSync(storyboardPath, "utf8");
137
- const frames = splitFrames(storyboard);
138
- if (frames.length === 0) throw new Error("STORYBOARD.md has no frame blocks");
139
- const ruleIds = knownRuleIds(animationDir);
140
-
141
- const packets = frames.map((frame) => {
142
- const id = frameId(frame);
143
- if (validateFrame) validateFrame(frame, id);
144
- const packet = `# Frame packet: ${id}\n\n## Project inputs\n\n- Project: ${resolve(projectDir)}\n${designTruthLine(projectDir)}\n- RULES_DIR: ${join(animationDir, "rules")}\n\n## Assigned storyboard block\n\n${frame.block}\n${resourceSections(frame.block, { animationDir, ruleIds, frameId: id })}${extraSections ? extraSections(frame.block) : ""}`;
145
- const bytes = Buffer.byteLength(packet);
146
- if (bytes > maxPacketBytes) {
147
- throw new Error(`${id}: frame packet is ${bytes} bytes (limit ${maxPacketBytes})`);
148
- }
149
- return { frameId: id, path: join(outDir, `${id}.md`), bytes, packet };
150
- });
151
-
152
- mkdirSync(outDir, { recursive: true });
153
- for (const { path, packet } of packets) writeFileSync(path, packet);
154
- buildRolePayload({ corePath, deltaPath, outDir });
155
- return packets.map(({ packet: _packet, ...result }) => result);
156
- }
157
-
158
- export function flag(argv, name, fallback) {
159
- const index = argv.indexOf(`--${name}`);
160
- return index >= 0 && argv[index + 1] ? argv[index + 1] : fallback;
161
- }
162
-
163
- // realpath both sides: on macOS /tmp → /private/tmp, and node resolves the main
164
- // module's symlinks in import.meta.url while argv[1] keeps the invoked spelling —
165
- // a raw compare silently skips main() when invoked through any symlinked path.
166
- export function isMainModule(importMetaUrl) {
167
- if (!process.argv[1]) return false;
168
- try {
169
- return pathToFileURL(realpathSync(process.argv[1])).href === importMetaUrl;
170
- } catch {
171
- return false;
172
- }
173
- }
174
-
175
- export function runCli({ buildFramePackets: build, buildRolePayload: buildRole }) {
176
- const argv = process.argv.slice(2);
177
- const projectDir = resolve(flag(argv, "project", "."));
178
- const outDir = resolve(flag(argv, "out-dir", join(projectDir, ".hyperframes", "frame-packets")));
179
- try {
180
- const packets = build({
181
- projectDir,
182
- storyboardPath: resolve(flag(argv, "storyboard", join(projectDir, "STORYBOARD.md"))),
183
- outDir,
184
- });
185
- const role = buildRole({ outDir });
186
- console.log(`✓ frame packets: ${packets.length} bounded packet(s)`);
187
- for (const packet of packets)
188
- console.log(` ${packet.frameId}: ${packet.bytes} bytes → ${packet.path}`);
189
- console.log(` worker role: ${role.bytes} bytes → ${role.path}`);
190
- } catch (error) {
191
- console.error(`✗ frame packets: ${error.message}`);
192
- process.exit(1);
193
- }
194
- }