@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,94 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, unlinkSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { describeDownload, probeSpecs } from "./specs.mjs";
6
+ import { buildArgv, selectModel, selectModelLadder } from "./local-models.mjs";
7
+
8
+ export async function ltxVideoGenerate(
9
+ intent,
10
+ ctx,
11
+ execFn = execFileSync,
12
+ pathExists = existsSync,
13
+ unlinkFn = unlinkSync,
14
+ ) {
15
+ const specs = ctx?.specs || probeSpecs();
16
+ const ladder = selectModelLadder("videogen", specs, { preferTier: ctx?.preferTier });
17
+ if (!ladder.length) {
18
+ const { reason } = selectModel("videogen", specs, { preferTier: ctx?.preferTier });
19
+ console.error(
20
+ `media-use: local video gen not enabled (${reason}). Enable a fitting free on-device LTX model to use this provider.`,
21
+ );
22
+ return null;
23
+ }
24
+
25
+ // Each attempt mints its own timestamped output path, so a partial artifact
26
+ // from a failed tier is orphaned rather than overwritten - and a lower tier
27
+ // then succeeding hides it. Discard it before demoting. Best-effort: a
28
+ // partial we cannot remove must never mask the real failure.
29
+ const discardPartial = (path) => {
30
+ try {
31
+ if (pathExists(path)) unlinkFn(path);
32
+ } catch {
33
+ // nothing actionable: the generate failure below is the real story
34
+ }
35
+ };
36
+
37
+ // Walk the whole ladder, best tier first. A tier that cannot run on this
38
+ // machine for a reason no spec check sees (runner off PATH, gated weights, an
39
+ // OOM) demotes to the next fitting tier instead of failing local video gen
40
+ // outright. Every demotion is reported: a silent drop to a smaller model
41
+ // leaves the caller wondering why the output looks the way it does.
42
+ for (const model of ladder) {
43
+ const bin = model.invoke.trim().split(/\s+/)[0];
44
+ try {
45
+ execFn("which", [bin], { stdio: ["ignore", "ignore", "ignore"] });
46
+ } catch {
47
+ console.error(
48
+ `media-use: local video gen not enabled (\`${bin}\` not on PATH). Install for free on-device LTX: ${model.install}. Heads up: ${model.id} ${describeDownload(model.sizeMB)}.`,
49
+ );
50
+ continue;
51
+ }
52
+
53
+ const outPath = join(tmpdir(), `media-use-ltx-${process.pid}-${Date.now()}.mp4`);
54
+ const argv = buildArgv(model.invoke, {
55
+ prompt: intent,
56
+ w: ctx?.width || 512,
57
+ h: ctx?.height || 320,
58
+ frames: ctx?.frames || 33,
59
+ out: outPath,
60
+ });
61
+ argv.shift();
62
+
63
+ try {
64
+ execFn(bin, argv, {
65
+ encoding: "utf8",
66
+ timeout: 1_800_000,
67
+ stdio: ["ignore", "pipe", "pipe"],
68
+ });
69
+ } catch (err) {
70
+ discardPartial(outPath);
71
+ console.error(
72
+ `media-use: local video gen (${model.id}) failed: ${err.stderr?.toString().trim().slice(-200) || err.message}`,
73
+ );
74
+ continue;
75
+ }
76
+ if (!pathExists(outPath)) {
77
+ console.error(
78
+ `media-use: local video gen (${model.id}) exited cleanly but wrote no output file`,
79
+ );
80
+ continue;
81
+ }
82
+ return {
83
+ localPath: outPath,
84
+ ext: ".mp4",
85
+ source: "generated",
86
+ metadata: {
87
+ description: intent,
88
+ provider: "ltx.local",
89
+ provenance: { prompt: intent },
90
+ },
91
+ };
92
+ }
93
+ return null;
94
+ }
@@ -0,0 +1,316 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { dirname } from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { ltxVideoGenerate } from "./ltx-video-provider.mjs";
6
+
7
+ const fittingSpecs = { availableRamMB: 20000, gpu: { present: true } };
8
+
9
+ test("no fitting local model: falls through without checking for a binary", async (t) => {
10
+ t.mock.method(console, "error", () => {});
11
+ const calls = [];
12
+
13
+ const result = await ltxVideoGenerate(
14
+ "a calm ocean wave at sunset",
15
+ { specs: { availableRamMB: 100, gpu: { present: true } } },
16
+ (...call) => calls.push(call),
17
+ () => true,
18
+ );
19
+
20
+ assert.equal(result, null);
21
+ assert.deepEqual(calls, []);
22
+ });
23
+
24
+ test("binary missing from PATH: prints the model install hint and falls through", async (t) => {
25
+ const errors = [];
26
+ t.mock.method(console, "error", (message) => errors.push(message));
27
+ const calls = [];
28
+ const fakeExec = (...call) => {
29
+ calls.push(call);
30
+ throw new Error("not found");
31
+ };
32
+
33
+ const result = await ltxVideoGenerate(
34
+ "a calm ocean wave at sunset",
35
+ { specs: fittingSpecs },
36
+ fakeExec,
37
+ );
38
+
39
+ assert.equal(result, null);
40
+ assert.equal(calls.length, 1);
41
+ assert.deepEqual(calls[0].slice(0, 2), ["which", ["ltx-2-mlx"]]);
42
+ assert.equal(errors.length, 1);
43
+ assert.match(errors[0], /git clone https:\/\/github\.com\/dgrauet\/ltx-2-mlx/);
44
+ // the install hint is the accept moment: say what the pull costs
45
+ assert.match(errors[0], /GB of weights to/);
46
+ });
47
+
48
+ test("generate argv substitutes a spaced prompt after tokenizing and uses verified defaults", async () => {
49
+ const calls = [];
50
+ const checkedPaths = [];
51
+ const fakeExec = (...call) => calls.push(call);
52
+ const pathExists = (path) => {
53
+ checkedPaths.push(path);
54
+ return false;
55
+ };
56
+ const intent = "a calm ocean wave at sunset";
57
+
58
+ const result = await ltxVideoGenerate(intent, { specs: fittingSpecs }, fakeExec, pathExists);
59
+
60
+ assert.equal(result, null);
61
+ assert.equal(calls.length, 2);
62
+ const [bin, argv, opts] = calls[1];
63
+ assert.equal(bin, "ltx-2-mlx");
64
+ assert.equal(opts.timeout, 1_800_000);
65
+
66
+ const expectedPairs = [
67
+ ["--prompt", intent],
68
+ ["--width", "512"],
69
+ ["--height", "320"],
70
+ ["--frames", "33"],
71
+ ["--output", checkedPaths[0]],
72
+ ];
73
+ let previousIndex = -1;
74
+ for (const [flag, value] of expectedPairs) {
75
+ const index = argv.indexOf(flag);
76
+ assert.ok(index > previousIndex, `${flag} should follow the previous required option`);
77
+ assert.equal(argv[index + 1], value);
78
+ previousIndex = index;
79
+ }
80
+ assert.equal(argv.filter((arg) => arg === intent).length, 1);
81
+ });
82
+
83
+ test("successful generation returns the generated MP4 result", async () => {
84
+ const calls = [];
85
+ const fakeExec = (...call) => calls.push(call);
86
+ const intent = "a calm ocean wave at sunset";
87
+
88
+ const result = await ltxVideoGenerate(intent, { specs: fittingSpecs }, fakeExec, () => true);
89
+
90
+ assert.ok(result);
91
+ assert.equal(calls.length, 2);
92
+ assert.equal(dirname(result.localPath), tmpdir());
93
+ assert.match(result.localPath, /media-use-ltx-\d+-\d+\.mp4$/);
94
+ assert.deepEqual(result, {
95
+ localPath: result.localPath,
96
+ ext: ".mp4",
97
+ source: "generated",
98
+ metadata: {
99
+ description: intent,
100
+ provider: "ltx.local",
101
+ provenance: { prompt: intent },
102
+ },
103
+ });
104
+ });
105
+
106
+ test("generate failure returns null instead of throwing", async (t) => {
107
+ t.mock.method(console, "error", () => {});
108
+ let calls = 0;
109
+ const fakeExec = () => {
110
+ calls += 1;
111
+ if (calls === 2) {
112
+ const error = new Error("generation failed");
113
+ error.stderr = "LTX failed";
114
+ throw error;
115
+ }
116
+ };
117
+
118
+ const result = await ltxVideoGenerate(
119
+ "storm clouds",
120
+ { specs: fittingSpecs },
121
+ fakeExec,
122
+ () => true,
123
+ );
124
+
125
+ assert.equal(result, null);
126
+ assert.equal(calls, 2);
127
+ });
128
+
129
+ test("missing generated output returns null and says so", async (t) => {
130
+ const errors = [];
131
+ t.mock.method(console, "error", (message) => errors.push(message));
132
+
133
+ const result = await ltxVideoGenerate(
134
+ "storm clouds",
135
+ { specs: fittingSpecs },
136
+ () => {},
137
+ () => false,
138
+ );
139
+
140
+ assert.equal(result, null);
141
+ assert.equal(errors.length, 1);
142
+ assert.match(errors[0], /wrote no output file/);
143
+ });
144
+
145
+ // 40GB clears BOTH videogen tiers, so the ladder has two rungs. `fittingSpecs`
146
+ // above sits under the large tier's floor on purpose: every other test in this
147
+ // file exercises the medium tier alone, which is precisely why a broken large
148
+ // tier could sit in the table unnoticed.
149
+ const bothTiersSpecs = { availableRamMB: 40000, gpu: { present: true } };
150
+
151
+ const isGenerate = (call) => call[0] !== "which";
152
+
153
+ test("a top tier that cannot run demotes to the next fitting tier", async (t) => {
154
+ const errors = [];
155
+ t.mock.method(console, "error", (message) => errors.push(message));
156
+ const calls = [];
157
+ // The runner is installed, but the large tier's weights are gated: the
158
+ // download 401s and `generate` exits non-zero. The medium tier then works.
159
+ const fakeExec = (...call) => {
160
+ calls.push(call);
161
+ if (isGenerate(call) && call[1].includes("dgrauet/ltx-2.3-mlx-q8")) {
162
+ const err = new Error("exit 1");
163
+ err.stderr = "401 Client Error: Unauthorized for url: .../ltx-2.3-mlx-q8";
164
+ throw err;
165
+ }
166
+ };
167
+
168
+ const result = await ltxVideoGenerate(
169
+ "storm clouds",
170
+ { specs: bothTiersSpecs },
171
+ fakeExec,
172
+ () => true,
173
+ );
174
+
175
+ assert.ok(result, "the medium tier still produced a video");
176
+ const generated = calls.filter(isGenerate).map((call) => call[1].join(" "));
177
+ assert.equal(generated.length, 2, "large attempted first, then medium");
178
+ assert.match(generated[0], /dgrauet\/ltx-2\.3-mlx-q8/);
179
+ assert.match(generated[1], /dgrauet\/ltx-2\.3-mlx-q4/);
180
+ // the demotion is reported, never silent: a smaller model changes the output
181
+ assert.equal(errors.length, 1);
182
+ assert.match(errors[0], /ltx-2\.3-mlx-q8\) failed/);
183
+ assert.match(errors[0], /401/);
184
+ });
185
+
186
+ test("every fitting tier failing returns null, one reason per tier", async (t) => {
187
+ const errors = [];
188
+ t.mock.method(console, "error", (message) => errors.push(message));
189
+ const fakeExec = (...call) => {
190
+ if (isGenerate(call)) throw new Error("mlx out of memory");
191
+ };
192
+
193
+ const result = await ltxVideoGenerate(
194
+ "storm clouds",
195
+ { specs: bothTiersSpecs },
196
+ fakeExec,
197
+ () => true,
198
+ );
199
+
200
+ assert.equal(result, null);
201
+ assert.equal(errors.length, 2, "both tiers tried, both reported");
202
+ assert.match(errors[0], /ltx-2\.3-mlx-q8/);
203
+ assert.match(errors[1], /ltx-2\.3-mlx-q4/);
204
+ });
205
+
206
+ test("preferTier pins the attempt to one tier instead of demoting", async (t) => {
207
+ t.mock.method(console, "error", () => {});
208
+ const calls = [];
209
+ const fakeExec = (...call) => {
210
+ calls.push(call);
211
+ if (isGenerate(call)) throw new Error("boom");
212
+ };
213
+
214
+ const result = await ltxVideoGenerate(
215
+ "storm clouds",
216
+ { specs: bothTiersSpecs, preferTier: "large" },
217
+ fakeExec,
218
+ () => true,
219
+ );
220
+
221
+ assert.equal(result, null);
222
+ const generated = calls.filter(isGenerate).map((call) => call[1].join(" "));
223
+ assert.equal(generated.length, 1, "pinned to large: no demotion to medium");
224
+ assert.match(generated[0], /dgrauet\/ltx-2\.3-mlx-q8/);
225
+ });
226
+
227
+ // A failed attempt's temp path is minted per attempt (it carries a timestamp),
228
+ // so without cleanup a partial mp4 from a failed tier is orphaned rather than
229
+ // overwritten - and a lower tier then succeeding hides it. Partial video files
230
+ // are the expensive case, which is why this is pinned.
231
+ const outputOf = (argv) => argv[argv.indexOf("--output") + 1];
232
+
233
+ test("a failed attempt's partial output is discarded before demoting", async (t) => {
234
+ t.mock.method(console, "error", () => {});
235
+ const unlinked = [];
236
+ const attempted = [];
237
+ const fakeExec = (...call) => {
238
+ if (!isGenerate(call)) return;
239
+ attempted.push(outputOf(call[1]));
240
+ if (call[1].includes("dgrauet/ltx-2.3-mlx-q8")) {
241
+ // OOM mid-write is one of the advertised demotion cases
242
+ const err = new Error("exit 1");
243
+ err.stderr = "mlx.core.metal: out of memory";
244
+ throw err;
245
+ }
246
+ };
247
+
248
+ const result = await ltxVideoGenerate(
249
+ "storm clouds",
250
+ { specs: bothTiersSpecs },
251
+ fakeExec,
252
+ () => true,
253
+ (path) => unlinked.push(path),
254
+ );
255
+
256
+ assert.ok(result, "the medium tier still produced a video");
257
+ assert.deepEqual(unlinked, [attempted[0]], "the failed large-tier partial is removed");
258
+ });
259
+
260
+ test("every tier failing discards every partial, one per attempt", async (t) => {
261
+ t.mock.method(console, "error", () => {});
262
+ const unlinked = [];
263
+ const attempted = [];
264
+ const fakeExec = (...call) => {
265
+ if (!isGenerate(call)) return;
266
+ attempted.push(outputOf(call[1]));
267
+ throw new Error("mlx out of memory");
268
+ };
269
+
270
+ const result = await ltxVideoGenerate(
271
+ "storm clouds",
272
+ { specs: bothTiersSpecs },
273
+ fakeExec,
274
+ () => true,
275
+ (path) => unlinked.push(path),
276
+ );
277
+
278
+ assert.equal(result, null);
279
+ assert.equal(attempted.length, 2, "both tiers attempted");
280
+ assert.deepEqual(unlinked, attempted, "nothing is left behind on the all-fail path");
281
+ });
282
+
283
+ test("a successful generation is never discarded", async () => {
284
+ const unlinked = [];
285
+
286
+ const result = await ltxVideoGenerate(
287
+ "storm clouds",
288
+ { specs: bothTiersSpecs },
289
+ () => {},
290
+ () => true,
291
+ (path) => unlinked.push(path),
292
+ );
293
+
294
+ assert.ok(result);
295
+ assert.deepEqual(unlinked, [], "the returned artifact must survive");
296
+ });
297
+
298
+ test("an unremovable partial does not mask the generate failure", async (t) => {
299
+ t.mock.method(console, "error", () => {});
300
+ const fakeExec = (...call) => {
301
+ if (isGenerate(call)) throw new Error("mlx out of memory");
302
+ };
303
+
304
+ const result = await ltxVideoGenerate(
305
+ "storm clouds",
306
+ { specs: bothTiersSpecs },
307
+ fakeExec,
308
+ () => true,
309
+ () => {
310
+ throw new Error("EPERM: operation not permitted");
311
+ },
312
+ );
313
+
314
+ // cleanup is best-effort: a partial we cannot delete must not become the error
315
+ assert.equal(result, null);
316
+ });
@@ -0,0 +1,271 @@
1
+ import { existsSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { withReservedFile, withReservedFileSync } from "./manifest.mjs";
4
+ import { freezeUrl } from "./freeze.mjs";
5
+ import { tokenOverlap } from "./match.mjs";
6
+ import { buildCube } from "./cube-build.mjs";
7
+ import { validateCube, validateCubeFile } from "./cube-validate.mjs";
8
+
9
+ const SKILL_DIR = [
10
+ join(import.meta.dirname, ".."),
11
+ join(import.meta.dirname, "..", "..", "..", "..", "skills", "media-use"),
12
+ join(import.meta.dirname, "..", "..", "..", "..", "..", "skills", "media-use"),
13
+ ].find((candidate) => existsSync(join(candidate, "luts", "index.json")));
14
+ const LUT_DIR = join(SKILL_DIR, "luts");
15
+ const LUT_INDEX = join(LUT_DIR, "index.json");
16
+ export const LIBRARY_LUT_OFFLINE_CODE = "MEDIA_USE_LIBRARY_LUT_OFFLINE";
17
+
18
+ // Presets this released resolver can safely emit at this stack layer.
19
+ // Effect-backed treatment presets join after their runtime support lands.
20
+ export const RESOLVABLE_PRESET_IDS = [
21
+ "neutral",
22
+ "warm-daylight",
23
+ "clean-studio",
24
+ "skin-soft",
25
+ "food-pop",
26
+ "night-lift",
27
+ "muted-editorial",
28
+ "vintage-wash",
29
+ "mono-clean",
30
+ "mono-fade",
31
+ "soft-boost",
32
+ "bright-pop",
33
+ "deep-contrast",
34
+ "creator-camcorder",
35
+ "vhs-playback",
36
+ "home-movie-8mm",
37
+ "editorial-halftone",
38
+ "two-ink-print",
39
+ ];
40
+
41
+ const PRESET_SYNONYMS = {
42
+ neutral: ["neutral", "identity", "none", "ungraded", "natural base"],
43
+ "warm-daylight": [
44
+ "warm daylight",
45
+ "warm natural light",
46
+ "golden daylight",
47
+ "sunlit",
48
+ "warm sunny",
49
+ "warm clean",
50
+ "clean warm",
51
+ "warm product",
52
+ ],
53
+ "clean-studio": [
54
+ "clean studio",
55
+ "studio clean",
56
+ "cool studio",
57
+ "product studio",
58
+ "cool clean",
59
+ "clean cool",
60
+ "cool crisp",
61
+ ],
62
+ "skin-soft": ["skin soft", "soft skin", "portrait soft", "beauty skin"],
63
+ "food-pop": ["food pop", "food vibrant", "appetizing", "restaurant color"],
64
+ "night-lift": ["night lift", "night", "low light lift", "city night"],
65
+ "muted-editorial": ["muted editorial", "editorial muted", "magazine muted"],
66
+ "vintage-wash": ["vintage wash", "vintage", "retro wash", "aged film"],
67
+ "mono-clean": ["mono clean", "black white clean", "monochrome clean"],
68
+ "mono-fade": ["mono fade", "black white fade", "faded monochrome"],
69
+ "soft-boost": [
70
+ "soft boost",
71
+ "soft bright",
72
+ "gentle boost",
73
+ "natural lift",
74
+ "natural light",
75
+ "gentle lift",
76
+ "soft natural",
77
+ ],
78
+ "bright-pop": [
79
+ "bright pop",
80
+ "bright punchy",
81
+ "vivid bright",
82
+ "fresh pop",
83
+ "fresh",
84
+ "bright fresh",
85
+ "clean colorful",
86
+ ],
87
+ "deep-contrast": ["deep contrast", "high contrast punchy", "punchy contrast", "bold contrast"],
88
+ "creator-camcorder": ["creator camcorder", "creator video", "ugc camera", "handheld creator"],
89
+ "vhs-playback": ["vhs playback", "vhs tape", "analog tape", "degraded tape"],
90
+ "home-movie-8mm": ["8mm home movie", "8mm film", "family film", "small gauge film"],
91
+ "editorial-halftone": ["editorial halftone", "halftone", "print dots", "newsprint"],
92
+ "two-ink-print": ["two ink print", "two ink editorial", "duotone print", "poster print"],
93
+ };
94
+
95
+ function presetCandidates() {
96
+ return RESOLVABLE_PRESET_IDS.map((id) => ({
97
+ kind: "preset",
98
+ preset: id,
99
+ synonyms: PRESET_SYNONYMS[id] ?? [],
100
+ text: [id, ...(PRESET_SYNONYMS[id] ?? [])].join(" "),
101
+ }));
102
+ }
103
+
104
+ export function readBundledLutIndex() {
105
+ if (!existsSync(LUT_INDEX)) return [];
106
+ const parsed = JSON.parse(readFileSync(LUT_INDEX, "utf8"));
107
+ const entries = Array.isArray(parsed) ? parsed : parsed.looks;
108
+ if (!Array.isArray(entries)) return [];
109
+ return entries.map((entry) => {
110
+ const params =
111
+ entry.params && typeof entry.params === "object" && !Array.isArray(entry.params)
112
+ ? entry.params
113
+ : null;
114
+ const url = typeof entry.url === "string" && entry.url.trim() ? entry.url.trim() : null;
115
+ return {
116
+ id: String(entry.id),
117
+ description: String(entry.description ?? entry.id),
118
+ tags: Array.isArray(entry.tags) ? entry.tags.map(String) : [],
119
+ intensity: Number.isFinite(Number(entry.intensity)) ? Number(entry.intensity) : 1,
120
+ ...(params && { params }),
121
+ ...(url && { url }),
122
+ };
123
+ });
124
+ }
125
+
126
+ function libraryCandidates() {
127
+ return readBundledLutIndex().map((entry) => ({
128
+ kind: "library",
129
+ ...entry,
130
+ text: [entry.id, entry.description, ...entry.tags].join(" "),
131
+ }));
132
+ }
133
+
134
+ export function matchColorLook(intent) {
135
+ const normalized = String(intent ?? "")
136
+ .trim()
137
+ .toLowerCase()
138
+ .replace(/\s+/g, " ");
139
+ if (RESOLVABLE_PRESET_IDS.includes(normalized)) {
140
+ return { kind: "preset", preset: normalized, score: 99 };
141
+ }
142
+
143
+ const candidates = [...presetCandidates(), ...libraryCandidates()]
144
+ .map((candidate, index) => ({
145
+ ...candidate,
146
+ index,
147
+ score: tokenOverlap(intent, candidate.text),
148
+ }))
149
+ .filter((candidate) => candidate.score >= 2)
150
+ .sort((a, b) => b.score - a.score || a.index - b.index);
151
+
152
+ if (candidates.length === 0) return null;
153
+ const best = candidates[0];
154
+ if (best.kind === "preset") {
155
+ return { kind: "preset", preset: best.preset, score: best.score };
156
+ }
157
+ return {
158
+ kind: "library",
159
+ id: best.id,
160
+ description: best.description,
161
+ tags: best.tags,
162
+ intensity: best.intensity,
163
+ ...(best.params && { params: best.params }),
164
+ ...(best.url && { url: best.url }),
165
+ score: best.score,
166
+ };
167
+ }
168
+
169
+ export function isLibraryLutOfflineMiss(err) {
170
+ return err?.code === LIBRARY_LUT_OFFLINE_CODE;
171
+ }
172
+
173
+ function libraryRecord(match, { id, localPath, fullPath, via }) {
174
+ return {
175
+ id,
176
+ localPath,
177
+ fullPath,
178
+ lut: { src: localPath, intensity: match.intensity },
179
+ source: "library",
180
+ description: match.description,
181
+ metadata: {
182
+ provider: "cube_lut.library",
183
+ provenance: {
184
+ look_id: match.id,
185
+ tags: match.tags,
186
+ via,
187
+ },
188
+ },
189
+ };
190
+ }
191
+
192
+ function assertValidCubeText(cube, label) {
193
+ const check = validateCube(cube);
194
+ if (!check.ok) throw new Error(`${label}: ${check.error}`);
195
+ }
196
+
197
+ function assertValidCubeFile(path, label) {
198
+ const check = validateCubeFile(path);
199
+ if (!check.ok) throw new Error(`${label}: ${check.error}`);
200
+ }
201
+
202
+ function offlineLibraryMiss(match) {
203
+ const err = new Error(`library LUT "${match.id}" is CDN-only and --local-only is set`);
204
+ err.code = LIBRARY_LUT_OFFLINE_CODE;
205
+ return err;
206
+ }
207
+
208
+ export async function freezeLibraryLut(match, { projectDir, type, localOnly = false }) {
209
+ if (!match || match.kind !== "library") {
210
+ throw new Error("freezeLibraryLut requires a library match");
211
+ }
212
+
213
+ // Prefer the CDN url so looks download on-demand (like bgm/image). Fall back
214
+ // to deterministic buildCube params when offline (--local-only) or if the
215
+ // download/validation fails, so resolution is never blocked on the network.
216
+ if (match.url && !localOnly) {
217
+ try {
218
+ return await withReservedFile(
219
+ projectDir,
220
+ type,
221
+ ".cube",
222
+ async ({ id, localPath, fullPath }) => {
223
+ const tmpDir = mkdtempSync(join(dirname(fullPath), ".lut-download-"));
224
+ const tmpPath = join(tmpDir, "download.cube");
225
+ try {
226
+ // Download + validate in a private directory, then atomically rename. A crash
227
+ // (SIGKILL/OOM) between write and validate can't orphan an invalid .cube
228
+ // at the final path — only a validated cube is ever renamed into place.
229
+ await freezeUrl(match.url, tmpPath);
230
+ assertValidCubeFile(tmpPath, `downloaded library LUT ${match.id} failed validation`);
231
+ renameSync(tmpPath, fullPath);
232
+ return libraryRecord(match, { id, localPath, fullPath, via: "url" });
233
+ } finally {
234
+ rmSync(tmpDir, { recursive: true, force: true });
235
+ }
236
+ },
237
+ );
238
+ } catch (err) {
239
+ if (!match.params) {
240
+ throw new Error(`failed to freeze library LUT ${match.id}: ${err.message}`);
241
+ }
242
+ // else: fall through to the params fallback below
243
+ }
244
+ }
245
+
246
+ if (match.params) {
247
+ return withReservedFileSync(projectDir, type, ".cube", ({ id, localPath, fullPath }) => {
248
+ const tmpPath = `${fullPath}.tmp`;
249
+ try {
250
+ const cube = buildCube(match.params);
251
+ assertValidCubeText(cube, `invalid library LUT ${match.id}`);
252
+ // Write + validate at .tmp, then atomic rename — same no-orphan guarantee
253
+ // as the url path above.
254
+ writeFileSync(tmpPath, cube);
255
+ assertValidCubeFile(tmpPath, `invalid frozen LUT ${localPath}`);
256
+ renameSync(tmpPath, fullPath);
257
+ return libraryRecord(match, {
258
+ id,
259
+ localPath,
260
+ fullPath,
261
+ via: match.url ? "params-fallback" : "params",
262
+ });
263
+ } finally {
264
+ rmSync(tmpPath, { force: true });
265
+ }
266
+ });
267
+ }
268
+
269
+ if (match.url) throw offlineLibraryMiss(match); // url-only entry, offline
270
+ throw new Error(`misconfigured library LUT "${match.id}": expected params or url`);
271
+ }