@ignix-social/editor 0.1.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 (586) hide show
  1. package/LICENSE +190 -0
  2. package/NOTICE +54 -0
  3. package/README.md +23 -0
  4. package/bin/ignix-editor.mjs +8 -0
  5. package/package.json +53 -0
  6. package/patches/index.mjs +53 -0
  7. package/scripts/build-ffmpeg-macos.sh +35 -0
  8. package/scripts/build-whisper-macos.sh +21 -0
  9. package/scripts/vendor.mjs +41 -0
  10. package/skills/ignix-editor/SKILL.md +132 -0
  11. package/src/audio.mjs +31 -0
  12. package/src/binaries.json +46 -0
  13. package/src/binaries.mjs +83 -0
  14. package/src/cli.mjs +254 -0
  15. package/src/prepare.mjs +74 -0
  16. package/src/runtime/ignix-frame.js +92 -0
  17. package/src/transcribe.mjs +71 -0
  18. package/src/validate.mjs +71 -0
  19. package/templates/blank/index.html +41 -0
  20. package/vendor/hyperframes/README.md +181 -0
  21. package/vendor/hyperframes/UPSTREAM.json +12 -0
  22. package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
  23. package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
  24. package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
  25. package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
  26. package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
  27. package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
  28. package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
  29. package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
  30. package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
  31. package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
  32. package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
  33. package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
  34. package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
  35. package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
  36. package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
  37. package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
  38. package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
  39. package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
  40. package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
  41. package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
  42. package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
  43. package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
  44. package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
  45. package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
  46. package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
  47. package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
  48. package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
  49. package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
  50. package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
  51. package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
  52. package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
  53. package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
  54. package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
  55. package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
  56. package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
  57. package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
  58. package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
  59. package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
  60. package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
  61. package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
  62. package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
  63. package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
  64. package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
  65. package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
  66. package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
  67. package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
  68. package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
  69. package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
  70. package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
  71. package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
  72. package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
  73. package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
  74. package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
  75. package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
  76. package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
  77. package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
  78. package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
  79. package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
  80. package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
  81. package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
  82. package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
  83. package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
  84. package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
  85. package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
  86. package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
  87. package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
  88. package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
  89. package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
  90. package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
  91. package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
  92. package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
  93. package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
  94. package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
  95. package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
  96. package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
  97. package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
  98. package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
  99. package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
  100. package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
  101. package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
  102. package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
  103. package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
  104. package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
  105. package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
  106. package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
  107. package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
  108. package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
  109. package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
  110. package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
  111. package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
  112. package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
  113. package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
  114. package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
  115. package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
  116. package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
  117. package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
  118. package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
  119. package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
  120. package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
  121. package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
  122. package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
  123. package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
  124. package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
  125. package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
  126. package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
  127. package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
  128. package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
  129. package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
  130. package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
  131. package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
  132. package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
  133. package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
  134. package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
  135. package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
  136. package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
  137. package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
  138. package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
  139. package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
  140. package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
  141. package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
  142. package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
  143. package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
  144. package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
  145. package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
  146. package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
  147. package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
  148. package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
  149. package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
  150. package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
  151. package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
  152. package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
  153. package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
  154. package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
  155. package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
  156. package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
  157. package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
  158. package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
  159. package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
  160. package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
  161. package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
  162. package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
  163. package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
  164. package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
  165. package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
  166. package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
  167. package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
  168. package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
  169. package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
  170. package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
  171. package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
  172. package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
  173. package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
  174. package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
  175. package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
  176. package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
  177. package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
  178. package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
  179. package/vendor/hyperframes/dist/cli.js +495 -0
  180. package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
  181. package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
  182. package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
  183. package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
  184. package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
  185. package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
  186. package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
  187. package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
  188. package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
  189. package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
  190. package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
  191. package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
  192. package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
  193. package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
  194. package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
  195. package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
  196. package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
  197. package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
  198. package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
  199. package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
  200. package/vendor/hyperframes/dist/docs/compositions.md +67 -0
  201. package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
  202. package/vendor/hyperframes/dist/docs/examples.md +19 -0
  203. package/vendor/hyperframes/dist/docs/gsap.md +26 -0
  204. package/vendor/hyperframes/dist/docs/rendering.md +35 -0
  205. package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
  206. package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
  207. package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
  208. package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
  209. package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
  210. package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
  211. package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
  212. package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
  213. package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
  214. package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
  215. package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
  216. package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
  217. package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
  218. package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
  219. package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
  220. package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
  221. package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
  222. package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
  223. package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
  224. package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
  225. package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
  226. package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
  227. package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
  228. package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
  229. package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
  230. package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
  231. package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
  232. package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
  233. package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
  234. package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
  235. package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
  236. package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
  237. package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
  238. package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
  239. package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
  240. package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
  241. package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
  242. package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
  243. package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
  244. package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
  245. package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
  246. package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
  247. package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
  248. package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
  249. package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
  250. package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
  251. package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
  252. package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
  253. package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
  254. package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
  255. package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
  256. package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
  257. package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
  258. package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
  259. package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
  260. package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
  261. package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
  262. package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
  263. package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
  264. package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
  265. package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
  266. package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
  267. package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
  268. package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
  269. package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
  270. package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
  271. package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
  272. package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
  273. package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
  274. package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
  275. package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
  276. package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
  277. package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
  278. package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
  279. package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
  280. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
  281. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
  282. package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
  283. package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
  284. package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
  285. package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
  286. package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
  287. package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
  288. package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
  289. package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
  290. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
  291. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
  292. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
  293. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
  294. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
  295. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
  296. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
  297. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
  298. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
  299. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
  300. package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
  301. package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
  302. package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
  303. package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
  304. package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
  305. package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
  306. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
  307. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
  308. package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
  309. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
  310. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
  311. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
  312. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
  313. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
  314. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
  315. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
  316. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
  317. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
  318. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
  319. package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
  320. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
  321. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
  322. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
  323. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
  324. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
  325. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
  326. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
  327. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
  328. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
  329. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
  330. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
  331. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
  332. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
  333. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
  334. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
  335. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
  336. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
  337. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
  338. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
  339. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
  340. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
  341. package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
  342. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
  343. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
  344. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
  345. package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
  346. package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
  347. package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
  348. package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
  349. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
  350. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
  351. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
  352. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
  353. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
  354. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
  355. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
  356. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
  357. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
  358. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
  359. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
  360. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
  361. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
  362. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
  363. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
  364. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
  365. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
  366. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
  367. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
  368. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
  369. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
  370. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
  371. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
  372. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
  373. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
  374. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
  375. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
  376. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
  377. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
  378. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
  379. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
  380. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
  381. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
  382. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
  383. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
  384. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
  385. package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
  386. package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
  387. package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
  388. package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
  389. package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
  390. package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
  391. package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
  392. package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
  393. package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
  394. package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
  395. package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
  396. package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
  397. package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
  398. package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
  399. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
  400. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
  401. package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
  402. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
  403. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
  404. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
  405. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
  406. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
  407. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
  408. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
  409. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
  410. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
  411. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
  412. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
  413. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
  414. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
  415. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
  416. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
  417. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
  418. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
  419. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
  420. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
  421. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
  422. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
  423. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
  424. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
  425. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
  426. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
  427. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
  428. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
  429. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
  430. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
  431. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
  432. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
  433. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
  434. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
  435. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
  436. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
  437. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
  438. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
  439. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
  440. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
  441. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
  442. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
  443. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
  444. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
  445. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
  446. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
  447. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
  448. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
  449. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
  450. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
  451. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
  452. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
  453. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
  454. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
  455. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
  456. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
  457. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
  458. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
  459. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
  460. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
  461. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
  462. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
  463. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
  464. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
  465. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
  466. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
  467. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
  468. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
  469. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
  470. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
  471. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
  472. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
  473. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
  474. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
  475. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
  476. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
  477. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
  478. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
  479. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
  480. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
  481. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
  482. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
  483. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
  484. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
  485. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
  486. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
  487. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
  488. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
  489. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
  490. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
  491. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
  492. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
  493. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
  494. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
  495. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
  496. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
  497. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
  498. package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
  499. package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
  500. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
  501. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
  502. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
  503. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
  504. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
  505. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
  506. package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
  507. package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
  508. package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
  509. package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
  510. package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
  511. package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
  512. package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
  513. package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
  514. package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
  515. package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
  516. package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
  517. package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
  518. package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
  519. package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
  520. package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
  521. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
  522. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
  523. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
  524. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
  525. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
  526. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
  527. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
  528. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
  529. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
  530. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
  531. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
  532. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
  533. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
  534. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
  535. package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
  536. package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
  537. package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
  538. package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
  539. package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
  540. package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
  541. package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
  542. package/vendor/hyperframes/dist/studio/index.css +165 -0
  543. package/vendor/hyperframes/dist/studio/index.css.map +1 -0
  544. package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
  545. package/vendor/hyperframes/dist/studio/index.html +23 -0
  546. package/vendor/hyperframes/dist/studio/index.js +99693 -0
  547. package/vendor/hyperframes/dist/studio/index.js.map +1 -0
  548. package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
  549. package/vendor/hyperframes/dist/studio/player.js +10 -0
  550. package/vendor/hyperframes/dist/studio/player.js.map +1 -0
  551. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
  552. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
  553. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
  554. package/vendor/hyperframes/dist/studio/styles.css +1 -0
  555. package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
  556. package/vendor/hyperframes/dist/studio/ui.js +66 -0
  557. package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
  558. package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
  559. package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
  560. package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
  561. package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
  562. package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
  563. package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
  564. package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
  565. package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
  566. package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
  567. package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
  568. package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
  569. package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
  570. package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
  571. package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
  572. package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
  573. package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
  574. package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
  575. package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
  576. package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
  577. package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
  578. package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
  579. package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
  580. package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
  581. package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
  582. package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
  583. package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
  584. package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
  585. package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
  586. package/vendor/hyperframes/package.json +80 -0
@@ -0,0 +1,1147 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ gateRegistryItemsCompatibility
9
+ } from "./chunk-XH4DSOS5.js";
10
+ import {
11
+ initialModelForLanguage
12
+ } from "./chunk-K2EQN4VU.js";
13
+ import "./chunk-7JZ4FXP2.js";
14
+ import "./chunk-XT7X6QCP.js";
15
+ import {
16
+ writeNewFileSync
17
+ } from "./chunk-4YYJOFKS.js";
18
+ import {
19
+ Ee,
20
+ R,
21
+ Re,
22
+ Se,
23
+ ft,
24
+ ge,
25
+ me,
26
+ q,
27
+ ue
28
+ } from "./chunk-WMQNIQDJ.js";
29
+ import {
30
+ listRegistryItems,
31
+ loadAllItems,
32
+ resolveItemWithDependencies
33
+ } from "./chunk-LYNI3FOL.js";
34
+ import {
35
+ installItem
36
+ } from "./chunk-CWPVM2QV.js";
37
+ import "./chunk-A2Z4Z4VL.js";
38
+ import "./chunk-AWDFDFI3.js";
39
+ import "./chunk-P6LJ4Y32.js";
40
+ import "./chunk-GMECXFAN.js";
41
+ import {
42
+ DEFAULT_MODEL,
43
+ hasFFmpeg
44
+ } from "./chunk-OAF4XJOW.js";
45
+ import "./chunk-X5HWXQPU.js";
46
+ import {
47
+ findFFmpeg,
48
+ findFFprobe,
49
+ getFFmpegInstallHint
50
+ } from "./chunk-TVCRUG2S.js";
51
+ import {
52
+ trackInitTemplate
53
+ } from "./chunk-JTHMTOMQ.js";
54
+ import "./chunk-EISRN4E6.js";
55
+ import "./chunk-VWG7OQKU.js";
56
+ import {
57
+ c,
58
+ isColorSupported
59
+ } from "./chunk-ZTZA4UWZ.js";
60
+ import "./chunk-IUZFXWSV.js";
61
+ import "./chunk-AMKC3AXA.js";
62
+ import {
63
+ defineCommand,
64
+ runCommand
65
+ } from "./chunk-S3S4TGEH.js";
66
+ import "./chunk-54HJ63Q2.js";
67
+ import {
68
+ failCommand,
69
+ finishCommand
70
+ } from "./chunk-PBN6GBJE.js";
71
+ import "./chunk-K2FTXJYH.js";
72
+ import "./chunk-2YN64IN5.js";
73
+ import {
74
+ CANVAS_DIMENSIONS,
75
+ HTML_BODY_CSS_HEIGHT_FIRST_RE,
76
+ HTML_BODY_CSS_WIDTH_FIRST_RE,
77
+ VIEWPORT_META_SIZE_RE,
78
+ normalizeResolutionFlag
79
+ } from "./chunk-AVUUN2XD.js";
80
+ import "./chunk-DPVXBVLL.js";
81
+ import "./chunk-Z6B37SNM.js";
82
+ import "./chunk-HWKCIWQT.js";
83
+ import "./chunk-VC76R6W2.js";
84
+ import "./chunk-OFQWTKPW.js";
85
+ import "./chunk-LAOCA3MQ.js";
86
+ import "./chunk-LCSMOLGX.js";
87
+ import "./chunk-TWWSYAKJ.js";
88
+ import "./chunk-ZJUKFZ2P.js";
89
+ import "./chunk-HBBJFK6I.js";
90
+ import "./chunk-PJ3HDUCY.js";
91
+ import "./chunk-TQFG7HTI.js";
92
+ import "./chunk-GK4AIFIH.js";
93
+ import "./chunk-2PSPARWP.js";
94
+ import "./chunk-K4WIOZFP.js";
95
+ import "./chunk-XUXGIA7H.js";
96
+ import "./chunk-WERLJGIC.js";
97
+ import "./chunk-ISN5GRYI.js";
98
+ import {
99
+ VERSION
100
+ } from "./chunk-FLWXXDNS.js";
101
+ import "./chunk-KNU5COPB.js";
102
+ import "./chunk-3GXQPCJC.js";
103
+ import "./chunk-RQVDTPGD.js";
104
+ import "./chunk-PMRBLBUP.js";
105
+ import "./chunk-M2WBOQ2Q.js";
106
+
107
+ // src/commands/initMedia.ts
108
+ var VIDEO_SRC = "__VIDEO_SRC__";
109
+ var AUDIO_SRC = "__AUDIO_SRC__";
110
+ var DURATION = "__VIDEO_DURATION__";
111
+ function toSrcValue(filename) {
112
+ return encodeURI(filename).replace(/#/g, "%23").replace(/\?/g, "%3F");
113
+ }
114
+ function openTag(tag, placeholder) {
115
+ return `<${tag}\\b[^>]*src="${placeholder}"[^>]*>`;
116
+ }
117
+ function stripPlaceholder(html, tag, placeholder) {
118
+ const open = openTag(tag, placeholder);
119
+ return html.replace(new RegExp(`${open}[\\s\\S]*?</${tag}>`, "g"), "").replace(new RegExp(open, "g"), "");
120
+ }
121
+ function setVideoAudio(html, hasAudio) {
122
+ return html.replace(new RegExp(openTag("video", VIDEO_SRC), "g"), (tag) => {
123
+ const cleaned = tag.replace(
124
+ /\s+([^\s=>"']+)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>"']+))?/g,
125
+ (attr2, name) => name === "muted" || name === "data-has-audio" ? "" : attr2
126
+ );
127
+ const attr = hasAudio ? ' data-has-audio="true"' : " muted";
128
+ return cleaned.replace(/\s*>$/, `${attr}>`);
129
+ });
130
+ }
131
+ function patchMediaPlaceholders(html, opts) {
132
+ const legacyAudioSlot = new RegExp(openTag("audio", VIDEO_SRC)).test(html);
133
+ let out = html;
134
+ if (opts.video) {
135
+ out = stripPlaceholder(out, "audio", AUDIO_SRC);
136
+ if (legacyAudioSlot) {
137
+ if (!opts.video.hasAudio) out = stripPlaceholder(out, "audio", VIDEO_SRC);
138
+ } else {
139
+ out = setVideoAudio(out, opts.video.hasAudio);
140
+ }
141
+ const videoSrc = toSrcValue(opts.video.filename);
142
+ out = out.replaceAll(VIDEO_SRC, () => videoSrc);
143
+ } else if (opts.audio) {
144
+ out = stripPlaceholder(out, "video", VIDEO_SRC);
145
+ const audioSrc = toSrcValue(opts.audio.filename);
146
+ out = out.replaceAll(AUDIO_SRC, () => audioSrc);
147
+ out = out.replaceAll(VIDEO_SRC, () => audioSrc);
148
+ } else {
149
+ out = stripPlaceholder(out, "video", VIDEO_SRC);
150
+ out = stripPlaceholder(out, "audio", VIDEO_SRC);
151
+ out = stripPlaceholder(out, "audio", AUDIO_SRC);
152
+ }
153
+ const duration = opts.durationSeconds ? String(Math.round(opts.durationSeconds * 100) / 100) : "10";
154
+ return out.replaceAll(DURATION, duration);
155
+ }
156
+
157
+ // src/commands/init.ts
158
+ import {
159
+ existsSync as existsSync2,
160
+ mkdirSync,
161
+ copyFileSync,
162
+ cpSync,
163
+ writeFileSync,
164
+ readFileSync,
165
+ readdirSync
166
+ } from "fs";
167
+ import { resolve, basename, join as join2, dirname } from "path";
168
+ import { fileURLToPath } from "url";
169
+ import { execFileSync, spawn } from "child_process";
170
+
171
+ // src/ui/banner.ts
172
+ var GRADIENT = [
173
+ [255, 255, 255],
174
+ // white
175
+ [116, 225, 185],
176
+ // #74E1B9 teal
177
+ [106, 220, 255]
178
+ // #6ADCFF cyan
179
+ ];
180
+ function lerp(a, b, t) {
181
+ return Math.round(a + (b - a) * t);
182
+ }
183
+ function gradientColor(t) {
184
+ const segments = GRADIENT.length - 1;
185
+ const scaled = t * segments;
186
+ const i = Math.min(Math.floor(scaled), segments - 1);
187
+ const frac = scaled - i;
188
+ const a = GRADIENT[i];
189
+ const b = GRADIENT[i + 1];
190
+ return [lerp(a[0], b[0], frac), lerp(a[1], b[1], frac), lerp(a[2], b[2], frac)];
191
+ }
192
+ function rgb(r, g, b, text) {
193
+ return `\x1B[38;2;${r};${g};${b}m${text}\x1B[0m`;
194
+ }
195
+ var BANNER = [
196
+ "\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
197
+ "\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
198
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
199
+ "\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u255A\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551",
200
+ "\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551",
201
+ "\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
202
+ ];
203
+ function printBanner() {
204
+ if (!isColorSupported || !process.stdout.isTTY) return;
205
+ const maxWidth = Math.max(...BANNER.map((r) => r.length));
206
+ console.log();
207
+ for (const row of BANNER) {
208
+ let line = " ";
209
+ for (let col = 0; col < row.length; col++) {
210
+ const ch = row[col];
211
+ if (!ch || ch === " ") {
212
+ line += " ";
213
+ continue;
214
+ }
215
+ const t = maxWidth > 1 ? col / (maxWidth - 1) : 0;
216
+ const [r, g, b] = gradientColor(t);
217
+ line += rgb(r, g, b, ch);
218
+ }
219
+ console.log(line);
220
+ }
221
+ console.log();
222
+ }
223
+
224
+ // src/templates/generators.ts
225
+ var BUNDLED_TEMPLATES = [
226
+ {
227
+ id: "blank",
228
+ label: "Blank",
229
+ hint: "Centered Inter stage, paused timeline",
230
+ source: "bundled"
231
+ }
232
+ ];
233
+ async function resolveTemplateList() {
234
+ const bundled = [...BUNDLED_TEMPLATES];
235
+ const bundledIds = new Set(bundled.map((t) => t.id));
236
+ const entries = await listRegistryItems({ type: "hyperframes:example" });
237
+ const items = await loadAllItems(entries);
238
+ const remoteOptions = items.filter((item) => !bundledIds.has(item.name)).map((item) => ({
239
+ id: item.name,
240
+ label: item.title,
241
+ hint: item.description,
242
+ source: "remote"
243
+ }));
244
+ return [...bundled, ...remoteOptions];
245
+ }
246
+
247
+ // src/templates/remote.ts
248
+ import { existsSync } from "fs";
249
+ import { join } from "path";
250
+ async function fetchRemoteTemplate(templateId, destDir) {
251
+ const items = await resolveItemWithDependencies(templateId);
252
+ const warnings = gateRegistryItemsCompatibility(items);
253
+ for (const warning of warnings) {
254
+ process.stderr.write(`hyperframes:registry ${warning}
255
+ `);
256
+ }
257
+ for (const item of items) {
258
+ await installItem(item, { destDir });
259
+ }
260
+ if (!existsSync(join(destDir, "index.html"))) {
261
+ throw new Error(
262
+ `Example "${templateId}" installed but missing index.html. The registry item may be malformed.`
263
+ );
264
+ }
265
+ }
266
+
267
+ // src/commands/init.ts
268
+ var examples = [
269
+ ["Create a project with the interactive wizard", "hyperframes init my-video"],
270
+ ["Pick a starter example", "hyperframes init my-video --example warm-grain"],
271
+ ["Scaffold a 4K project", "hyperframes init my-video --resolution 4k"],
272
+ ["Scaffold a portrait video", "hyperframes init my-video --resolution portrait"],
273
+ ["Start from an existing video file", "hyperframes init my-video --video clip.mp4"],
274
+ ["Start from an audio file", "hyperframes init my-video --audio track.mp3"],
275
+ ["Scaffold with Tailwind CSS", "hyperframes init my-video --tailwind"],
276
+ ["Non-interactive mode (for CI or AI agents)", "hyperframes init my-video --non-interactive"],
277
+ [
278
+ "Opt out of the GitHub skills check (CI/tests only)",
279
+ "HYPERFRAMES_SKIP_SKILLS=1 hyperframes init my-video --non-interactive"
280
+ ]
281
+ ];
282
+ function resolveScaffoldTemplateId(exampleFlag, hasMediaFile) {
283
+ const example = exampleFlag === "agent" ? "blank" : exampleFlag;
284
+ if (example && example !== "blank") return example;
285
+ if (hasMediaFile) return "from-file";
286
+ return "blank";
287
+ }
288
+ var WEB_CODECS = /* @__PURE__ */ new Set(["h264", "vp8", "vp9", "av1", "theora"]);
289
+ var DEFAULT_META = {
290
+ durationSeconds: 5,
291
+ width: 1920,
292
+ height: 1080,
293
+ fps: 30,
294
+ // ffprobe unavailable: assume sound. A wrong guess fails loudly at RENDER (lint catches it only once #3638 lands); assuming silence would mute real audio.
295
+ hasAudio: true,
296
+ videoCodec: "h264"
297
+ };
298
+ var TAILWIND_BROWSER_VERSION = "4.2.4";
299
+ var TAILWIND_BROWSER_SRC = `https://cdn.jsdelivr.net/npm/@tailwindcss/browser@${TAILWIND_BROWSER_VERSION}/dist/index.global.js`;
300
+ var TAILWIND_BROWSER_INTEGRITY = "sha384-v5YF9xS+gLRWdvrQ0u/WRbCkjSIH0NjHIPe8tBL1ZRrmI7PiSH6LLdzs0aAIMCuh";
301
+ function resolveVideoDurationSeconds({
302
+ streamDuration,
303
+ frameDuration,
304
+ formatDuration
305
+ }) {
306
+ return [streamDuration, frameDuration, formatDuration].find(
307
+ (duration) => Number.isFinite(duration) && duration > 0
308
+ ) ?? DEFAULT_META.durationSeconds;
309
+ }
310
+ function probeVideo(filePath) {
311
+ try {
312
+ const ffprobePath = findFFprobe();
313
+ if (!ffprobePath) return void 0;
314
+ const raw = execFileSync(
315
+ ffprobePath,
316
+ ["-v", "quiet", "-print_format", "json", "-show_format", "-show_streams", "--", filePath],
317
+ { encoding: "utf-8", timeout: 15e3 }
318
+ );
319
+ const parsed = JSON.parse(raw);
320
+ const streams = parsed.streams ?? [];
321
+ const videoStream = streams.find((s) => s.codec_type === "video");
322
+ if (!videoStream) return void 0;
323
+ const hasAudio = streams.some((s) => s.codec_type === "audio");
324
+ let fps = 30;
325
+ const fpsStr = videoStream.avg_frame_rate ?? videoStream.r_frame_rate;
326
+ if (fpsStr) {
327
+ const parts = fpsStr.split("/");
328
+ const num = parseFloat(parts[0] ?? "");
329
+ const den = parseFloat(parts[1] ?? "1");
330
+ if (den !== 0 && !Number.isNaN(num) && !Number.isNaN(den)) {
331
+ fps = Math.round(num / den * 100) / 100;
332
+ }
333
+ }
334
+ const streamDuration = parseFloat(videoStream.duration ?? "");
335
+ const frameCount = parseInt(videoStream.nb_frames ?? "", 10);
336
+ const frameDuration = Number.isFinite(frameCount) && fps > 0 ? frameCount / fps : NaN;
337
+ const formatDuration = parseFloat(parsed.format?.duration ?? "");
338
+ const durationSeconds = resolveVideoDurationSeconds({
339
+ streamDuration,
340
+ frameDuration,
341
+ formatDuration
342
+ });
343
+ return {
344
+ durationSeconds,
345
+ width: videoStream.width ?? 1920,
346
+ height: videoStream.height ?? 1080,
347
+ fps,
348
+ hasAudio,
349
+ videoCodec: videoStream.codec_name ?? "unknown"
350
+ };
351
+ } catch {
352
+ return void 0;
353
+ }
354
+ }
355
+ function isWebCompatible(codec) {
356
+ return WEB_CODECS.has(codec.toLowerCase());
357
+ }
358
+ function transcodeToMp4(inputPath, outputPath) {
359
+ return new Promise((resolvePromise) => {
360
+ const ffmpegPath = findFFmpeg();
361
+ if (!ffmpegPath) {
362
+ resolvePromise(false);
363
+ return;
364
+ }
365
+ const child = spawn(
366
+ ffmpegPath,
367
+ [
368
+ "-i",
369
+ inputPath,
370
+ "-c:v",
371
+ "libx264",
372
+ "-preset",
373
+ "fast",
374
+ "-crf",
375
+ "18",
376
+ "-c:a",
377
+ "aac",
378
+ "-b:a",
379
+ "192k",
380
+ "-y",
381
+ outputPath
382
+ ],
383
+ { stdio: "pipe", windowsHide: true }
384
+ );
385
+ child.on("close", (code) => resolvePromise(code === 0));
386
+ child.on("error", () => resolvePromise(false));
387
+ });
388
+ }
389
+ function resolveAssetDir(devSegments, builtSegments) {
390
+ const base = dirname(fileURLToPath(import.meta.url));
391
+ const devPath = resolve(base, ...devSegments);
392
+ const builtPath = resolve(base, ...builtSegments);
393
+ return existsSync2(devPath) ? devPath : builtPath;
394
+ }
395
+ function getStaticTemplateDir(templateId) {
396
+ const base = dirname(fileURLToPath(import.meta.url));
397
+ const devPath = resolve(base, "..", "templates", templateId);
398
+ if (existsSync2(devPath)) return devPath;
399
+ const registryPath = resolve(base, "..", "..", "..", "..", "registry", "examples", templateId);
400
+ if (existsSync2(registryPath)) return registryPath;
401
+ return resolve(base, "templates", templateId);
402
+ }
403
+ function getSharedTemplateDir() {
404
+ return resolveAssetDir(["..", "templates", "_shared"], ["templates", "_shared"]);
405
+ }
406
+ function toPackageName(projectName) {
407
+ const normalized = basename(projectName).trim().toLowerCase().replace(/^[._]+/, "").replace(/[^a-z0-9._~-]+/g, "-").replace(/-+/g, "-").replace(/^[-.]+|[-.]+$/g, "");
408
+ return normalized || "hyperframes-project";
409
+ }
410
+ function getHyperframesPackageSpecifier() {
411
+ return VERSION === "0.0.0-dev" ? "hyperframes" : `hyperframes@${VERSION}`;
412
+ }
413
+ function hyperframesScript(command) {
414
+ return `npx --yes ${getHyperframesPackageSpecifier()} ${command}`;
415
+ }
416
+ function buildPackageScripts() {
417
+ return {
418
+ dev: hyperframesScript("preview"),
419
+ check: hyperframesScript("check"),
420
+ render: hyperframesScript("render"),
421
+ publish: hyperframesScript("publish")
422
+ };
423
+ }
424
+ function writeDefaultPackageJson(destDir, projectName) {
425
+ const packageJsonPath = resolve(destDir, "package.json");
426
+ if (existsSync2(packageJsonPath)) return;
427
+ writeNewFileSync(
428
+ packageJsonPath,
429
+ `${JSON.stringify(
430
+ {
431
+ name: toPackageName(projectName),
432
+ private: true,
433
+ type: "module",
434
+ scripts: buildPackageScripts()
435
+ },
436
+ null,
437
+ 2
438
+ )}
439
+ `
440
+ );
441
+ }
442
+ function listHtmlFiles(dir) {
443
+ const files = [];
444
+ const ignoredDirs = /* @__PURE__ */ new Set([".git", "dist", "node_modules"]);
445
+ function walk(currentDir) {
446
+ for (const entry of readdirSync(currentDir, { withFileTypes: true })) {
447
+ const entryPath = join2(currentDir, entry.name);
448
+ if (entry.isDirectory()) {
449
+ if (!ignoredDirs.has(entry.name)) walk(entryPath);
450
+ continue;
451
+ }
452
+ if (entry.isFile() && entry.name.endsWith(".html")) {
453
+ files.push(entryPath);
454
+ }
455
+ }
456
+ }
457
+ walk(dir);
458
+ return files;
459
+ }
460
+ function injectTailwindBrowserScript(html) {
461
+ if (html.includes(TAILWIND_BROWSER_SRC)) return html;
462
+ const script = [
463
+ `<script>`,
464
+ `window.__tailwindReady=new Promise(function(resolve){`,
465
+ `var loaded=document.readyState==="complete";`,
466
+ `var resolved=false;`,
467
+ `var observer;`,
468
+ `function readTailwindCss(){var styles=document.querySelectorAll("style");for(var i=styles.length-1;i>=0;i--){var text=styles[i].textContent||"";if(text.indexOf("tailwindcss v")!==-1)return text;}return "";}`,
469
+ `function finish(){if(resolved||!loaded||!readTailwindCss())return;resolved=true;if(observer)observer.disconnect();resolve(true);}`,
470
+ `observer=new MutationObserver(finish);`,
471
+ `observer.observe(document.documentElement,{childList:true,subtree:true,characterData:true});`,
472
+ `if(loaded){finish();}else{window.addEventListener("load",function(){loaded=true;finish();},{once:true});}`,
473
+ `});`,
474
+ `</script>`,
475
+ `<script src="${TAILWIND_BROWSER_SRC}" integrity="${TAILWIND_BROWSER_INTEGRITY}" crossorigin="anonymous"></script>`
476
+ ].join("\n");
477
+ if (/<\/head>/i.test(html)) {
478
+ return html.replace(/<\/head>/i, (closingHead) => `
479
+ ${script}
480
+ ${closingHead}`);
481
+ }
482
+ return `${script}
483
+ ${html}`;
484
+ }
485
+ function writeTailwindSupport(destDir) {
486
+ for (const file of listHtmlFiles(destDir)) {
487
+ const html = readFileSync(file, "utf-8");
488
+ writeFileSync(file, injectTailwindBrowserScript(html), "utf-8");
489
+ }
490
+ }
491
+ function patchVideoSrc(dir, media) {
492
+ const htmlFiles = readdirSync(dir, { withFileTypes: true, recursive: true }).filter((e) => e.isFile() && e.name.endsWith(".html")).map((e) => join2(e.parentPath, e.name));
493
+ for (const file of htmlFiles) {
494
+ writeFileSync(file, patchMediaPlaceholders(readFileSync(file, "utf-8"), media), "utf-8");
495
+ }
496
+ }
497
+ async function patchTranscript(dir, transcriptPath) {
498
+ const { loadTranscript, patchCaptionHtml } = await import("./normalize-O76AC4HE.js");
499
+ const { words } = loadTranscript(transcriptPath);
500
+ if (words.length === 0) return;
501
+ patchCaptionHtml(dir, words);
502
+ }
503
+ async function handleVideoFile(videoPath, destDir, interactive) {
504
+ const probed = probeVideo(videoPath);
505
+ let meta = { ...DEFAULT_META };
506
+ let localVideoName = basename(videoPath);
507
+ if (probed) {
508
+ meta = probed;
509
+ if (interactive) {
510
+ R.info(
511
+ `Video: ${meta.width}x${meta.height}, ${meta.durationSeconds.toFixed(1)}s, ${meta.fps}fps${meta.hasAudio ? ", has audio" : ""}`
512
+ );
513
+ }
514
+ } else {
515
+ const msg = `ffprobe not found \u2014 using defaults (1920x1080, 5s, 30fps) and assuming the video has sound (data-has-audio="true"); if it is silent, replace that with muted. Install: ${getFFmpegInstallHint()}`;
516
+ if (interactive) {
517
+ R.warn(msg);
518
+ } else {
519
+ console.log(c.warn(msg));
520
+ }
521
+ }
522
+ if (probed && !isWebCompatible(probed.videoCodec)) {
523
+ if (interactive) {
524
+ R.warn(
525
+ c.warn(`Video codec "${probed.videoCodec}" is not supported by web browsers.`)
526
+ );
527
+ } else {
528
+ console.log(c.warn(`Video codec "${probed.videoCodec}" is not supported by browsers.`));
529
+ }
530
+ if (hasFFmpeg()) {
531
+ let shouldTranscode = !interactive;
532
+ if (interactive) {
533
+ const transcode = await Ee({
534
+ message: "Transcode to H.264 MP4 for browser playback?",
535
+ options: [
536
+ {
537
+ value: "yes",
538
+ label: "Yes, transcode",
539
+ hint: "converts to H.264 MP4"
540
+ },
541
+ {
542
+ value: "no",
543
+ label: "No, keep original",
544
+ hint: "video won't play in browser"
545
+ }
546
+ ]
547
+ });
548
+ if (q(transcode)) {
549
+ me("Setup cancelled.");
550
+ finishCommand(0);
551
+ }
552
+ shouldTranscode = transcode === "yes";
553
+ }
554
+ if (shouldTranscode) {
555
+ const mp4Name = localVideoName.replace(/\.[^.]+$/, ".mp4");
556
+ const mp4Path = resolve(destDir, mp4Name);
557
+ const spin = ft();
558
+ spin.start("Transcoding to H.264 MP4...");
559
+ const ok = await transcodeToMp4(videoPath, mp4Path);
560
+ if (ok) {
561
+ spin.stop(c.success(`Transcoded to ${mp4Name}`));
562
+ localVideoName = mp4Name;
563
+ } else {
564
+ spin.stop(c.warn("Transcode failed \u2014 copying original file"));
565
+ copyFileSync(videoPath, resolve(destDir, localVideoName));
566
+ }
567
+ } else {
568
+ copyFileSync(videoPath, resolve(destDir, localVideoName));
569
+ }
570
+ } else {
571
+ if (interactive) {
572
+ R.warn(c.dim("ffmpeg not installed \u2014 cannot transcode."));
573
+ R.info(c.accent(`Install: ${getFFmpegInstallHint()}`));
574
+ } else {
575
+ console.log(c.warn("ffmpeg not installed \u2014 cannot transcode. Copying original."));
576
+ console.log(c.dim("Install: ") + c.accent(getFFmpegInstallHint()));
577
+ }
578
+ copyFileSync(videoPath, resolve(destDir, localVideoName));
579
+ }
580
+ } else {
581
+ copyFileSync(videoPath, resolve(destDir, localVideoName));
582
+ }
583
+ return { meta, localVideoName };
584
+ }
585
+ function applyResolutionPreset(destDir, resolution) {
586
+ const { width, height } = CANVAS_DIMENSIONS[resolution];
587
+ for (const file of listHtmlFiles(destDir)) {
588
+ let html = readFileSync(file, "utf-8");
589
+ let changed = false;
590
+ const dataWidthRe = /(data-width=)["'](\d+)["']/g;
591
+ if (dataWidthRe.test(html)) {
592
+ html = html.replace(dataWidthRe, `$1"${width}"`);
593
+ changed = true;
594
+ }
595
+ const dataHeightRe = /(data-height=)["'](\d+)["']/g;
596
+ if (dataHeightRe.test(html)) {
597
+ html = html.replace(dataHeightRe, `$1"${height}"`);
598
+ changed = true;
599
+ }
600
+ const htmlOpenRe = /<html\b([^>]*)>/i;
601
+ const htmlOpen = html.match(htmlOpenRe);
602
+ if (htmlOpen) {
603
+ const attrs = htmlOpen[1] ?? "";
604
+ let next;
605
+ if (/data-resolution=/.test(attrs)) {
606
+ next = attrs.replace(/data-resolution=["'][^"']*["']/, `data-resolution="${resolution}"`);
607
+ } else {
608
+ next = `${attrs.replace(/\s+$/, "")} data-resolution="${resolution}"`;
609
+ }
610
+ if (next !== attrs) {
611
+ html = html.replace(htmlOpenRe, `<html${next}>`);
612
+ changed = true;
613
+ }
614
+ }
615
+ if (HTML_BODY_CSS_WIDTH_FIRST_RE.test(html)) {
616
+ html = html.replace(HTML_BODY_CSS_WIDTH_FIRST_RE, `$1${width}px$3${height}px`);
617
+ changed = true;
618
+ }
619
+ if (HTML_BODY_CSS_HEIGHT_FIRST_RE.test(html)) {
620
+ html = html.replace(HTML_BODY_CSS_HEIGHT_FIRST_RE, `$1${height}px$3${width}px`);
621
+ changed = true;
622
+ }
623
+ if (VIEWPORT_META_SIZE_RE.test(html)) {
624
+ html = html.replace(VIEWPORT_META_SIZE_RE, `$1${width}$3${height}`);
625
+ changed = true;
626
+ }
627
+ if (changed) writeFileSync(file, html, "utf-8");
628
+ }
629
+ }
630
+ async function scaffoldProject(destDir, name, templateId, media, tailwind = false, resolution, authoringSkill) {
631
+ mkdirSync(destDir, { recursive: true });
632
+ const templateDir = getStaticTemplateDir(templateId);
633
+ if (existsSync2(join2(templateDir, "index.html"))) {
634
+ cpSync(templateDir, destDir, { recursive: true });
635
+ } else {
636
+ await fetchRemoteTemplate(templateId, destDir);
637
+ }
638
+ patchVideoSrc(destDir, media);
639
+ if (tailwind) writeTailwindSupport(destDir);
640
+ if (resolution) applyResolutionPreset(destDir, resolution);
641
+ writeFileSync(
642
+ resolve(destDir, "meta.json"),
643
+ JSON.stringify(
644
+ {
645
+ id: name,
646
+ name,
647
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
648
+ },
649
+ null,
650
+ 2
651
+ ),
652
+ "utf-8"
653
+ );
654
+ if (!existsSync2(resolve(destDir, "hyperframes.json"))) {
655
+ const { createProjectConfig, DEFAULT_PROJECT_CONFIG } = await import("./projectConfig-HYJMJ5BY.js");
656
+ const { normalizeSkillSlug } = await import("./skill-ZHVLH7KX.js");
657
+ const skill = normalizeSkillSlug(authoringSkill);
658
+ createProjectConfig(
659
+ destDir,
660
+ skill ? { ...DEFAULT_PROJECT_CONFIG, authoringSkill: skill } : DEFAULT_PROJECT_CONFIG
661
+ );
662
+ }
663
+ writeDefaultPackageJson(destDir, name);
664
+ const sharedDir = getSharedTemplateDir();
665
+ if (existsSync2(sharedDir)) {
666
+ for (const entry of readdirSync(sharedDir, { withFileTypes: true })) {
667
+ const src = join2(sharedDir, entry.name);
668
+ const dest = resolve(destDir, entry.name);
669
+ if (entry.isFile() || entry.isSymbolicLink()) {
670
+ copyFileSync(src, dest);
671
+ }
672
+ }
673
+ }
674
+ }
675
+ async function keepSkillsCurrent(destDir) {
676
+ const { updateSkills } = await import("./skills-MJ2J4GEM.js");
677
+ console.log();
678
+ console.log(c.bold("Checking AI coding skills against GitHub..."));
679
+ try {
680
+ const result = await updateSkills({ refreshInstalled: true, cwd: destDir });
681
+ if (result.presenceOnly) {
682
+ console.log(
683
+ c.dim("Skills freshness unverified \u2014 run `npx hyperframes skills update` when online.")
684
+ );
685
+ } else if (result.installed.length === 0) {
686
+ console.log(c.success("AI coding skills are already up to date."));
687
+ } else {
688
+ console.log(
689
+ c.dim("Workflow skills not installed here are added on demand, when first used.")
690
+ );
691
+ }
692
+ } catch (err) {
693
+ console.log(
694
+ c.dim(`AI coding skills install skipped: ${err instanceof Error ? err.message : err}`)
695
+ );
696
+ }
697
+ }
698
+ var init_default = defineCommand({
699
+ meta: {
700
+ name: "init",
701
+ description: "Scaffold a new composition project"
702
+ },
703
+ args: {
704
+ name: { type: "positional", description: "Project name", required: false },
705
+ example: {
706
+ type: "string",
707
+ description: "Example name (e.g. warm-grain, swiss-grid, blank)",
708
+ alias: "e"
709
+ },
710
+ // Accepted-but-errored so users who still type the old flag get a clear
711
+ // message rather than citty silently ignoring it and producing a blank
712
+ // project. The actual behavior is gone — this exists purely for the
713
+ // diagnostic. `hidden` keeps it out of --help output so new users aren't
714
+ // taught about a flag that's already gone.
715
+ template: {
716
+ type: "string",
717
+ description: "[renamed] Use --example instead.",
718
+ alias: "t",
719
+ hidden: true
720
+ },
721
+ video: {
722
+ type: "string",
723
+ description: "Path to a video file (MP4, WebM, MOV)",
724
+ alias: "v"
725
+ },
726
+ "video-legacy": {
727
+ type: "string",
728
+ description: "[renamed] Use --video (or -v) instead of -V.",
729
+ alias: "V",
730
+ hidden: true
731
+ },
732
+ audio: {
733
+ type: "string",
734
+ description: "Path to an audio file (MP3, WAV, M4A)",
735
+ alias: "a"
736
+ },
737
+ "skip-transcribe": {
738
+ type: "boolean",
739
+ description: "Skip whisper transcription"
740
+ },
741
+ model: {
742
+ type: "string",
743
+ description: "Whisper model for transcription (e.g. tiny.en, base.en, small.en, medium.en, large)"
744
+ },
745
+ language: {
746
+ type: "string",
747
+ description: "Language code for transcription (e.g. en, es, ja). Filters out non-target speech."
748
+ },
749
+ "non-interactive": {
750
+ type: "boolean",
751
+ description: "Disable interactive prompts (for CI/agents)"
752
+ },
753
+ agent: {
754
+ type: "boolean",
755
+ hidden: true,
756
+ description: "Deprecated alias; default init is the centered blank"
757
+ },
758
+ "skip-skills": {
759
+ type: "boolean",
760
+ description: "[temporarily ignored] init always checks AI skills against GitHub while the skills.sh registry catches up; set HYPERFRAMES_SKIP_SKILLS=1 to opt out (CI/tests)"
761
+ },
762
+ tailwind: {
763
+ type: "boolean",
764
+ description: "Add Tailwind CSS browser-runtime support"
765
+ },
766
+ resolution: {
767
+ type: "string",
768
+ description: "Canvas resolution preset: landscape (1920x1080), portrait (1080x1920), landscape-4k (3840x2160), portrait-4k (2160x3840), square (1080x1080), square-4k (2160x2160). Aliases: 1080p, 4k, uhd, 1080p-square, square-1080p, 4k-square. Default: keep template dimensions (typically 1920x1080)."
769
+ },
770
+ skill: {
771
+ type: "string",
772
+ description: "Owning authoring workflow slug (e.g. product-launch-video). Stamped into hyperframes.json so every render of this project is attributed to it on anonymous telemetry, without re-passing --skill on each render. Ignored unless it is a slug."
773
+ }
774
+ },
775
+ async run({ args }) {
776
+ if (args.template !== void 0) {
777
+ console.error(
778
+ c.error(
779
+ `The --template flag was renamed to --example. Example:
780
+ npx hyperframes init ${args.name ?? "my-video"} --example "${args.template}"`
781
+ )
782
+ );
783
+ failCommand();
784
+ }
785
+ if (args["video-legacy"] !== void 0) {
786
+ console.error(
787
+ c.error(
788
+ `The -V short flag no longer maps to --video. Use --video (or -v). Example:
789
+ npx hyperframes init ${args.name ?? "my-video"} --video "${args["video-legacy"]}"`
790
+ )
791
+ );
792
+ failCommand();
793
+ }
794
+ const exampleFlag = args.example;
795
+ if (exampleFlag?.startsWith("-")) {
796
+ console.error(c.error(`--example requires a value; received flag "${exampleFlag}" instead.`));
797
+ failCommand();
798
+ }
799
+ const videoFlag = args.video;
800
+ const audioFlag = args.audio;
801
+ const skipTranscribe = args["skip-transcribe"] === true;
802
+ const skipSkills = process.env.HYPERFRAMES_SKIP_SKILLS === "1";
803
+ const skipSkillsFlagIgnored = args["skip-skills"] === true && !skipSkills;
804
+ const tailwind = args.tailwind === true;
805
+ const nonInteractive = args["non-interactive"] === true || args.agent === true;
806
+ const modelFlag = args.model;
807
+ const languageFlag = args.language;
808
+ const initialTranscriptionModel = initialModelForLanguage(
809
+ modelFlag ?? DEFAULT_MODEL,
810
+ languageFlag
811
+ );
812
+ const interactive = !nonInteractive && process.stdout.isTTY === true;
813
+ if (skipSkillsFlagIgnored) {
814
+ console.log(
815
+ c.dim(
816
+ "Note: --skip-skills is temporarily ignored \u2014 init always checks AI skills against GitHub while the skills.sh registry catches up."
817
+ )
818
+ );
819
+ }
820
+ let resolutionPreset;
821
+ if (args.resolution !== void 0) {
822
+ resolutionPreset = normalizeResolutionFlag(args.resolution);
823
+ if (!resolutionPreset) {
824
+ console.error(
825
+ c.error(
826
+ `Invalid --resolution: "${args.resolution}". Use one of: landscape, portrait, landscape-4k, portrait-4k, square, square-4k (or aliases 1080p, 4k, uhd, 1080p-square, square-1080p, 4k-square).`
827
+ )
828
+ );
829
+ failCommand();
830
+ }
831
+ }
832
+ if (!interactive) {
833
+ const templateId2 = resolveScaffoldTemplateId(exampleFlag, Boolean(videoFlag || audioFlag));
834
+ const name2 = args.name ?? "my-video";
835
+ const destDir2 = resolve(name2);
836
+ if (existsSync2(destDir2) && readdirSync(destDir2).length > 0) {
837
+ console.error(c.error(`Directory already exists and is not empty: ${name2}`));
838
+ failCommand();
839
+ }
840
+ if (videoFlag && audioFlag) {
841
+ console.error(c.error("Cannot use --video and --audio together"));
842
+ failCommand();
843
+ }
844
+ const videoPath = videoFlag ? resolve(videoFlag) : void 0;
845
+ if (videoPath && !existsSync2(videoPath)) {
846
+ console.error(c.error(`Video file not found: ${videoFlag}`));
847
+ failCommand();
848
+ }
849
+ const audioPath = audioFlag ? resolve(audioFlag) : void 0;
850
+ if (audioPath && !existsSync2(audioPath)) {
851
+ console.error(c.error(`Audio file not found: ${audioFlag}`));
852
+ failCommand();
853
+ }
854
+ mkdirSync(destDir2, { recursive: true });
855
+ let localVideoName2;
856
+ let videoHasAudio2 = true;
857
+ let videoDuration2;
858
+ let sourceFilePath2;
859
+ if (videoPath) {
860
+ sourceFilePath2 = videoPath;
861
+ const result = await handleVideoFile(videoPath, destDir2, false);
862
+ localVideoName2 = result.localVideoName;
863
+ videoHasAudio2 = result.meta.hasAudio;
864
+ videoDuration2 = result.meta.durationSeconds;
865
+ console.log(
866
+ `Video: ${result.meta.width}x${result.meta.height}, ${result.meta.durationSeconds.toFixed(1)}s`
867
+ );
868
+ }
869
+ if (audioPath) {
870
+ sourceFilePath2 = audioPath;
871
+ copyFileSync(audioPath, resolve(destDir2, basename(audioPath)));
872
+ const { getMediaDurationSeconds } = await import("./transcribe-BNSJRR4M.js");
873
+ videoDuration2 = getMediaDurationSeconds(audioPath) ?? void 0;
874
+ console.log(`Audio: ${basename(audioPath)}`);
875
+ }
876
+ if (sourceFilePath2 && !skipTranscribe) {
877
+ try {
878
+ const { ensureWhisper, ensureModel } = await import("./manager-67P2XFXQ.js");
879
+ await ensureWhisper();
880
+ await ensureModel(initialTranscriptionModel);
881
+ console.log("Transcribing...");
882
+ const { transcribe: runTranscribe } = await import("./transcribe-BNSJRR4M.js");
883
+ const result = await runTranscribe(sourceFilePath2, destDir2, {
884
+ model: modelFlag,
885
+ language: languageFlag
886
+ });
887
+ console.log(
888
+ `Transcribed: ${result.wordCount} words (${result.durationSeconds.toFixed(1)}s)`
889
+ );
890
+ if (!videoDuration2) videoDuration2 = result.durationSeconds;
891
+ } catch (err) {
892
+ console.log(`Transcription skipped: ${err instanceof Error ? err.message : err}`);
893
+ }
894
+ }
895
+ try {
896
+ const media = {
897
+ video: localVideoName2 ? { filename: localVideoName2, hasAudio: videoHasAudio2 } : void 0,
898
+ audio: audioPath ? { filename: basename(audioPath) } : void 0,
899
+ durationSeconds: videoDuration2
900
+ };
901
+ await scaffoldProject(
902
+ destDir2,
903
+ basename(destDir2),
904
+ templateId2,
905
+ media,
906
+ tailwind,
907
+ resolutionPreset,
908
+ args.skill
909
+ );
910
+ } catch (err) {
911
+ console.error(
912
+ c.error(
913
+ `Failed to scaffold example "${templateId2}": ${err instanceof Error ? err.message : err}`
914
+ )
915
+ );
916
+ console.error(c.dim("Use --example blank for offline use."));
917
+ failCommand();
918
+ }
919
+ trackInitTemplate(templateId2, { tailwind });
920
+ const transcriptFile2 = resolve(destDir2, "transcript.json");
921
+ if (existsSync2(transcriptFile2)) {
922
+ await patchTranscript(destDir2, transcriptFile2);
923
+ }
924
+ console.log(c.success(`Created ${c.accent(name2 + "/")}`));
925
+ for (const f of readdirSync(destDir2).filter((f2) => !f2.startsWith("."))) {
926
+ console.log(` ${c.accent(f)}`);
927
+ }
928
+ if (!skipSkills) {
929
+ await keepSkillsCurrent(destDir2);
930
+ }
931
+ console.log();
932
+ console.log("Get started:");
933
+ console.log();
934
+ if (skipSkills) {
935
+ console.log(
936
+ ` ${c.accent("1.")} Use your HyperFrames plugin, or install standalone skills:`
937
+ );
938
+ console.log(` ${c.accent("npx hyperframes skills update")}`);
939
+ } else {
940
+ console.log(
941
+ ` ${c.accent("1.")} Restart your AI agent (new session) so it loads the skills.`
942
+ );
943
+ }
944
+ console.log();
945
+ console.log(` ${c.accent("2.")} Open this project with your AI coding agent:`);
946
+ console.log(
947
+ ` ${c.accent(`cd ${name2}`)} then start ${c.accent("Claude Code")}, ${c.accent("Cursor")}, or your preferred agent`
948
+ );
949
+ console.log();
950
+ console.log(` ${c.accent("3.")} Try a starter prompt:`);
951
+ console.log(
952
+ ` ${c.dim('"Using /hyperframes, create a 15-second intro about [your topic]"')}`
953
+ );
954
+ console.log(` ${c.dim("More patterns: hyperframes.heygen.com/prompting/overview")}`);
955
+ console.log();
956
+ console.log(` ${c.accent("4.")} Preview in the browser:`);
957
+ console.log(` ${c.accent(`cd ${name2}`)} && ${c.accent("npm run dev")}`);
958
+ console.log();
959
+ console.log(` ${c.accent("5.")} Check the composition:`);
960
+ console.log(` ${c.accent(`cd ${name2}`)} && ${c.accent("npm run check")}`);
961
+ console.log();
962
+ console.log(` ${c.accent("6.")} Render to MP4 when ready:`);
963
+ console.log(` ${c.accent(`cd ${name2}`)} && ${c.accent("npm run render")}`);
964
+ console.log();
965
+ console.log(` ${c.dim("Full docs: hyperframes.heygen.com")}`);
966
+ return;
967
+ }
968
+ printBanner();
969
+ ge("Create a new HyperFrames project");
970
+ let name;
971
+ const hasPositionalName = args.name !== void 0 && args.name !== "";
972
+ if (hasPositionalName) {
973
+ name = args.name ?? "my-video";
974
+ } else {
975
+ const nameResult = await Re({
976
+ message: "Project name",
977
+ placeholder: "my-video",
978
+ defaultValue: "my-video"
979
+ });
980
+ if (q(nameResult)) {
981
+ me("Setup cancelled.");
982
+ finishCommand(0);
983
+ }
984
+ name = nameResult;
985
+ }
986
+ const destDir = resolve(name);
987
+ if (existsSync2(destDir) && readdirSync(destDir).length > 0) {
988
+ const overwrite = await ue({
989
+ message: `Directory ${c.accent(name)} already exists and is not empty. Overwrite?`,
990
+ initialValue: false
991
+ });
992
+ if (q(overwrite) || !overwrite) {
993
+ me("Setup cancelled.");
994
+ finishCommand(0);
995
+ }
996
+ }
997
+ let localVideoName;
998
+ let videoHasAudio = true;
999
+ let sourceFilePath;
1000
+ let videoDuration;
1001
+ if (videoFlag) {
1002
+ const videoPath = resolve(videoFlag);
1003
+ if (!existsSync2(videoPath)) {
1004
+ R.error(`File not found: ${videoFlag}`);
1005
+ me("Setup cancelled.");
1006
+ failCommand();
1007
+ }
1008
+ mkdirSync(destDir, { recursive: true });
1009
+ sourceFilePath = videoPath;
1010
+ const result = await handleVideoFile(videoPath, destDir, true);
1011
+ localVideoName = result.localVideoName;
1012
+ videoHasAudio = result.meta.hasAudio;
1013
+ videoDuration = result.meta.durationSeconds;
1014
+ } else if (audioFlag) {
1015
+ const audioPath = resolve(audioFlag);
1016
+ if (!existsSync2(audioPath)) {
1017
+ R.error(`File not found: ${audioFlag}`);
1018
+ me("Setup cancelled.");
1019
+ failCommand();
1020
+ }
1021
+ mkdirSync(destDir, { recursive: true });
1022
+ sourceFilePath = audioPath;
1023
+ copyFileSync(audioPath, resolve(destDir, basename(audioPath)));
1024
+ const { getMediaDurationSeconds } = await import("./transcribe-BNSJRR4M.js");
1025
+ videoDuration = getMediaDurationSeconds(audioPath) ?? void 0;
1026
+ R.info(`Audio copied to ${c.accent(basename(audioPath))}`);
1027
+ }
1028
+ if (sourceFilePath) {
1029
+ const transcribeChoice = await ue({
1030
+ message: "Generate captions from audio?",
1031
+ initialValue: true
1032
+ });
1033
+ if (!q(transcribeChoice) && transcribeChoice) {
1034
+ const { findWhisper } = await import("./manager-67P2XFXQ.js");
1035
+ const needsInstall = findWhisper() === void 0;
1036
+ if (needsInstall) {
1037
+ R.info(c.dim("whisper-cpp not found \u2014 installing automatically..."));
1038
+ }
1039
+ const spin2 = ft();
1040
+ spin2.start(
1041
+ needsInstall ? "Installing whisper-cpp (this may take a moment)..." : "Preparing transcription..."
1042
+ );
1043
+ try {
1044
+ const { ensureWhisper, ensureModel } = await import("./manager-67P2XFXQ.js");
1045
+ await ensureWhisper({
1046
+ onProgress: (msg) => spin2.message(msg)
1047
+ });
1048
+ await ensureModel(initialTranscriptionModel, {
1049
+ onProgress: (msg) => spin2.message(msg)
1050
+ });
1051
+ spin2.message("Transcribing audio...");
1052
+ const { transcribe: runTranscribe } = await import("./transcribe-BNSJRR4M.js");
1053
+ const transcribeResult = await runTranscribe(sourceFilePath, destDir, {
1054
+ model: modelFlag,
1055
+ language: languageFlag,
1056
+ onProgress: (msg) => spin2.message(msg)
1057
+ });
1058
+ spin2.stop(
1059
+ c.success(
1060
+ `Transcribed ${transcribeResult.wordCount} words (${transcribeResult.durationSeconds.toFixed(1)}s)`
1061
+ )
1062
+ );
1063
+ } catch (err) {
1064
+ spin2.stop(c.dim(`Transcription skipped: ${err instanceof Error ? err.message : err}`));
1065
+ }
1066
+ }
1067
+ }
1068
+ let templateId;
1069
+ if (exampleFlag || videoFlag || audioFlag) {
1070
+ templateId = resolveScaffoldTemplateId(exampleFlag, Boolean(videoFlag || audioFlag));
1071
+ } else {
1072
+ const allTemplates = await resolveTemplateList();
1073
+ const defaultTemplate = "blank";
1074
+ const templateResult = await Ee({
1075
+ message: "Pick an example",
1076
+ options: allTemplates.map((t) => ({
1077
+ value: t.id,
1078
+ label: t.label,
1079
+ hint: t.source === "remote" ? `${t.hint} (download)` : t.hint
1080
+ })),
1081
+ initialValue: defaultTemplate
1082
+ });
1083
+ if (q(templateResult)) {
1084
+ me("Setup cancelled.");
1085
+ finishCommand(0);
1086
+ }
1087
+ templateId = templateResult;
1088
+ }
1089
+ const spin = ft();
1090
+ const isBundled = BUNDLED_TEMPLATES.some((t) => t.id === templateId);
1091
+ if (!isBundled) {
1092
+ spin.start(`Downloading example ${c.accent(templateId)}...`);
1093
+ }
1094
+ try {
1095
+ const media = {
1096
+ video: localVideoName ? { filename: localVideoName, hasAudio: videoHasAudio } : void 0,
1097
+ audio: audioFlag ? { filename: basename(audioFlag) } : void 0,
1098
+ durationSeconds: videoDuration
1099
+ };
1100
+ await scaffoldProject(
1101
+ destDir,
1102
+ name,
1103
+ templateId,
1104
+ media,
1105
+ tailwind,
1106
+ resolutionPreset,
1107
+ args.skill
1108
+ );
1109
+ if (!isBundled) {
1110
+ spin.stop(c.success(`Downloaded ${templateId}`));
1111
+ }
1112
+ } catch (err) {
1113
+ if (!isBundled) {
1114
+ spin.stop(c.error("Download failed"));
1115
+ }
1116
+ R.error(
1117
+ `${err instanceof Error ? err.message : err}
1118
+ ${c.dim("Use --example blank for offline use.")}`
1119
+ );
1120
+ failCommand();
1121
+ }
1122
+ trackInitTemplate(templateId, { tailwind });
1123
+ const transcriptFile = resolve(destDir, "transcript.json");
1124
+ if (existsSync2(transcriptFile)) {
1125
+ await patchTranscript(destDir, transcriptFile);
1126
+ }
1127
+ const files = readdirSync(destDir);
1128
+ Se(files.map((f) => c.accent(f)).join("\n"), c.success(`Created ${name}/`));
1129
+ if (!skipSkills) {
1130
+ await keepSkillsCurrent(destDir);
1131
+ }
1132
+ R.info("Opening studio preview...");
1133
+ try {
1134
+ const previewCmd = await import("./preview-JOJXTH75.js").then((m) => m.default);
1135
+ await runCommand(previewCmd, { rawArgs: [destDir] });
1136
+ } catch {
1137
+ }
1138
+ }
1139
+ });
1140
+ export {
1141
+ applyResolutionPreset,
1142
+ init_default as default,
1143
+ examples,
1144
+ injectTailwindBrowserScript,
1145
+ resolveVideoDurationSeconds,
1146
+ transcodeToMp4
1147
+ };