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,94 @@
1
+ ---
2
+ name: hyperframes-core
3
+ description: The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Also covers Tailwind projects and the STORYBOARD.md / SCRIPT.md plan formats. Read before writing composition HTML.
4
+ ---
5
+
6
+ # HyperFrames Core
7
+
8
+ HyperFrames renders video from HTML. A composition is an HTML file whose DOM declares timing with `data-*` attributes, whose animation runtime is seekable, and whose media playback is owned by the framework.
9
+
10
+ This skill is the **technical contract** — how to build one hyperframes project. The body below is the build guide; per-topic detail lives in `references/` (index next), read on demand. Other concerns live in the sibling domain skills — `hyperframes-animation`, `hyperframes-creative`, `media-use`, `hyperframes-cli`, `hyperframes-registry`. The capability map in `/hyperframes` says what each one covers.
11
+
12
+ ## References
13
+
14
+ | File | Read it to… |
15
+ | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
16
+ | `references/minimal-composition.md` | start from the smallest renderable composition skeleton |
17
+ | `references/composition-patterns.md` | choose monolithic vs modular; structure a modular `index.html`; pick a sub-comp archetype |
18
+ | `references/data-attributes.md` | look up any `data-*` (root / clip / sub-comp host / legacy aliases); use `class="clip"` |
19
+ | `references/tracks-and-clips.md` | understand what `data-track-index` does (and does not) control, z-index, time a clip relative to another |
20
+ | `references/creator-editing-recipes.md` | copy truthful cut/trim/reorder/retime/freeze/camera/mask/crossfade/audio editing recipes and their limits |
21
+ | `references/sub-compositions.md` | wire a sub-composition (host attrs, `<template>`, per-instance vars) and animate inside it |
22
+ | `references/variables-and-media.md` | declare variables; place `<video>`/`<audio>`, set volume, trim |
23
+ | `references/determinism-rules.md` | build a seekable timeline; determinism bans; layout / text fit |
24
+ | `references/full-screen-motion.md` | author full-frame motion with shared backgrounds |
25
+ | `references/storyboard-format.md` | author a `STORYBOARD.md` plan (+ the parsed manifest) |
26
+ | `references/review-loop.md` | run the plan → sketch → build review passes on a live board — shared by every storyboard-planning workflow |
27
+ | `references/production-loop.md` | take an approved plan to a delivered video — the stage dependencies (audio, frames, assembly, transitions, captions, verify, deliver) a freeform build follows directly |
28
+ | `references/brief-contract.md` | the brief's ground rules — mode derivation (collaborative / autonomous), shared field registry, question invariants (the asking itself lives in `/hyperframes` → the intent layer) |
29
+ | `references/brief-format.md` | author `BRIEF.md` — the confirmed intent document a workflow's Setup writes and every later step reads |
30
+ | `references/script-format.md` | author the optional `SCRIPT.md` locked narration |
31
+ | `references/subagent-dispatch.md` | map subagent dispatch verbs (parallel fan-out / background / wait) to your harness |
32
+ | `references/frame-worker-core.md` | the shared frame-worker role contract — each narrative workflow's packet builder prepends it to that workflow's `sub-agents/frame-worker.md` delta |
33
+ | `references/tailwind.md` | work in a Tailwind v4 project (`init --tailwind`; runtime contract differs from Studio's v3) |
34
+
35
+ For animation runtime specifics (GSAP API, Lottie, Three.js, etc.) go to `hyperframes-animation` → `adapters/<runtime>.md`.
36
+
37
+ ## Building a composition
38
+
39
+ ### Two root forms (not interchangeable)
40
+
41
+ - **Standalone** (top-level `index.html`): root `<div data-composition-id="…">` sits directly in `<body>`, **no `<template>` wrapper**. Wrapping a standalone root hides all content and `lint` rejects it (`standalone_composition_wrapped_in_template`, error).
42
+ - **Sub-composition** (loaded via `data-composition-src`): wrap the root in `<template>`. This is the shape to write: the loader also accepts a plain full document and falls back to its `<body>`, but the templated form is what the examples and tooling assume.
43
+
44
+ > ⚠ Transport rule: for a **templated** sub-composition the assembler drops the file's own `<head>` `<style>`/`<script>` (`packages/core/src/compiler/compositionAssembly.ts`, the `hasTemplate` gate), so put `<style>`/`<script>` **inside** the template. `<link>` is hoisted either way.
45
+ > ⚠ Host-id convention: give the host slot, the inner template, and the `window.__timelines["<id>"]` key the **same** id. A different local id is supported (the assembler falls back to the first root in the file) but the mismatch is silent, so match them unless you have a reason not to.
46
+
47
+ File shape, host wiring, and the pre-render checklist → `references/sub-compositions.md`.
48
+
49
+ ### Root must be sized (silent layout bug)
50
+
51
+ The standalone root needs an explicit **sized box** (`width`/`height` in px), and every ancestor down to a `height:100%` element must have a resolved height — otherwise a flex/`100%` child collapses to ~0 and content piles into the top-left corner. Do not rely on automated gates alone to catch this; inspect a snapshot. Skeleton → `references/minimal-composition.md`.
52
+
53
+ ### One paused timeline
54
+
55
+ Each composition registers **exactly one** `gsap.timeline({ paused: true })` at `window.__timelines["<id>"]` (key = root `data-composition-id`). Building it inside an async callback (`document.fonts.ready`) is supported; what matters is that you **register only after the build completes**. Render length is the root's `data-duration`, **not** the timeline's length: a timeline that runs past it is cut off, and one that ends early holds its last frame. Omit the root `data-duration` and the length is inferred instead (timeline, media window, or adapter). You do not need `window.__timelines = window.__timelines || {}`: the runtime creates the registry before your inline scripts run, and `lint` no longer asks for it. Don't manually nest sub-timelines into the host; the runtime auto-nests registered child timelines. Full contract (incl. non-GSAP runtimes) → `references/determinism-rules.md` + `hyperframes-animation/adapters/`.
56
+
57
+ ### First-pass lint gotchas (a guaranteed first build failure)
58
+
59
+ Rules that `lint` **does** catch, but only after the fact. Write them right the first time:
60
+
61
+ - Never pair a CSS initial `transform` with a GSAP tween on the **same** property — the CSS value and the tween's start fight and `lint` rejects it with `gsap_css_transform_conflict`. Set the initial state inside the tween with `gsap.fromTo(el, { x: -40 }, { x: 0 })` instead of a CSS `transform: translateX(-40px)`.
62
+ - Never put `crossorigin` on `<video>`/`<audio>`. `lint` rejects it unconditionally with `media_crossorigin_breaks_preview` (error), including for canvas/WebGL/WebAudio readback. There is no suppression.
63
+ - Never give a `<video data-start>` an ancestor that also carries `data-start`. `lint` rejects it with `video_nested_in_timed_element` (error). Time the wrapper **or** the video, not both.
64
+ - Every `<audio>` needs an `id`. `lint` rejects it with `media_missing_id`, and an id-less `<audio>` is never picked up by the mixer, so the render is **silent**.
65
+
66
+ A lint **error** also switches off the layout and contrast audits: `check` then reports `0 sample(s)` and `0/0 text checks`, which reads like a clean file but means nothing ran. Clear lint errors before you trust those numbers.
67
+
68
+ ### Non-negotiable rules (silent bugs automated gates may miss)
69
+
70
+ Surfaced here; full rationale in the linked reference. Do not violate:
71
+
72
+ - No render-time clocks / unseeded `Math.random` / network / input-state; no `repeat: -1` (use a finite count). → `determinism-rules.md`
73
+ - Never tween `display` or raw `visibility` on a clip element. The framework owns clip visibility, and `lint` rejects it. Use GSAP `autoAlpha` or a zero-duration boundary `set`. (Tweening ordinary visual properties on a clip element is fine; what lint forbids is taking over its visibility.) → `determinism-rules.md`
74
+ - No `<br>` in body text; transformed elements must be block-level + sized; pulsing absolute decoratives need peak clearance. → `determinism-rules.md`
75
+ - `<video>`/`<audio>` are found by a flat document query, so the framework seeks and decodes them at **any nesting depth** (including inside a sub-comp `<template>` or wrapper). One hard limit: `lint` errors if a `<video data-start>` sits inside another **plain** element that also has `data-start`, and the failure is real (wrong source frames, then the clip vanishes mid-slot), so put the timing on the wrapper or on the video, never both. Sub-composition hosts are exempt: media inside a sub-composition renders correctly. The other caveat is timelines, not placement: a sub-comp timeline can't animate host-root elements. → `variables-and-media.md`
76
+ - Keep every `id` unique across the **assembled** page (prefix sub-comp ids with the composition id, `#<id>-hero`) so your own `#id` CSS and `getElementById` calls resolve. Frame injection no longer depends on it: the compiler stamps a document-unique `data-hf-render-id` on every `video[src]`/`audio[src]`/`img[src]`. Media that uses `<source>` children instead of a `src` attribute is **not** stamped, so unique ids still matter there. → `composition-patterns.md`
77
+ - A full-screen fill on the composition **root** is fine on a normal render. It is dropped only on the layered-composite path (HDR content, or a composition using shader transitions), where the engine forces every composition root transparent so the layer beneath shows through. If your composition uses shader transitions or HDR media, put the fill on a full-bleed **child** (`position:absolute; inset:0`). → `composition-patterns.md`
78
+
79
+ ## Editing existing compositions
80
+
81
+ - Read the files first. Preserve unrelated timing, tracks, IDs, variables, media paths.
82
+ - Match existing composition IDs and timeline keys.
83
+ - Adding a clip: set its `data-start`/`data-duration` intentionally against the clips around it. `data-track-index` is a Studio display lane, not a timing constraint, so it does not need to be free.
84
+ - `data-hidden` on any composition element hides it in BOTH preview and render, overriding its time window; it is non-destructive/reversible and toggled by Studio's timeline eye icon.
85
+ - Adding a sub-composition: verify its internal `data-composition-id` before wiring the host.
86
+
87
+ ## Validation
88
+
89
+ Use `hyperframes-cli` for command details
90
+
91
+ - [ ] `npx hyperframes check` passes (0 findings across lint, runtime, layout, motion, and contrast)
92
+ - [ ] Projects with sub-compositions: `npx hyperframes snapshot --at <midpoints>` and eyeball each frame
93
+ - [ ] `npx hyperframes preview --background` for review (the user can edit anything in Studio's timeline, and the server survives the invoking command)
94
+ - [ ] `npx hyperframes render` only after the user approves
@@ -0,0 +1,108 @@
1
+ # Brief contract
2
+
3
+ The intent layer (`/hyperframes` → `references/intent-interview.md`) asks creation questions once. The executing workflow writes the confirmed result to `BRIEF.md` and does not ask those questions again. This contract defines the canonical run-shape fields, shared brief fields, and question rules. Route-specific options live in `/hyperframes` → `references/routes/<workflow>.md`.
4
+
5
+ ## Contents
6
+
7
+ - [Run shape](#1-run-shape)
8
+ - [Shared fields](#2-shared-fields)
9
+ - [Question protocol](#3-question-protocol)
10
+
11
+ ## 1. Run shape
12
+
13
+ Three terms describe different concerns. Do not substitute one for another.
14
+
15
+ | Term | Values | Owns |
16
+ | ------------ | ------------------------------- | --------------------------------------------------------------------------------------------- |
17
+ | `flow` | `automation` or `companion` | Who drives execution. `companion` always executes in `/general-video`. |
18
+ | `storyboard` | `yes` or `no` | Whether the live board is used for plan and layout review. |
19
+ | `mode` | `collaborative` or `autonomous` | How later preference and checkpoint gates behave. The user never chooses this label directly. |
20
+
21
+ Derive `mode` once from the confirmed run shape:
22
+
23
+ | `flow` | `storyboard` | Derived `mode` |
24
+ | ------------ | ------------ | --------------- |
25
+ | `companion` | either value | `collaborative` |
26
+ | `automation` | `yes` | `collaborative` |
27
+ | `automation` | `no` | `autonomous` |
28
+
29
+ Default to `collaborative` only when a legacy project lacks enough state to derive a mode. `/motion-graphics` is autonomous by design and does not need the two run-shape questions.
30
+
31
+ ### Signals and persistence
32
+
33
+ - An ongoing signal such as “surprise me”, “decide for me”, “just build it”, or “stop asking” sets `flow: automation`, `storyboard: no`, and therefore `mode: autonomous` when it appears during intent capture.
34
+ - A bare “go” or “looks good” at a checkpoint accepts that checkpoint only. It does not change mode.
35
+ - After `STORYBOARD.md` exists, persist the derived mode in its frontmatter. On resume, an explicit `mode` in `STORYBOARD.md` overrides the derivation because it may represent a later user change.
36
+ - Mid-run “stop asking; finish it” changes only checkpoint behavior. Set `STORYBOARD.md` `mode` to `autonomous` when the file exists. Do not rewrite the already-confirmed `flow` or `storyboard` fields.
37
+ - Resume collaborative checkpoints only after an explicit signal such as “let's review together”; ordinary feedback does not change mode.
38
+
39
+ ### Gate behavior
40
+
41
+ | Gate | Collaborative | Autonomous |
42
+ | ------------------------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
43
+ | Preference: preset, voice, caption identity | Ask when the workflow marks it as required. | Decide and state the choice with a one-line reason. |
44
+ | Checkpoint: plan, sketches, pre-render review | Ask and wait. | Post the same summary, then continue. |
45
+ | Quality: fetch completeness, `lint`, `hyperframes check`, workflow verification | Run and stop on errors. | Run and stop on errors. |
46
+ | Routing ambiguity | Resolve explicitly; a wrong route changes the deliverable. | Same requirement. |
47
+ | Sign-in or credential unavailable | Show status and wait for sign-in or explicit offline selection. | Show status and continue through an available offline provider. |
48
+
49
+ Autonomous mode never silently drops a required capability. If the selected workflow has no local, cached, or offline provider for it, surface the blocker instead of omitting the capability. A credential problem does not relax the quality gates.
50
+
51
+ Rendering remains user-gated in both modes. After checks pass, collaborative runs ask “render now, or what changes?” Autonomous runs ask “preview first, or render?” Render only after the answer.
52
+
53
+ ### Studio comments
54
+
55
+ Checkpoint feedback may arrive in chat or in `.hyperframes/frame-comments.json` (format: `storyboard-format.md`). When the user replies to a checkpoint, read that file before interpreting the chat reply. Apply only the named frame changes, delete the comments file after handling it, and re-present the affected frames. A board submission does not notify the agent, so tell the user to reply in chat after submitting comments.
56
+
57
+ Autonomous is not silent: replace absorbed questions with visible decisions and short reasons. Every autonomous visual or video delivery names the final preview or rendered artifact as applicable, reports the actual duration for a time-based deliverable, and includes a contact sheet or snapshot sheet plus relevant frame identifiers when available. For multi-scene work, use scene midpoints; for a single-scene piece, use one or more proof times. This gives the user a review surface even though intermediate checkpoints did not pause.
58
+
59
+ ## 2. Shared fields
60
+
61
+ Ask only fields used by the selected route. Route entries identify their must-have questions and deferred questions. Values inferred or derived by policy are stated in the brief, not asked.
62
+
63
+ | Field | Meaning | Policy |
64
+ | ------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
65
+ | `flow` | Who drives execution | Ask at the end of intent capture when the route supports both flows. An autonomous signal answers it. |
66
+ | `storyboard` | Whether to review on the live board | Ask before `flow` when the route supports a board. A storyboard request answers it. |
67
+ | `destination` | Where the video will play | Infer from the request. Ask only when unknown and the answer changes aspect, type scale, or composition. |
68
+ | `aspect` | Canvas size | Derive from destination: social feed → `1080x1080`; TikTok/Reels/Shorts → `1080x1920`; YouTube/website/desktop → `1920x1080`. State the derivation. |
69
+ | `length` | Target duration | Let the workflow recommend a range supported by the material; include the reason. |
70
+ | `language` | Narration and caption language | Use the user's language and state it. |
71
+ | `audience` | Who will watch | Infer when clear. Ask only when a different answer changes the story or terminology. |
72
+ | `message` | The one thing the video must communicate | Derive and echo one sentence. Do not storyboard until this is clear. |
73
+ | `angle` | Route-specific story shape | Recommend one route-defined option with a reason. |
74
+ | `narration` | `yes`, `minimal`, or `no`, plus route-specific modes | Follow the selected route. |
75
+
76
+ ### Remembered defaults
77
+
78
+ Let `<MEDIA_DIR>` be the installed `/media-use` skill directory. Let `<MEMORY_ROOT>` be the existing project root. Before scaffolding, use a deliberately nonexistent probe path with no `.media` ancestor, such as `/tmp/hyperframes-intent-memory-<run-id>`; never use the current workspace as the probe. Read merged preferences with:
79
+
80
+ ```bash
81
+ node <MEDIA_DIR>/scripts/prefs.mjs get --hyperframes <MEMORY_ROOT> --json
82
+ ```
83
+
84
+ For the pre-project probe, `<MEMORY_ROOT>` is the nonexistent probe path, so only the personal tier can contribute. If that path already exists or contains `.media`, choose another. Do not claim project provenance before the real project exists.
85
+
86
+ A remembered value becomes the recommended answer and names its source. It never overrides the current request and never skips a required question. A confirmed recipe is different: adopting the bundle may fill the fields it contains because adoption itself is the confirmation.
87
+
88
+ Record only values the user confirmed, never values merely inferred or defaulted. Recording happens after the workflow writes `BRIEF.md`; supported keys are listed in `brief-format.md`. A user who sees the recommendation and accepts it has confirmed it. Personal defaults promote only according to `/media-use` memory rules.
89
+
90
+ The first time a project records a preference, say one short line that it will be remembered for future runs. Do not re-record a remembered value merely because an autonomous build reused it; only a confirmation in the current run creates a new memory event.
91
+
92
+ ## 3. Question protocol
93
+
94
+ Follow these invariants:
95
+
96
+ 1. Ask only unanswered fields that materially affect the output.
97
+ 2. Ask one field per message and wait for its answer before asking the next field.
98
+ 3. Put the recommended option first and attach a short reason. A numbered choice list is allowed, but every option in that list must answer the same field. Option lists fit factual fields (destination, length, language), where they scaffold recall; a creative field (message, angle, tone) the request has not already shaped takes an anchored open question — a list there steers the answer instead of collecting it.
99
+ 4. Skip a question when the current request already answers it. Inference alone is not an answer.
100
+ 5. Ask `storyboard` and then `flow` last, only for routes that support them.
101
+ 6. Announce deferred questions before hand-off; do not surprise the user later.
102
+ 7. When an autonomous signal appears, ask no remaining preference or checkpoint questions. State the completed brief and the reasons for decisions, then build.
103
+ 8. Use native question UI when available. Otherwise send one plain-text question with one numbered option list; never place several fields in the same list.
104
+ 9. Before the hand-off summary, run one integration check: look for a consequence the combined answers create that no single answer showed, and surface it with a proposed adjustment.
105
+ 10. The hand-off summary separates fields the user stated from fields that were inferred or defaulted, with receipts on both.
106
+ 11. Revision is not confirmation: after any correction to the summary, present the updated summary and confirm before executing.
107
+
108
+ At a checkpoint, “go” accepts that checkpoint's displayed recommendation. If a message explicitly presents a complete brief and says that “go” will accept every displayed default, then “go” may confirm that whole displayed brief; do not assume broader acceptance without that sentence.
@@ -0,0 +1,72 @@
1
+ # Brief format — `BRIEF.md`
2
+
3
+ Defines the **intent document** — the file a confirmed brief becomes. The questions that fill it live in the intent layer (`/hyperframes` → `references/intent-interview.md` + its `references/routes/<workflow>.md`); the field semantics live in `brief-contract.md` § 2. This file defines only the artifact: its shape, its home, and its lifecycle.
4
+
5
+ `BRIEF.md` sits at the project root, and the project's files read as four layers: **`BRIEF.md`** (why, for whom, and everything the user asked for) → **`STORYBOARD.md`** (what, frame by frame) → **`frame.md`** (how it looks) → **`compositions/`** (the thing itself).
6
+
7
+ ## Frontmatter — the confirmed fields
8
+
9
+ YAML block at the top: one key per deterministic field — the run's shape first, then the registry fields (`brief-contract.md` § 2) used by the route. Store canonical normalized values. Some values come directly from the user; others, such as `workflow`, `aspect`, and `language`, are routed, derived, or normalized and must use the vocabulary defined by the contract. Preserve the user's own wording in the body when it matters.
10
+
11
+ | Key | Meaning | Example |
12
+ | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
13
+ | `workflow` | the executing workflow (companion runs record `general-video`) | `faceless-explainer` |
14
+ | `flow` | `automation` — the matched workflow's pipeline · `companion` — co-creation in `/general-video` | `automation` |
15
+ | `storyboard` | `yes` — plan, sketches, and build reviewed on the live board (`review-loop.md`) · `no` — one shot from the confirmed brief | `yes` |
16
+ | `message` | the ONE thing the video must communicate | `"Ship it in an afternoon"` |
17
+ | `destination` / `aspect` / `language` / `audience` / `length` / `angle` … | the registry fields this route confirmed | — |
18
+
19
+ **Which keys are memory.** Only the preference-backed subset — `destination`, `aspect`, `language`, `flow`, `storyboard`, `voice`, `style_preset` — is recorded with `media-use` → `scripts/prefs.mjs record` (the store rejects any other key). `style_preset` is stored per workflow: record it with `--workflow <w>` (the store refuses it bare — a look confirmed for one genre is not a default for the others). `message`, `audience`, `length`, `angle` live in the frontmatter only: they describe this video, not the user.
20
+
21
+ ## Body — the intent in prose
22
+
23
+ Four sections, each optional — write what the intent layer actually learned, omit what it didn't:
24
+
25
+ - `## Intent` — a short paragraph: what the video is, for whom, why now; tone and feel in the user's own words.
26
+ - `## Assets` — the user's own material, one line each: `path — what it is, where it belongs`. Files named here are staged by the workflow, never re-discovered.
27
+ - `## Customizations` — capabilities the user opted into from the menu (`/hyperframes` → `references/capability-menu.md`) and any bespoke asks ("count-up on the revenue stat", "capture the pricing page too"), each with enough detail to act on.
28
+ - `## Notes` — everything true that fits no field: constraints, references, things to avoid.
29
+
30
+ Body prose is **project-local** — nothing in it enters cross-project memory. (Frozen recipes carry a blanked skeleton of it; a future prose-memory layer would extract from here, under its own approval rules.)
31
+
32
+ ## Lifecycle
33
+
34
+ - **Created once, by the workflow's Setup, as its first action after `hyperframes init`** — never before (`init` refuses a non-empty directory). The intent layer confirms the answers pre-project; Setup makes them durable, then records the preference-backed fields. Later confirmed changes update this same file.
35
+ - **It is the no-repeat token.** A workflow that finds `BRIEF.md` reads it and asks no brief question. Its `workflow:` names the executor — a workflow that finds another's name there is in the wrong room: load that skill and hand over, don't re-route through the intent layer. No `BRIEF.md` but the project exists (`hyperframes.json` / `STORYBOARD.md` on disk) → a pre-BRIEF project: resume from the storyboard's frontmatter and the recorded preferences, optionally backfilling `BRIEF.md` from what they already say — never re-interrogate a half-built project.
36
+ - **It stays the run's truth.** A mid-run decision updates it as it happens: an explicit change to a frontmatter field ("make it 9:16 after all") rewrites the field and re-records the preference — a changed mind is a confirmed answer; an accepted capability, adopted material, or bespoke ask lands as one line in the matching body section. Resume reads this file, so write-back is what makes a dead session resumable — a decision that lives only in chat is a decision resume never sees.
37
+ - **Execution mode derives; the storyboard's copy wins on resume.** `flow` × `storyboard` derive collaborative/autonomous checkpoint behavior (`brief-contract.md` § 1). Persist the derived mode in `STORYBOARD.md` frontmatter when that file exists. A mid-run mode-only switch updates `STORYBOARD.md`, not the already-confirmed `flow` or `storyboard`; an explicit change to either run-shape field still updates `BRIEF.md`.
38
+ - **`message` / `audience` live here first.** `STORYBOARD.md` frontmatter keeps its copies — the board and the parser read them — but when the two disagree, `BRIEF.md` holds what the user confirmed.
39
+ - **Recipes carry its skeleton.** Freezing a recipe (`review-loop.md` § 4) captures `brief-skeleton.md` — frontmatter structure kept, run-shape and content values blanked — so the next run starts pre-filled yet still confirms its own two run-shape answers.
40
+
41
+ ## Example
42
+
43
+ ```markdown
44
+ ---
45
+ workflow: faceless-explainer
46
+ flow: automation
47
+ storyboard: yes
48
+ message: "Compound interest is a snowball, not a ladder"
49
+ destination: x-feed
50
+ aspect: 1080x1080
51
+ language: en
52
+ length: 60s
53
+ angle: concept
54
+ ---
55
+
56
+ ## Intent
57
+
58
+ Teach retail investors why starting early beats contributing more. Confident,
59
+ a little playful — closer to a bar-napkin sketch than a lecture.
60
+
61
+ ## Assets
62
+
63
+ - public/growth-curve.png — the real 30-year S&P chart; the proof beat builds on it.
64
+
65
+ ## Customizations
66
+
67
+ - Count-up on the final dollar figure.
68
+
69
+ ## Notes
70
+
71
+ - No stock-photo aesthetics; keep it typographic.
72
+ ```
@@ -0,0 +1,263 @@
1
+ # Composition Patterns
2
+
3
+ How to architect a project — when to inline everything in one HTML, when to split into sub-compositions, what the `index.html` orchestrator looks like at scale, and the common sub-composition archetypes seen in real projects. Pair with `minimal-composition.md` (single-file shape) and `sub-compositions.md` (mechanics of a sub-comp file).
4
+
5
+ ## Two Architectures
6
+
7
+ | | Monolithic (single file) | Modular (sub-compositions) |
8
+ | --------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ |
9
+ | Project layout | `index.html` only | `index.html` + `compositions/<scene>.html` per scene |
10
+ | Where scenes live | Inline `<section class="clip">` siblings under the root | Each scene is a separate file wrapped in `<template>` |
11
+ | Timeline registration | One timeline keyed at the root's `data-composition-id` | Root timeline (often near-empty) + one timeline per sub-comp, each keyed by its `id` |
12
+ | Routing entry | `references/minimal-composition.md` | `references/sub-compositions.md` |
13
+
14
+ Both architectures use the same runtime contract — `data-*` attributes + `window.__timelines[id]`. The choice is structural, not behavioral.
15
+
16
+ ### Pick monolithic when
17
+
18
+ - The whole video is one continuous scene with no hard cuts.
19
+ - Scenes share heavy state (one canvas/WebGL context spanning the whole video, a single SVG that morphs across all beats).
20
+ - Total scope is small (~200–400 lines of markup + script).
21
+ - No scene is reused across projects.
22
+
23
+ ### Pick modular when
24
+
25
+ - The video has clear scene cuts — each scene is its own segment of the timeline.
26
+ - Some scenes are large (>100 lines of markup or significant scripted animation).
27
+ - A scene is reusable (kinetic intro, end-card logo lockup, a transition).
28
+ - The video has a continuous audio track over multiple visual segments. Keep audio at the root, visual segments as sub-comps.
29
+ - You want to author/iterate on scenes in isolation (preview a single sub-comp file directly).
30
+
31
+ ### Refactor between them
32
+
33
+ Conversion is mechanical and reversible. To lift a monolithic scene into a sub-comp: wrap the scene's markup + scoped CSS + its slice of the parent timeline into a `<template>`, save as `compositions/<scene>.html`, replace the inline content in `index.html` with a slot `<div data-composition-src="compositions/<scene>.html">`, and have the sub-comp register its own timeline at `window.__timelines["<scene>"]`. The parent timeline shrinks accordingly.
34
+
35
+ If a monolithic project is approaching three or more scene cuts, prefer modularizing _before_ adding the next scene. Mixed projects where some scenes are inline and siblings are in `compositions/` are the hardest to maintain.
36
+
37
+ ## Modular Orchestrator Pattern
38
+
39
+ When using sub-compositions, `index.html` should be **thin**. Its job is to declare slots, lay them out in time, mount the audio track, and register a (usually empty) root timeline. All scene animation lives inside the sub-comps.
40
+
41
+ ```html
42
+ <!doctype html>
43
+ <html lang="en">
44
+ <head>
45
+ <meta charset="UTF-8" />
46
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
47
+ <style>
48
+ body {
49
+ margin: 0;
50
+ background: #000;
51
+ }
52
+ #root {
53
+ position: relative;
54
+ width: 1920px;
55
+ height: 1080px;
56
+ overflow: hidden;
57
+ }
58
+ /* Sub-comp slots stretch to fill the root. */
59
+ [data-composition-id="root"] > div[data-composition-src] {
60
+ position: absolute;
61
+ inset: 0;
62
+ }
63
+ </style>
64
+ </head>
65
+ <body>
66
+ <div
67
+ id="root"
68
+ data-composition-id="root"
69
+ data-width="1920"
70
+ data-height="1080"
71
+ data-duration="30"
72
+ >
73
+ <!-- Sequential scenes — each one a sub-composition slot. -->
74
+ <div
75
+ id="el-intro"
76
+ data-composition-id="intro"
77
+ data-composition-src="compositions/intro.html"
78
+ data-start="0"
79
+ data-duration="6"
80
+ data-track-index="1"
81
+ ></div>
82
+
83
+ <div
84
+ id="el-body"
85
+ data-composition-id="body"
86
+ data-composition-src="compositions/body.html"
87
+ data-start="6"
88
+ data-duration="18"
89
+ data-track-index="1"
90
+ ></div>
91
+
92
+ <div
93
+ id="el-outro"
94
+ data-composition-id="outro"
95
+ data-composition-src="compositions/outro.html"
96
+ data-start="24"
97
+ data-duration="6"
98
+ data-track-index="1"
99
+ ></div>
100
+
101
+ <!-- Continuous audio at the root — survives scene cuts. -->
102
+ <audio
103
+ id="el-bgm"
104
+ src="assets/bgm.mp3"
105
+ data-start="0"
106
+ data-duration="30"
107
+ data-track-index="10"
108
+ data-volume="0.6"
109
+ ></audio>
110
+ </div>
111
+
112
+ <script>
113
+ window.__timelines = window.__timelines || {};
114
+ window.__timelines["root"] = gsap.timeline({ paused: true });
115
+ </script>
116
+ </body>
117
+ </html>
118
+ ```
119
+
120
+ Key properties of this layout:
121
+
122
+ - **Visual scenes on the same `data-track-index`** (e.g. `1`), authored sequentially. For a cross-fade, overlap their times by the fade duration; giving the incoming scene its own track keeps Studio's timeline readable, but the render accepts an overlap either way.
123
+ - **Audio on a separate, higher track index** (e.g. `10`). Keeps the linter's overlap rules clear of any visual collisions.
124
+ - **Root timeline is near-empty.** All animation lives in the sub-comps. A root-level fade-to-black at the very end is fine; do not stage a parallel animation track from the root.
125
+ - **Host slot ids** use `el-<name>` or `<scene-id>`. The slot's `data-composition-id` must still equal the sub-comp's internal id (see `sub-compositions.md`).
126
+
127
+ ## Sub-Composition Archetypes
128
+
129
+ ### A. Content scene (default)
130
+
131
+ The sub-comp contains the scene's full DOM, scoped CSS, and timeline. This is the standard pattern in `sub-compositions.md` — most scenes are this.
132
+
133
+ ### B. Host media + main-timeline driver (one pattern for `<video>`/`<audio>`)
134
+
135
+ `<video>`/`<audio>` seek and decode at any nesting depth, so a scene-specific clip can live inside its scene's sub-comp with scene-local `data-start` and be driven by that sub-comp's own timeline. Use this host-media pattern instead when you want the media's motion authored on the **main** timeline: put the `<video>`/`<audio>` as a host-root sibling positioned over the scene's frame.
136
+
137
+ The reason to reach for it: a sub-comp timeline **cannot** drive host elements (a global selector or `document.querySelector` does not resolve across the boundary). So if the media lives at the host root, author its per-scene motion (scale/opacity/morph/tilt/breathing) on the **main timeline** in `index.html`, at **global time** = scene-local time + the scene slot's `data-start`.
138
+
139
+ ```html
140
+ <!-- index.html (host) -->
141
+ <div
142
+ id="el-final"
143
+ data-composition-id="final-anim"
144
+ data-composition-src="compositions/final-anim.html"
145
+ data-start="20"
146
+ data-duration="6"
147
+ data-track-index="1"
148
+ ></div>
149
+
150
+ <!-- media is a DIRECT root child; sits over the sub-comp's frame -->
151
+ <video
152
+ id="final-video"
153
+ class="clip"
154
+ src="assets/final.mp4"
155
+ data-start="20"
156
+ data-duration="6"
157
+ data-track-index="2"
158
+ muted
159
+ playsinline
160
+ style="position:absolute; left:360px; top:100px; width:1200px; height:680px; object-fit:cover; border-radius:24px;"
161
+ ></video>
162
+
163
+ <script>
164
+ // MAIN timeline drives the host video. Global time: scene starts at 20.
165
+ window.__timelines = window.__timelines || {};
166
+ const main = window.__timelines["main"];
167
+ main.fromTo(
168
+ "#final-video",
169
+ { scale: 1.4, filter: "blur(14px)" },
170
+ { scale: 1.0, filter: "blur(0px)", duration: 0.9, ease: "power3.out" },
171
+ 20,
172
+ ); // = slot data-start (+ any scene-local offset)
173
+ </script>
174
+
175
+ <!-- compositions/final-anim.html — frame/shell only, no <video>, no host-element animation -->
176
+ <template>
177
+ <div
178
+ data-composition-id="final-anim"
179
+ data-width="1920"
180
+ data-height="1080"
181
+ data-duration="6"
182
+ style="position:absolute; inset:0; pointer-events:none;"
183
+ >
184
+ <script>
185
+ window.__timelines = window.__timelines || {};
186
+ const tl = gsap.timeline({ paused: true });
187
+ // animate ONLY this sub-comp's own elements here (labels, frame, overlays)
188
+ window.__timelines["final-anim"] = tl;
189
+ </script>
190
+ </div>
191
+ </template>
192
+ ```
193
+
194
+ Caveats:
195
+
196
+ - In this pattern the media is a host-root child, static in `index.html`, so the main timeline's selector resolves it. (Media nested in a sub-comp is also driven fine; it just can't be reached by the main timeline's selectors — drive it from the sub-comp's own timeline.)
197
+ - Clip lifecycle owns the media element's visibility across its `[data-start, data-start+data-duration]` window. The main-timeline opacity/scale tweens compose with it fine; for an opacity reveal/crossfade prefer a host **wrapper** so you are not fighting the lifecycle on the media element itself.
198
+ - Two media elements sharing the same `src` + `data-start` trigger `duplicate_media_discovery_risk` (benign — both still render).
199
+
200
+ ### C. Multi-scene merge
201
+
202
+ When several beat-level scenes share continuous state — a chat thread that grows, a persistent headline word that carries across the cut, a single canvas with internal phase changes — collapse them into one sub-comp and use **internal phase divs** rather than multiple sub-comp slots.
203
+
204
+ ```html
205
+ <!-- compositions/act2-merged.html -->
206
+ <template>
207
+ <div data-composition-id="act2-merged" data-width="1920" data-height="1080" data-duration="9">
208
+ <style>
209
+ [data-composition-id="act2-merged"] .phase {
210
+ position: absolute;
211
+ inset: 0;
212
+ opacity: 0;
213
+ }
214
+ </style>
215
+ <div class="phase" id="phase-a">…</div>
216
+ <div class="phase" id="phase-b">…</div>
217
+ <div class="phase" id="phase-c">…</div>
218
+ <script>
219
+ window.__timelines = window.__timelines || {};
220
+ const tl = gsap.timeline({ paused: true });
221
+ tl.set("#phase-a", { opacity: 1 }, 0);
222
+ tl.to("#phase-a", { opacity: 0, duration: 0.4 }, 3.0);
223
+ tl.set("#phase-b", { opacity: 1 }, 3.0);
224
+ // …
225
+ window.__timelines["act2-merged"] = tl;
226
+ </script>
227
+ </div>
228
+ </template>
229
+ ```
230
+
231
+ Reach for this over multiple sequential slots when scenes share DOM, share a canvas, or need to cross-fade with persistent elements (a headline that survives the cut between phases). Each phase is just a div inside the same sub-comp — the parent timeline never has to know about the internal phase boundaries.
232
+
233
+ ### D. Audio at root, reactive visual inside
234
+
235
+ Audio always lives at the host (`index.html`) as a root-level `<audio>` so playback survives scene cuts. A sub-comp that visualizes audio should read a **pre-baked** frequency curve at init, then sample the baked curve from its timeline — the visual must still be a deterministic function of `tl.time()`, not of `audio.currentTime`. See `determinism-rules.md` and `hyperframes-creative` for the authoring pattern.
236
+
237
+ ## Naming Conventions
238
+
239
+ | Thing | Convention | Example |
240
+ | ----------------------------------- | ------------------------------------------- | ------------------------------------------ |
241
+ | Sub-comp file | `compositions/<scene-id>.html` | `compositions/act0-intro-bell.html` |
242
+ | Sub-comp `<template>` id (optional) | `<scene-id>-template` | `<template id="act0-intro-bell-template">` |
243
+ | Sub-comp root `data-composition-id` | `<scene-id>` (must match host slot) | `data-composition-id="act0-intro-bell"` |
244
+ | Timeline registry key | matches `data-composition-id` | `window.__timelines["act0-intro-bell"]` |
245
+ | Host slot `id` | `el-<short>` or `<scene-id>` | `id="el-intro"`, `id="act0"` |
246
+ | Element ids inside a sub-comp | prefix with the scene id | `#act0-bell`, `#b1-tape` |
247
+ | Audio at root | `data-track-index` well above visual tracks | `10` while visuals use `1` |
248
+
249
+ The `-template` suffix on `<template>` is conventional but not required — the runtime extracts contents from whichever `<template>` is in `<body>`, regardless of id. The prefix on inner element ids is the only safeguard against id collisions when multiple sub-comps are mounted into the same host page at once.
250
+
251
+ ## Editing Existing Projects
252
+
253
+ Before adding or modifying scenes, identify which architecture is in use:
254
+
255
+ ```bash
256
+ ls compositions/ 2>/dev/null && echo "modular" || echo "monolithic"
257
+ ```
258
+
259
+ - In a **monolithic** project, add new scenes as inline `<section class="clip">` elements with a deliberate `data-start` and a sensible `data-track-index`, and extend the existing single timeline.
260
+ - In a **modular** project, match the pattern: add a new file under `compositions/`, add a slot in `index.html`, keep the root timeline thin. Do **not** start inlining new scenes into `index.html` when sibling scenes are sub-comps — the inconsistency is the worst of both worlds.
261
+ - If a monolithic project needs a third or fourth scene cut, lift each scene into a sub-comp before adding more. The conversion is mechanical (see "Refactor between them" above).
262
+
263
+ When picking the slot's `data-start`/`data-duration`, prefer continuing the existing sequencing convention (adjoining starts, deliberate overlaps for cross-fades). Don't introduce a new track index unless you actually need parallel visual layers — most sequential-scene projects use exactly one visual track.