takomi 2.1.41 → 2.1.43

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 (601) hide show
  1. package/.pi/extensions/oauth-router/README.md +3 -4
  2. package/.pi/extensions/oauth-router/config.ts +33 -36
  3. package/.pi/extensions/oauth-router/scripts/vibe-verify.py +1 -1
  4. package/README.md +7 -4
  5. package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -0
  6. package/assets/.agent/skills/embedded-captions/SKILL.md +286 -0
  7. package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
  8. package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
  9. package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
  10. package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
  11. package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
  12. package/assets/.agent/skills/embedded-captions/dna/README.md +148 -0
  13. package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -0
  14. package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -0
  15. package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -0
  16. package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -0
  17. package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -0
  18. package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -0
  19. package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -0
  20. package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -0
  21. package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -0
  22. package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -0
  23. package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -0
  24. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
  25. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
  26. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
  27. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
  28. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
  29. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
  30. package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
  31. package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
  32. package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -0
  33. package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
  34. package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -0
  35. package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
  36. package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -0
  37. package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -0
  38. package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
  39. package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -0
  40. package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -0
  41. package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -0
  42. package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -0
  43. package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
  44. package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -0
  45. package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -0
  46. package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -0
  47. package/assets/.agent/skills/embedded-captions/references/rail.md +68 -0
  48. package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -0
  49. package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -0
  50. package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -0
  51. package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -0
  52. package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -0
  53. package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
  54. package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
  55. package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
  56. package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
  57. package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -0
  58. package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
  59. package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
  60. package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
  61. package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
  62. package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
  63. package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
  64. package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -0
  65. package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
  66. package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -0
  67. package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
  68. package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -0
  69. package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
  70. package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -0
  71. package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -0
  72. package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
  73. package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -0
  74. package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -0
  75. package/assets/.agent/skills/embedded-captions/themes/README.md +244 -0
  76. package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -0
  77. package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -0
  78. package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -0
  79. package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -0
  80. package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -0
  81. package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -0
  82. package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -0
  83. package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -0
  84. package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -0
  85. package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -0
  86. package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -0
  87. package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -0
  88. package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -0
  89. package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -0
  90. package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -0
  91. package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -0
  92. package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -0
  93. package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -0
  94. package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -0
  95. package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -0
  96. package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -0
  97. package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -0
  98. package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -0
  99. package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -0
  100. package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -0
  101. package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -0
  102. package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -0
  103. package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -0
  104. package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -0
  105. package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -0
  106. package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -0
  107. package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
  108. package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -0
  109. package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
  110. package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -0
  111. package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
  112. package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
  113. package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
  114. package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
  115. package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
  116. package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
  117. package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -0
  118. package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
  119. package/assets/.agent/skills/figma/SKILL.md +121 -0
  120. package/assets/.agent/skills/general-video/SKILL.md +143 -0
  121. package/assets/.agent/skills/hyperframes/SKILL.md +164 -0
  122. package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -0
  123. package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -0
  124. package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -0
  125. package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -0
  126. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
  127. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
  128. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
  129. package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -0
  130. package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
  131. package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -0
  132. package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -0
  133. package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -0
  134. package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -0
  135. package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
  136. package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
  137. package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
  138. package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
  139. package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
  140. package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
  141. package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
  142. package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
  143. package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
  144. package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
  145. package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
  146. package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
  147. package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
  148. package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
  149. package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
  150. package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -0
  151. package/assets/.agent/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
  152. package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
  153. package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
  154. package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
  155. package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
  156. package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
  157. package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
  158. package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
  159. package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
  160. package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
  161. package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
  162. package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
  163. package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
  164. package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
  165. package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
  166. package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
  167. package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
  168. package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
  169. package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
  170. package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
  171. package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
  172. package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
  173. package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
  174. package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
  175. package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
  176. package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
  177. package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
  178. package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
  179. package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
  180. package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
  181. package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
  182. package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
  183. package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
  184. package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
  185. package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
  186. package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
  187. package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
  188. package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
  189. package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
  190. package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
  191. package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
  192. package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
  193. package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
  194. package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
  195. package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
  196. package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
  197. package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
  198. package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
  199. package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
  200. package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
  201. package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
  202. package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
  203. package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
  204. package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -0
  205. package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -0
  206. package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
  207. package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
  208. package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
  209. package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -0
  210. package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
  211. package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -0
  212. package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -0
  213. package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -0
  214. package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -0
  215. package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
  216. package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
  217. package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
  218. package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -0
  219. package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -0
  220. package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
  221. package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -0
  222. package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -0
  223. package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -0
  224. package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -0
  225. package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -0
  226. package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -0
  227. package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -0
  228. package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -0
  229. package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -0
  230. package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
  231. package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -0
  232. package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
  233. package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -0
  234. package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -0
  235. package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -0
  236. package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -0
  237. package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -0
  238. package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -0
  239. package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -0
  240. package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -0
  241. package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -0
  242. package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
  243. package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -0
  244. package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
  245. package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -0
  246. package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -0
  247. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
  248. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
  249. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  250. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
  251. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
  252. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
  253. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
  254. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
  255. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
  256. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
  257. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
  258. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
  259. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
  260. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
  261. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
  262. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
  263. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
  264. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
  265. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
  266. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
  267. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
  268. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
  269. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
  270. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
  271. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
  272. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
  273. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  274. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
  275. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
  276. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
  277. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
  278. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
  279. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
  280. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
  281. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
  282. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
  283. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
  284. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
  285. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  286. package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
  287. package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
  288. package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
  289. package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
  290. package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -0
  291. package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
  292. package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
  293. package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
  294. package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
  295. package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -0
  296. package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -0
  297. package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -0
  298. package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -0
  299. package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -0
  300. package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -0
  301. package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -0
  302. package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -0
  303. package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -0
  304. package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -0
  305. package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
  306. package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -0
  307. package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -0
  308. package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -0
  309. package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
  310. package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
  311. package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
  312. package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
  313. package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -0
  314. package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -0
  315. package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
  316. package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
  317. package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -0
  318. package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -0
  319. package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -0
  320. package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -0
  321. package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -0
  322. package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -0
  323. package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -0
  324. package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -0
  325. package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -0
  326. package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -0
  327. package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -0
  328. package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -0
  329. package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -0
  330. package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -0
  331. package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -0
  332. package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -0
  333. package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -0
  334. package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -0
  335. package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -0
  336. package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -0
  337. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -0
  338. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -0
  339. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -0
  340. package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -0
  341. package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -0
  342. package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -0
  343. package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -0
  344. package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -0
  345. package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -0
  346. package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -0
  347. package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -0
  348. package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -0
  349. package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -0
  350. package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -0
  351. package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -0
  352. package/assets/.agent/skills/media-use/SKILL.md +124 -0
  353. package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -0
  354. package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -0
  355. package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
  356. package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
  357. package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -0
  358. package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -0
  359. package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -0
  360. package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -0
  361. package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -0
  362. package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -0
  363. package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -0
  364. package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -0
  365. package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -0
  366. package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -0
  367. package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
  368. package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -0
  369. package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -0
  370. package/assets/.agent/skills/motion-graphics/SKILL.md +172 -0
  371. package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -0
  372. package/assets/.agent/skills/motion-graphics/agents/director.md +53 -0
  373. package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -0
  374. package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -0
  375. package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
  376. package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -0
  377. package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
  378. package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
  379. package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
  380. package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
  381. package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -0
  382. package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -0
  383. package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -0
  384. package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -0
  385. package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -0
  386. package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
  387. package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -0
  388. package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -0
  389. package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -0
  390. package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -0
  391. package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -0
  392. package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
  393. package/assets/.agent/skills/music-to-video/SKILL.md +197 -0
  394. package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -0
  395. package/assets/.agent/skills/music-to-video/references/montage.md +58 -0
  396. package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
  397. package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -0
  398. package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -0
  399. package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -0
  400. package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -0
  401. package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -0
  402. package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -0
  403. package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -0
  404. package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -0
  405. package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -0
  406. package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -0
  407. package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -0
  408. package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -0
  409. package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -0
  410. package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -0
  411. package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -0
  412. package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -0
  413. package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -0
  414. package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -0
  415. package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -0
  416. package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -0
  417. package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -0
  418. package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -0
  419. package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -0
  420. package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -0
  421. package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -0
  422. package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -0
  423. package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -0
  424. package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -0
  425. package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -0
  426. package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -0
  427. package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -0
  428. package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -0
  429. package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -0
  430. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
  431. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -0
  432. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -0
  433. package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -0
  434. package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -0
  435. package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -0
  436. package/assets/.agent/skills/music-to-video/references/planning.md +104 -0
  437. package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -0
  438. package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -0
  439. package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
  440. package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
  441. package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
  442. package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
  443. package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
  444. package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
  445. package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
  446. package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
  447. package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
  448. package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
  449. package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
  450. package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
  451. package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
  452. package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -0
  453. package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -0
  454. package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -0
  455. package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -0
  456. package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -0
  457. package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -0
  458. package/assets/.agent/skills/pr-to-video/SKILL.md +240 -0
  459. package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -0
  460. package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -0
  461. package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -0
  462. package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -0
  463. package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -0
  464. package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -0
  465. package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -0
  466. package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -0
  467. package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -0
  468. package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -0
  469. package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -0
  470. package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -0
  471. package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -0
  472. package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -0
  473. package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -0
  474. package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -0
  475. package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -0
  476. package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -0
  477. package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -0
  478. package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -0
  479. package/assets/.agent/skills/product-launch-video/SKILL.md +208 -0
  480. package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -0
  481. package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -0
  482. package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -0
  483. package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -0
  484. package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
  485. package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -0
  486. package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -0
  487. package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -0
  488. package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
  489. package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
  490. package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
  491. package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
  492. package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
  493. package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -0
  494. package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
  495. package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -0
  496. package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
  497. package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -0
  498. package/assets/.agent/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
  499. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
  500. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
  501. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
  502. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
  503. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
  504. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
  505. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
  506. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
  507. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
  508. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
  509. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
  510. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
  511. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
  512. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
  513. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
  514. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
  515. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
  516. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
  517. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
  518. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
  519. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
  520. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
  521. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
  522. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
  523. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
  524. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
  525. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
  526. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
  527. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
  528. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
  529. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
  530. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
  531. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
  532. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
  533. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
  534. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
  535. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
  536. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
  537. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
  538. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
  539. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
  540. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
  541. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
  542. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
  543. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
  544. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
  545. package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -0
  546. package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
  547. package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -0
  548. package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -0
  549. package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -0
  550. package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -0
  551. package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -0
  552. package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -0
  553. package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -0
  554. package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -0
  555. package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -0
  556. package/assets/.agent/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
  557. package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
  558. package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -0
  559. package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
  560. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
  561. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
  562. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
  563. package/assets/.agent/skills/slideshow/SKILL.md +550 -0
  564. package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -0
  565. package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -0
  566. package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -0
  567. package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
  568. package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
  569. package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -0
  570. package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -0
  571. package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -0
  572. package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -0
  573. package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -0
  574. package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -0
  575. package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -0
  576. package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -0
  577. package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -0
  578. package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -0
  579. package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -0
  580. package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -0
  581. package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -0
  582. package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -0
  583. package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -0
  584. package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
  585. package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -0
  586. package/assets/.agent/skills/website-to-video/SKILL.md +145 -0
  587. package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
  588. package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -0
  589. package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -0
  590. package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -0
  591. package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -0
  592. package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -0
  593. package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -0
  594. package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -0
  595. package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -0
  596. package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -0
  597. package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -0
  598. package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
  599. package/package.json +1 -1
  600. package/src/skills-catalog.js +32 -0
  601. package/src/takomi-stats.js +3 -0
@@ -0,0 +1,279 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * matte.cjs — subject matting via hyperframes' built-in `remove-background`
4
+ * (rembg-equivalent u2net_human_seg, Apache-2.0, 320×320 input, ~9 fps on
5
+ * CoreML). Replaces the previous bundled PP-MattingV2 ONNX (34 MB asset +
6
+ * an onnxruntime inference loop in this script): one engine, zero bundled
7
+ * weights — the model auto-downloads once (~168 MB) to ~/.cache/hyperframes/.
8
+ *
9
+ * Semantics note (validated 2026-06-12 on 6 scenes + a cold-start E2E): a
10
+ * HUMAN segmenter by intent, not surgically. Thin offset furniture (mic boom
11
+ * arms) is usually excluded — captions render over it, behind the person —
12
+ * but large salient objects near the subject (a telescope rig) can still
13
+ * leak into the matte and occlude captions. Objects HELD by the subject
14
+ * (products, phones) may drop out intermittently, letting captions pass in
15
+ * front. Never assume: sample frames_fg/ before placing the hero.
16
+ *
17
+ * Pipeline:
18
+ * source.mp4 → hyperframes remove-background → ProRes 4444 .mov (lossless
19
+ * alpha; temp, deleted) → ffmpeg fps=<matte.fps> → frames_fg/f_%04d.png.
20
+ * frames_bg/ is extracted at the same rate (preview tooling reads it).
21
+ *
22
+ * node matte.cjs <project-dir>
23
+ * Reads: <project>/source.mp4 (any video in the project dir is adopted)
24
+ * Writes: <project>/frames_fg/f_%04d.png (RGBA, subject opaque),
25
+ * <project>/frames_bg/f_%04d.png, <project>/matte.fps
26
+ * Env: HYPERFRAMES_ROOT — hyperframes checkout (default ~/Downloads/hyperframes)
27
+ */
28
+ const path = require("path");
29
+ const fs = require("fs");
30
+ const os = require("os");
31
+ const cp = require("child_process");
32
+
33
+ function hfCli() {
34
+ const roots = [
35
+ process.env.HYPERFRAMES_ROOT,
36
+ path.resolve(__dirname, "..", "..", ".."), // skills/embedded-captions/scripts → repo root if in-repo
37
+ path.join(os.homedir(), "Downloads", "hyperframes"),
38
+ ].filter(Boolean);
39
+ for (const root of roots) {
40
+ const cli = path.join(root, "packages", "cli", "dist", "cli.js");
41
+ if (fs.existsSync(cli)) return cli;
42
+ }
43
+ console.error("[matte] cannot find hyperframes cli — set HYPERFRAMES_ROOT to a built checkout");
44
+ process.exit(3);
45
+ }
46
+
47
+ function ensureSource(project) {
48
+ const src = path.join(project, "source.mp4");
49
+ if (!fs.existsSync(src)) {
50
+ const found = fs
51
+ .readdirSync(project)
52
+ .filter((f) => /\.(mp4|mov|webm|mkv)$/i.test(f) && !f.startsWith("_"))
53
+ .map((f) => path.join(project, f))[0];
54
+ if (!found) return src;
55
+ try {
56
+ fs.symlinkSync(path.basename(found), src);
57
+ } catch {
58
+ fs.copyFileSync(found, src);
59
+ }
60
+ console.log(`[matte] resolved source.mp4 -> ${path.basename(found)}`);
61
+ }
62
+ return src;
63
+ }
64
+
65
+ function rateOf(expr) {
66
+ const [n, d] = String(expr || "").split("/");
67
+ const f = parseFloat(n) / parseFloat(d || "1");
68
+ return Number.isFinite(f) && f > 0 ? f : 0;
69
+ }
70
+
71
+ // Prefer avg_frame_rate (frames/duration — the truth) over r_frame_rate (the
72
+ // container's nominal tick rate, which lies on VFR sources: a 24fps screen
73
+ // recording can carry r_frame_rate=60 and would 2.5x-desync the matte).
74
+ function probeRates(src) {
75
+ try {
76
+ const out = cp
77
+ .execFileSync("ffprobe", [
78
+ "-v",
79
+ "0",
80
+ "-select_streams",
81
+ "v:0",
82
+ "-show_entries",
83
+ "stream=r_frame_rate,avg_frame_rate",
84
+ "-of",
85
+ "default=nk=1:nw=1",
86
+ src,
87
+ ])
88
+ .toString()
89
+ .trim()
90
+ .split("\n");
91
+ return { r: rateOf(out[0]), avg: rateOf(out[1]) };
92
+ } catch {
93
+ return { r: 0, avg: 0 };
94
+ }
95
+ }
96
+
97
+ function probeFps(src) {
98
+ const { r, avg } = probeRates(src);
99
+ const f = avg || r;
100
+ return f > 0 ? Math.max(1, Math.round(f)) : 24;
101
+ }
102
+
103
+ // VFR when nominal and actual disagree by >5% — the remove-background engine
104
+ // mishandles VFR timestamps (observed: 2251 fg frames vs 902 bg on one clip),
105
+ // so VFR sources get normalized to CFR before matting.
106
+ function isVfr(src) {
107
+ const { r, avg } = probeRates(src);
108
+ return r > 0 && avg > 0 && Math.abs(r - avg) / avg > 0.05;
109
+ }
110
+
111
+ function extractFrames(src, dst, fps, extra = []) {
112
+ fs.mkdirSync(dst, { recursive: true });
113
+ if (fs.readdirSync(dst).some((f) => f.endsWith(".png"))) return false;
114
+ cp.execFileSync(
115
+ "ffmpeg",
116
+ ["-y", "-i", src, "-vf", `fps=${fps}`, ...extra, path.join(dst, "f_%04d.png")],
117
+ { stdio: "ignore" },
118
+ );
119
+ return true;
120
+ }
121
+
122
+ function countPngs(dir) {
123
+ try {
124
+ return fs.readdirSync(dir).filter((f) => f.endsWith(".png")).length;
125
+ } catch {
126
+ return 0;
127
+ }
128
+ }
129
+
130
+ async function main() {
131
+ const project = path.resolve(process.argv[2] || "");
132
+ if (!process.argv[2]) {
133
+ console.error("usage: matte.cjs <project-dir>");
134
+ process.exit(1);
135
+ }
136
+ const src = ensureSource(project);
137
+ if (!fs.existsSync(src)) {
138
+ console.error(`[matte] no source video found in ${project}`);
139
+ process.exit(2);
140
+ }
141
+
142
+ const fpsFile = path.join(project, "matte.fps");
143
+ // read-with-catch (no exists-then-read TOCTOU): a missing/corrupt fps file
144
+ // simply falls through to probing the source.
145
+ let fps = 0;
146
+ try {
147
+ fps = parseInt(fs.readFileSync(fpsFile, "utf8").replace(/\D/g, ""), 10) || 0;
148
+ } catch {
149
+ /* no cached fps — probe below */
150
+ }
151
+ if (!fps) fps = probeFps(src);
152
+ fs.writeFileSync(fpsFile, String(fps));
153
+
154
+ const framesBg = path.join(project, "frames_bg");
155
+ const framesFg = path.join(project, "frames_fg");
156
+ if (extractFrames(src, framesBg, fps))
157
+ console.log(`[matte] source fps=${fps} → frames_bg extracted`);
158
+
159
+ const want = countPngs(framesBg);
160
+ if (want > 0 && countPngs(framesFg) >= want) {
161
+ console.log(`[matte] frames_fg already complete (${want} frames) — nothing to do`);
162
+ return;
163
+ }
164
+
165
+ // 1) subject matte via hyperframes (ProRes 4444 keeps the alpha lossless).
166
+ // VFR sources are normalized to CFR first — remove-background trusts
167
+ // timestamps and emits a desynced frame count on VFR input (the ghost
168
+ // double-subject bug: the pasted matte runs at the wrong speed).
169
+ let matteSrc = src;
170
+ if (isVfr(src)) {
171
+ const cfr = path.join(project, "_src_cfr.mp4");
172
+ if (!fs.existsSync(cfr)) {
173
+ console.log(
174
+ `[matte] VFR source detected (nominal != actual fps) → normalizing to ${fps}fps CFR for matting`,
175
+ );
176
+ cp.execFileSync(
177
+ "ffmpeg",
178
+ [
179
+ "-y",
180
+ "-i",
181
+ src,
182
+ "-fps_mode",
183
+ "cfr",
184
+ "-r",
185
+ String(fps),
186
+ "-c:v",
187
+ "libx264",
188
+ "-crf",
189
+ "16",
190
+ "-preset",
191
+ "fast",
192
+ "-an",
193
+ cfr,
194
+ ],
195
+ { stdio: "ignore" },
196
+ );
197
+ }
198
+ matteSrc = cfr;
199
+ }
200
+ const mov = path.join(project, "_matte_tmp.mov");
201
+ const t0 = Date.now();
202
+ const cached = fs.existsSync(
203
+ path.join(
204
+ os.homedir(),
205
+ ".cache",
206
+ "hyperframes",
207
+ "background-removal",
208
+ "models",
209
+ "u2net_human_seg.onnx",
210
+ ),
211
+ );
212
+ console.log(
213
+ `[matte] hyperframes remove-background (u2net_human_seg${cached ? "" : "; first run downloads ~168 MB"})… model load takes ~1-2 min with no output — not hung`,
214
+ );
215
+ const r = cp.spawnSync("node", [hfCli(), "remove-background", matteSrc, "-o", mov], {
216
+ stdio: ["ignore", "pipe", "pipe"],
217
+ encoding: "utf8",
218
+ });
219
+ if (r.status !== 0 || !fs.existsSync(mov)) {
220
+ console.error("[matte] remove-background FAILED:");
221
+ console.error((r.stderr || r.stdout || "").split("\n").slice(-8).join("\n"));
222
+ process.exit(4);
223
+ }
224
+
225
+ // 2) burst to RGBA pngs at the project rate
226
+ fs.mkdirSync(framesFg, { recursive: true });
227
+ cp.execFileSync(
228
+ "ffmpeg",
229
+ ["-y", "-i", mov, "-vf", `fps=${fps}`, "-pix_fmt", "rgba", path.join(framesFg, "f_%04d.png")],
230
+ { stdio: "ignore" },
231
+ );
232
+ fs.rmSync(mov, { force: true });
233
+
234
+ // 3) count parity with frames_bg. Composite overlays fg by INDEX at matte.fps,
235
+ // so any fg/bg count mismatch is a time desync (subject ghosting). Handle
236
+ // BOTH directions: pad when short, linearly remap when long — and shout
237
+ // when the mismatch is big enough to mean broken timestamps upstream.
238
+ let got = countPngs(framesFg);
239
+ const tol = Math.max(2, Math.round(want * 0.01));
240
+ if (Math.abs(got - want) > tol) {
241
+ console.error(
242
+ `[matte] WARN frame-count desync: fg=${got} vs bg=${want} (tolerance ${tol}). ` +
243
+ `Reconciling by remap — if the source is VFR this run predates the CFR fix; ` +
244
+ `delete frames_fg/ frames_bg/ matte.fps and re-run matte.cjs.`,
245
+ );
246
+ }
247
+ if (got > want && want > 0) {
248
+ // keep want frames sampled evenly across got (re-times fg onto the bg timeline)
249
+ const keep = [];
250
+ for (let j = 1; j <= want; j++)
251
+ keep.push(Math.min(got, Math.max(1, Math.round((j - 0.5) * (got / want)))));
252
+ const tmp = path.join(project, "_fg_remap");
253
+ fs.mkdirSync(tmp, { recursive: true });
254
+ keep.forEach((srcIdx, k) => {
255
+ fs.copyFileSync(
256
+ path.join(framesFg, `f_${String(srcIdx).padStart(4, "0")}.png`),
257
+ path.join(tmp, `f_${String(k + 1).padStart(4, "0")}.png`),
258
+ );
259
+ });
260
+ fs.rmSync(framesFg, { recursive: true, force: true });
261
+ fs.renameSync(tmp, framesFg);
262
+ got = countPngs(framesFg);
263
+ }
264
+ while (got < want && got > 0) {
265
+ fs.copyFileSync(
266
+ path.join(framesFg, `f_${String(got).padStart(4, "0")}.png`),
267
+ path.join(framesFg, `f_${String(got + 1).padStart(4, "0")}.png`),
268
+ );
269
+ got++;
270
+ }
271
+ console.log(
272
+ `[matte] done in ${((Date.now() - t0) / 1000).toFixed(1)}s → fg=${got} bg=${want} @ ${fps}fps${got === want ? " (parity ok)" : ""}`,
273
+ );
274
+ }
275
+
276
+ main().catch((e) => {
277
+ console.error("[matte]", e.message);
278
+ process.exit(1);
279
+ });
@@ -0,0 +1,293 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * measure-layout.cjs — pixel-perfect bbox measurement using headless Chromium.
4
+ *
5
+ * Loads the compiled index.html, seeks the GSAP timeline to specified sample
6
+ * times, queries every .cap container + every .w word span via
7
+ * getBoundingClientRect(), writes results to _layout.json.
8
+ *
9
+ * check-occlusion.cjs then reads _layout.json + frames_fg/*.png and computes
10
+ * per-word occlusion against the actual subject silhouette (matte alpha via
11
+ * sharp) — pixel accurate, no char_ratio guessing.
12
+ *
13
+ * Usage:
14
+ * node measure-layout.cjs <project-dir> [times...]
15
+ * If no times given, samples groups['in', 'out'] midpoints.
16
+ */
17
+ const path = require("path");
18
+ const fs = require("fs");
19
+ const os = require("os");
20
+
21
+ // Locate hyperframes' bundled puppeteer. render-and-composite.sh exports
22
+ // HYPERFRAMES_ROOT; standalone we also try the in-repo path + ~/Downloads, and
23
+ // accept ANY puppeteer@* the bun store holds (not a pinned version).
24
+ const HF_ROOTS = [
25
+ process.env.HYPERFRAMES_ROOT,
26
+ path.resolve(__dirname, "../../.."), // skills/embedded-captions/scripts → repo root if in-repo
27
+ path.join(os.homedir(), "Downloads", "hyperframes"),
28
+ ].filter(Boolean);
29
+ let puppeteer = null;
30
+ for (const root of HF_ROOTS) {
31
+ const cands = [path.join(root, "node_modules", "puppeteer")];
32
+ const bunDir = path.join(root, "node_modules", ".bun");
33
+ try {
34
+ if (fs.existsSync(bunDir)) {
35
+ for (const d of fs.readdirSync(bunDir)) {
36
+ if (d.startsWith("puppeteer@"))
37
+ cands.push(path.join(bunDir, d, "node_modules", "puppeteer"));
38
+ }
39
+ }
40
+ } catch {
41
+ /* ignore */
42
+ }
43
+ for (const p of cands) {
44
+ try {
45
+ if (fs.existsSync(p)) {
46
+ puppeteer = require(p);
47
+ break;
48
+ }
49
+ } catch {
50
+ /* try next */
51
+ }
52
+ }
53
+ if (puppeteer) break;
54
+ }
55
+ if (!puppeteer) {
56
+ console.error(
57
+ "[measure] could not locate puppeteer — set HYPERFRAMES_ROOT to a built hyperframes checkout",
58
+ );
59
+ process.exit(3);
60
+ }
61
+
62
+ // Resolve hyperframes' bundled GSAP. The templates load GSAP from a CDN
63
+ // (cdn.jsdelivr.net), but in headless Chromium that request can be slow or
64
+ // blocked — the page's inline `gsap.timeline()` then throws "gsap is not
65
+ // defined" and the occlusion gate hard-fails. We inject this local copy on
66
+ // every new document (before any page script runs) so window.gsap always
67
+ // exists, and abort the CDN request so the parser never stalls on it. The
68
+ // render path is unaffected — this is measurement-only.
69
+ let gsapSource = null;
70
+ for (const root of HF_ROOTS) {
71
+ const cands = [path.join(root, "node_modules", "gsap", "dist", "gsap.min.js")];
72
+ const bunDir = path.join(root, "node_modules", ".bun");
73
+ try {
74
+ if (fs.existsSync(bunDir)) {
75
+ for (const d of fs.readdirSync(bunDir)) {
76
+ if (d.startsWith("gsap@"))
77
+ cands.push(path.join(bunDir, d, "node_modules", "gsap", "dist", "gsap.min.js"));
78
+ }
79
+ }
80
+ } catch {
81
+ /* ignore */
82
+ }
83
+ for (const p of cands) {
84
+ try {
85
+ if (fs.existsSync(p)) {
86
+ gsapSource = fs.readFileSync(p, "utf8");
87
+ break;
88
+ }
89
+ } catch {
90
+ /* try next */
91
+ }
92
+ }
93
+ if (gsapSource) break;
94
+ }
95
+
96
+ async function main() {
97
+ const projectDir = process.argv[2];
98
+ if (!projectDir) {
99
+ console.error("usage: measure-layout.cjs <project-dir> [t1 t2 ...]");
100
+ process.exit(1);
101
+ }
102
+ const indexPath = path.resolve(projectDir, "index.html");
103
+ if (!fs.existsSync(indexPath)) {
104
+ console.error(`[measure] missing ${indexPath} — run make-composition.cjs first`);
105
+ process.exit(2);
106
+ }
107
+
108
+ // Load plan to get groups + sample times
109
+ const planPath = path.join(projectDir, "plan.json");
110
+ let plan = null;
111
+ if (fs.existsSync(planPath)) plan = JSON.parse(fs.readFileSync(planPath, "utf8"));
112
+
113
+ // Determine sample times: per group, sample multiple points across [in, out]
114
+ // (catches subject motion within block, multi-frame validation).
115
+ const explicitTimes = process.argv.slice(3).map(Number).filter(Number.isFinite);
116
+ let sampleTimes = explicitTimes;
117
+ if (sampleTimes.length === 0 && plan?.groups) {
118
+ const allTimes = new Set();
119
+ for (const g of plan.groups) {
120
+ const dur = g.out - g.in;
121
+ // 4 samples per group: 15%, 40%, 65%, 90% through window — covers entry/peak/exit
122
+ [0.15, 0.4, 0.65, 0.9].forEach((p) => allTimes.add(+(g.in + dur * p).toFixed(3)));
123
+ }
124
+ sampleTimes = [...allTimes].sort((a, b) => a - b);
125
+ }
126
+
127
+ // Match render-and-composite's Chrome detection
128
+ const exe =
129
+ process.platform === "darwin"
130
+ ? "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
131
+ : "/usr/bin/google-chrome";
132
+
133
+ const W = plan?.width || 720;
134
+ const H = plan?.height || 1290;
135
+ const FPS = plan?.fps || 24;
136
+
137
+ const browser = await puppeteer.launch({
138
+ headless: "new",
139
+ executablePath: fs.existsSync(exe) ? exe : undefined,
140
+ args: [
141
+ "--disable-web-security",
142
+ "--allow-file-access-from-files",
143
+ `--window-size=${W},${H}`,
144
+ "--disable-dev-shm-usage",
145
+ ],
146
+ });
147
+ try {
148
+ const page = await browser.newPage();
149
+ await page.setViewport({ width: W, height: H, deviceScaleFactor: 1 });
150
+ page.on("pageerror", (err) => console.error(`[browser-error] ${err.message}`));
151
+
152
+ // Inject local GSAP before any page script + abort the CDN <script> so the
153
+ // page never depends on network for GSAP (see resolver note above). Falls
154
+ // back to the page's own CDN load if no local copy was found.
155
+ if (gsapSource) {
156
+ await page.evaluateOnNewDocument(gsapSource);
157
+ await page.setRequestInterception(true);
158
+ page.on("request", (req) => {
159
+ const u = req.url();
160
+ if (req.resourceType() === "script" && /gsap/i.test(u) && /^https?:/i.test(u)) req.abort();
161
+ else req.continue();
162
+ });
163
+ }
164
+
165
+ await page.goto(`file://${indexPath}`, { waitUntil: "load", timeout: 15000 });
166
+ // GSAP is injected locally above; poll for the page's timeline registration.
167
+ const start = Date.now();
168
+ let ready = false;
169
+ while (Date.now() - start < 15000) {
170
+ const r = await page.evaluate(() => !!(window.__timelines && window.__timelines.main));
171
+ if (r) {
172
+ ready = true;
173
+ break;
174
+ }
175
+ await new Promise((res) => setTimeout(res, 200));
176
+ }
177
+ if (!ready) {
178
+ console.error("[measure] GSAP timeline never registered");
179
+ process.exit(4);
180
+ }
181
+ // Inject the skill's bundled @font-face set so headless Chromium measures the SAME
182
+ // glyph metrics the renderer will use. Without this, Inter/etc fall back to system
183
+ // fonts here while the real render uses the true (often wider) face → wrapped line
184
+ // counts differ → slot layout / occlusion verdicts are measured on the wrong text.
185
+ try {
186
+ const fontsCss = path.join(__dirname, "..", "modes", "standard", "fonts", "fonts.css");
187
+ if (fs.existsSync(fontsCss))
188
+ await page.addStyleTag({ content: fs.readFileSync(fontsCss, "utf8") });
189
+ } catch {
190
+ /* best-effort — fonts.css missing just reverts to old behavior */
191
+ }
192
+ // let webfonts settle so measured glyph metrics match the render
193
+ await page.evaluate(async () => {
194
+ try {
195
+ await document.fonts.ready;
196
+ } catch {}
197
+ });
198
+
199
+ const samples = [];
200
+ for (const t of sampleTimes) {
201
+ // Seek timeline
202
+ await page.evaluate((t) => {
203
+ const tl = window.__timelines.main;
204
+ tl.seek(t);
205
+ // Force layout flush
206
+ void document.body.offsetHeight;
207
+ }, t);
208
+ // Tiny settle for animations / fonts
209
+ await new Promise((r) => setTimeout(r, 30));
210
+
211
+ // Measure every .cap and its .w children
212
+ const measurements = await page.evaluate(() => {
213
+ const caps = [...document.querySelectorAll(".cap")];
214
+ const out = [];
215
+ for (const cap of caps) {
216
+ const cs = getComputedStyle(cap);
217
+ if (cs.opacity === "0" || cs.display === "none") continue;
218
+ const cb = cap.getBoundingClientRect();
219
+ if (cb.width === 0 || cb.height === 0) continue;
220
+ const id = cap.id || "";
221
+ const layer = cap.dataset.layer || "";
222
+ // Per-line via Range over all word spans
223
+ const ws = [...cap.querySelectorAll(".w")];
224
+ const words = [];
225
+ for (const w of ws) {
226
+ const wcs = getComputedStyle(w);
227
+ if (wcs.opacity === "0") continue; // not yet animated in
228
+ const wb = w.getBoundingClientRect();
229
+ if (wb.width === 0) continue;
230
+ words.push({
231
+ text: w.textContent,
232
+ x: +wb.x.toFixed(1),
233
+ y: +wb.y.toFixed(1),
234
+ w: +wb.width.toFixed(1),
235
+ h: +wb.height.toFixed(1),
236
+ opacity: +wcs.opacity,
237
+ });
238
+ }
239
+ // Group by line (same y ± 2px)
240
+ const lines = [];
241
+ for (const w of words) {
242
+ const line = lines.find((l) => Math.abs(l.y - w.y) < 3);
243
+ if (line) {
244
+ line.words.push(w);
245
+ line.x = Math.min(line.x, w.x);
246
+ line.w = Math.max(line.x + line.w, w.x + w.w) - line.x;
247
+ line.h = Math.max(line.h, w.h);
248
+ } else {
249
+ lines.push({ x: w.x, y: w.y, w: w.w, h: w.h, words: [w] });
250
+ }
251
+ }
252
+ out.push({
253
+ id,
254
+ layer,
255
+ cap_bbox: {
256
+ x: +cb.x.toFixed(1),
257
+ y: +cb.y.toFixed(1),
258
+ w: +cb.width.toFixed(1),
259
+ h: +cb.height.toFixed(1),
260
+ },
261
+ opacity: +cs.opacity,
262
+ lines,
263
+ words, // also keep flat list
264
+ });
265
+ }
266
+ return out;
267
+ });
268
+ const frame_idx = Math.max(1, Math.round(t * FPS));
269
+ samples.push({ t, frame_idx, caps: measurements });
270
+ }
271
+
272
+ const layout = { width: W, height: H, fps: FPS, samples };
273
+ const outPath = path.join(projectDir, "_layout.json");
274
+ fs.writeFileSync(outPath, JSON.stringify(layout, null, 2));
275
+ console.log(
276
+ `[measure] wrote ${outPath} (${sampleTimes.length} sample frames, ${samples.reduce((a, s) => a + s.caps.length, 0)} cap measurements)`,
277
+ );
278
+ } finally {
279
+ // Chromium occasionally hangs on shutdown. This script runs synchronously
280
+ // inside check-occlusion.cjs, which the render gate blocks on — a hung close
281
+ // would wedge the whole render. Cap the close, then force-exit below.
282
+ await Promise.race([browser.close().catch(() => {}), new Promise((r) => setTimeout(r, 8000))]);
283
+ }
284
+ }
285
+
286
+ // Force a hard exit so a lingering Chromium/libuv handle can't keep the process
287
+ // (and the render gate that spawned it) alive indefinitely.
288
+ main()
289
+ .then(() => process.exit(0))
290
+ .catch((e) => {
291
+ console.error(e);
292
+ process.exit(1);
293
+ });
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bash
2
+ # prepare.sh — one-command pre-processing for a captions project.
3
+ #
4
+ # bash prepare.sh <project-dir>
5
+ #
6
+ # Runs the three deterministic pre-steps with maximum parallelism:
7
+ # matte.cjs (CPU-heavy ONNX) ∥ transcribe.cjs (whisper) → then safe-zones.cjs
8
+ # (matte and transcribe are independent; safe-zones needs the matte's frames_fg.)
9
+ # Replaces hand-running steps 2 / 3 / 3b — one call, nothing forgotten, ~the cost
10
+ # of the slower of the two instead of their sum.
11
+ #
12
+ # After this completes the project has: frames_bg/ frames_fg/ matte.fps
13
+ # transcript.json safe-zones.json — everything the authoring step needs.
14
+ set -euo pipefail
15
+
16
+ PROJECT="${1:?usage: prepare.sh <project-dir>}"
17
+ PROJECT="$(cd "$PROJECT" && pwd)"
18
+ SD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+
20
+ echo "[prepare] matte ∥ transcribe ∥ envelope …"
21
+ MLOG="$PROJECT/_prepare_matte.log"; TLOG="$PROJECT/_prepare_transcribe.log"; ELOG="$PROJECT/_prepare_envelope.log"
22
+ node "$SD/matte.cjs" "$PROJECT" > "$MLOG" 2>&1 & MPID=$!
23
+ node "$SD/transcribe.cjs" "$PROJECT" > "$TLOG" 2>&1 & TPID=$!
24
+ node "$SD/audio-envelope.cjs" "$PROJECT" > "$ELOG" 2>&1 & EPID=$!
25
+
26
+ MRC=0; TRC=0
27
+ wait "$MPID" || MRC=$?
28
+ wait "$TPID" || TRC=$?
29
+ wait "$EPID" || echo "[prepare] (envelope skipped — hero amplitude falls back to neutral)" >&2
30
+ # surface both logs (they contain the guards' warnings — near-silent audio, tail trim)
31
+ sed 's/^/ [matte] /' "$MLOG" | tail -6
32
+ sed 's/^/ [transcribe] /' "$TLOG" | tail -12
33
+ if (( MRC != 0 )); then echo "[prepare] matte FAILED (rc=$MRC) — see $MLOG" >&2; exit "$MRC"; fi
34
+ if (( TRC != 0 )); then echo "[prepare] transcribe FAILED (rc=$TRC) — see $TLOG" >&2; exit "$TRC"; fi
35
+
36
+ echo "[prepare] safe-zones …"
37
+ node "$SD/safe-zones.cjs" "$PROJECT"
38
+
39
+ echo "[prepare] ✅ ready: frames_fg/ transcript.json safe-zones.json — author next (see SKILL.md step 4)"