@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.
- package/LICENSE +190 -0
- package/NOTICE +54 -0
- package/README.md +23 -0
- package/bin/ignix-editor.mjs +8 -0
- package/package.json +53 -0
- package/patches/index.mjs +53 -0
- package/scripts/build-ffmpeg-macos.sh +35 -0
- package/scripts/build-whisper-macos.sh +21 -0
- package/scripts/vendor.mjs +41 -0
- package/skills/ignix-editor/SKILL.md +132 -0
- package/src/audio.mjs +31 -0
- package/src/binaries.json +46 -0
- package/src/binaries.mjs +83 -0
- package/src/cli.mjs +254 -0
- package/src/prepare.mjs +74 -0
- package/src/runtime/ignix-frame.js +92 -0
- package/src/transcribe.mjs +71 -0
- package/src/validate.mjs +71 -0
- package/templates/blank/index.html +41 -0
- package/vendor/hyperframes/README.md +181 -0
- package/vendor/hyperframes/UPSTREAM.json +12 -0
- package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
- package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
- package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
- package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
- package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
- package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
- package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
- package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
- package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
- package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
- package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
- package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
- package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
- package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
- package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
- package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
- package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
- package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
- package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
- package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
- package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
- package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
- package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
- package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
- package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
- package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
- package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
- package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
- package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
- package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
- package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
- package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
- package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
- package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
- package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
- package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
- package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
- package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
- package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
- package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
- package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
- package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
- package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
- package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
- package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
- package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
- package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
- package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
- package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
- package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
- package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
- package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
- package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
- package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
- package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
- package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
- package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
- package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
- package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
- package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
- package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
- package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
- package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
- package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
- package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
- package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
- package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
- package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
- package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
- package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
- package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
- package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
- package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
- package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
- package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
- package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
- package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
- package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
- package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
- package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
- package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
- package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
- package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
- package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
- package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
- package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
- package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
- package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
- package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
- package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
- package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
- package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
- package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
- package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
- package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
- package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
- package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
- package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
- package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
- package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
- package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
- package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
- package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
- package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
- package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
- package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
- package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
- package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
- package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
- package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
- package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
- package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
- package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
- package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
- package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
- package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
- package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
- package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
- package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
- package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
- package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
- package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
- package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
- package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
- package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
- package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
- package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
- package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
- package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
- package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
- package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
- package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
- package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
- package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
- package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
- package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
- package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
- package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
- package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
- package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
- package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
- package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
- package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
- package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
- package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
- package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
- package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
- package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
- package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
- package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
- package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
- package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
- package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
- package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
- package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
- package/vendor/hyperframes/dist/cli.js +495 -0
- package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
- package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
- package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
- package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
- package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
- package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
- package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
- package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
- package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
- package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
- package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
- package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
- package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
- package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
- package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
- package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
- package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
- package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
- package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
- package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
- package/vendor/hyperframes/dist/docs/compositions.md +67 -0
- package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
- package/vendor/hyperframes/dist/docs/examples.md +19 -0
- package/vendor/hyperframes/dist/docs/gsap.md +26 -0
- package/vendor/hyperframes/dist/docs/rendering.md +35 -0
- package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
- package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
- package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
- package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
- package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
- package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
- package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
- package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
- package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
- package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
- package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
- package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
- package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
- package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
- package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
- package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
- package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
- package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
- package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
- package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
- package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
- package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
- package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
- package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
- package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
- package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
- package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
- package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
- package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
- package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
- package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
- package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
- package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
- package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
- package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
- package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
- package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
- package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
- package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
- package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
- package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
- package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
- package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
- package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
- package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
- package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
- package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
- package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
- package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
- package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
- package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
- package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
- package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
- package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
- package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
- package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
- package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
- package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
- package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
- package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
- package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
- package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
- package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
- package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
- package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
- package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
- package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
- package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
- package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
- package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
- package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
- package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
- package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
- package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
- package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
- package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
- package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
- package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
- package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
- package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
- package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
- package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
- package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
- package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
- package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
- package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
- package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
- package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
- package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
- package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
- package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
- package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
- package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
- package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
- package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
- package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
- package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
- package/vendor/hyperframes/dist/studio/index.css +165 -0
- package/vendor/hyperframes/dist/studio/index.css.map +1 -0
- package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
- package/vendor/hyperframes/dist/studio/index.html +23 -0
- package/vendor/hyperframes/dist/studio/index.js +99693 -0
- package/vendor/hyperframes/dist/studio/index.js.map +1 -0
- package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
- package/vendor/hyperframes/dist/studio/player.js +10 -0
- package/vendor/hyperframes/dist/studio/player.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles.css +1 -0
- package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
- package/vendor/hyperframes/dist/studio/ui.js +66 -0
- package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
- package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
- package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
- package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
- package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
- package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
- package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
- package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
- package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
- package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
- package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
- package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
- package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
- package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
- package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
- package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
- package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
- package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
- package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
- package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
- package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
- package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
- package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
- package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
- package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
- package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
- package/vendor/hyperframes/package.json +80 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { copyFileSync, existsSync, readdirSync, statSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { homedir, tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
|
|
6
|
+
// Image generation via the OpenAI Codex CLI's built-in image tool (gpt-image-2)
|
|
7
|
+
// on the user's ChatGPT subscription: the codex CLI owns auth, media-use holds
|
|
8
|
+
// no key (CLI-only). The image UPSELL behind local mflux; skipped by --local-only.
|
|
9
|
+
//
|
|
10
|
+
// Retrieval mirrors illo-skill rather than trusting the model to save a file:
|
|
11
|
+
// `--enable image_generation` makes the built-in tool drop the rendered artifact
|
|
12
|
+
// into $CODEX_HOME/generated_images/, and we fetch the freshest file that
|
|
13
|
+
// postdates this run. The save-to-path instruction is only a best-effort
|
|
14
|
+
// verify-first.
|
|
15
|
+
//
|
|
16
|
+
// The flag was called `imagegenext` until Codex CLI ~0.145, which renamed it to
|
|
17
|
+
// `image_generation` and dropped the old row from `codex features list`. Both
|
|
18
|
+
// the gate below and the --enable arg track the new name, with a fallback to
|
|
19
|
+
// the old one so older CLIs keep working.
|
|
20
|
+
|
|
21
|
+
const TIMEOUT_MS = 600000; // codex exec round-trips the sub; first-run tool spin-up is slow
|
|
22
|
+
const MTIME_SKEW_MS = 2000; // tolerate mtime granularity / clock skew (illo uses 2s)
|
|
23
|
+
|
|
24
|
+
function codexGeneratedDir() {
|
|
25
|
+
// Codex relocates CODEX_HOME on some hosts, so resolve it at run time.
|
|
26
|
+
return join(process.env.CODEX_HOME || join(homedir(), ".codex"), "generated_images");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Newest artifact that postdates `sinceMs` (minus skew), so a stale prior render
|
|
30
|
+
// or a concurrent session's file can't be mistaken for this run's output.
|
|
31
|
+
function freshestGeneratedImage(sinceMs) {
|
|
32
|
+
const dir = codexGeneratedDir();
|
|
33
|
+
if (!existsSync(dir)) return null;
|
|
34
|
+
const floor = sinceMs - MTIME_SKEW_MS;
|
|
35
|
+
let best = null;
|
|
36
|
+
for (const name of readdirSync(dir)) {
|
|
37
|
+
let st;
|
|
38
|
+
try {
|
|
39
|
+
st = statSync(join(dir, name));
|
|
40
|
+
} catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (!st.isFile() || st.mtimeMs < floor) continue;
|
|
44
|
+
if (!best || st.mtimeMs > best.mtimeMs) best = { path: join(dir, name), mtimeMs: st.mtimeMs };
|
|
45
|
+
}
|
|
46
|
+
return best?.path ?? null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Short `codex` subcommand → combined stdout+stderr, or null if it can't run.
|
|
50
|
+
function codexRun(args) {
|
|
51
|
+
try {
|
|
52
|
+
return execFileSync("codex", args, {
|
|
53
|
+
encoding: "utf8",
|
|
54
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
55
|
+
timeout: 10000,
|
|
56
|
+
});
|
|
57
|
+
} catch (err) {
|
|
58
|
+
return `${err.stdout?.toString() ?? ""}${err.stderr?.toString() ?? ""}` || null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Name of the feature flag this CLI uses for the extended image tool, or null if
|
|
63
|
+
// it exposes neither. Newer CLIs list only `image_generation`; older ones list
|
|
64
|
+
// `imagegenext` alongside it and reject the new name on --enable.
|
|
65
|
+
export function imageGenFlag(feats) {
|
|
66
|
+
if (/\bimagegenext\b/.test(feats)) return "imagegenext";
|
|
67
|
+
if (/\bimage_generation\b/.test(feats)) return "image_generation";
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Fail-fast host check (mirrors illo): don't burn a minutes-long exec when Codex
|
|
72
|
+
// isn't usable. Returns { flag } when ready, else { reason }. The flag ships
|
|
73
|
+
// default-disabled, so we check the ROW is present (the capability signal) — the
|
|
74
|
+
// exec enables it per-render with --enable.
|
|
75
|
+
function codexUnavailableReason() {
|
|
76
|
+
try {
|
|
77
|
+
const which = process.platform === "win32" ? "where" : "which";
|
|
78
|
+
execFileSync(which, ["codex"], { stdio: ["ignore", "ignore", "ignore"], timeout: 5000 });
|
|
79
|
+
} catch {
|
|
80
|
+
// A shell alias (e.g. `codex → /Applications/Codex.app/...`) is NOT enough:
|
|
81
|
+
// aliases live only in the interactive shell, so a spawned subprocess's PATH
|
|
82
|
+
// lookup can't see them. Symlink the real binary onto PATH.
|
|
83
|
+
return {
|
|
84
|
+
reason:
|
|
85
|
+
'codex CLI not reachable on PATH (a shell alias won\'t work — spawned processes can\'t see aliases; symlink the real binary onto PATH, e.g. ln -s "$(readlink -f "$(command -v codex)")" ~/.local/bin/codex)',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Auth marker: presence of the credentials file, NOT `codex login status`.
|
|
89
|
+
// That command prints "Logged in using ChatGPT" only to a human stream
|
|
90
|
+
// (stderr / TTY) and exits 0, so its piped stdout — how media-use spawns it —
|
|
91
|
+
// is empty, and the gate falsely reported "not logged in", blocking codex
|
|
92
|
+
// image gen in every headless / CI / agent run even when fully authed.
|
|
93
|
+
// auth.json is the durable, TTY-independent signal; token validity is proven
|
|
94
|
+
// by the exec itself, which fails cleanly if the login is stale.
|
|
95
|
+
const authPath = join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
|
|
96
|
+
if (!existsSync(authPath)) return { reason: "codex not logged in (run: codex login)" };
|
|
97
|
+
const feats = codexRun(["features", "list"]);
|
|
98
|
+
if (feats == null) return { reason: "could not read `codex features list`" };
|
|
99
|
+
const flag = imageGenFlag(feats);
|
|
100
|
+
if (!flag) return { reason: "codex image generation feature unavailable (upgrade Codex CLI)" };
|
|
101
|
+
return { flag };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export async function codexImageGenerate(intent) {
|
|
105
|
+
const { reason, flag } = codexUnavailableReason();
|
|
106
|
+
if (reason) {
|
|
107
|
+
console.error(`media-use: codex image upsell unavailable: ${reason}`);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const outPath = join(tmpdir(), `media-use-codex-${process.pid}-${Date.now()}.png`);
|
|
111
|
+
const prompt =
|
|
112
|
+
`${intent}\n\n` +
|
|
113
|
+
`Use your built-in image generation tool to render this, then save the image ` +
|
|
114
|
+
`to ${outPath} (overwrite if it exists). Do not ask for confirmation. ` +
|
|
115
|
+
`If you have no built-in image tool, do nothing (no PIL/matplotlib/SVG substitute).`;
|
|
116
|
+
try {
|
|
117
|
+
unlinkSync(outPath); // clear any prior file so verify-first can't accept a stale render
|
|
118
|
+
} catch {
|
|
119
|
+
/* no prior file */
|
|
120
|
+
}
|
|
121
|
+
const started = Date.now();
|
|
122
|
+
try {
|
|
123
|
+
execFileSync(
|
|
124
|
+
"codex",
|
|
125
|
+
[
|
|
126
|
+
"exec",
|
|
127
|
+
"--cd",
|
|
128
|
+
tmpdir(),
|
|
129
|
+
"-s",
|
|
130
|
+
"workspace-write",
|
|
131
|
+
"--skip-git-repo-check",
|
|
132
|
+
"--enable",
|
|
133
|
+
flag,
|
|
134
|
+
"-",
|
|
135
|
+
],
|
|
136
|
+
{ input: prompt, encoding: "utf8", timeout: TIMEOUT_MS, stdio: ["pipe", "pipe", "pipe"] },
|
|
137
|
+
);
|
|
138
|
+
} catch (err) {
|
|
139
|
+
console.error(
|
|
140
|
+
`media-use: \`codex exec\` image generation failed: ${err.stderr?.toString().trim().slice(-200) || err.message}`,
|
|
141
|
+
);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
// Verify-first (save-to-path may have worked), else fetch the image-tool artifact.
|
|
145
|
+
const produced =
|
|
146
|
+
existsSync(outPath) && statSync(outPath).size > 0 ? outPath : freshestGeneratedImage(started);
|
|
147
|
+
if (!produced) return null;
|
|
148
|
+
if (produced !== outPath) {
|
|
149
|
+
try {
|
|
150
|
+
copyFileSync(produced, outPath);
|
|
151
|
+
} catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
localPath: outPath,
|
|
157
|
+
ext: ".png",
|
|
158
|
+
source: "generated",
|
|
159
|
+
metadata: { description: intent, provider: "codex.image_gen", provenance: { prompt: intent } },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { imageGenFlag } from "./codex-provider.mjs";
|
|
4
|
+
|
|
5
|
+
// Real `codex features list` output is three space-padded columns:
|
|
6
|
+
// <name> <stage> <enabled>
|
|
7
|
+
const OLD_CLI = [
|
|
8
|
+
"image_detail_original removed false",
|
|
9
|
+
"image_generation stable true",
|
|
10
|
+
"imagegenext under development false",
|
|
11
|
+
].join("\n");
|
|
12
|
+
|
|
13
|
+
const NEW_CLI = [
|
|
14
|
+
"image_detail_original removed false",
|
|
15
|
+
"image_generation stable true",
|
|
16
|
+
].join("\n");
|
|
17
|
+
|
|
18
|
+
test("older CLIs keep the old flag — they reject --enable image_generation", () => {
|
|
19
|
+
assert.equal(imageGenFlag(OLD_CLI), "imagegenext");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("Codex CLI >=0.145 dropped the imagegenext row; fall back to its new name", () => {
|
|
23
|
+
// The regression this guards: gating on `imagegenext` alone made the provider
|
|
24
|
+
// report "unavailable" on every up-to-date CLI, without attempting a render.
|
|
25
|
+
assert.equal(imageGenFlag(NEW_CLI), "image_generation");
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("no image feature at all is unavailable, not a silent default", () => {
|
|
29
|
+
assert.equal(imageGenFlag("apps stable true\nhooks stable true"), null);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test("substring lookalikes do not count as the feature row", () => {
|
|
33
|
+
assert.equal(imageGenFlag("image_generation_v2 stable true"), null);
|
|
34
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// The one lock on ~/.hyperframes/config.json, for the CLI, its auto-update step and media-use. The auto-update step
|
|
2
|
+
// embeds this function's source, so it must use only its arguments and globals.
|
|
3
|
+
export function withFileLock(lockPath, fs, task) {
|
|
4
|
+
const token = `${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
5
|
+
const started = Date.now();
|
|
6
|
+
for (;;) {
|
|
7
|
+
let fd;
|
|
8
|
+
try {
|
|
9
|
+
fd = fs.openSync(lockPath, "wx");
|
|
10
|
+
} catch (error) {
|
|
11
|
+
if (error.code !== "EEXIST") throw error;
|
|
12
|
+
// Never taken over: a lock older than any hold was left by a process that stopped, and a person removes it.
|
|
13
|
+
let leftover = false;
|
|
14
|
+
try {
|
|
15
|
+
leftover = Date.now() - fs.statSync(lockPath).mtimeMs > 5000;
|
|
16
|
+
} catch {}
|
|
17
|
+
if (leftover || Date.now() - started > 10000)
|
|
18
|
+
throw Object.assign(
|
|
19
|
+
new Error(
|
|
20
|
+
`Settings are locked by another hyperframes process. If none is running, delete ${lockPath}`,
|
|
21
|
+
),
|
|
22
|
+
{ code: "HF_SETTINGS_LOCKED" },
|
|
23
|
+
);
|
|
24
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 25);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
fs.writeSync(fd, token);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
fs.rmSync(lockPath, { force: true });
|
|
31
|
+
throw error;
|
|
32
|
+
} finally {
|
|
33
|
+
fs.closeSync(fd);
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return task();
|
|
39
|
+
} finally {
|
|
40
|
+
// No code removes another's lock, so release needs no check (only a person deleting a live one defeats it).
|
|
41
|
+
try {
|
|
42
|
+
fs.rmSync(lockPath);
|
|
43
|
+
} catch {}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { test } from "node:test";
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { withFileLock } from "./config-lock.mjs";
|
|
8
|
+
|
|
9
|
+
function lockIn() {
|
|
10
|
+
const dir = fs.mkdtempSync(join(tmpdir(), "hf-config-lock-"));
|
|
11
|
+
return {
|
|
12
|
+
lock: join(dir, "config.json.lock"),
|
|
13
|
+
cleanup: () => fs.rmSync(dir, { recursive: true }),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
test("returns the task's result even when the lock cannot be released", () => {
|
|
18
|
+
const { lock, cleanup } = lockIn();
|
|
19
|
+
try {
|
|
20
|
+
const refusing = {
|
|
21
|
+
...fs,
|
|
22
|
+
rmSync(path, options) {
|
|
23
|
+
if (path === lock) throw Object.assign(new Error("EPERM"), { code: "EPERM" });
|
|
24
|
+
return fs.rmSync(path, options);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
assert.equal(
|
|
28
|
+
withFileLock(lock, refusing, () => "saved"),
|
|
29
|
+
"saved",
|
|
30
|
+
);
|
|
31
|
+
} finally {
|
|
32
|
+
cleanup();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("refuses a lock left by a process that stopped, names it, and never removes it", () => {
|
|
37
|
+
const { lock, cleanup } = lockIn();
|
|
38
|
+
try {
|
|
39
|
+
fs.writeFileSync(lock, "dead");
|
|
40
|
+
const past = new Date(Date.now() - 60_000);
|
|
41
|
+
fs.utimesSync(lock, past, past);
|
|
42
|
+
const started = Date.now();
|
|
43
|
+
let ran = false;
|
|
44
|
+
|
|
45
|
+
assert.throws(
|
|
46
|
+
() => withFileLock(lock, fs, () => (ran = true)),
|
|
47
|
+
(error) => error.code === "HF_SETTINGS_LOCKED" && error.message.includes(lock),
|
|
48
|
+
);
|
|
49
|
+
assert.ok(Date.now() - started < 1000);
|
|
50
|
+
assert.equal(ran, false);
|
|
51
|
+
assert.equal(fs.readFileSync(lock, "utf8"), "dead");
|
|
52
|
+
} finally {
|
|
53
|
+
cleanup();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("waits for a process that holds the lock, then takes it", async () => {
|
|
58
|
+
const { lock, cleanup } = lockIn();
|
|
59
|
+
try {
|
|
60
|
+
const script = `
|
|
61
|
+
const fs = require("fs");
|
|
62
|
+
const lock = process.argv[1];
|
|
63
|
+
fs.writeFileSync(lock, "other", { flag: "wx" });
|
|
64
|
+
process.stdout.write("locked\\n");
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
fs.writeFileSync(lock + ".released", String(Date.now()));
|
|
67
|
+
fs.rmSync(lock);
|
|
68
|
+
}, 300);`;
|
|
69
|
+
const other = spawn(process.execPath, ["-e", script, lock]);
|
|
70
|
+
await new Promise((ready) => other.stdout.once("data", ready));
|
|
71
|
+
|
|
72
|
+
const ranAt = withFileLock(lock, fs, () => Date.now());
|
|
73
|
+
|
|
74
|
+
assert.ok(ranAt >= Number(fs.readFileSync(`${lock}.released`, "utf8")));
|
|
75
|
+
await new Promise((exited) => other.once("exit", exited));
|
|
76
|
+
} finally {
|
|
77
|
+
cleanup();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { join, dirname } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { listTypes, getProviders } from "./registry.mjs";
|
|
7
|
+
import { CAPABILITIES, listModels } from "./local-models.mjs";
|
|
8
|
+
|
|
9
|
+
// Capstone: media-use must actually OWN each hyperframes media weakness. This
|
|
10
|
+
// test enforces the weakness→owner matrix in references/meta.md so a claim can't rot — if
|
|
11
|
+
// a capability's entrypoint disappears, this fails.
|
|
12
|
+
|
|
13
|
+
const SKILL = join(
|
|
14
|
+
dirname(fileURLToPath(import.meta.url)),
|
|
15
|
+
"..",
|
|
16
|
+
"..",
|
|
17
|
+
"..",
|
|
18
|
+
"..",
|
|
19
|
+
"..",
|
|
20
|
+
"skills",
|
|
21
|
+
"media-use",
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
test("weakness: audio-only → media-use resolves image + icon", () => {
|
|
25
|
+
for (const t of ["image", "icon"]) {
|
|
26
|
+
assert.ok(getProviders(t).length > 0, `no provider for ${t}`);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("weakness: no third-party brand logos → media-use resolves logo", () => {
|
|
31
|
+
assert.ok(listTypes().includes("logo"), "logo type missing");
|
|
32
|
+
assert.deepEqual(
|
|
33
|
+
getProviders("logo").map((p) => p.name),
|
|
34
|
+
["thesvg", "github.avatar", "favicon.ddg"],
|
|
35
|
+
"logo cascade incomplete",
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("weakness: no voice/audio gen → media-use exposes voice + the audio engine", () => {
|
|
40
|
+
assert.ok(listTypes().includes("voice"), "voice type missing");
|
|
41
|
+
assert.ok(getProviders("voice").length > 0, "no enabled voice provider (Bin approved)");
|
|
42
|
+
assert.ok(existsSync(join(SKILL, "audio", "scripts", "audio.mjs")), "audio engine missing");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("weakness: scattered audio engine → consolidated under media-use (hyperframes-media gone)", () => {
|
|
46
|
+
assert.ok(existsSync(join(SKILL, "audio", "scripts", "lib", "tts.mjs")), "tts engine missing");
|
|
47
|
+
assert.ok(
|
|
48
|
+
existsSync(join(SKILL, "audio", "assets", "sfx", "manifest.json")),
|
|
49
|
+
"bundled SFX missing",
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("weakness: no media-ops → ops guidance reference exists", () => {
|
|
54
|
+
assert.ok(existsSync(join(SKILL, "references", "operations.md")), "operations.md missing");
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("weakness: no transcript-driven cutting → cut compiler entrypoints exist", async () => {
|
|
58
|
+
assert.ok(existsSync(join(SKILL, "scripts", "transcript-cut.mjs")), "transcript-cut missing");
|
|
59
|
+
assert.ok(
|
|
60
|
+
existsSync(join(dirname(fileURLToPath(import.meta.url)), "cutlist.mjs")),
|
|
61
|
+
"cutlist lib missing",
|
|
62
|
+
);
|
|
63
|
+
const cutlist = await import("./cutlist.mjs");
|
|
64
|
+
assert.equal(typeof cutlist.compileCutList, "function");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("weakness: whisper.cpp is weak → better local ASR (Parakeet) entrypoint exists", async () => {
|
|
68
|
+
assert.ok(existsSync(join(SKILL, "scripts", "transcribe.mjs")), "transcribe.mjs missing");
|
|
69
|
+
const pw = await import("./parakeet-words.mjs");
|
|
70
|
+
assert.equal(typeof pw.mergeTokensToWords, "function", "token->word merge missing");
|
|
71
|
+
const lm = await import("./local-models.mjs");
|
|
72
|
+
const asr = lm.listModels("asr");
|
|
73
|
+
const parakeet = asr.find((m) => m.id === "parakeet-mlx");
|
|
74
|
+
assert.ok(parakeet && parakeet.rank === 0, "Parakeet must be the rank-0 preferred ASR");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("weakness: no auto-duck/loudness → duck compiler and recipes exist", async () => {
|
|
78
|
+
assert.ok(existsSync(join(SKILL, "scripts", "audio-duck.mjs")), "audio-duck missing");
|
|
79
|
+
assert.ok(
|
|
80
|
+
existsSync(join(dirname(fileURLToPath(import.meta.url)), "duck.mjs")),
|
|
81
|
+
"duck lib missing",
|
|
82
|
+
);
|
|
83
|
+
assert.ok(existsSync(join(SKILL, "references", "operations.md")), "operations.md missing");
|
|
84
|
+
const duck = await import("./duck.mjs");
|
|
85
|
+
assert.equal(typeof duck.speechSpans, "function");
|
|
86
|
+
assert.equal(typeof duck.duckKeyframes, "function");
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("weakness: no cross-project memory → global cache + ingest entrypoints exist", async () => {
|
|
90
|
+
const cache = await import("./cache.mjs");
|
|
91
|
+
assert.equal(typeof cache.cachePut, "function");
|
|
92
|
+
assert.equal(typeof cache.promote, "function");
|
|
93
|
+
assert.equal(typeof cache.globalMediaDir, "function");
|
|
94
|
+
const freeze = await import("./freeze.mjs");
|
|
95
|
+
assert.equal(typeof freeze.isDirectMediaUrl, "function", "ingest URL guard missing");
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Wenbo (06-29): heygen free-usage is the default; local models are the opt-out
|
|
99
|
+
// fallback ("if user no, then local"). We still assert the fallback table is
|
|
100
|
+
// populated so the opt-out path stays real.
|
|
101
|
+
test("weakness: weak local defaults → local models exist as the opt-out fallback (tts/asr/upscale)", () => {
|
|
102
|
+
for (const cap of ["tts", "asr", "upscale"]) {
|
|
103
|
+
assert.ok(CAPABILITIES.includes(cap), `capability ${cap} missing`);
|
|
104
|
+
assert.ok(listModels(cap).length > 0, `no local models for ${cap}`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("weakness: no image generation → local mflux (RAM-graded) + codex upsell", async () => {
|
|
109
|
+
const ps = getProviders("image");
|
|
110
|
+
assert.ok(
|
|
111
|
+
ps.some((p) => p.name === "mflux.local" && typeof p.generate === "function"),
|
|
112
|
+
"local image gen missing",
|
|
113
|
+
);
|
|
114
|
+
assert.ok(
|
|
115
|
+
ps.some((p) => p.name === "codex.image_gen" && typeof p.generate === "function"),
|
|
116
|
+
"codex image upsell missing",
|
|
117
|
+
);
|
|
118
|
+
const lm = await import("./local-models.mjs");
|
|
119
|
+
assert.ok(lm.CAPABILITIES.includes("imagegen"), "imagegen capability missing");
|
|
120
|
+
assert.ok(lm.listModels("imagegen").length >= 3, "imagegen RAM ladder too small");
|
|
121
|
+
assert.equal(typeof lm.describeModelLadder, "function", "agent-facing ladder missing");
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test("weakness: no video generation → local videogen ladder + heygen avatar upsell", async () => {
|
|
125
|
+
const lm = await import("./local-models.mjs");
|
|
126
|
+
assert.ok(lm.CAPABILITIES.includes("videogen"), "videogen capability missing");
|
|
127
|
+
assert.ok(lm.listModels("videogen").length >= 2, "videogen ladder too small");
|
|
128
|
+
const ops = existsSync(join(SKILL, "references", "operations.md"));
|
|
129
|
+
assert.ok(ops, "operations.md (avatar-upsell recipe) missing");
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("every resolve type has at least one enabled provider", () => {
|
|
133
|
+
for (const t of listTypes()) {
|
|
134
|
+
assert.ok(getProviders(t).length > 0, `type ${t} has no enabled provider`);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const DEFAULT_SIZE = 33;
|
|
2
|
+
const MAX_SIZE = 64;
|
|
3
|
+
|
|
4
|
+
function clamp(value, min, max) {
|
|
5
|
+
if (!Number.isFinite(value)) return 0;
|
|
6
|
+
return Math.min(max, Math.max(min, value));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function clampUnit(value) {
|
|
10
|
+
return clamp(value, 0, 1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function readParam(params, key, min, max) {
|
|
14
|
+
return clamp(Number(params?.[key] ?? 0), min, max);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function luma([r, g, b]) {
|
|
18
|
+
// Rec.709 luma weightings (matches the color space the grading runtime uses).
|
|
19
|
+
return r * 0.2126 + g * 0.7152 + b * 0.0722;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function smoothstep(edge0, edge1, value) {
|
|
23
|
+
const t = clampUnit((value - edge0) / (edge1 - edge0));
|
|
24
|
+
return t * t * (3 - 2 * t);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function applyLiftGain(color, params) {
|
|
28
|
+
const y = luma(color);
|
|
29
|
+
const blacks = readParam(params, "blacks", -1, 1);
|
|
30
|
+
const shadows = readParam(params, "shadows", -1, 1);
|
|
31
|
+
const highlights = readParam(params, "highlights", -1, 1);
|
|
32
|
+
const whites = readParam(params, "whites", -1, 1);
|
|
33
|
+
const shadowMask = 1 - smoothstep(0.18, 0.62, y);
|
|
34
|
+
const highlightMask = smoothstep(0.38, 0.82, y);
|
|
35
|
+
const offset =
|
|
36
|
+
blacks * 0.08 + shadows * 0.12 * shadowMask + highlights * 0.12 * highlightMask + whites * 0.08;
|
|
37
|
+
return color.map((channel) => clampUnit(channel + offset));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function applyExposure(color, params) {
|
|
41
|
+
const exposure = readParam(params, "exposure", -2, 2);
|
|
42
|
+
const gain = 2 ** exposure;
|
|
43
|
+
const lift = Math.max(0, exposure) * 0.015;
|
|
44
|
+
return color.map((channel) => clampUnit(channel * gain + lift));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function applyContrast(color, params) {
|
|
48
|
+
const contrast = readParam(params, "contrast", -1, 1);
|
|
49
|
+
if (contrast === 0) return color;
|
|
50
|
+
const factor = 1 + contrast * 1.2;
|
|
51
|
+
return color.map((channel) => clampUnit(0.5 + (channel - 0.5) * factor));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function applyWhiteBalance(color, params) {
|
|
55
|
+
const temperature = readParam(params, "temperature", -1, 1);
|
|
56
|
+
const tint = readParam(params, "tint", -1, 1);
|
|
57
|
+
const redScale = 1 + temperature * 0.28 + tint * 0.08;
|
|
58
|
+
const greenScale = 1 - Math.abs(tint) * 0.1 - tint * 0.08;
|
|
59
|
+
const blueScale = 1 - temperature * 0.28 + tint * 0.08;
|
|
60
|
+
return [
|
|
61
|
+
clampUnit(color[0] * redScale),
|
|
62
|
+
clampUnit(color[1] * greenScale),
|
|
63
|
+
clampUnit(color[2] * blueScale),
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function applySplitTone(color, params) {
|
|
68
|
+
const split = params?.splitTone;
|
|
69
|
+
if (!split) return color;
|
|
70
|
+
const intensity = clampUnit(Number(split.intensity ?? 0));
|
|
71
|
+
if (intensity === 0) return color;
|
|
72
|
+
const balance = clampUnit(Number(split.balance ?? 0.5));
|
|
73
|
+
const y = luma(color);
|
|
74
|
+
const shadowMask = 1 - smoothstep(balance - 0.25, balance + 0.2, y);
|
|
75
|
+
const highlightMask = smoothstep(balance - 0.2, balance + 0.25, y);
|
|
76
|
+
const shadows = Array.isArray(split.shadows) ? split.shadows : [0, 0, 0];
|
|
77
|
+
const highlights = Array.isArray(split.highlights) ? split.highlights : [0, 0, 0];
|
|
78
|
+
return color.map((channel, i) =>
|
|
79
|
+
clampUnit(
|
|
80
|
+
channel +
|
|
81
|
+
Number(shadows[i] ?? 0) * shadowMask * intensity +
|
|
82
|
+
Number(highlights[i] ?? 0) * highlightMask * intensity,
|
|
83
|
+
),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function applySaturation(color, params) {
|
|
88
|
+
const saturation = readParam(params, "saturation", -1, 1);
|
|
89
|
+
const vibrance = readParam(params, "vibrance", -1, 1);
|
|
90
|
+
if (saturation === 0 && vibrance === 0) return color;
|
|
91
|
+
const y = luma(color);
|
|
92
|
+
const currentSat = Math.max(
|
|
93
|
+
Math.abs(color[0] - y),
|
|
94
|
+
Math.abs(color[1] - y),
|
|
95
|
+
Math.abs(color[2] - y),
|
|
96
|
+
);
|
|
97
|
+
const vibranceWeight = 1 - clampUnit(currentSat * 2);
|
|
98
|
+
const factor = clamp(1 + saturation + vibrance * vibranceWeight, 0, 2.5);
|
|
99
|
+
return color.map((channel) => clampUnit(y + (channel - y) * factor));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function applyParams(color, params) {
|
|
103
|
+
let out = applyLiftGain(color, params);
|
|
104
|
+
out = applyExposure(out, params);
|
|
105
|
+
out = applyContrast(out, params);
|
|
106
|
+
out = applyWhiteBalance(out, params);
|
|
107
|
+
out = applySplitTone(out, params);
|
|
108
|
+
out = applySaturation(out, params);
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function formatNumber(value) {
|
|
113
|
+
return clampUnit(value).toFixed(6);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function buildCube(params = {}, size = DEFAULT_SIZE) {
|
|
117
|
+
if (!Number.isInteger(size) || size < 2 || size > MAX_SIZE) {
|
|
118
|
+
throw new Error(`LUT size must be an integer from 2 to ${MAX_SIZE}`);
|
|
119
|
+
}
|
|
120
|
+
const lines = [
|
|
121
|
+
`TITLE "media-use parametric grade"`,
|
|
122
|
+
"DOMAIN_MIN 0 0 0",
|
|
123
|
+
"DOMAIN_MAX 1 1 1",
|
|
124
|
+
`LUT_3D_SIZE ${size}`,
|
|
125
|
+
];
|
|
126
|
+
const denom = size - 1;
|
|
127
|
+
for (let b = 0; b < size; b++) {
|
|
128
|
+
for (let g = 0; g < size; g++) {
|
|
129
|
+
for (let r = 0; r < size; r++) {
|
|
130
|
+
const out = applyParams([r / denom, g / denom, b / denom], params);
|
|
131
|
+
lines.push(`${formatNumber(out[0])} ${formatNumber(out[1])} ${formatNumber(out[2])}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return `${lines.join("\n")}\n`;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function paramsFromIntent(intent) {
|
|
139
|
+
const text = String(intent ?? "").toLowerCase();
|
|
140
|
+
const params = {};
|
|
141
|
+
let matched = false;
|
|
142
|
+
|
|
143
|
+
if (/\b(warm|golden|sunlit|sunny)\b/.test(text)) {
|
|
144
|
+
params.temperature = 0.18;
|
|
145
|
+
matched = true;
|
|
146
|
+
} else if (/\b(cool|blue|icy|crisp)\b/.test(text)) {
|
|
147
|
+
params.temperature = -0.16;
|
|
148
|
+
matched = true;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (/\b(cinematic|film|movie)\b/.test(text)) {
|
|
152
|
+
params.contrast = 0.08;
|
|
153
|
+
params.saturation = 0.04;
|
|
154
|
+
matched = true;
|
|
155
|
+
}
|
|
156
|
+
if (/\b(punchy|contrast|dramatic|bold)\b/.test(text)) {
|
|
157
|
+
params.contrast = Math.max(params.contrast ?? 0, 0.22);
|
|
158
|
+
matched = true;
|
|
159
|
+
}
|
|
160
|
+
if (/\b(bright|airy|lift)\b/.test(text)) {
|
|
161
|
+
params.exposure = 0.16;
|
|
162
|
+
params.shadows = 0.08;
|
|
163
|
+
matched = true;
|
|
164
|
+
}
|
|
165
|
+
if (/\b(dark|moody|low-key)\b/.test(text)) {
|
|
166
|
+
params.exposure = -0.12;
|
|
167
|
+
params.contrast = Math.max(params.contrast ?? 0, 0.12);
|
|
168
|
+
matched = true;
|
|
169
|
+
}
|
|
170
|
+
if (/\b(vibrant|saturated|colorful)\b/.test(text)) {
|
|
171
|
+
params.saturation = Math.max(params.saturation ?? 0, 0.16);
|
|
172
|
+
params.vibrance = 0.12;
|
|
173
|
+
matched = true;
|
|
174
|
+
}
|
|
175
|
+
if (/\b(muted|desaturated|washed)\b/.test(text)) {
|
|
176
|
+
params.saturation = Math.min(params.saturation ?? 0, -0.16);
|
|
177
|
+
matched = true;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return matched ? params : null;
|
|
181
|
+
}
|