dsh-hyperframes 0.2.0 → 0.3.1

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 (917) hide show
  1. package/README.en.md +52 -6
  2. package/README.md +51 -7
  3. package/lib/index.d.ts +8 -41
  4. package/lib/index.js +38 -99
  5. package/lib/skill-bundle.d.ts +56 -0
  6. package/lib/skill-bundle.js +218 -0
  7. package/package.json +1 -1
  8. package/skills/embedded-captions/CATALOG.md +91 -0
  9. package/skills/embedded-captions/SKILL.md +258 -0
  10. package/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
  11. package/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
  12. package/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
  13. package/skills/embedded-captions/dna/README.md +148 -0
  14. package/skills/embedded-captions/dna/chrome.json +68 -0
  15. package/skills/embedded-captions/dna/cream.json +69 -0
  16. package/skills/embedded-captions/dna/documentary.json +62 -0
  17. package/skills/embedded-captions/dna/editorial.json +70 -0
  18. package/skills/embedded-captions/dna/glitch.json +82 -0
  19. package/skills/embedded-captions/dna/ink.json +65 -0
  20. package/skills/embedded-captions/dna/keynote.json +62 -0
  21. package/skills/embedded-captions/dna/loud.json +75 -0
  22. package/skills/embedded-captions/dna/neon.json +58 -0
  23. package/skills/embedded-captions/dna/velocity.json +89 -0
  24. package/skills/embedded-captions/modes/cinematic/README.md +48 -0
  25. package/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
  26. package/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
  27. package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
  28. package/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
  29. package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
  30. package/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
  31. package/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
  32. package/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
  33. package/skills/embedded-captions/modes/cinematic/engine.html +355 -0
  34. package/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
  35. package/skills/embedded-captions/modes/standard/_motion.md +192 -0
  36. package/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
  37. package/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 +0 -0
  38. package/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 +0 -0
  39. package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 +0 -0
  40. package/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 +0 -0
  41. package/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 +0 -0
  42. package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 +0 -0
  43. package/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 +0 -0
  44. package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 +0 -0
  45. package/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 +0 -0
  46. package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 +0 -0
  47. package/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 +0 -0
  48. package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 +0 -0
  49. package/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 +0 -0
  50. package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 +0 -0
  51. package/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 +0 -0
  52. package/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 +0 -0
  53. package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 +0 -0
  54. package/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 +0 -0
  55. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 +0 -0
  56. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 +0 -0
  57. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 +0 -0
  58. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 +0 -0
  59. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 +0 -0
  60. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 +0 -0
  61. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 +0 -0
  62. package/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 +0 -0
  63. package/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 +0 -0
  64. package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 +0 -0
  65. package/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 +0 -0
  66. package/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 +0 -0
  67. package/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 +0 -0
  68. package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 +0 -0
  69. package/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 +0 -0
  70. package/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 +0 -0
  71. package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 +0 -0
  72. package/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 +0 -0
  73. package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 +0 -0
  74. package/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 +0 -0
  75. package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 +0 -0
  76. package/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 +0 -0
  77. package/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 +0 -0
  78. package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 +0 -0
  79. package/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 +0 -0
  80. package/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 +0 -0
  81. package/skills/embedded-captions/modes/standard/fonts/fonts.css +401 -0
  82. package/skills/embedded-captions/references/aesthetic-principles.md +168 -0
  83. package/skills/embedded-captions/references/anti-patterns.md +188 -0
  84. package/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
  85. package/skills/embedded-captions/references/caption-grouping.md +130 -0
  86. package/skills/embedded-captions/references/composition-craft.md +522 -0
  87. package/skills/embedded-captions/references/direction-catalog.md +138 -0
  88. package/skills/embedded-captions/references/example-renders/champion.html +371 -0
  89. package/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
  90. package/skills/embedded-captions/references/failure-modes.md +145 -0
  91. package/skills/embedded-captions/references/layout-heuristics.md +238 -0
  92. package/skills/embedded-captions/references/motion-vocabulary.md +148 -0
  93. package/skills/embedded-captions/references/rail.md +68 -0
  94. package/skills/embedded-captions/references/reference-bar.md +47 -0
  95. package/skills/embedded-captions/references/scene-types.md +94 -0
  96. package/skills/embedded-captions/references/typographic-moves.md +266 -0
  97. package/skills/embedded-captions/references/typography-presets.md +63 -0
  98. package/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
  99. package/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
  100. package/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
  101. package/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
  102. package/skills/embedded-captions/scripts/check-timing.cjs +173 -0
  103. package/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
  104. package/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
  105. package/skills/embedded-captions/scripts/gen-stroke-path.py +57 -0
  106. package/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
  107. package/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
  108. package/skills/embedded-captions/scripts/make-cinematic.cjs +1206 -0
  109. package/skills/embedded-captions/scripts/make-composition.cjs +405 -0
  110. package/skills/embedded-captions/scripts/make-theme.cjs +8585 -0
  111. package/skills/embedded-captions/scripts/matte.cjs +280 -0
  112. package/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
  113. package/skills/embedded-captions/scripts/prepare.sh +39 -0
  114. package/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
  115. package/skills/embedded-captions/scripts/render-and-composite.sh +469 -0
  116. package/skills/embedded-captions/scripts/render-theme.sh +34 -0
  117. package/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
  118. package/skills/embedded-captions/scripts/transcribe.cjs +332 -0
  119. package/skills/embedded-captions/themes/README.md +243 -0
  120. package/skills/embedded-captions/themes/anchor.json +27 -0
  121. package/skills/embedded-captions/themes/arcade.json +51 -0
  122. package/skills/embedded-captions/themes/aurora.json +41 -0
  123. package/skills/embedded-captions/themes/biolume.json +35 -0
  124. package/skills/embedded-captions/themes/brush.json +74 -0
  125. package/skills/embedded-captions/themes/chalkboard.json +52 -0
  126. package/skills/embedded-captions/themes/dossier.json +56 -0
  127. package/skills/embedded-captions/themes/graffiti.json +62 -0
  128. package/skills/embedded-captions/themes/hologram.json +41 -0
  129. package/skills/embedded-captions/themes/inkwater.json +43 -0
  130. package/skills/embedded-captions/themes/laser.json +46 -0
  131. package/skills/embedded-captions/themes/lastpage.json +33 -0
  132. package/skills/embedded-captions/themes/neonsign.json +53 -0
  133. package/skills/embedded-captions/themes/ordnance.json +54 -0
  134. package/skills/embedded-captions/themes/papercut.json +37 -0
  135. package/skills/embedded-captions/themes/popup.json +46 -0
  136. package/skills/embedded-captions/themes/ransom.json +62 -0
  137. package/skills/embedded-captions/themes/scoreboard.json +54 -0
  138. package/skills/embedded-captions/themes/spectrum.json +46 -0
  139. package/skills/embedded-captions/themes/stardust.json +29 -0
  140. package/skills/embedded-captions/themes/stomp.json +43 -0
  141. package/skills/embedded-captions/themes/terminal.json +49 -0
  142. package/skills/embedded-captions/themes/thunder.json +44 -0
  143. package/skills/embedded-captions/themes/transit.json +44 -0
  144. package/skills/embedded-captions/themes/vhs.json +47 -0
  145. package/skills/faceless-explainer/SKILL.md +233 -0
  146. package/skills/faceless-explainer/references/cut-catalog.md +215 -0
  147. package/skills/faceless-explainer/references/motion-language.md +156 -0
  148. package/skills/faceless-explainer/references/story-design.md +255 -0
  149. package/skills/faceless-explainer/references/visual-design.md +146 -0
  150. package/skills/faceless-explainer/scripts/assemble-index.mjs +623 -0
  151. package/skills/faceless-explainer/scripts/assemble-index.test.mjs +72 -0
  152. package/skills/faceless-explainer/scripts/audio.mjs +291 -0
  153. package/skills/faceless-explainer/scripts/audio.test.mjs +176 -0
  154. package/skills/faceless-explainer/scripts/build-frame.mjs +551 -0
  155. package/skills/faceless-explainer/scripts/captions.mjs +521 -0
  156. package/skills/faceless-explainer/scripts/captions.test.mjs +219 -0
  157. package/skills/faceless-explainer/scripts/frame-packets.mjs +27 -0
  158. package/skills/faceless-explainer/scripts/frame-packets.test.mjs +66 -0
  159. package/skills/faceless-explainer/scripts/lib/assets.mjs +56 -0
  160. package/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
  161. package/skills/faceless-explainer/scripts/lib/pad-frame-duration.mjs +36 -0
  162. package/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
  163. package/skills/faceless-explainer/scripts/lib/tokens.mjs +211 -0
  164. package/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
  165. package/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
  166. package/skills/faceless-explainer/scripts/transitions.mjs +383 -0
  167. package/skills/faceless-explainer/scripts/transitions.test.mjs +68 -0
  168. package/skills/faceless-explainer/sub-agents/frame-worker.md +12 -0
  169. package/skills/figma/SKILL.md +132 -0
  170. package/skills/figma/scripts/verify-motion.mjs +153 -0
  171. package/skills/general-video/SKILL.md +165 -0
  172. package/skills/general-video/scripts/frame-packets.mjs +38 -0
  173. package/skills/general-video/scripts/frame-packets.test.mjs +80 -0
  174. package/skills/general-video/sub-agents/frame-worker.md +34 -0
  175. package/skills/hyperframes/SKILL.md +98 -337
  176. package/skills/hyperframes/references/capability-menu.md +47 -0
  177. package/skills/hyperframes/references/intent-interview.md +71 -0
  178. package/skills/hyperframes/references/pitch-round.md +40 -0
  179. package/skills/hyperframes/references/route-briefs.md +11 -0
  180. package/skills/hyperframes/references/routes/embedded-captions.md +11 -0
  181. package/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
  182. package/skills/hyperframes/references/routes/general-video.md +12 -0
  183. package/skills/hyperframes/references/routes/motion-graphics.md +11 -0
  184. package/skills/hyperframes/references/routes/music-to-video.md +12 -0
  185. package/skills/hyperframes/references/routes/pr-to-video.md +28 -0
  186. package/skills/hyperframes/references/routes/product-launch-video.md +13 -0
  187. package/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
  188. package/skills/hyperframes/references/routes/slideshow.md +11 -0
  189. package/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
  190. package/skills/hyperframes/references/skill-lifecycle.md +33 -0
  191. package/skills/hyperframes/references/workflow-catalog.md +10 -0
  192. package/skills/hyperframes-animation/SKILL.md +84 -0
  193. package/skills/hyperframes-animation/adapters/animate-text.md +64 -0
  194. package/skills/hyperframes-animation/adapters/animejs.md +130 -0
  195. package/skills/hyperframes-animation/adapters/css-animations.md +143 -0
  196. package/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +199 -0
  197. package/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
  198. package/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +129 -0
  199. package/skills/hyperframes-animation/adapters/gsap.md +105 -0
  200. package/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
  201. package/skills/hyperframes-animation/adapters/lottie.md +117 -0
  202. package/skills/hyperframes-animation/adapters/three.md +131 -0
  203. package/skills/hyperframes-animation/adapters/typegpu.md +182 -0
  204. package/skills/hyperframes-animation/adapters/waapi.md +101 -0
  205. package/skills/hyperframes-animation/blueprints/agent-progress-theater.md +76 -0
  206. package/skills/hyperframes-animation/blueprints/camera-journey.md +61 -0
  207. package/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
  208. package/skills/hyperframes-animation/blueprints/constellation-hub.md +63 -0
  209. package/skills/hyperframes-animation/blueprints/cta-morph-press.md +63 -0
  210. package/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +89 -0
  211. package/skills/hyperframes-animation/blueprints/dataviz-countup.md +59 -0
  212. package/skills/hyperframes-animation/blueprints/device-surface-showcase.md +68 -0
  213. package/skills/hyperframes-animation/blueprints/fixed-anchor-cycle.md +46 -0
  214. package/skills/hyperframes-animation/blueprints/grid-card-assemble.md +81 -0
  215. package/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +133 -0
  216. package/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +121 -0
  217. package/skills/hyperframes-animation/blueprints/overwhelm-surround.md +58 -0
  218. package/skills/hyperframes-animation/blueprints/panel-edit-live-sync.md +73 -0
  219. package/skills/hyperframes-animation/blueprints/prompt-type-submit-generate.md +85 -0
  220. package/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
  221. package/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
  222. package/skills/hyperframes-animation/blueprints/titlecard-reveal.md +80 -0
  223. package/skills/hyperframes-animation/blueprints/transcript-scroll-artifact-reveal.md +45 -0
  224. package/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
  225. package/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
  226. package/skills/hyperframes-animation/blueprints/zoom-out-workspace-reveal.md +68 -0
  227. package/skills/hyperframes-animation/blueprints-index.md +202 -0
  228. package/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
  229. package/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
  230. package/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
  231. package/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
  232. package/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
  233. package/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
  234. package/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
  235. package/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
  236. package/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
  237. package/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
  238. package/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
  239. package/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
  240. package/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
  241. package/skills/hyperframes-animation/rules/3d-camera-flight.md +180 -0
  242. package/skills/hyperframes-animation/rules/3d-page-scroll.md +135 -0
  243. package/skills/hyperframes-animation/rules/3d-text-depth-layers.md +128 -0
  244. package/skills/hyperframes-animation/rules/ai-tracking-box.md +139 -0
  245. package/skills/hyperframes-animation/rules/ambient-glow-bloom.md +133 -0
  246. package/skills/hyperframes-animation/rules/anchored-layout-expand.md +148 -0
  247. package/skills/hyperframes-animation/rules/asr-keyword-glow.md +128 -0
  248. package/skills/hyperframes-animation/rules/avatar-cloud-network.md +145 -0
  249. package/skills/hyperframes-animation/rules/camera-cursor-tracking.md +133 -0
  250. package/skills/hyperframes-animation/rules/card-morph-anchor.md +134 -0
  251. package/skills/hyperframes-animation/rules/center-outward-expansion.md +88 -0
  252. package/skills/hyperframes-animation/rules/chart-scrub-readout.md +151 -0
  253. package/skills/hyperframes-animation/rules/chromatic-glitch.md +150 -0
  254. package/skills/hyperframes-animation/rules/context-sensitive-cursor.md +140 -0
  255. package/skills/hyperframes-animation/rules/control-target-sync.md +131 -0
  256. package/skills/hyperframes-animation/rules/coordinate-target-zoom.md +138 -0
  257. package/skills/hyperframes-animation/rules/counting-dynamic-scale.md +115 -0
  258. package/skills/hyperframes-animation/rules/css-marker-patterns.md +208 -0
  259. package/skills/hyperframes-animation/rules/cursor-click-ripple.md +104 -0
  260. package/skills/hyperframes-animation/rules/cursor-drag.md +141 -0
  261. package/skills/hyperframes-animation/rules/depth-of-field-blur.md +112 -0
  262. package/skills/hyperframes-animation/rules/depth-scatter-assemble.md +139 -0
  263. package/skills/hyperframes-animation/rules/discrete-text-sequence.md +146 -0
  264. package/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +149 -0
  265. package/skills/hyperframes-animation/rules/gradient-text-sweep.md +136 -0
  266. package/skills/hyperframes-animation/rules/gsap-effects.md +196 -0
  267. package/skills/hyperframes-animation/rules/hacker-flip-3d.md +123 -0
  268. package/skills/hyperframes-animation/rules/kinetic-beat-slam.md +137 -0
  269. package/skills/hyperframes-animation/rules/motion-blur-streak.md +130 -0
  270. package/skills/hyperframes-animation/rules/multi-cursor-choreography.md +133 -0
  271. package/skills/hyperframes-animation/rules/multi-phase-camera.md +129 -0
  272. package/skills/hyperframes-animation/rules/nudge-curve.md +47 -0
  273. package/skills/hyperframes-animation/rules/orbit-3d-entry.md +148 -0
  274. package/skills/hyperframes-animation/rules/particle-burst.md +149 -0
  275. package/skills/hyperframes-animation/rules/physics-press-reaction.md +101 -0
  276. package/skills/hyperframes-animation/rules/press-release-spring.md +108 -0
  277. package/skills/hyperframes-animation/rules/reactive-displacement.md +92 -0
  278. package/skills/hyperframes-animation/rules/scale-swap-transition.md +88 -0
  279. package/skills/hyperframes-animation/rules/sine-wave-loop.md +85 -0
  280. package/skills/hyperframes-animation/rules/split-tilt-cards.md +123 -0
  281. package/skills/hyperframes-animation/rules/spring-pop-entrance.md +107 -0
  282. package/skills/hyperframes-animation/rules/stat-bars-and-fills.md +145 -0
  283. package/skills/hyperframes-animation/rules/svg-icon-enrichment.md +141 -0
  284. package/skills/hyperframes-animation/rules/svg-path-draw.md +122 -0
  285. package/skills/hyperframes-animation/rules/theme-crossfade-morph.md +126 -0
  286. package/skills/hyperframes-animation/rules/vertical-spring-ticker.md +104 -0
  287. package/skills/hyperframes-animation/rules/viewport-change.md +148 -0
  288. package/skills/hyperframes-animation/rules/waterfall-entry.md +81 -0
  289. package/skills/hyperframes-animation/rules-index.md +113 -0
  290. package/skills/hyperframes-animation/scripts/animation-map-sampling.mjs +40 -0
  291. package/skills/hyperframes-animation/scripts/animation-map-sampling.test.mjs +48 -0
  292. package/skills/{hyperframes → hyperframes-animation}/scripts/animation-map.mjs +116 -53
  293. package/skills/hyperframes-animation/scripts/animation-map.test.mjs +444 -0
  294. package/skills/hyperframes-animation/scripts/package-loader.mjs +384 -0
  295. package/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
  296. package/skills/{website-to-hyperframes/references → hyperframes-animation}/techniques.md +146 -26
  297. package/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +168 -0
  298. package/skills/{hyperframes/references → hyperframes-animation}/transitions/catalog.md +26 -16
  299. package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-destruction.md +1 -1
  300. package/skills/{hyperframes/references/transitions.md → hyperframes-animation/transitions/overview.md} +44 -3
  301. package/skills/hyperframes-audio/SKILL.md +470 -0
  302. package/skills/hyperframes-audio/references/attributes.md +138 -0
  303. package/skills/hyperframes-audio/references/diagnosis.md +276 -0
  304. package/skills/hyperframes-audio/references/fx-registry.md +84 -0
  305. package/skills/hyperframes-audio/references/presets.md +216 -0
  306. package/skills/hyperframes-audio/scripts/carve.mjs +569 -0
  307. package/skills/hyperframes-audio/scripts/carve.test.mjs +239 -0
  308. package/skills/hyperframes-cli/SKILL.md +121 -103
  309. package/skills/hyperframes-cli/references/beats.md +19 -0
  310. package/skills/hyperframes-cli/references/cloud.md +163 -0
  311. package/skills/hyperframes-cli/references/cloudrun.md +62 -0
  312. package/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
  313. package/skills/hyperframes-cli/references/doctor-browser.md +57 -0
  314. package/skills/hyperframes-cli/references/init-and-scaffold.md +72 -0
  315. package/skills/hyperframes-cli/references/lambda.md +185 -0
  316. package/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
  317. package/skills/hyperframes-cli/references/preview-render.md +190 -0
  318. package/skills/hyperframes-cli/references/upgrade-info-misc.md +77 -0
  319. package/skills/hyperframes-core/SKILL.md +94 -0
  320. package/skills/hyperframes-core/references/brief-contract.md +108 -0
  321. package/skills/hyperframes-core/references/brief-format.md +72 -0
  322. package/skills/hyperframes-core/references/composition-patterns.md +263 -0
  323. package/skills/hyperframes-core/references/creator-editing-recipes.md +367 -0
  324. package/skills/hyperframes-core/references/data-attributes.md +78 -0
  325. package/skills/hyperframes-core/references/determinism-rules.md +70 -0
  326. package/skills/hyperframes-core/references/frame-worker-core.md +80 -0
  327. package/skills/hyperframes-core/references/full-screen-motion.md +76 -0
  328. package/skills/hyperframes-core/references/minimal-composition.md +69 -0
  329. package/skills/hyperframes-core/references/production-loop.md +26 -0
  330. package/skills/hyperframes-core/references/review-loop.md +41 -0
  331. package/skills/hyperframes-core/references/script-format.md +52 -0
  332. package/skills/hyperframes-core/references/storyboard-format.md +130 -0
  333. package/skills/hyperframes-core/references/sub-compositions.md +239 -0
  334. package/skills/hyperframes-core/references/subagent-dispatch.md +35 -0
  335. package/skills/hyperframes-core/references/tailwind.md +123 -0
  336. package/skills/hyperframes-core/references/tracks-and-clips.md +91 -0
  337. package/skills/hyperframes-core/references/variables-and-media.md +107 -0
  338. package/skills/hyperframes-core/scripts/lib/frame-packets-core.mjs +212 -0
  339. package/skills/hyperframes-creative/SKILL.md +71 -0
  340. package/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
  341. package/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
  342. package/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  343. package/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
  344. package/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
  345. package/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
  346. package/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
  347. package/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
  348. package/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
  349. package/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
  350. package/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
  351. package/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
  352. package/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
  353. package/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
  354. package/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
  355. package/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
  356. package/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
  357. package/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
  358. package/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
  359. package/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
  360. package/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
  361. package/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
  362. package/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
  363. package/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  364. package/skills/hyperframes-creative/frame-presets/code-editorial/FRAME.md +277 -0
  365. package/skills/hyperframes-creative/frame-presets/code-editorial/caption-skin.html +224 -0
  366. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
  367. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
  368. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
  369. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
  370. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
  371. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
  372. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
  373. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
  374. package/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
  375. package/skills/hyperframes-creative/frame-presets/code-editorial/frame-showcase.html +1438 -0
  376. package/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
  377. package/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
  378. package/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
  379. package/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
  380. package/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
  381. package/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
  382. package/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
  383. package/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
  384. package/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
  385. package/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
  386. package/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
  387. package/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  388. package/skills/{hyperframes → hyperframes-creative}/references/audio-reactive.md +1 -1
  389. package/skills/hyperframes-creative/references/beat-direction.md +164 -0
  390. package/skills/hyperframes-creative/references/composition-patterns.md +199 -0
  391. package/skills/{hyperframes → hyperframes-creative/references}/data-in-motion.md +1 -1
  392. package/skills/hyperframes-creative/references/design-adherence.md +19 -0
  393. package/skills/hyperframes-creative/references/design-picker.md +123 -0
  394. package/skills/hyperframes-creative/references/design-spec.md +55 -0
  395. package/skills/{hyperframes → hyperframes-creative/references}/house-style.md +4 -2
  396. package/skills/hyperframes-creative/references/motion-principles.md +151 -0
  397. package/skills/{website-to-hyperframes/references/step-3-script.md → hyperframes-creative/references/narration.md} +5 -9
  398. package/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
  399. package/skills/hyperframes-creative/references/story-spine.md +43 -0
  400. package/skills/{hyperframes → hyperframes-creative}/references/typography.md +45 -2
  401. package/skills/hyperframes-creative/references/video-composition.md +63 -0
  402. package/skills/hyperframes-creative/references/visual-styles.md +457 -0
  403. package/skills/hyperframes-creative/scripts/contrast-report.mjs +538 -0
  404. package/skills/{gsap → hyperframes-creative}/scripts/extract-audio-data.py +13 -2
  405. package/skills/hyperframes-creative/scripts/package-loader.mjs +384 -0
  406. package/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
  407. package/skills/hyperframes-creative/templates/design-picker.html +1432 -0
  408. package/skills/hyperframes-keyframes/SKILL.md +262 -0
  409. package/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
  410. package/skills/hyperframes-keyframes/references/keyframe-patterns.md +108 -0
  411. package/skills/hyperframes-registry/SKILL.md +55 -16
  412. package/skills/hyperframes-registry/references/component-quality-bar.md +250 -0
  413. package/skills/hyperframes-registry/references/contributing.md +174 -0
  414. package/skills/hyperframes-registry/references/discovery.md +191 -13
  415. package/skills/hyperframes-registry/references/placeholder-material.md +149 -0
  416. package/skills/hyperframes-registry/references/templates.md +417 -0
  417. package/skills/hyperframes-registry/references/wiring-blocks.md +1 -31
  418. package/skills/hyperframes-registry/references/wiring-components.md +1 -39
  419. package/skills/media-use/SKILL.md +96 -0
  420. package/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
  421. package/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
  422. package/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
  423. package/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
  424. package/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
  425. package/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
  426. package/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
  427. package/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
  428. package/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
  429. package/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
  430. package/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
  431. package/skills/media-use/audio/assets/sfx/manifest.json +97 -0
  432. package/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
  433. package/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
  434. package/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
  435. package/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
  436. package/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
  437. package/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
  438. package/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
  439. package/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
  440. package/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
  441. package/skills/media-use/audio/references/bgm.md +74 -0
  442. package/skills/media-use/audio/references/captions/authoring.md +159 -0
  443. package/skills/{hyperframes/references/dynamic-techniques.md → media-use/audio/references/captions/motion.md} +8 -11
  444. package/skills/{hyperframes/references/transcript-guide.md → media-use/audio/references/captions/transcript-handling.md} +5 -59
  445. package/skills/media-use/audio/references/remove-background.md +143 -0
  446. package/skills/media-use/audio/references/requirements.md +29 -0
  447. package/skills/media-use/audio/references/sfx.md +42 -0
  448. package/skills/media-use/audio/references/transcribe.md +52 -0
  449. package/skills/media-use/audio/references/tts-to-captions.md +26 -0
  450. package/skills/media-use/audio/references/tts.md +165 -0
  451. package/skills/media-use/audio/scripts/audio.mjs +293 -0
  452. package/skills/media-use/audio/scripts/audio.test.mjs +49 -0
  453. package/skills/media-use/audio/scripts/heygen-tts.mjs +121 -0
  454. package/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
  455. package/skills/media-use/audio/scripts/lib/bgm.test.mjs +30 -0
  456. package/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
  457. package/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
  458. package/skills/media-use/audio/scripts/lib/heygen.mjs +155 -0
  459. package/skills/media-use/audio/scripts/lib/heygen.test.mjs +103 -0
  460. package/skills/media-use/audio/scripts/lib/python.mjs +63 -0
  461. package/skills/media-use/audio/scripts/lib/python.test.mjs +68 -0
  462. package/skills/media-use/audio/scripts/lib/sfx.mjs +143 -0
  463. package/skills/media-use/audio/scripts/lib/sfx.test.mjs +69 -0
  464. package/skills/media-use/audio/scripts/lib/tts.mjs +378 -0
  465. package/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
  466. package/skills/media-use/audio/scripts/lib/tts.test.mjs +157 -0
  467. package/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
  468. package/skills/media-use/audio/scripts/wait-bgm.mjs +167 -0
  469. package/skills/media-use/luts/README.md +28 -0
  470. package/skills/media-use/luts/index.json +57 -0
  471. package/skills/media-use/references/audio.md +19 -0
  472. package/skills/media-use/references/grading.md +160 -0
  473. package/skills/media-use/references/media-treatment-recipes.md +929 -0
  474. package/skills/media-use/references/media-treatments.md +202 -0
  475. package/skills/media-use/references/memory.md +36 -0
  476. package/skills/media-use/references/meta.md +61 -0
  477. package/skills/media-use/references/operations.md +325 -0
  478. package/skills/media-use/references/resolve.md +139 -0
  479. package/skills/media-use/references/setup-providers.md +80 -0
  480. package/skills/media-use/references/telemetry-dashboard.md +49 -0
  481. package/skills/media-use/scripts/audio-duck.mjs +121 -0
  482. package/skills/media-use/scripts/dither.mjs +328 -0
  483. package/skills/media-use/scripts/dither.test.mjs +176 -0
  484. package/skills/media-use/scripts/eval.mjs +369 -0
  485. package/skills/media-use/scripts/lib/adopt.mjs +128 -0
  486. package/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
  487. package/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
  488. package/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
  489. package/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +108 -0
  490. package/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +85 -0
  491. package/skills/media-use/scripts/lib/cache.mjs +150 -0
  492. package/skills/media-use/scripts/lib/candidates.mjs +91 -0
  493. package/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
  494. package/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
  495. package/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
  496. package/skills/media-use/scripts/lib/coverage.test.mjs +117 -0
  497. package/skills/media-use/scripts/lib/cube-build.mjs +181 -0
  498. package/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
  499. package/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
  500. package/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
  501. package/skills/media-use/scripts/lib/cutlist.mjs +184 -0
  502. package/skills/media-use/scripts/lib/cutlist.test.mjs +148 -0
  503. package/skills/media-use/scripts/lib/duck.mjs +89 -0
  504. package/skills/media-use/scripts/lib/duck.test.mjs +118 -0
  505. package/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
  506. package/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
  507. package/skills/media-use/scripts/lib/freeze.mjs +70 -0
  508. package/skills/media-use/scripts/lib/freeze.test.mjs +46 -0
  509. package/skills/media-use/scripts/lib/grade-analyzer.mjs +264 -0
  510. package/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
  511. package/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
  512. package/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
  513. package/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
  514. package/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
  515. package/skills/media-use/scripts/lib/heygen-video-provider.mjs +127 -0
  516. package/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +344 -0
  517. package/skills/media-use/scripts/lib/image-provider.mjs +44 -0
  518. package/skills/media-use/scripts/lib/index-gen.mjs +63 -0
  519. package/skills/media-use/scripts/lib/local-models.mjs +318 -0
  520. package/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
  521. package/skills/media-use/scripts/lib/local-run.mjs +78 -0
  522. package/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
  523. package/skills/media-use/scripts/lib/logo-provider.mjs +222 -0
  524. package/skills/media-use/scripts/lib/logo-provider.test.mjs +137 -0
  525. package/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
  526. package/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
  527. package/skills/media-use/scripts/lib/lut-preset-provider.mjs +266 -0
  528. package/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +176 -0
  529. package/skills/media-use/scripts/lib/manifest.mjs +229 -0
  530. package/skills/media-use/scripts/lib/manifest.test.mjs +388 -0
  531. package/skills/media-use/scripts/lib/match.mjs +47 -0
  532. package/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
  533. package/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
  534. package/skills/media-use/scripts/lib/misses.mjs +49 -0
  535. package/skills/media-use/scripts/lib/misses.test.mjs +78 -0
  536. package/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
  537. package/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
  538. package/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
  539. package/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
  540. package/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
  541. package/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
  542. package/skills/media-use/scripts/lib/probe.mjs +39 -0
  543. package/skills/media-use/scripts/lib/probe.test.mjs +31 -0
  544. package/skills/media-use/scripts/lib/providers.mjs +5 -0
  545. package/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
  546. package/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
  547. package/skills/media-use/scripts/lib/registry.mjs +218 -0
  548. package/skills/media-use/scripts/lib/registry.test.mjs +261 -0
  549. package/skills/media-use/scripts/lib/search.mjs +24 -0
  550. package/skills/media-use/scripts/lib/search.test.mjs +32 -0
  551. package/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
  552. package/skills/media-use/scripts/lib/specs.mjs +132 -0
  553. package/skills/media-use/scripts/lib/specs.test.mjs +157 -0
  554. package/skills/media-use/scripts/lib/stats.mjs +117 -0
  555. package/skills/media-use/scripts/lib/stats.test.mjs +165 -0
  556. package/skills/media-use/scripts/lib/telemetry.mjs +222 -0
  557. package/skills/media-use/scripts/lib/telemetry.test.mjs +373 -0
  558. package/skills/media-use/scripts/lib/tts-local-provider.mjs +92 -0
  559. package/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
  560. package/skills/media-use/scripts/lib/usage.mjs +57 -0
  561. package/skills/media-use/scripts/lib/usage.test.mjs +54 -0
  562. package/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
  563. package/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
  564. package/skills/media-use/scripts/lib/words.mjs +18 -0
  565. package/skills/media-use/scripts/prefs.mjs +70 -0
  566. package/skills/media-use/scripts/recipe.mjs +103 -0
  567. package/skills/media-use/scripts/resolve.mjs +1271 -0
  568. package/skills/media-use/scripts/resolve.test.mjs +1120 -0
  569. package/skills/media-use/scripts/transcribe.mjs +180 -0
  570. package/skills/media-use/scripts/transcript-cut.mjs +239 -0
  571. package/skills/motion-graphics/SKILL.md +176 -0
  572. package/skills/motion-graphics/agents/builder.md +40 -0
  573. package/skills/motion-graphics/agents/director.md +53 -0
  574. package/skills/motion-graphics/agents/finalize.md +17 -0
  575. package/skills/motion-graphics/catalog-map.md +40 -0
  576. package/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
  577. package/skills/motion-graphics/categories/charts/module.md +21 -0
  578. package/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
  579. package/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
  580. package/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
  581. package/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
  582. package/skills/motion-graphics/categories/maps/module.md +61 -0
  583. package/skills/motion-graphics/categories/news/module.md +56 -0
  584. package/skills/motion-graphics/categories/stat/module.md +21 -0
  585. package/skills/motion-graphics/categories/tweet/module.md +16 -0
  586. package/skills/motion-graphics/categories/webpage/module.md +30 -0
  587. package/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
  588. package/skills/motion-graphics/grounding/locate.mjs +228 -0
  589. package/skills/motion-graphics/phases/source/guide.md +21 -0
  590. package/skills/motion-graphics/references/builder-contract.md +38 -0
  591. package/skills/motion-graphics/references/motion-vocabulary.md +43 -0
  592. package/skills/motion-graphics/references/shot-plan-ir.md +54 -0
  593. package/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
  594. package/skills/music-to-video/SKILL.md +208 -0
  595. package/skills/music-to-video/references/frame-skeleton.md +100 -0
  596. package/skills/music-to-video/references/montage.md +58 -0
  597. package/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
  598. package/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -0
  599. package/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -0
  600. package/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -0
  601. package/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -0
  602. package/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -0
  603. package/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -0
  604. package/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -0
  605. package/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -0
  606. package/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -0
  607. package/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -0
  608. package/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -0
  609. package/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -0
  610. package/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -0
  611. package/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -0
  612. package/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -0
  613. package/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -0
  614. package/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -0
  615. package/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -0
  616. package/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -0
  617. package/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +98 -0
  618. package/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -0
  619. package/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -0
  620. package/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -0
  621. package/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -0
  622. package/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -0
  623. package/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -0
  624. package/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -0
  625. package/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -0
  626. package/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -0
  627. package/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -0
  628. package/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -0
  629. package/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -0
  630. package/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -0
  631. package/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
  632. package/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -0
  633. package/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -0
  634. package/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -0
  635. package/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -0
  636. package/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -0
  637. package/skills/music-to-video/references/planning.md +104 -0
  638. package/skills/music-to-video/references/storyboard-format.md +94 -0
  639. package/skills/music-to-video/references/template-catalog.md +106 -0
  640. package/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
  641. package/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
  642. package/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
  643. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/asphalt-031.png +0 -0
  644. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bark-014.png +0 -0
  645. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/brick.png +0 -0
  646. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-075-a.png +0 -0
  647. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-101.png +0 -0
  648. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-102.png +0 -0
  649. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-104.png +0 -0
  650. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/carpet.png +0 -0
  651. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-034.png +0 -0
  652. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-042-a.png +0 -0
  653. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-046.png +0 -0
  654. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-047-a.png +0 -0
  655. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete.png +0 -0
  656. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/diamond-plate-009.png +0 -0
  657. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-080.png +0 -0
  658. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-083.png +0 -0
  659. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-001.png +0 -0
  660. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-004.png +0 -0
  661. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-005.png +0 -0
  662. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-037.png +0 -0
  663. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-054.png +0 -0
  664. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-068.png +0 -0
  665. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-080.png +0 -0
  666. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-103.png +0 -0
  667. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-104.png +0 -0
  668. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/lava.png +0 -0
  669. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/leather-037.png +0 -0
  670. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-012.png +0 -0
  671. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-016.png +0 -0
  672. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-032.png +0 -0
  673. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-038.png +0 -0
  674. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-041-a.png +0 -0
  675. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-046-b.png +0 -0
  676. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-048-a.png +0 -0
  677. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-049-a.png +0 -0
  678. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-055-a.png +0 -0
  679. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-061-b.png +0 -0
  680. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal.png +0 -0
  681. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/onyx.png +0 -0
  682. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/painted-plaster-017.png +0 -0
  683. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-138.png +0 -0
  684. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-150.png +0 -0
  685. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/plaster-001.png +0 -0
  686. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-007.png +0 -0
  687. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-008-a.png +0 -0
  688. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-009-c.png +0 -0
  689. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-a.png +0 -0
  690. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-b.png +0 -0
  691. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-013-a.png +0 -0
  692. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-058.png +0 -0
  693. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-063.png +0 -0
  694. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock.png +0 -0
  695. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow-015.png +0 -0
  696. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow.png +0 -0
  697. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/tiles-138.png +0 -0
  698. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/travertine-009.png +0 -0
  699. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-049.png +0 -0
  700. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-051.png +0 -0
  701. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-058.png +0 -0
  702. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-066.png +0 -0
  703. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-092.png +0 -0
  704. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-094.png +0 -0
  705. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-051.png +0 -0
  706. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-064.png +0 -0
  707. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-070.png +0 -0
  708. package/skills/music-to-video/references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood.png +0 -0
  709. package/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
  710. package/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
  711. package/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
  712. package/skills/music-to-video/references/templates/logo-split-lockup-pulse/assets/fredoka-700.woff2 +0 -0
  713. package/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
  714. package/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
  715. package/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
  716. package/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
  717. package/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
  718. package/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
  719. package/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
  720. package/skills/music-to-video/scripts/analyze-beatgrid.py +542 -0
  721. package/skills/music-to-video/scripts/assemble-index.mjs +220 -0
  722. package/skills/music-to-video/scripts/lib/storyboard.mjs +249 -0
  723. package/skills/music-to-video/scripts/stage-assets.mjs +58 -0
  724. package/skills/music-to-video/scripts/validate-plan.mjs +161 -0
  725. package/skills/music-to-video/sub-agents/frame-worker.md +49 -0
  726. package/skills/pr-to-video/SKILL.md +269 -0
  727. package/skills/pr-to-video/references/code-vocabulary.md +111 -0
  728. package/skills/pr-to-video/references/cut-catalog.md +215 -0
  729. package/skills/pr-to-video/references/motion-language.md +156 -0
  730. package/skills/pr-to-video/references/story-design.md +230 -0
  731. package/skills/pr-to-video/references/visual-design.md +164 -0
  732. package/skills/pr-to-video/scripts/assemble-index.mjs +629 -0
  733. package/skills/pr-to-video/scripts/assemble-index.test.mjs +75 -0
  734. package/skills/pr-to-video/scripts/audio.mjs +291 -0
  735. package/skills/pr-to-video/scripts/build-frame.mjs +586 -0
  736. package/skills/pr-to-video/scripts/captions.mjs +521 -0
  737. package/skills/pr-to-video/scripts/captions.test.mjs +219 -0
  738. package/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -0
  739. package/skills/pr-to-video/scripts/fetch-pr.mjs +234 -0
  740. package/skills/pr-to-video/scripts/frame-contract.test.mjs +209 -0
  741. package/skills/pr-to-video/scripts/frame-packets.mjs +62 -0
  742. package/skills/pr-to-video/scripts/ingest.mjs +561 -0
  743. package/skills/pr-to-video/scripts/lib/assets.mjs +56 -0
  744. package/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -0
  745. package/skills/pr-to-video/scripts/lib/frame-contract.mjs +54 -0
  746. package/skills/pr-to-video/scripts/lib/pad-frame-duration.mjs +36 -0
  747. package/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -0
  748. package/skills/pr-to-video/scripts/lib/tokens.mjs +211 -0
  749. package/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -0
  750. package/skills/pr-to-video/scripts/lib/transitions.json +71 -0
  751. package/skills/pr-to-video/scripts/preflight.mjs +51 -0
  752. package/skills/pr-to-video/scripts/project-dir.mjs +92 -0
  753. package/skills/pr-to-video/scripts/transitions.mjs +381 -0
  754. package/skills/pr-to-video/scripts/workflow-guardrails.test.mjs +198 -0
  755. package/skills/pr-to-video/sub-agents/frame-worker.md +38 -0
  756. package/skills/product-launch-video/SKILL.md +260 -0
  757. package/skills/product-launch-video/references/cut-catalog.md +220 -0
  758. package/skills/product-launch-video/references/motion-language.md +156 -0
  759. package/skills/product-launch-video/references/story-design.md +508 -0
  760. package/skills/product-launch-video/references/visual-design.md +126 -0
  761. package/skills/product-launch-video/scripts/assemble-index.mjs +771 -0
  762. package/skills/product-launch-video/scripts/assemble-index.test.mjs +72 -0
  763. package/skills/product-launch-video/scripts/audio.mjs +291 -0
  764. package/skills/product-launch-video/scripts/audio.test.mjs +218 -0
  765. package/skills/product-launch-video/scripts/build-frame.mjs +549 -0
  766. package/skills/product-launch-video/scripts/captions.mjs +521 -0
  767. package/skills/product-launch-video/scripts/captions.test.mjs +219 -0
  768. package/skills/product-launch-video/scripts/capture-skill-guardrails.test.mjs +39 -0
  769. package/skills/product-launch-video/scripts/frame-packets.mjs +27 -0
  770. package/skills/product-launch-video/scripts/frame-packets.test.mjs +144 -0
  771. package/skills/product-launch-video/scripts/lib/assets.mjs +56 -0
  772. package/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
  773. package/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
  774. package/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
  775. package/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
  776. package/skills/product-launch-video/scripts/lib/tokens.mjs +218 -0
  777. package/skills/product-launch-video/scripts/lib/tokens.test.mjs +57 -0
  778. package/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
  779. package/skills/product-launch-video/scripts/lib/transitions.json +71 -0
  780. package/skills/product-launch-video/scripts/media-contract.test.mjs +200 -0
  781. package/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
  782. package/skills/product-launch-video/scripts/stage-assets.test.mjs +52 -0
  783. package/skills/product-launch-video/scripts/transitions.mjs +381 -0
  784. package/skills/product-launch-video/sub-agents/frame-worker.md +21 -0
  785. package/skills/remotion-to-hyperframes/SKILL.md +129 -0
  786. package/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
  787. package/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
  788. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
  789. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
  790. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
  791. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
  792. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
  793. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
  794. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
  795. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
  796. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
  797. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
  798. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
  799. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
  800. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
  801. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
  802. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
  803. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
  804. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
  805. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
  806. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
  807. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
  808. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
  809. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
  810. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
  811. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
  812. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
  813. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
  814. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
  815. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
  816. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
  817. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
  818. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
  819. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
  820. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
  821. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
  822. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
  823. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
  824. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
  825. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
  826. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
  827. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
  828. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
  829. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
  830. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
  831. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
  832. package/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
  833. package/skills/remotion-to-hyperframes/references/api-map.md +142 -0
  834. package/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
  835. package/skills/remotion-to-hyperframes/references/eval.md +140 -0
  836. package/skills/remotion-to-hyperframes/references/fonts.md +112 -0
  837. package/skills/remotion-to-hyperframes/references/limitations.md +136 -0
  838. package/skills/remotion-to-hyperframes/references/lottie.md +121 -0
  839. package/skills/remotion-to-hyperframes/references/media.md +149 -0
  840. package/skills/remotion-to-hyperframes/references/parameters.md +167 -0
  841. package/skills/remotion-to-hyperframes/references/sequencing.md +198 -0
  842. package/skills/remotion-to-hyperframes/references/timing.md +165 -0
  843. package/skills/remotion-to-hyperframes/references/transitions.md +114 -0
  844. package/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
  845. package/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
  846. package/skills/remotion-to-hyperframes/scripts/lint_source.py +370 -0
  847. package/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
  848. package/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
  849. package/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
  850. package/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
  851. package/skills/slideshow/SKILL.md +529 -0
  852. package/skills/slideshow/references/standalone-harness.md +1020 -0
  853. package/skills/talking-head-recut/NOTICE.md +39 -0
  854. package/skills/talking-head-recut/SKILL.md +1211 -0
  855. package/skills/talking-head-recut/assets/fonts/Caveat-400-latin.woff2 +0 -0
  856. package/skills/talking-head-recut/assets/fonts/Caveat-700-latin.woff2 +0 -0
  857. package/skills/talking-head-recut/assets/fonts/Inter-400-latin.woff2 +0 -0
  858. package/skills/talking-head-recut/assets/fonts/Inter-700-latin.woff2 +0 -0
  859. package/skills/talking-head-recut/assets/fonts/LXGWWenKaiTC-400-latin.woff2 +0 -0
  860. package/skills/talking-head-recut/assets/fonts/Virgil.woff2 +0 -0
  861. package/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
  862. package/skills/talking-head-recut/media-contract.test.mjs +35 -0
  863. package/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
  864. package/skills/talking-head-recut/references/frames/clean.html +92 -0
  865. package/skills/talking-head-recut/references/frames/hairline.html +171 -0
  866. package/skills/talking-head-recut/references/frames/polaroid.html +131 -0
  867. package/skills/talking-head-recut/references/layouts/overlay.html +164 -0
  868. package/skills/talking-head-recut/references/layouts/pip.html +143 -0
  869. package/skills/talking-head-recut/references/layouts/split.html +121 -0
  870. package/skills/talking-head-recut/references/layouts/stack.html +109 -0
  871. package/skills/talking-head-recut/references/styles/academic.html +172 -0
  872. package/skills/talking-head-recut/references/styles/audit.html +170 -0
  873. package/skills/talking-head-recut/references/styles/editorial.html +189 -0
  874. package/skills/talking-head-recut/references/styles/geom.html +181 -0
  875. package/skills/talking-head-recut/references/styles/minimal.html +130 -0
  876. package/skills/talking-head-recut/references/styles/spotlight.html +142 -0
  877. package/skills/talking-head-recut/references/styles/swiss.html +188 -0
  878. package/skills/talking-head-recut/references/styles/terminal.html +196 -0
  879. package/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
  880. package/skills/talking-head-recut/references/styles/xhs.html +206 -0
  881. package/skills/gsap/SKILL.md +0 -213
  882. package/skills/gsap/references/effects.md +0 -297
  883. package/skills/hyperframes/patterns.md +0 -118
  884. package/skills/hyperframes/references/captions.md +0 -132
  885. package/skills/hyperframes/references/css-patterns.md +0 -373
  886. package/skills/hyperframes/references/motion-principles.md +0 -69
  887. package/skills/hyperframes/references/tts.md +0 -75
  888. package/skills/hyperframes/scripts/contrast-report.mjs +0 -335
  889. package/skills/hyperframes/visual-styles.md +0 -211
  890. package/skills/website-to-hyperframes/SKILL.md +0 -125
  891. package/skills/website-to-hyperframes/references/step-1-capture.md +0 -74
  892. package/skills/website-to-hyperframes/references/step-2-design.md +0 -178
  893. package/skills/website-to-hyperframes/references/step-4-storyboard.md +0 -246
  894. package/skills/website-to-hyperframes/references/step-5-vo.md +0 -42
  895. package/skills/website-to-hyperframes/references/step-6-build.md +0 -229
  896. package/skills/website-to-hyperframes/references/step-7-validate.md +0 -114
  897. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-3d.md +0 -0
  898. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-blur.md +0 -0
  899. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-cover.md +0 -0
  900. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-dissolve.md +0 -0
  901. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-distortion.md +0 -0
  902. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-grid.md +0 -0
  903. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-light.md +0 -0
  904. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-mechanical.md +0 -0
  905. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-other.md +0 -0
  906. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-push.md +0 -0
  907. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-radial.md +0 -0
  908. /package/skills/{hyperframes/references → hyperframes-animation}/transitions/css-scale.md +0 -0
  909. /package/skills/{hyperframes → hyperframes-creative}/palettes/bold-energetic.md +0 -0
  910. /package/skills/{hyperframes → hyperframes-creative}/palettes/clean-corporate.md +0 -0
  911. /package/skills/{hyperframes → hyperframes-creative}/palettes/dark-premium.md +0 -0
  912. /package/skills/{hyperframes → hyperframes-creative}/palettes/jewel-rich.md +0 -0
  913. /package/skills/{hyperframes → hyperframes-creative}/palettes/monochrome.md +0 -0
  914. /package/skills/{hyperframes → hyperframes-creative}/palettes/nature-earth.md +0 -0
  915. /package/skills/{hyperframes → hyperframes-creative}/palettes/neon-electric.md +0 -0
  916. /package/skills/{hyperframes → hyperframes-creative}/palettes/pastel-soft.md +0 -0
  917. /package/skills/{hyperframes → hyperframes-creative}/palettes/warm-editorial.md +0 -0
@@ -0,0 +1,76 @@
1
+ # Full-Screen Motion Pattern
2
+
3
+ For full-frame motion (continuous backgrounds, color washes, full-bleed visual states that span multiple clips), prefer a **shared background layer + transparent timed content layers** over stacked opaque scene backgrounds.
4
+
5
+ ## Why
6
+
7
+ Stacking opaque scene divs means every scene change has to repaint the entire frame, every cross-scene visual continuity has to be faked, and every "global" state (a hue shift, a vignette, a film grain) has to be duplicated on every scene. A shared background layer driven by the seekable timeline gives you one continuous visual surface and makes scenes themselves cheap and transparent.
8
+
9
+ ## Pattern
10
+
11
+ ```html
12
+ <style>
13
+ /* The runtime auto-positions root children that carry data-start. The shared
14
+ background deliberately has none, so it gets NO automatic layout and must
15
+ size itself, or #bg is 0px tall and the tween paints nothing. */
16
+ #bg.full-bleed {
17
+ position: absolute;
18
+ inset: 0;
19
+ }
20
+ .clip.transparent {
21
+ background: transparent;
22
+ }
23
+ </style>
24
+
25
+ <div id="root" data-composition-id="main" data-width="1920" data-height="1080" data-duration="20">
26
+ <!-- Shared background — NOT a clip. Always visible. Driven by the timeline. -->
27
+ <div id="bg" class="full-bleed"></div>
28
+
29
+ <!-- Timed content layers — transparent backgrounds. -->
30
+ <section
31
+ id="scene1"
32
+ class="clip transparent"
33
+ data-start="0"
34
+ data-duration="6"
35
+ data-track-index="1"
36
+ >
37
+ <!-- content -->
38
+ </section>
39
+ <section
40
+ id="scene2"
41
+ class="clip transparent"
42
+ data-start="6"
43
+ data-duration="14"
44
+ data-track-index="1"
45
+ >
46
+ <!-- content -->
47
+ </section>
48
+ </div>
49
+
50
+ <script>
51
+ window.__timelines = window.__timelines || {};
52
+ const tl = gsap.timeline({ paused: true });
53
+
54
+ // Drive the shared background from the seekable timeline.
55
+ tl.to("#bg", { backgroundColor: "#0a1530", duration: 6, ease: "sine.inOut" }, 0);
56
+ tl.to("#bg", { backgroundColor: "#1a0a30", duration: 14, ease: "sine.inOut" }, 6);
57
+
58
+ // Scene-local animations stay transparent on top.
59
+ tl.from("#scene1 h1", { y: 48, opacity: 0, duration: 0.6 }, 0.2);
60
+
61
+ window.__timelines["main"] = tl;
62
+ </script>
63
+ ```
64
+
65
+ ## Rules
66
+
67
+ - **The background is not a clip.** No `data-start` / `data-duration`. It exists for the whole composition.
68
+ - **Because it is not a clip, it gets no automatic layout.** The runtime only positions and sizes root children that carry `data-start`. An untimed background must set its own `position: absolute; inset: 0`, or it collapses to zero height and nothing you animate on it is visible. This is the most common way this pattern is copied wrong.
69
+ - **Content scenes have transparent backgrounds.** Whatever you put in the shared `#bg` shows through.
70
+ - **Drive global state from the shared layer.** Hue shifts, vignettes, grain, film-look filters — animate them once on the shared layer, not per-scene.
71
+ - **Do not animate visibility on `.clip` elements.** HyperFrames already shows/hides clips based on `data-start` and `data-duration`. Animating `display` / `visibility` on the clip itself races with the framework's own show/hide. Animate a _child wrapper_ inside the clip instead.
72
+ - **Verify intentional overflow with snapshots.** Before adding `data-layout-allow-overflow` to silence an inspect warning, run `npx hyperframes snapshot` and confirm the overflow is what you want.
73
+
74
+ ## When Not to Use This Pattern
75
+
76
+ If scenes really are visually disjoint — hard cuts between distinct color worlds with no continuity — the stacked-opaque pattern is fine. The shared-background pattern is for compositions where the background **is part of the motion language**, not just backdrop.
@@ -0,0 +1,69 @@
1
+ # Minimal Composition
2
+
3
+ The smallest renderable HyperFrames composition — a standalone (top-level) root with one clip and one tween:
4
+
5
+ ```html
6
+ <!doctype html>
7
+ <html lang="en">
8
+ <head>
9
+ <meta charset="UTF-8" />
10
+ <meta name="viewport" content="width=1920, height=1080" />
11
+ <title>Minimal HyperFrames Composition</title>
12
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
13
+ <style>
14
+ body {
15
+ margin: 0;
16
+ background: #0b0f14;
17
+ color: white;
18
+ font-family: Inter, system-ui, sans-serif;
19
+ }
20
+ #root {
21
+ position: relative;
22
+ width: 1920px;
23
+ height: 1080px;
24
+ overflow: hidden;
25
+ }
26
+ .clip {
27
+ position: absolute;
28
+ inset: 0;
29
+ display: grid;
30
+ place-items: center;
31
+ }
32
+ h1 {
33
+ margin: 0;
34
+ font-size: 96px;
35
+ }
36
+ </style>
37
+ </head>
38
+ <body>
39
+ <div
40
+ id="root"
41
+ data-composition-id="main"
42
+ data-start="0"
43
+ data-width="1920"
44
+ data-height="1080"
45
+ data-duration="5"
46
+ >
47
+ <section id="title-card" class="clip" data-start="0" data-duration="5">
48
+ <h1 id="title">Hello HyperFrames</h1>
49
+ </section>
50
+ </div>
51
+ <script>
52
+ const tl = gsap.timeline({ paused: true });
53
+ tl.from("#title", { y: 48, opacity: 0, duration: 0.6, ease: "power3.out" }, 0.2);
54
+ window.__timelines["main"] = tl;
55
+ </script>
56
+ </body>
57
+ </html>
58
+ ```
59
+
60
+ What the runtime actually requires:
61
+
62
+ - Root `<div>` with `data-composition-id`, `data-width`, `data-height`. Root `data-start="0"` is written above by convention and every shipped block has it, but the runtime stamps it when absent, so it is not required.
63
+ - A duration source: root `data-duration` (as above), or a GSAP timeline, or media, or an adapter that can infer one.
64
+ - Timed elements carry `data-start` plus a duration. That attribute alone is what makes an element a clip: `class="clip"` is a layout and tooling convention, and `data-track-index` is a Studio display lane. Neither is required, and a composition with no clips at all renders fine.
65
+ - A GSAP timeline created paused and registered on `window.__timelines["<composition-id>"]`.
66
+
67
+ Everything else in the skeleton is ordinary HTML and CSS: the `#root` box, `.clip` positioning, and fonts are yours to choose.
68
+
69
+ This pattern is **standalone** (top-level `index.html`) — no `<template>` wrapper around the root. For sub-compositions (files loaded by `data-composition-src`), see `sub-compositions.md`.
@@ -0,0 +1,26 @@
1
+ # Production loop — from an approved plan to a delivered video
2
+
3
+ The stages between a plan the user has agreed to and a video in their hands, written as **dependencies, not numbered steps**: order between independent stages is free — audio renders in the background while frames build; that is the standard trick — order inside a dependency chain is not. Nothing in this file addresses the user: every user-facing pause lives in `review-loop.md`, and this file only marks where those passes attach. Some routes bring their own spine (a beat grid, existing footage) — the stages compose around it. A stage whose need is absent simply doesn't run: no narration, no audio stage; a single scene, no transitions. An edit request enters at the artifact it touches and re-runs verify.
4
+
5
+ The shipped narrative workflows implement these stages with their own scripts; a freeform build follows this file directly, borrowing tools where the capability menu says they live (`hyperframes/references/capability-menu.md`).
6
+
7
+ | Stage | Needs | Produces | Where the capability lives |
8
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | **Blocks & assets** | the approved plan | registry blocks installed **once, before any parallel work** (parallel workers race the registry); user assets staged; logos / images / grades resolved | `npx hyperframes add <block>` per block the plan names; staging, adoption, and `resolve` via the menu's media rows |
10
+ | **Audio** | narration text (when narrated); the storyboard's `music:` mood | voice files + **word timings** + BGM + SFX → `audio_meta.json` | the one engine — `media-use/audio/scripts/audio.mjs`, run in the background; `wait-bgm.mjs` before render when BGM generates |
11
+ | **Frames** | design spec + the plan (+ a confirmed sketch when one exists — dress that layout, never redraw it: `review-loop.md` § 3) | each scene at `compositions/frames/NN-*.html`, marked `animated` in the storyboard as it lands | `frame.md` + `hyperframes-animation` blueprints / rules (+ the genre lens, menu § Genre lenses); parallel dispatch per `subagent-dispatch.md` |
12
+ | **Duration sync** | word timings + frames | scene durations trued to real voice length — real duration wins, silent scenes keep estimates, synced values are never hand-edited | a mechanical rule; the narrative workflows' audio scripts apply it, a freeform build applies it by hand |
13
+ | **Assembly** | frames | the index composition — scenes as sub-compositions on tracks | `sub-compositions.md` + `tracks-and-clips.md`; borrowable `assemble-index.mjs` (menu) |
14
+ | **Transitions** | the assembled index | scene handoffs injected | `hyperframes-animation/transitions/overview.md` → `catalog.md`; borrowable `transitions.mjs` (menu) |
15
+ | **Captions** | word timings + the index | the caption track | borrowable `captions.mjs` (menu); no script to time against → `media-use` `scripts/transcribe.mjs` first |
16
+ | **Verify** | the index (+ captions / transitions when present) | `npx hyperframes lint` and `npx hyperframes check` **passing**; a contact-sheet glance (`snapshot --at <frame-midpoints>`) | `hyperframes-cli` |
17
+ | **Deliver** | verify passing | the final-look pause → on approval `render` → optionally `publish` (a stable public link) → the recipe offer | final approval and recipe offer: `review-loop.md` § 4; render / publish: `hyperframes-cli` |
18
+
19
+ The Frames stage follows the plan's citations: a scene planned on a blueprint or on named rules is built by reading that recipe's body (`hyperframes-animation/blueprints/<id>.md`, `rules/<id>.md`) before its motion is written — names come from the indexes, never invented, and a scene the plan left uncited gets its citation at build time, not improvised motion.
20
+
21
+ ## Scheduling economics (facts you can't see from inside the session)
22
+
23
+ - **External generations are independent work.** Image plates, TTS, BGM, video gen: fire every generation whose prompt is already known **concurrently or in the background**, and overlap the wait with reading or building. Three image plates generated one-after-another cost ~3× the wall time of firing them together.
24
+ - **Attaching an image re-prices your whole context.** A mid-session image inspection (especially at original detail) invalidates the prompt cache — the next request re-sends your entire history at full price. Batch visual checks (one contact sheet beats N single-frame views) and schedule them at phase boundaries, not mid-build.
25
+
26
+ Two attach points carry the user's voice into this loop: the plan that starts it was approved at `review-loop.md` § 1 (collaborative) or posted as a heads-up (autonomous), and nothing renders before the § 4 final look. Everything between those two is yours to schedule.
@@ -0,0 +1,41 @@
1
+ # The review loop — plan, sketch, build
2
+
3
+ How a `storyboard: yes` run earns fidelity one pass at a time: the plan is reviewed as text on a live board, the layouts as wireframe sketches, and the finished piece as the assembled video. Collaborative mode waits at each checkpoint. Autonomous mode posts the same checkpoint summaries and continues, keeping exactly one question before render.
4
+
5
+ This is the shared process for any workflow that plans on a storyboard. The contracts it leans on live next door: interaction mode, gate types, and the comments channel in `brief-contract.md`; the `STORYBOARD.md` format, the `outline → built → animated` statuses, and the comments sidecar in `storyboard-format.md`. A workflow's SKILL.md says **when** its steps hit each pass and supplies its **sketch stand-ins** (what the plain blocks represent); how the loop runs is defined here, once. The stage mechanics between the passes — audio, frames, assembly, transitions, captions, verify — live in `production-loop.md`; this file owns only the user-facing pauses.
6
+
7
+ ## § 1 — The plan, on a live board
8
+
9
+ Open the **storyboard board** before presenting the plan: run `npx hyperframes preview --background` from the project directory, confirm it is serving, and open `http://localhost:<port>/?view=storyboard#project/<project-name>`. This is an early planning surface, not the final composition preview; it may open before composition checks. The plan appears as frame cards and refreshes as work lands.
10
+
11
+ Present the plan as a proposal (shape: `hyperframes-creative/references/story-spine.md` § 3): open by echoing **"This video tells [audience] that [message]"**, then the frame table — one row per frame: frame · beat (type, duration) · on screen · why (its `narrativeRole`, traced to the message). Hand the board URL with it, noting feedback lands in both places — comment on the board or reply here, one revision loop — and that a board submit still needs one reply here (anything) to get picked up.
12
+
13
+ In the same message ask two things: **(a)** approve or request changes, and **(b)** **sketches first** (recommended — a quick wireframe look check right after this approval) or skip sketches and build in one go. Iterate until approved — feedback arrives in chat or as the comments file (`brief-contract.md` § 1, the comments channel): revise exactly the frames it names, clear the file, re-present.
14
+
15
+ This is a **checkpoint gate** (`brief-contract.md` § 1). A run that starts autonomous normally has `storyboard: no` and does not enter this loop. If mode switches to autonomous after a board exists, keep updating the board, post the same summary as a heads-up, and continue without waiting; the one kept question comes at § 4.
16
+
17
+ ## § 2 — The sketch pass (collaborative, unless skipped)
18
+
19
+ The moment the plan is approved, wireframe every frame yourself — no sub-agents, no waiting on other steps (sketches don't use timings), straight from the approved frame table.
20
+
21
+ A sketch is a **wireframe with the real words, not a styled frame**: the frame's layout at its key moment — the actual headline / stat / label text placed where it will live, plain blocks for panels, charts, diagrams, and media (the workflow says what its blocks stand in for), `frame.md`'s background and ink plus one accent on the focal, nothing else. No decoration, no full brand treatment, **no motion** — all of that arrives with the build pass.
22
+
23
+ Keep each sketch a real composition file at `compositions/frames/NN-*.html` (template wrapper, `data-composition-id`, `#root` styling, one paused **empty** timeline registered at `window.__timelines["<frame_id>"]`) so the Studio poster renders — and the poster is the only picture this pass needs: **run no CLI here** — no `snapshot`, no `lint` / `check`, no rendering. A sketch is a few dozen lines of HTML; the whole board lands in minutes.
24
+
25
+ Mark each frame `built` as its sketch lands — the user's open board fills in blue by itself. When every frame is `built`, pause and ask one thing: does the board look right, or which frames change? This is a **checkpoint gate**; the user reviews in Studio (open since § 1 — restart and re-hand the same URL if the server died), and feedback arrives in chat or as the comments file — check the file first when the reply arrives: revise **only the sketches named**, re-present, and loop until the layout is confirmed. Only then does the workflow's visual design get written onto the confirmed layouts.
26
+
27
+ A confirmed board is also a valid place to **stop**. When the user asked for a storyboard rather than a finished video — a plan to pitch, review, or hand off — the sketched board is the deliverable: confirm it, hand the board URL, and go no further unless asked to build.
28
+
29
+ In autonomous mode, or when the user chose to skip sketches at § 1, skip this pass — frames go straight from `outline` to `animated` in the build.
30
+
31
+ ## § 3 — Building on confirmed layouts
32
+
33
+ However the workflow builds — sub-agent workers per frame, or inline scene by scene — a confirmed sketch's **composition is settled**: placement, hierarchy, and copy were approved on the board, so building means dressing that layout (full design treatment, real assets, motion), never redrawing it. Workflows that dispatch workers put "this frame has a **confirmed sketch** on disk" in the worker's context and carry the keep-the-layout rule in their worker prompt; a landed frame must still read as the approved wireframe, fully dressed.
34
+
35
+ Mark each frame `animated` as it lands. The build gate carries the loop's condition: in collaborative mode, the sketch board was confirmed at § 2.
36
+
37
+ ## § 4 — The final look
38
+
39
+ After the workflow's checks pass, use the **final composition preview**. In collaborative mode Studio may already be serving from § 1; hand the timeline URL and ask one thing: render now, or what changes? In autonomous mode this is the one question the mode keeps: ask “preview first, or render?” Open the final preview on yes; render on an explicit render answer. Render only on approval.
40
+
41
+ **After approval, offer the recipe — once.** An approved run is a proven bundle. At delivery, offer to freeze it: `media-use` → `scripts/recipe.mjs freeze --name <name>` (the workflow comes from BRIEF.md; pass `--workflow` only in a project without one) keeps the design spec, the storyboard skeleton (structure kept, content blanked), the brief skeleton, and the confirmed brief values, and the next run of this type starts from it (the intent layer checks for a matching recipe before its first question). When the freeze lands, teach the recall in the confirmation — "Saved as **<name>** (v<N>). Next time say _make another <name>_, or just _like last time_." — the name is something the system reminds the user of, never something they must remember. In autonomous mode don't ask — name the freeze command in the delivery note instead.
@@ -0,0 +1,52 @@
1
+ # `SCRIPT.md` — locked narration (optional)
2
+
3
+ The **locked narration** for a project: the final spoken lines + voice + delivery. It is an _optional_ plan-layer file — a video with no narration (bgm-only, silent overlay) has none. The storyboard's per-frame `voiceover` is the lighter, editable _guide_; `SCRIPT.md` is the _commit_. (Storyboard format → `references/storyboard-format.md`.)
4
+
5
+ This file defines the SCRIPT.md **shape** only. Synthesizing the spoken lines into audio is a capability owned by `media-use` → `references/tts.md`.
6
+
7
+ Free-form markdown — there is no strict parser; the Studio renders it read-only beside the Storyboard board, and the TTS step extracts the indented spoken lines.
8
+
9
+ ## Shape
10
+
11
+ A header block, then one section per spoken line.
12
+
13
+ | Part | Holds |
14
+ | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
15
+ | Header | `**Voice:**` (provider + voice), `**Voice settings:**` (e.g. stability / similarity / style), `**Voice direction:**` (overall delivery) |
16
+ | `## Line N — <label> (Frame N)` | one spoken line, tied to its storyboard frame |
17
+ | `**Time:**` | the board's rough window — a _guide_, not authoritative (real timing comes from TTS word timestamps) |
18
+ | `**Delivery:**` | per-line delivery note |
19
+ | indented block | the **spoken text** — the only part fed to TTS |
20
+
21
+ ## Example
22
+
23
+ ```markdown
24
+ # SCRIPT — acme-launch
25
+
26
+ **Voice:** Rachel (ElevenLabs)
27
+ **Voice settings:** stability 0.35 · similarity 0.75 · style 0.20
28
+ **Voice direction:** Confident, warm, a little playful.
29
+
30
+ ---
31
+
32
+ ## Line 1 — Hook (Frame 1)
33
+
34
+ **Time:** 0.0 – 3.0s
35
+ **Delivery:** Land the promise on the beat.
36
+
37
+ Ship a launch video in an afternoon.
38
+
39
+ ## Line 2 — The problem (Frame 2)
40
+
41
+ **Time:** 3.0 – 7.0s
42
+ **Delivery:** Wry, a touch tired.
43
+
44
+ The old way? Prompt, wait twenty minutes, get something that misses.
45
+ ```
46
+
47
+ ## To TTS
48
+
49
+ Feed each line's spoken text to the provider documented in
50
+ `media-use/audio/references/tts.md`. The `hyperframes tts` command is
51
+ Kokoro-only; use its `--voice` flag, or use the bundled HeyGen helper when word
52
+ timestamps are required. Real per-word timing replaces the `**Time:**` guides.
@@ -0,0 +1,130 @@
1
+ # Storyboard format — `STORYBOARD.md` + parsed manifest
2
+
3
+ Defines the storyboard's **base data format** only: the `STORYBOARD.md` file shape and the `StoryboardManifest` it parses into. How a workflow _generates_ a storyboard lives in that workflow; the optional narration/TTS file (`SCRIPT.md`) is a separate concern owned by the TTS step, not here.
4
+
5
+ A storyboard is the **plan layer** for a video — an ordered set of **frames** (key moments) in one markdown file. HyperFrames Studio renders it as a contact sheet (the Storyboard view, available by default in every Studio session). Parser: `@hyperframes/core/storyboard` → `StoryboardManifest`; read API: `GET /api/projects/<id>/storyboard`.
6
+
7
+ ## Frontmatter (global direction)
8
+
9
+ YAML block at the top. Unknown keys are kept under `globals.extra`.
10
+
11
+ | Key | Meaning | Example |
12
+ | ---------- | ----------------------------------------------------------------- | ----------------------------------------- |
13
+ | `format` | Canvas size | `1920x1080` |
14
+ | `duration` | The brief's rough length expectation (advisory, not a hard limit) | `22s` |
15
+ | `message` | One-line thesis | `Ship a launch video in an afternoon` |
16
+ | `arc` | Narrative arc | `Hook → Problem → Solution → Proof → CTA` |
17
+ | `audience` | Who it's for | `indie devs on X` |
18
+ | `mode` | Interaction mode (see `brief-contract.md`; default collaborative) | `autonomous` |
19
+
20
+ Set `duration` from the brief's `length` when the storyboard is first written. It is an expectation, not a gate: assembly reports where the cut actually lands against it and flags a large gap — judge whether the drift serves the piece, and update the value when the intended length genuinely changes.
21
+
22
+ ## Per-frame sections
23
+
24
+ One `## Frame N — Title` heading per frame (`Frame` / `Beat` / `Scene` accepted at H2/H3). Metadata as `- key: value` bullets; everything below them until the next heading is the free-form **narrative**.
25
+
26
+ | Key | Meaning |
27
+ | --------------- | ------------------------------------------------------------------------------------------------------------- |
28
+ | `status` | `outline` → `built` → `animated` (defaults `outline`) |
29
+ | `src` | project-relative path to the frame's HTML sub-composition (the tile poster renders from it) |
30
+ | `duration` | e.g. `4s` |
31
+ | `transition_in` | `crossfade` / `cut` / `wipe` … (alias `transition`) |
32
+ | `scene` | one-line contact-sheet caption (aliases `description` / `summary` / `caption`) |
33
+ | `voiceover` | the frame's narration _guide_ (aliases `vo` / `voice_over` / `narration`) |
34
+ | `poster` | seconds to seek for the tile poster (past the intro animation) |
35
+ | _any other key_ | kept verbatim under the frame's `extra` — a workflow carries its own per-frame data (effects, assets, …) here |
36
+
37
+ ## Parsed manifest
38
+
39
+ The parser is **lenient**: it never throws and records anything surprising as a `warning`.
40
+
41
+ ```
42
+ StoryboardManifest {
43
+ globals: { format?, message?, arc?, audience?, extra: {…} }
44
+ frames: Array<{
45
+ index, number?, title?,
46
+ status, // "outline" | "built" | "animated"
47
+ src?, duration? / durationSeconds?, transitionIn?,
48
+ scene?, voiceover?, poster?,
49
+ narrative, // markdown below the metadata
50
+ extra: {…} // unknown keys, preserved
51
+ }>
52
+ warnings: Array<{ message, line?, frameIndex? }>
53
+ }
54
+ ```
55
+
56
+ The read API also adds `srcExists` per frame and attaches the optional `SCRIPT.md` payload when present.
57
+
58
+ ## `SCRIPT.md` (out of scope here)
59
+
60
+ Optional, free-form, **not parsed into the manifest** — the locked-narration file that drives TTS. Its format is defined in `references/script-format.md`, and it is absent for videos with no narration/TTS. The per-frame `voiceover` above is the storyboard's own narration guide.
61
+
62
+ ## Frame comments — `.hyperframes/frame-comments.json`
63
+
64
+ The storyboard review's **structured feedback channel** — the file Studio's per-frame comment boxes write on submit (chat feedback follows the same rule — `brief-contract.md` § 1, the comments channel). Like `SCRIPT.md`, it is a sibling of the storyboard, not parsed into the manifest.
65
+
66
+ ```json
67
+ {
68
+ "version": 1,
69
+ "pass": "sketch",
70
+ "submitted_at": "2026-07-09T12:04:00Z",
71
+ "comments": [
72
+ {
73
+ "frame": 3,
74
+ "src": "compositions/frames/03-mechanism.html",
75
+ "title": "Mechanism",
76
+ "text": "Swap the bar chart for a before/after slider."
77
+ }
78
+ ]
79
+ }
80
+ ```
81
+
82
+ | Field | Meaning |
83
+ | ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
84
+ | `pass` | which review the batch belongs to: `storyboard` (text layer) / `sketch` (static frames) / `final` (assembled video) |
85
+ | `comments[].frame` | the frame's 1-based `index` in the manifest — the key |
86
+ | `comments[].src` `title` | copied from the frame at submit time — if frames get reordered after submit, the mismatch shows |
87
+ | `comments[].text` | the feedback, verbatim |
88
+
89
+ Lifecycle — the whole contract: a workflow finding this file at a checkpoint treats it as the revision feedback — **revise exactly the frames named, delete the file, re-present**. Writers create it only on submit; it never lingers across rounds.
90
+
91
+ ## Example
92
+
93
+ ```markdown
94
+ ---
95
+ format: 1920x1080
96
+ message: "Ship a launch video in an afternoon"
97
+ arc: Hook → Problem → Solution → Proof → CTA
98
+ audience: indie devs on X
99
+ ---
100
+
101
+ ## Frame 1 — Hook
102
+
103
+ - scene: Big type punches in on the beat
104
+ - duration: 3s
105
+ - poster: 2s
106
+ - transition_in: cut
107
+ - status: animated
108
+ - voiceover: "Ship a launch video in an afternoon."
109
+ - src: compositions/frames/01-hook.html
110
+
111
+ Open cold on the promise. This is the thesis — everything after pays it off.
112
+
113
+ ## Frame 2 — The problem
114
+
115
+ - scene: A 20-minute timer spins on a stack of rejected takes
116
+ - duration: 4s
117
+ - transition_in: crossfade
118
+ - status: built
119
+ - voiceover: "The old way? Prompt, wait twenty minutes, get something that misses."
120
+ - src: compositions/frames/02-problem.html
121
+
122
+ The old way: prompt, wait, get something that misses. Establish the pain we remove.
123
+ ```
124
+
125
+ ## Notes
126
+
127
+ - A frame with `status: outline` and no built `src` renders as an outline placeholder.
128
+ - `built` is the middle rung: the frame's HTML exists and its **layout is confirmed** (a wireframe sketch or better) — motion not yet added. Studio chips it blue.
129
+ - The process that walks these statuses — plan, sketch, build, each pass reviewed on the board — is `review-loop.md`.
130
+ - Multi-line `voiceover` values collapse to one line on save.
@@ -0,0 +1,239 @@
1
+ # Sub-Compositions
2
+
3
+ A sub-composition is a separate HTML file embedded in a host composition. HyperFrames loads it, seeks it independently, and composites the result into the host at `data-start`.
4
+
5
+ ## Host Wiring
6
+
7
+ In the host composition, the sub-composition appears as a clip with `data-composition-src`:
8
+
9
+ ```html
10
+ <div
11
+ id="chart"
12
+ data-composition-id="data-chart"
13
+ data-composition-src="compositions/data-chart.html"
14
+ data-start="2"
15
+ data-duration="8"
16
+ data-track-index="2"
17
+ data-width="1920"
18
+ data-height="1080"
19
+ ></div>
20
+ ```
21
+
22
+ - `data-composition-id` on the host must match the internal `data-composition-id` of the file at `data-composition-src`.
23
+ - The host clip needs its own `data-start`, `data-duration`, `data-track-index`, `data-width`, `data-height`.
24
+
25
+ ## Sub-Composition File Structure
26
+
27
+ ### Mental model — what the runtime actually does
28
+
29
+ When a host loads a sub-composition via `data-composition-src`, the runtime:
30
+
31
+ 1. `fetch`es the HTML file.
32
+ 2. Parses it with `DOMParser`.
33
+ 3. **Finds the `<template>` element and clones ONLY its contents into the host slot.**
34
+ 4. Everything **outside** the `<template>` (including the entire `<head>`) is **discarded**.
35
+
36
+ So `<template>` is not just a wrapper — it is the **transport container**. If a node needs to exist in the live render, it must be inside `<template>`. Full stop.
37
+
38
+ ### File shape
39
+
40
+ ```html
41
+ <!doctype html>
42
+ <html>
43
+ <head>
44
+ <meta charset="UTF-8" />
45
+ <!-- head is metadata for the source file only; the runtime ignores it -->
46
+ </head>
47
+ <body>
48
+ <template>
49
+ <!-- EVERYTHING the runtime needs goes here: styles, markup, scripts -->
50
+ <style>
51
+ /* Root: style by #root, never a class. (At render the CSS is scoped to
52
+ data-composition-id, so a class on the root stops matching — see Pitfall 3.) */
53
+ #root {
54
+ position: absolute;
55
+ inset: 0;
56
+ color: #fff;
57
+ }
58
+ /* .label, #bar, … — descendants, plain selectors */
59
+ </style>
60
+
61
+ <div id="root" data-composition-id="data-chart" data-width="1920" data-height="1080">
62
+ <!-- sub-composition markup -->
63
+ </div>
64
+
65
+ <script>
66
+ window.__timelines = window.__timelines || {};
67
+ const tl = gsap.timeline({ paused: true });
68
+ // ... build timeline ...
69
+ window.__timelines["data-chart"] = tl;
70
+ </script>
71
+ </template>
72
+ </body>
73
+ </html>
74
+ ```
75
+
76
+ Contrast with **standalone** compositions, which put the root directly in `<body>` with no `<template>` wrapper.
77
+
78
+ ## Common pitfalls that pass static checks but break at render
79
+
80
+ Static file checks cannot prove the **cross-file mount contract**. These failures appear only when the runtime mounts the sub-composition. Watch for them at author time and verify with the pre-render snapshot checklist below.
81
+
82
+ ### Pitfall 1 — `<style>` in `<head>` instead of inside `<template>`
83
+
84
+ ```html
85
+ <!-- ❌ WRONG — looks normal, ships catastrophically broken -->
86
+ <head>
87
+ <style>
88
+ #root { font-size: 88px; ... }
89
+ </style>
90
+ </head>
91
+ <body>
92
+ <template>
93
+ <div id="root" data-composition-id="data-chart" ...>...</div>
94
+ </template>
95
+ </body>
96
+
97
+ <!-- ✅ RIGHT — styles are inside the template, root styled by #root (see Pitfall 3) -->
98
+ <head></head>
99
+ <body>
100
+ <template>
101
+ <style>
102
+ #root { font-size: 88px; ... }
103
+ </style>
104
+ <div id="root" data-composition-id="data-chart" ...>...</div>
105
+ </template>
106
+ </body>
107
+ ```
108
+
109
+ **Why this happens:** standard HTML conventions tell you to put `<style>` in `<head>`. In a standalone HTML file that's correct. In a HyperFrames sub-composition it is **not** — the runtime only clones `<template>` contents, so `<head><style>` is dropped on the floor.
110
+
111
+ **Symptom:** isolated checks pass and the render completes, but every text element appears as tiny unstyled default text in the top-left and SVGs expand to canvas size because no CSS reached the live DOM. The same trap applies to `<script>` blocks, `<link rel="stylesheet">`, and custom-element registrations: anything that must execute or apply in the render belongs inside `<template>`.
112
+
113
+ ### Pitfall 2 — Host `data-composition-id` ≠ inner template `data-composition-id`
114
+
115
+ ```html
116
+ <!-- ❌ WRONG — host renames the slot; runtime can't find the timeline -->
117
+ <!-- host file (e.g. index.html) -->
118
+ <div data-composition-id="chart-mount" data-composition-src="compositions/chart.html" ...></div>
119
+
120
+ <!-- chart.html -->
121
+ <template>
122
+ <div data-composition-id="data-chart" ...>...</div>
123
+ <script>
124
+ window.__timelines["data-chart"] = tl;
125
+ </script>
126
+ </template>
127
+
128
+ <!-- ✅ RIGHT — both ids match, and the timeline key matches them too -->
129
+ <div data-composition-id="data-chart" data-composition-src="compositions/chart.html" ...></div>
130
+ <!-- chart.html template root: data-composition-id="data-chart" -->
131
+ <!-- timeline: window.__timelines["data-chart"] = tl; -->
132
+ ```
133
+
134
+ **Why this happens:** it feels natural to give the host slot a different name like `chart-mount` ("the mount point") vs `data-chart` ("the actual chart"). HyperFrames does not work that way — **the host's `data-composition-id` is the lookup key the framework uses to find the registered timeline**. Lint passes because each file's ids are individually valid; the cross-file mismatch only blows up at render.
135
+
136
+ **Symptom:** the render logs `Sub-composition timelines not registered after 45000ms: <host-id>` for every mismatched slot, waits 45s per scene, then captures static initial-state frames (so the video is full-length but no animation plays).
137
+
138
+ ### Pitfall 3 — Styling the root by a class instead of `#root`
139
+
140
+ ```html
141
+ <!-- ❌ WRONG — class on the root, stylesheet keyed off it -->
142
+ <template>
143
+ <style>
144
+ .frame {
145
+ position: absolute;
146
+ inset: 0;
147
+ background: #faf9f5;
148
+ }
149
+ .frame .title {
150
+ font-size: 120px;
151
+ }
152
+ </style>
153
+ <div id="root" class="frame" data-composition-id="03-scene" ...>
154
+ <div class="title">…</div>
155
+ </div>
156
+ </template>
157
+
158
+ <!-- ✅ RIGHT — root styled by #root, descendants by plain selectors -->
159
+ <template>
160
+ <style>
161
+ #root {
162
+ position: absolute;
163
+ inset: 0;
164
+ background: #faf9f5;
165
+ }
166
+ .title {
167
+ font-size: 120px;
168
+ }
169
+ </style>
170
+ <div id="root" data-composition-id="03-scene" ...>
171
+ <div class="title">…</div>
172
+ </div>
173
+ </template>
174
+ ```
175
+
176
+ **Why this happens:** when sub-compositions are inlined into one composited render, the compiler **scopes each file's CSS to its own `data-composition-id`** so scenes can't leak styles into each other: every rule `S` becomes `[data-composition-id="<id>"] S` (a _descendant_ selector). A rule whose leftmost selector is the **root's own class** (`.frame`) therefore becomes `[data-composition-id="<id>"] .frame`, which cannot match the scoped element itself. `#root` is special-cased by the scoper and keeps matching the root; plain descendant selectors (`.title`) match normally. The per-scene class namespace is also just redundant, since the `data-composition-id` scope already isolates each scene's styles.
177
+
178
+ **What actually happens today:** the render no longer drops these rules. Since #1886 the producer preserves the authored root as a `data-hf-inner-root` wrapper _inside_ the scoped element, so a class on the root still matches as a descendant and preview and render agree. The regression is pinned by `packages/producer/tests/sub-comp-class-selector/`.
179
+
180
+ **So why still use `#root`?** Because `lint` rejects the class form outright (`subcomposition_root_styled_by_class`, **error**), and it is the pattern the registry blocks model (e.g. `apple-money-count`). Treat this as a lint constraint you must satisfy, not as a render bug you are avoiding. If you inherited a composition that styles its root by class, it renders correctly; you still have to convert it to `#root` to get a green `lint`.
181
+
182
+ ### Verification checklist before render
183
+
184
+ ```bash
185
+ # For every sub-composition file in compositions/:
186
+ # 1) <style> + <script> + main markup all live INSIDE <template>
187
+ grep -n "<style\|<script\|<template" compositions/<scene>.html
188
+ # → first <style>/<script>/<div data-composition-id> should be AFTER <template>, before </template>
189
+
190
+ # 2) host data-composition-id == internal data-composition-id == window.__timelines key
191
+ grep "data-composition-id" index.html
192
+ grep "data-composition-id\|__timelines\[" compositions/<scene>.html
193
+ # → all three strings must match exactly per scene
194
+
195
+ # 3) the root is styled by #root, not by a class on the data-composition-id element
196
+ grep -n 'data-composition-id=' compositions/<scene>.html
197
+ # → that element should NOT also carry a class="…" that the <style> keys off
198
+ # (e.g. `.frame { … }`); scoping drops it. Style the root via #root. See Pitfall 3.
199
+ ```
200
+
201
+ For the runtime end-to-end check (a fast `snapshot` pass + per-scene frame eyeball), see the **Visual smoke test** step in `hyperframes-cli`'s Minimum Completion Gate — that is the only gate that catches these three pitfalls.
202
+
203
+ ## What HyperFrames Does With the Sub-Composition
204
+
205
+ - Loads the file and registers its timeline under its internal `data-composition-id`.
206
+ - Seeks the sub-composition's timeline independently from the host's playhead.
207
+ - Plays the sub-composition's content from `data-start` of the host clip, for `data-duration` seconds.
208
+
209
+ **Do not** manually `master.add(child)` a sub-composition timeline into the host timeline. HyperFrames already drives them independently — nesting them in GSAP causes double-seeks.
210
+
211
+ ### The host clip's `data-duration` is the slot's visible window
212
+
213
+ `data-duration` on the host clip defines **how long the slot is visible**, and it takes precedence over the sub-composition's internal GSAP timeline length. Two consequences follow:
214
+
215
+ - **Internal timeline shorter than the slot → the slot holds.** If the sub-composition's GSAP timeline finishes before `data-duration` elapses, the slot keeps showing its final frame for the rest of the window. You do **not** need to pad the timeline with empty tweens.
216
+ - **`data-duration` shorter than the host composition → the slot ends (and goes blank) when its own `data-duration` elapses.** This is intended: the clip is a fixed-length window on the timeline, not "fill until the composition ends." To keep a sub-composition visible for the whole composition, set its `data-duration` to span the host window (or add another clip to cover the remaining time). Leaving a single full-bleed sub-composition shorter than the composition is almost always a mistake — the linter flags it as `subcomposition_blanks_before_host`.
217
+
218
+ ## Animations Inside Sub-Compositions
219
+
220
+ Prefer `gsap.fromTo()` over `gsap.from()` for entrance tweens. The host re-seeks the sub-composition every time its clip becomes visible; `gsap.from()` records the starting state at registration and can desync on seek-back, while `gsap.fromTo()` declares both endpoints explicitly and replays cleanly.
221
+
222
+ ## Per-Instance Variables
223
+
224
+ If the sub-composition declares variables on its `<html>` element (`data-composition-variables`), the host can override values per instance:
225
+
226
+ ```html
227
+ <div
228
+ data-composition-id="data-chart"
229
+ data-composition-src="compositions/data-chart.html"
230
+ data-variable-values='{"title":"Q4 Revenue","accent":"#66d9ef"}'
231
+ data-start="2"
232
+ data-duration="8"
233
+ data-track-index="2"
234
+ data-width="1920"
235
+ data-height="1080"
236
+ ></div>
237
+ ```
238
+
239
+ The host can render the same sub-composition multiple times with different `data-variable-values` to produce per-instance variations. See `variables-and-media.md` for variable declaration syntax.