@mevdragon/vidfarm-devcli 0.14.0 → 0.15.0

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 (418) hide show
  1. package/.agents/skills/embedded-captions/CATALOG.md +93 -0
  2. package/.agents/skills/embedded-captions/SKILL.md +286 -0
  3. package/.agents/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
  4. package/.agents/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
  5. package/.agents/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
  6. package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
  7. package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
  8. package/.agents/skills/embedded-captions/dna/README.md +148 -0
  9. package/.agents/skills/embedded-captions/dna/chrome.json +68 -0
  10. package/.agents/skills/embedded-captions/dna/cream.json +69 -0
  11. package/.agents/skills/embedded-captions/dna/documentary.json +62 -0
  12. package/.agents/skills/embedded-captions/dna/editorial.json +70 -0
  13. package/.agents/skills/embedded-captions/dna/glitch.json +82 -0
  14. package/.agents/skills/embedded-captions/dna/ink.json +65 -0
  15. package/.agents/skills/embedded-captions/dna/keynote.json +62 -0
  16. package/.agents/skills/embedded-captions/dna/loud.json +75 -0
  17. package/.agents/skills/embedded-captions/dna/neon.json +58 -0
  18. package/.agents/skills/embedded-captions/dna/velocity.json +89 -0
  19. package/.agents/skills/embedded-captions/modes/cinematic/README.md +48 -0
  20. package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
  21. package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
  22. package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
  23. package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
  24. package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
  25. package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
  26. package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
  27. package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
  28. package/.agents/skills/embedded-captions/modes/cinematic/engine.html +355 -0
  29. package/.agents/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
  30. package/.agents/skills/embedded-captions/modes/standard/_motion.md +192 -0
  31. package/.agents/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
  32. package/.agents/skills/embedded-captions/references/aesthetic-principles.md +168 -0
  33. package/.agents/skills/embedded-captions/references/anti-patterns.md +188 -0
  34. package/.agents/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
  35. package/.agents/skills/embedded-captions/references/caption-grouping.md +130 -0
  36. package/.agents/skills/embedded-captions/references/composition-craft.md +522 -0
  37. package/.agents/skills/embedded-captions/references/direction-catalog.md +138 -0
  38. package/.agents/skills/embedded-captions/references/example-renders/champion.html +371 -0
  39. package/.agents/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
  40. package/.agents/skills/embedded-captions/references/failure-modes.md +145 -0
  41. package/.agents/skills/embedded-captions/references/layout-heuristics.md +238 -0
  42. package/.agents/skills/embedded-captions/references/motion-vocabulary.md +148 -0
  43. package/.agents/skills/embedded-captions/references/rail.md +68 -0
  44. package/.agents/skills/embedded-captions/references/reference-bar.md +47 -0
  45. package/.agents/skills/embedded-captions/references/scene-types.md +94 -0
  46. package/.agents/skills/embedded-captions/references/test-set.md +66 -0
  47. package/.agents/skills/embedded-captions/references/typographic-moves.md +266 -0
  48. package/.agents/skills/embedded-captions/references/typography-presets.md +63 -0
  49. package/.agents/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
  50. package/.agents/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
  51. package/.agents/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
  52. package/.agents/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
  53. package/.agents/skills/embedded-captions/scripts/check-timing.cjs +173 -0
  54. package/.agents/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
  55. package/.agents/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
  56. package/.agents/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
  57. package/.agents/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
  58. package/.agents/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
  59. package/.agents/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
  60. package/.agents/skills/embedded-captions/scripts/make-composition.cjs +404 -0
  61. package/.agents/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
  62. package/.agents/skills/embedded-captions/scripts/matte.cjs +294 -0
  63. package/.agents/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
  64. package/.agents/skills/embedded-captions/scripts/prepare.sh +39 -0
  65. package/.agents/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
  66. package/.agents/skills/embedded-captions/scripts/render-and-composite.sh +509 -0
  67. package/.agents/skills/embedded-captions/scripts/render-theme.sh +34 -0
  68. package/.agents/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
  69. package/.agents/skills/embedded-captions/scripts/transcribe.cjs +349 -0
  70. package/.agents/skills/embedded-captions/themes/PORTING.md +49 -0
  71. package/.agents/skills/embedded-captions/themes/README.md +244 -0
  72. package/.agents/skills/embedded-captions/themes/anchor.json +27 -0
  73. package/.agents/skills/embedded-captions/themes/arcade.json +51 -0
  74. package/.agents/skills/embedded-captions/themes/aurora.json +41 -0
  75. package/.agents/skills/embedded-captions/themes/biolume.json +35 -0
  76. package/.agents/skills/embedded-captions/themes/brush.json +74 -0
  77. package/.agents/skills/embedded-captions/themes/chalkboard.json +52 -0
  78. package/.agents/skills/embedded-captions/themes/dossier.json +56 -0
  79. package/.agents/skills/embedded-captions/themes/graffiti.json +62 -0
  80. package/.agents/skills/embedded-captions/themes/hologram.json +41 -0
  81. package/.agents/skills/embedded-captions/themes/inkwater.json +43 -0
  82. package/.agents/skills/embedded-captions/themes/laser.json +46 -0
  83. package/.agents/skills/embedded-captions/themes/lastpage.json +33 -0
  84. package/.agents/skills/embedded-captions/themes/neonsign.json +53 -0
  85. package/.agents/skills/embedded-captions/themes/nightcity.json +56 -0
  86. package/.agents/skills/embedded-captions/themes/ordnance.json +54 -0
  87. package/.agents/skills/embedded-captions/themes/papercut.json +37 -0
  88. package/.agents/skills/embedded-captions/themes/popup.json +46 -0
  89. package/.agents/skills/embedded-captions/themes/ransom.json +62 -0
  90. package/.agents/skills/embedded-captions/themes/scoreboard.json +54 -0
  91. package/.agents/skills/embedded-captions/themes/spectrum.json +46 -0
  92. package/.agents/skills/embedded-captions/themes/stardust.json +29 -0
  93. package/.agents/skills/embedded-captions/themes/stomp.json +43 -0
  94. package/.agents/skills/embedded-captions/themes/terminal.json +49 -0
  95. package/.agents/skills/embedded-captions/themes/thunder.json +44 -0
  96. package/.agents/skills/embedded-captions/themes/transit.json +44 -0
  97. package/.agents/skills/embedded-captions/themes/vhs.json +47 -0
  98. package/.agents/skills/faceless-explainer/SKILL.md +209 -0
  99. package/.agents/skills/faceless-explainer/references/cut-catalog.md +215 -0
  100. package/.agents/skills/faceless-explainer/references/motion-language.md +156 -0
  101. package/.agents/skills/faceless-explainer/references/story-design.md +248 -0
  102. package/.agents/skills/faceless-explainer/references/visual-design.md +146 -0
  103. package/.agents/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
  104. package/.agents/skills/faceless-explainer/scripts/audio.mjs +260 -0
  105. package/.agents/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
  106. package/.agents/skills/faceless-explainer/scripts/captions.mjs +508 -0
  107. package/.agents/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
  108. package/.agents/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
  109. package/.agents/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
  110. package/.agents/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
  111. package/.agents/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
  112. package/.agents/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
  113. package/.agents/skills/faceless-explainer/scripts/transitions.mjs +320 -0
  114. package/.agents/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
  115. package/.agents/skills/flockposter/LICENSE +17 -0
  116. package/.agents/skills/flockposter/README.md +72 -0
  117. package/.agents/skills/flockposter/SKILL.md +562 -0
  118. package/.agents/skills/flockposter/examples/cli-instagram-reel.sh +21 -0
  119. package/.agents/skills/flockposter/examples/cli-multi-platform.json +69 -0
  120. package/.agents/skills/flockposter/examples/cli-tiktok-upload-only.sh +22 -0
  121. package/.agents/skills/flockposter/examples/cli-x-thread.sh +17 -0
  122. package/.agents/skills/flockposter/examples/cli-youtube-short.sh +21 -0
  123. package/.agents/skills/flockposter/examples/public-api-instagram-reel.json +28 -0
  124. package/.agents/skills/general-video/SKILL.md +143 -0
  125. package/.agents/skills/hyperframes/SKILL.md +160 -0
  126. package/.agents/skills/hyperframes-animation/SKILL.md +84 -0
  127. package/.agents/skills/hyperframes-animation/adapters/animate-text.md +64 -0
  128. package/.agents/skills/hyperframes-animation/adapters/animejs.md +114 -0
  129. package/.agents/skills/hyperframes-animation/adapters/css-animations.md +143 -0
  130. package/.agents/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
  131. package/.agents/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
  132. package/.agents/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
  133. package/.agents/skills/hyperframes-animation/adapters/gsap.md +105 -0
  134. package/.agents/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
  135. package/.agents/skills/hyperframes-animation/adapters/lottie.md +117 -0
  136. package/.agents/skills/hyperframes-animation/adapters/three.md +131 -0
  137. package/.agents/skills/hyperframes-animation/adapters/typegpu.md +178 -0
  138. package/.agents/skills/hyperframes-animation/adapters/waapi.md +101 -0
  139. package/.agents/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
  140. package/.agents/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
  141. package/.agents/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
  142. package/.agents/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
  143. package/.agents/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
  144. package/.agents/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
  145. package/.agents/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
  146. package/.agents/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
  147. package/.agents/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
  148. package/.agents/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
  149. package/.agents/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
  150. package/.agents/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
  151. package/.agents/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
  152. package/.agents/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
  153. package/.agents/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
  154. package/.agents/skills/hyperframes-animation/blueprints-index.md +146 -0
  155. package/.agents/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
  156. package/.agents/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
  157. package/.agents/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
  158. package/.agents/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
  159. package/.agents/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
  160. package/.agents/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
  161. package/.agents/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
  162. package/.agents/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
  163. package/.agents/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
  164. package/.agents/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
  165. package/.agents/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
  166. package/.agents/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
  167. package/.agents/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
  168. package/.agents/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
  169. package/.agents/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
  170. package/.agents/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
  171. package/.agents/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
  172. package/.agents/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
  173. package/.agents/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
  174. package/.agents/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
  175. package/.agents/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
  176. package/.agents/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
  177. package/.agents/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
  178. package/.agents/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
  179. package/.agents/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
  180. package/.agents/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
  181. package/.agents/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
  182. package/.agents/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
  183. package/.agents/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
  184. package/.agents/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
  185. package/.agents/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
  186. package/.agents/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
  187. package/.agents/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
  188. package/.agents/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
  189. package/.agents/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
  190. package/.agents/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
  191. package/.agents/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
  192. package/.agents/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
  193. package/.agents/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
  194. package/.agents/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
  195. package/.agents/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
  196. package/.agents/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
  197. package/.agents/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
  198. package/.agents/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
  199. package/.agents/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
  200. package/.agents/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
  201. package/.agents/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
  202. package/.agents/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
  203. package/.agents/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
  204. package/.agents/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
  205. package/.agents/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
  206. package/.agents/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
  207. package/.agents/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
  208. package/.agents/skills/hyperframes-animation/rules/viewport-change.md +349 -0
  209. package/.agents/skills/hyperframes-animation/rules-index.md +86 -0
  210. package/.agents/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
  211. package/.agents/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
  212. package/.agents/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
  213. package/.agents/skills/hyperframes-animation/techniques.md +507 -0
  214. package/.agents/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
  215. package/.agents/skills/hyperframes-animation/transitions/catalog.md +127 -0
  216. package/.agents/skills/hyperframes-animation/transitions/css-3d.md +12 -0
  217. package/.agents/skills/hyperframes-animation/transitions/css-blur.md +51 -0
  218. package/.agents/skills/hyperframes-animation/transitions/css-cover.md +43 -0
  219. package/.agents/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
  220. package/.agents/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
  221. package/.agents/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
  222. package/.agents/skills/hyperframes-animation/transitions/css-grid.md +10 -0
  223. package/.agents/skills/hyperframes-animation/transitions/css-light.md +49 -0
  224. package/.agents/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
  225. package/.agents/skills/hyperframes-animation/transitions/css-other.md +25 -0
  226. package/.agents/skills/hyperframes-animation/transitions/css-push.md +41 -0
  227. package/.agents/skills/hyperframes-animation/transitions/css-radial.md +37 -0
  228. package/.agents/skills/hyperframes-animation/transitions/css-scale.md +24 -0
  229. package/.agents/skills/hyperframes-animation/transitions/overview.md +153 -0
  230. package/.agents/skills/hyperframes-cli/SKILL.md +113 -0
  231. package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
  232. package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +55 -0
  233. package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
  234. package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
  235. package/.agents/skills/hyperframes-cli/references/preview-render.md +149 -0
  236. package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
  237. package/.agents/skills/hyperframes-core/SKILL.md +78 -0
  238. package/.agents/skills/hyperframes-core/references/composition-patterns.md +263 -0
  239. package/.agents/skills/hyperframes-core/references/data-attributes.md +70 -0
  240. package/.agents/skills/hyperframes-core/references/determinism-rules.md +68 -0
  241. package/.agents/skills/hyperframes-core/references/full-screen-motion.md +62 -0
  242. package/.agents/skills/hyperframes-core/references/minimal-composition.md +66 -0
  243. package/.agents/skills/hyperframes-core/references/script-format.md +49 -0
  244. package/.agents/skills/hyperframes-core/references/storyboard-format.md +95 -0
  245. package/.agents/skills/hyperframes-core/references/sub-compositions.md +237 -0
  246. package/.agents/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
  247. package/.agents/skills/hyperframes-core/references/tailwind.md +125 -0
  248. package/.agents/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
  249. package/.agents/skills/hyperframes-core/references/variables-and-media.md +90 -0
  250. package/.agents/skills/hyperframes-creative/SKILL.md +70 -0
  251. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
  252. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
  253. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  254. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
  255. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
  256. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
  257. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
  258. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
  259. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
  260. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
  261. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
  262. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
  263. package/.agents/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
  264. package/.agents/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
  265. package/.agents/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
  266. package/.agents/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
  267. package/.agents/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
  268. package/.agents/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
  269. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
  270. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
  271. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
  272. package/.agents/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
  273. package/.agents/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
  274. package/.agents/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
  275. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
  276. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
  277. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  278. package/.agents/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
  279. package/.agents/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
  280. package/.agents/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
  281. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
  282. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
  283. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
  284. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
  285. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
  286. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
  287. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
  288. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
  289. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  290. package/.agents/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
  291. package/.agents/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
  292. package/.agents/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
  293. package/.agents/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
  294. package/.agents/skills/hyperframes-creative/palettes/monochrome.md +14 -0
  295. package/.agents/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
  296. package/.agents/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
  297. package/.agents/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
  298. package/.agents/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
  299. package/.agents/skills/hyperframes-creative/references/audio-reactive.md +76 -0
  300. package/.agents/skills/hyperframes-creative/references/beat-direction.md +164 -0
  301. package/.agents/skills/hyperframes-creative/references/composition-patterns.md +199 -0
  302. package/.agents/skills/hyperframes-creative/references/data-in-motion.md +19 -0
  303. package/.agents/skills/hyperframes-creative/references/design-adherence.md +19 -0
  304. package/.agents/skills/hyperframes-creative/references/design-picker.md +123 -0
  305. package/.agents/skills/hyperframes-creative/references/design-spec.md +55 -0
  306. package/.agents/skills/hyperframes-creative/references/house-style.md +73 -0
  307. package/.agents/skills/hyperframes-creative/references/motion-principles.md +150 -0
  308. package/.agents/skills/hyperframes-creative/references/narration.md +92 -0
  309. package/.agents/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
  310. package/.agents/skills/hyperframes-creative/references/typography.md +218 -0
  311. package/.agents/skills/hyperframes-creative/references/video-composition.md +63 -0
  312. package/.agents/skills/hyperframes-creative/references/visual-styles.md +457 -0
  313. package/.agents/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
  314. package/.agents/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
  315. package/.agents/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
  316. package/.agents/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
  317. package/.agents/skills/hyperframes-creative/templates/design-picker.html +1432 -0
  318. package/.agents/skills/hyperframes-keyframes/SKILL.md +237 -0
  319. package/.agents/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
  320. package/.agents/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
  321. package/.agents/skills/motion-graphics/SKILL.md +172 -0
  322. package/.agents/skills/motion-graphics/agents/builder.md +40 -0
  323. package/.agents/skills/motion-graphics/agents/director.md +53 -0
  324. package/.agents/skills/motion-graphics/agents/finalize.md +17 -0
  325. package/.agents/skills/motion-graphics/catalog-map.md +40 -0
  326. package/.agents/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
  327. package/.agents/skills/motion-graphics/categories/charts/module.md +21 -0
  328. package/.agents/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
  329. package/.agents/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
  330. package/.agents/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
  331. package/.agents/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
  332. package/.agents/skills/motion-graphics/categories/maps/module.md +61 -0
  333. package/.agents/skills/motion-graphics/categories/news/module.md +56 -0
  334. package/.agents/skills/motion-graphics/categories/stat/module.md +21 -0
  335. package/.agents/skills/motion-graphics/categories/tweet/module.md +16 -0
  336. package/.agents/skills/motion-graphics/categories/webpage/module.md +21 -0
  337. package/.agents/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
  338. package/.agents/skills/motion-graphics/grounding/locate.mjs +227 -0
  339. package/.agents/skills/motion-graphics/phases/source/guide.md +21 -0
  340. package/.agents/skills/motion-graphics/references/builder-contract.md +38 -0
  341. package/.agents/skills/motion-graphics/references/motion-vocabulary.md +43 -0
  342. package/.agents/skills/motion-graphics/references/shot-plan-ir.md +54 -0
  343. package/.agents/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
  344. package/.agents/skills/product-launch-video/SKILL.md +208 -0
  345. package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
  346. package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
  347. package/.agents/skills/product-launch-video/references/story-design.md +373 -0
  348. package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
  349. package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
  350. package/.agents/skills/product-launch-video/scripts/audio.mjs +260 -0
  351. package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
  352. package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
  353. package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
  354. package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
  355. package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
  356. package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
  357. package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
  358. package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
  359. package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
  360. package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
  361. package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
  362. package/.agents/skills/product-launch-video/scripts/transitions.mjs +327 -0
  363. package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
  364. package/.agents/skills/slideshow/SKILL.md +550 -0
  365. package/.agents/skills/slideshow/references/standalone-harness.md +1020 -0
  366. package/.agents/skills/talking-head-recut/NOTICE.md +39 -0
  367. package/.agents/skills/talking-head-recut/SKILL.md +1195 -0
  368. package/.agents/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
  369. package/.agents/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
  370. package/.agents/skills/talking-head-recut/references/frames/clean.html +92 -0
  371. package/.agents/skills/talking-head-recut/references/frames/hairline.html +171 -0
  372. package/.agents/skills/talking-head-recut/references/frames/polaroid.html +131 -0
  373. package/.agents/skills/talking-head-recut/references/layouts/overlay.html +164 -0
  374. package/.agents/skills/talking-head-recut/references/layouts/pip.html +143 -0
  375. package/.agents/skills/talking-head-recut/references/layouts/split.html +121 -0
  376. package/.agents/skills/talking-head-recut/references/layouts/stack.html +109 -0
  377. package/.agents/skills/talking-head-recut/references/styles/academic.html +172 -0
  378. package/.agents/skills/talking-head-recut/references/styles/audit.html +170 -0
  379. package/.agents/skills/talking-head-recut/references/styles/editorial.html +189 -0
  380. package/.agents/skills/talking-head-recut/references/styles/geom.html +181 -0
  381. package/.agents/skills/talking-head-recut/references/styles/minimal.html +130 -0
  382. package/.agents/skills/talking-head-recut/references/styles/spotlight.html +142 -0
  383. package/.agents/skills/talking-head-recut/references/styles/swiss.html +188 -0
  384. package/.agents/skills/talking-head-recut/references/styles/terminal.html +196 -0
  385. package/.agents/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
  386. package/.agents/skills/talking-head-recut/references/styles/xhs.html +206 -0
  387. package/.agents/skills/vidfarm-media/SKILL.md +85 -0
  388. package/.agents/skills/vidfarm-media/references/tts.md +54 -0
  389. package/.agents/skills/vidfarm-media/scripts/audio.mjs +628 -0
  390. package/.agents/skills/vidfarm-media/scripts/wait-bgm.mjs +31 -0
  391. package/.agents/skills/website-to-video/SKILL.md +145 -0
  392. package/.agents/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
  393. package/.agents/skills/website-to-video/assets/sfx/manifest.json +97 -0
  394. package/.agents/skills/website-to-video/references/beat-builder-guide.md +263 -0
  395. package/.agents/skills/website-to-video/references/capabilities.md +713 -0
  396. package/.agents/skills/website-to-video/references/step-0-capture.md +55 -0
  397. package/.agents/skills/website-to-video/references/step-1-design.md +333 -0
  398. package/.agents/skills/website-to-video/references/step-2-brief.md +178 -0
  399. package/.agents/skills/website-to-video/references/step-3-storyboard.md +572 -0
  400. package/.agents/skills/website-to-video/references/step-4-vo.md +225 -0
  401. package/.agents/skills/website-to-video/references/step-5-build.md +483 -0
  402. package/.agents/skills/website-to-video/references/step-6-validate.md +341 -0
  403. package/.agents/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
  404. package/SKILL.director.md +37 -0
  405. package/SKILL.platform.md +6 -1
  406. package/demo/dist/app.js +295 -11
  407. package/dist/src/app.js +317 -133
  408. package/dist/src/cli.js +529 -12
  409. package/dist/src/composition-runtime.js +262 -3
  410. package/dist/src/devcli/doctor.js +192 -0
  411. package/dist/src/devcli/hyperframes-cli.js +118 -0
  412. package/dist/src/devcli/skills.js +476 -0
  413. package/dist/src/devcli/stills.js +249 -0
  414. package/dist/src/editor-chat.js +255 -0
  415. package/dist/src/hyperframes/composition.js +5 -5
  416. package/dist/src/services/composition-lint.js +199 -0
  417. package/dist/src/services/hyperframes.js +67 -13
  418. package/package.json +2 -1
@@ -0,0 +1,349 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * transcribe.cjs — word-level transcription via hyperframes' native Whisper
4
+ * (replaces the Python ElevenLabs Scribe path; no Python, no API key).
5
+ *
6
+ * node transcribe.cjs <project-dir> [model] [language]
7
+ * Reads: <project>/source.mp4 (audio track)
8
+ * Writes: <project>/transcript.json — { text, language_code, words:[{text,start,end,type}] }
9
+ */
10
+ const path = require("path");
11
+ const fs = require("fs");
12
+ const os = require("os");
13
+ const cp = require("child_process");
14
+
15
+ // Resolve the hyperframes CLI as an argv prefix (["node", cli.js] or ["npx", …]).
16
+ // Order: built checkout → installed npm package (vidfarm-devcli ships it) → npx.
17
+ function hfCli() {
18
+ const roots = [
19
+ process.env.HYPERFRAMES_ROOT,
20
+ path.resolve(__dirname, "..", "..", ".."),
21
+ path.join(os.homedir(), "Downloads", "hyperframes"),
22
+ ].filter(Boolean);
23
+ for (const r of roots) {
24
+ const cli = path.join(r, "packages", "cli", "dist", "cli.js");
25
+ if (fs.existsSync(cli)) return ["node", cli];
26
+ }
27
+ try {
28
+ return ["node", require.resolve("hyperframes/dist/cli.js", { paths: [__dirname, process.cwd()] })];
29
+ } catch {}
30
+ return ["npx", "-y", "hyperframes"]; // last resort — fetches the CLI on demand
31
+ }
32
+ function ensureSource(project) {
33
+ const src = path.join(project, "source.mp4");
34
+ if (fs.existsSync(src)) return src;
35
+ const EXCL = new Set(["final", "bg_plus_caps", "fg_caps", "audio"]);
36
+ let cands = fs
37
+ .readdirSync(project)
38
+ .filter(
39
+ (f) =>
40
+ ["mp4", "mov", "webm", "mkv", "m4v"].includes(path.extname(f).slice(1).toLowerCase()) &&
41
+ !EXCL.has(path.basename(f, path.extname(f))) &&
42
+ !f.startsWith("index"),
43
+ )
44
+ .map((f) => path.join(project, f));
45
+ let found = cands.sort((a, b) => fs.statSync(b).size - fs.statSync(a).size)[0];
46
+ if (found) {
47
+ try {
48
+ fs.symlinkSync(path.basename(found), src);
49
+ } catch {
50
+ fs.copyFileSync(found, src);
51
+ }
52
+ }
53
+ return src;
54
+ }
55
+ function _usableWords(d) {
56
+ return d && Array.isArray(d.words) && d.words.some((w) => w && "start" in w && "end" in w);
57
+ }
58
+ // Mean loudness of the audio, for the no-speech guard below. Silence → whisper
59
+ // hallucinates (famously "Thank you."), and the decision gate refuses "no speech".
60
+ function meanVolumeDb(audio) {
61
+ try {
62
+ // ffmpeg writes volumedetect stats to STDERR — capture it (spawnSync, no throw).
63
+ const r = cp.spawnSync(
64
+ "ffmpeg",
65
+ ["-hide_banner", "-nostats", "-i", audio, "-af", "volumedetect", "-f", "null", "-"],
66
+ { encoding: "utf8" },
67
+ );
68
+ const out = (r.stderr || "") + (r.stdout || "");
69
+ const m = out.match(/mean_volume:\s*(-?[\d.]+) dB/);
70
+ return m ? parseFloat(m[1]) : null;
71
+ } catch {
72
+ return null;
73
+ }
74
+ }
75
+
76
+ // Where does AUDIBLE content end? Whisper hallucinates trailing words over a silent
77
+ // tail (observed: "I'm sorry." repeated over dead air at a clip's end). silencedetect
78
+ // finds a terminal silence running to EOF; words "spoken" inside it are fabricated.
79
+ // Conservative: applause/music read as non-silence, so this fires only on truly dead
80
+ // tails. Returns {speechEnd, total} or null.
81
+ function audibleEnd(audio) {
82
+ try {
83
+ const r = cp.spawnSync(
84
+ "ffmpeg",
85
+ [
86
+ "-hide_banner",
87
+ "-nostats",
88
+ "-i",
89
+ audio,
90
+ "-af",
91
+ "silencedetect=noise=-35dB:d=0.6",
92
+ "-f",
93
+ "null",
94
+ "-",
95
+ ],
96
+ { encoding: "utf8" },
97
+ );
98
+ const out = (r.stderr || "") + (r.stdout || "");
99
+ const durM = out.match(/Duration:\s*(\d+):(\d+):([\d.]+)/);
100
+ const total = durM ? +durM[1] * 3600 + +durM[2] * 60 + +durM[3] : null;
101
+ if (total == null) return null;
102
+ const starts = [...out.matchAll(/silence_start:\s*([\d.]+)/g)].map((x) => +x[1]);
103
+ const ends = [...out.matchAll(/silence_end:\s*([\d.]+)/g)].map((x) => +x[1]);
104
+ if (!starts.length) return { speechEnd: total, total };
105
+ const lastStart = starts[starts.length - 1];
106
+ const closed = ends.some((e) => e > lastStart); // silence re-broken before EOF?
107
+ return { speechEnd: closed ? total : lastStart, total };
108
+ } catch {
109
+ return null;
110
+ }
111
+ }
112
+
113
+ function main() {
114
+ const project = path.resolve(process.argv[2] || "");
115
+ if (!process.argv[2]) {
116
+ console.error("usage: transcribe.cjs <project-dir> [model] [language]");
117
+ process.exit(1);
118
+ }
119
+ // Default = multilingual `small`, NOT `small.en`. Per hyperframes-media: ".en models
120
+ // mistranslate non-English and mis-handle accented speech; default to small (auto-detects
121
+ // language)." We hardcoded small.en before — it hallucinated a wrong transcript on an
122
+ // accented speaker. Pass `small.en` only for known-clean-English; tough accents → a larger model.
123
+ const model = process.argv[3] || process.env.WHISPER_MODEL || "small";
124
+ const language = process.argv[4] || process.env.WHISPER_LANG || "";
125
+ const out = path.join(project, "transcript.json");
126
+
127
+ // already in our schema? skip — but validate the SHAPE, not just the keys:
128
+ // `hyperframes init` drops a whisper.cpp segment/token-format transcript.json
129
+ // (offsets-in-ms, nested tokens) that can carry a `words` key yet poison the
130
+ // compilers. Only a word-level {text,start,end} array counts as normalized.
131
+ try {
132
+ const d = JSON.parse(fs.readFileSync(out, "utf8"));
133
+ const wordShaped =
134
+ d &&
135
+ Array.isArray(d.words) &&
136
+ d.words.length > 0 &&
137
+ d.words.every(
138
+ (w) =>
139
+ w &&
140
+ typeof (w.text ?? w.word) === "string" &&
141
+ Number.isFinite(w.start) &&
142
+ Number.isFinite(w.end) &&
143
+ w.end < 36000, // ms-offset formats blow past any sane seconds value
144
+ );
145
+ if (wordShaped && d.language_code) {
146
+ console.log("[transcribe] already normalized, skipping");
147
+ return;
148
+ }
149
+ if (d && !wordShaped) {
150
+ console.log(
151
+ "[transcribe] existing transcript.json is NOT word-level (init stub / segment format) — regenerating",
152
+ );
153
+ }
154
+ } catch {}
155
+
156
+ const src = ensureSource(project);
157
+ if (!fs.existsSync(src)) {
158
+ console.error(`[transcribe] no source in ${project}`);
159
+ process.exit(2);
160
+ }
161
+ const audio = path.join(project, "audio.mp3");
162
+ if (!fs.existsSync(audio))
163
+ cp.execFileSync(
164
+ "ffmpeg",
165
+ ["-y", "-i", src, "-vn", "-acodec", "libmp3lame", "-q:a", "2", audio],
166
+ { stdio: "ignore" },
167
+ );
168
+
169
+ // ── engine: WhisperX (preferred — wav2vec2 forced alignment gives word timings far
170
+ // tighter than whisper.cpp's segment-interpolated ones; our gates are 80ms-strict) →
171
+ // fallback hyperframes whisper.cpp. Force with TRANSCRIBE_ENGINE=whisper|whisperx.
172
+ let words = null,
173
+ engine = null;
174
+ const wantWx = (process.env.TRANSCRIBE_ENGINE || "whisperx") === "whisperx";
175
+ if (wantWx) {
176
+ try {
177
+ const wav = path.join(project, "_wx_audio.wav");
178
+ cp.execFileSync("ffmpeg", ["-y", "-i", src, "-vn", "-ac", "1", "-ar", "16000", wav], {
179
+ stdio: "ignore",
180
+ });
181
+ const outDir = path.join(project, "_wx_out");
182
+ fs.mkdirSync(outDir, { recursive: true });
183
+ const wxModel = model.replace(/\.en$/, ""); // whisperx model names are multilingual ids
184
+ // Pin whisperx so `uvx` fetches a reproducible build instead of resolving
185
+ // "latest" on every run (a supply-chain + determinism foot-gun). Override
186
+ // with $WHISPERX_VERSION if you've validated a different release.
187
+ const whisperxSpec = `whisperx==${process.env.WHISPERX_VERSION || "3.8.6"}`;
188
+ const wxArgs = [
189
+ "--python",
190
+ "3.12",
191
+ "--from",
192
+ whisperxSpec,
193
+ "whisperx",
194
+ wav,
195
+ "--model",
196
+ wxModel,
197
+ "--device",
198
+ "cpu",
199
+ "--compute_type",
200
+ "int8",
201
+ "--output_dir",
202
+ outDir,
203
+ "--output_format",
204
+ "json",
205
+ "--no_align_deletes",
206
+ "--print_progress",
207
+ "False",
208
+ ];
209
+ if (language) wxArgs.push("--language", language);
210
+ // strip our flag if this whisperx build doesn't know it
211
+ let r = cp.spawnSync("uvx", wxArgs, { encoding: "utf8", timeout: 600000 });
212
+ if ((r.status || 0) !== 0 && /no_align_deletes/.test(r.stderr || "")) {
213
+ r = cp.spawnSync(
214
+ "uvx",
215
+ wxArgs.filter((a) => a !== "--no_align_deletes"),
216
+ { encoding: "utf8", timeout: 600000 },
217
+ );
218
+ }
219
+ if ((r.status || 0) !== 0)
220
+ throw new Error(
221
+ (r.stderr || "whisperx failed").split("\n").slice(-4).join(" ").slice(0, 300),
222
+ );
223
+ const wxJson = JSON.parse(fs.readFileSync(path.join(outDir, "_wx_audio.json"), "utf8"));
224
+ const wx = [];
225
+ for (const seg of wxJson.segments || [])
226
+ for (const w of seg.words || []) {
227
+ // alignment occasionally yields a word with no timing (OOV) — interpolate from neighbors later; mark null now
228
+ wx.push({ text: String(w.word || "").trim(), start: w.start, end: w.end, type: "word" });
229
+ }
230
+ // interpolate missing timings from neighbors (rare OOV/number cases)
231
+ for (let i = 0; i < wx.length; i++) {
232
+ if (wx[i].start == null || wx[i].end == null) {
233
+ const prevEnd = i > 0 ? wx[i - 1].end : 0;
234
+ const nextStart = wx.slice(i + 1).find((x) => x.start != null);
235
+ const ns = nextStart ? nextStart.start : prevEnd + 0.3;
236
+ wx[i].start = prevEnd;
237
+ wx[i].end = Math.max(prevEnd + 0.05, ns - 0.02);
238
+ }
239
+ }
240
+ if (wx.length) {
241
+ words = wx.filter((w) => w.text);
242
+ engine = `whisperx(${wxModel}+wav2vec2)`;
243
+ }
244
+ try {
245
+ fs.unlinkSync(wav);
246
+ } catch {}
247
+ } catch (e) {
248
+ console.error(
249
+ `[transcribe] whisperx unavailable (${String(e.message || e).slice(0, 160)}) — falling back to whisper.cpp`,
250
+ );
251
+ }
252
+ }
253
+
254
+ if (!words) {
255
+ // run hyperframes Whisper → writes a flat word array to <dir>/transcript.json
256
+ const cli = hfCli();
257
+ const args = ["transcribe", audio, "-d", project, "--json", "--model", model];
258
+ if (language) args.push("--language", language);
259
+ let info = {};
260
+ try {
261
+ const so = cp.execFileSync(cli[0], [...cli.slice(1), ...args], {
262
+ encoding: "utf8",
263
+ env: {
264
+ ...process.env,
265
+ HYPERFRAMES_NO_TELEMETRY: "1",
266
+ HYPERFRAMES_SKIP_SKILLS: "1",
267
+ // Fresh empty config dir: a stray ~/.heygen credential must never flip
268
+ // the CLI's audio-provider preference (same isolation as the devcli's
269
+ // hyperframes-cli.ts and vidfarm-media's audio.mjs spawn sites).
270
+ HEYGEN_CONFIG_DIR: fs.mkdtempSync(path.join(os.tmpdir(), "vf-captions-heygen-")),
271
+ },
272
+ });
273
+ const line = so.trim().split("\n").filter(Boolean).pop();
274
+ info = JSON.parse(line);
275
+ } catch (e) {
276
+ console.error("[transcribe] hyperframes whisper failed:", e.message);
277
+ process.exit(1);
278
+ }
279
+ const flatPath = info.transcriptPath || out;
280
+ const flat = JSON.parse(fs.readFileSync(flatPath, "utf8"));
281
+ const arr = Array.isArray(flat) ? flat : flat.words || [];
282
+ words = arr
283
+ .filter((w) => (w.text ?? w.word) != null)
284
+ .map((w) => ({
285
+ text: w.text ?? w.word,
286
+ start: w.start ?? w.t0,
287
+ end: w.end ?? w.t1,
288
+ type: "word",
289
+ }));
290
+ engine = `whisper.cpp(${model})`;
291
+ }
292
+
293
+ // Tail-hallucination guard: drop words whisper placed entirely inside a terminal
294
+ // silence (it fabricates e.g. repeated "I'm sorry." over dead air). Word START past
295
+ // the audible end (+0.4s slack) = fabricated; real final words start before it.
296
+ const ae = audibleEnd(audio);
297
+ let trimmedTail = 0;
298
+ if (ae && ae.speechEnd < ae.total - 0.8) {
299
+ const keep = words.filter((w) => w.start <= ae.speechEnd + 0.4);
300
+ trimmedTail = words.length - keep.length;
301
+ if (trimmedTail > 0) {
302
+ console.error(
303
+ `[transcribe] ⚠ trimmed ${trimmedTail} trailing word(s) starting after the audible end ` +
304
+ `(${ae.speechEnd.toFixed(2)}s; clip ${ae.total.toFixed(2)}s) — whisper hallucinates over silent tails.`,
305
+ );
306
+ words = keep;
307
+ }
308
+ }
309
+
310
+ const text = words
311
+ .map((w) => w.text)
312
+ .join(" ")
313
+ .replace(/\s+([,.!?;:])/g, "$1")
314
+ .trim();
315
+ fs.writeFileSync(
316
+ out,
317
+ JSON.stringify(
318
+ {
319
+ text,
320
+ language_code: language || "en",
321
+ engine,
322
+ words,
323
+ ...(trimmedTail ? { trimmed_tail_words: trimmedTail } : {}),
324
+ },
325
+ null,
326
+ 2,
327
+ ),
328
+ );
329
+ console.log(`[transcribe] ${engine} ${words.length} words → ${out}`);
330
+ console.log(`[transcribe] text: ${text.slice(0, 160)}${text.length > 160 ? "…" : ""}`);
331
+
332
+ // No-speech guard: whisper returns confident hallucinations over silence (e.g. the
333
+ // whole clip as "Thank you."). The decision gate REFUSES "no speech" — operationalize
334
+ // it so an agent trusting the transcript can't sail past the gate.
335
+ const meanDb = meanVolumeDb(audio);
336
+ if (meanDb != null && meanDb < -45) {
337
+ console.error(
338
+ `\n[transcribe] ⚠ NEAR-SILENT AUDIO — mean ${meanDb.toFixed(1)} dB (real speech ≈ -16..-26 dB).`,
339
+ );
340
+ console.error(
341
+ ` This transcript is almost certainly a Whisper hallucination, NOT real speech.`,
342
+ );
343
+ console.error(
344
+ ` Per the decision gate, REFUSE "no speech" — confirm with \`ffmpeg -i <src> -af silencedetect\`;`,
345
+ );
346
+ console.error(` do NOT author captions from fabricated words.`);
347
+ }
348
+ }
349
+ main();
@@ -0,0 +1,49 @@
1
+ # PORTING — turning a cap_fx3 demo into a first-class theme DNA
2
+
3
+ One theme at a time. The demo is the spec; the engine is the law.
4
+
5
+ ## Inputs
6
+
7
+ - Demo: `~/Downloads/cap_fx3/<tNN_name>/` — index.html (bg: scene-reaction + apex
8
+ setpiece), rail.html (fg alpha: body + furniture + front fx), postfx.json,
9
+ final_fx.mp4 + strip.png (ground truth of how it should look).
10
+ - Engine: `scripts/make-theme.cjs` — read the header + the existing paradigms
11
+ (rail/panel/poem/takeover) and setpieces (detonation/decode/drawon/assembly/
12
+ colorflip/cpslam/coverword/settle) before writing anything.
13
+
14
+ ## Process
15
+
16
+ 1. DECOMPOSE the demo: body paradigm? body entrance/exit verbs? hero setpiece?
17
+ front fx? plate budget? linkages? Map each piece to an existing registry
18
+ entry or mark it NEW.
19
+ 2. EXTEND the engine for the NEW pieces only — port the demo's GSAP logic into
20
+ generator functions, parameterized (sizes, colors, counts, seeds become DNA
21
+ params). Registries stay generic: paradigms/setpieces are the unit of code,
22
+ the DNA json is the unit of identity. Match the file's existing code style.
23
+ `node --check scripts/make-theme.cjs` after every edit.
24
+ 3. WRITE `themes/<name>.json` (drop the tNN\_ prefix). voice/when/register/fonts/
25
+ palette/body/hero/fx/plate/linkages — follow anchor.json + ordnance.json shape.
26
+ 4. VERIFY on the rooftop fixture:
27
+ - scaffold: `mkdir ~/Downloads/port_<name>` + symlink source.mp4 / frames_fg /
28
+ frames_bg + cp matte.fps transcript.json safe-zones.json from
29
+ `~/Downloads/cap_multi/rooftop/` (frames_bg from `~/Downloads/cap_fx/_frames_bg`).
30
+ - theme.json: same lines/hero the demo used (read its rail.html data).
31
+ - `node scripts/make-theme.cjs <dir>` → `preview-frames.cjs <dir> <4 key times>`
32
+ → READ the previews; compare against the demo's strip.png. Iterate ≤3 rounds.
33
+ - full render: `bash scripts/render-theme.sh <dir>` → extract a 12-frame strip
34
+ around the apex → view → compare to the demo strip. Small deviations OK,
35
+ note them; the THEME must read identically at a glance.
36
+ 5. REGRESSION: recompile one prior theme project (e.g. `~/Downloads/cap_anchor`,
37
+ plus the previous port in this batch) — make-theme must still compile and a
38
+ 2-frame preview must look unchanged.
39
+ 6. REGISTER: add the identity row to CATALOG.md (voice/when/needs, author →
40
+ make-theme) and a line in themes/README.md if it has one.
41
+
42
+ ## Hard rules
43
+
44
+ - The CONTRACT.md disciplines apply verbatim (determinism, physics doctrine,
45
+ body stability, apex-owns-frame, equal-length keyframes, fonts whitelist,
46
+ ≤ DUR scheduling): `~/Downloads/cap_fx3/CONTRACT.md`.
47
+ - Never edit existing setpieces'/paradigms' behavior unless fixing a bug —
48
+ existing themes must not change appearance.
49
+ - Do NOT commit; the orchestrator reviews and commits per batch.