hyperframes 0.8.183 → 0.8.185
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/dist/{add-HW3ZGR36.js → add-ODTNPRGG.js} +14 -14
- package/dist/{agentPromptGenerator-VIIPZCJ3.js → agentPromptGenerator-KYO5MKTW.js} +1 -1
- package/dist/{animatedGifPrep-EPLN37ZN.js → animatedGifPrep-PEP5GWOJ.js} +10 -9
- package/dist/api.js +18 -17
- package/dist/{asset-TOASKL3Z.js → asset-EZG42XPA.js} +2 -2
- package/dist/{assetCataloger-PZN5HYG2.js → assetCataloger-OHAJFCA7.js} +10 -9
- package/dist/{audio-F5OIQVJO.js → audio-65R4T74I.js} +18 -16
- package/dist/{auth-YVQLRS3T.js → auth-VP2SIZFN.js} +1 -1
- package/dist/{autoUpdate-EG4ZFW4D.js → autoUpdate-RVSUX4SS.js} +2 -2
- package/dist/{backgroundChecks-WINNQVR2.js → backgroundChecks-LEHK74NS.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-PASZTMEE.js → batchRender-3X6CL7PK.js} +5 -5
- package/dist/{beats-KGIOEBLW.js → beats-66VPQLSC.js} +6 -6
- package/dist/{benchmark-ZNY2L7HN.js → benchmark-PBJVTOJP.js} +10 -10
- package/dist/{browser-REAO7RU4.js → browser-TPL5MWGC.js} +3 -3
- package/dist/{bundleWithLocalizedFonts-OAYLYC4W.js → bundleWithLocalizedFonts-67MLTHKM.js} +2 -2
- package/dist/{capture-WOSF276U.js → capture-F3GNMRZM.js} +14 -13
- package/dist/{capture-IK6GWQDD.js → capture-YYRE7EV3.js} +2 -2
- package/dist/{captureCompositionFrame-DDZNKYRE.js → captureCompositionFrame-PXV2ISHD.js} +14 -13
- package/dist/{catalog-AKTXS7OJ.js → catalog-6SDD3OHF.js} +14 -14
- package/dist/{catch-up-O3VZMPVE.js → catch-up-CWIVA5VG.js} +4 -4
- package/dist/{check-6E46NIWI.js → check-YQ6REK2S.js} +35 -34
- package/dist/{checkBrowser-UNZHQFNH.js → checkBrowser-5XZCBRXM.js} +32 -31
- package/dist/{chunk-TOHA5NAU.js → chunk-2TAS5O4P.js} +56 -11
- package/dist/{chunk-3Q47QC46.js → chunk-37CNYTQQ.js} +2 -2
- package/dist/chunk-3NPOFC43.js +3805 -0
- package/dist/{chunk-EEP5Y5IE.js → chunk-46HEFGXJ.js} +1 -1
- package/dist/{chunk-GAGMLVCV.js → chunk-4CTNDBE3.js} +2 -2
- package/dist/{chunk-CGK4XZ2J.js → chunk-55YELV7B.js} +1 -1
- package/dist/{chunk-TJB4GAV6.js → chunk-5GUKZRQN.js} +1 -1
- package/dist/{chunk-J4L5TPLS.js → chunk-5UDRPPN2.js} +48 -6
- package/dist/{chunk-SAQYJLI6.js → chunk-6ASIXMFP.js} +1 -1
- package/dist/{chunk-GPE3WWTO.js → chunk-6GPR3G3C.js} +14 -11
- package/dist/{chunk-MIZDJVPZ.js → chunk-6RIZY7OP.js} +1 -1
- package/dist/{chunk-5CS4T6C6.js → chunk-7L37AB57.js} +1 -1
- package/dist/{chunk-VH5KESLX.js → chunk-7PS6RVWD.js} +1 -1
- package/dist/{chunk-U5YVWG5W.js → chunk-7RAY4WZP.js} +3 -3
- package/dist/{chunk-COTLNID2.js → chunk-A6QCO474.js} +5 -5
- package/dist/{chunk-YMS5FOMC.js → chunk-B2A56S5C.js} +1 -1
- package/dist/{chunk-4FQKS7BJ.js → chunk-BH7TTIPN.js} +11 -13
- package/dist/{chunk-LBWRQ4XA.js → chunk-BRAPBUPQ.js} +1 -1
- package/dist/{chunk-IC2WYONA.js → chunk-CX3USX23.js} +3 -3
- package/dist/{chunk-ITSLKUQM.js → chunk-D42NU3DZ.js} +1 -1
- package/dist/{chunk-Q6UYKWBG.js → chunk-EMAWIZ54.js} +481 -36
- package/dist/{chunk-ZFO3A3QL.js → chunk-EMSDWBG3.js} +2 -2
- package/dist/{chunk-KRFAX5JK.js → chunk-ESBMUZXZ.js} +1 -1
- package/dist/{chunk-CAHTO62O.js → chunk-F3OPUWQX.js} +7 -7
- package/dist/{chunk-R6OV4J4K.js → chunk-FX6RUJUY.js} +3 -3
- package/dist/{chunk-F6WHPHLF.js → chunk-G2UANIDX.js} +1 -1
- package/dist/{chunk-DEORFAWP.js → chunk-H5SM5PJI.js} +1 -1
- package/dist/{chunk-5OGDBU4G.js → chunk-H6UY725W.js} +2 -2
- package/dist/{chunk-K2Z5DZBS.js → chunk-HDIRZGK4.js} +1 -1
- package/dist/{chunk-TXGZZKDF.js → chunk-HHSJJFVM.js} +2 -2
- package/dist/{chunk-VDJO4DJ7.js → chunk-HXUTX5GR.js} +3 -3
- package/dist/{chunk-73LTCCZI.js → chunk-I3IH5MV5.js} +19 -23
- package/dist/{chunk-3OLIGYWN.js → chunk-I45HL3VP.js} +3 -3
- package/dist/{chunk-TYXH3EKP.js → chunk-I5JRXMCV.js} +16 -1
- package/dist/{chunk-RZXUQR42.js → chunk-I7QMXZSB.js} +2 -2
- package/dist/{chunk-XOVHO3TT.js → chunk-IDFNKFPL.js} +7 -7
- package/dist/{chunk-QX4GGPMY.js → chunk-IDGLGXPA.js} +1 -1
- package/dist/{chunk-5MBLWFLM.js → chunk-IPDKZ5IN.js} +33 -6
- package/dist/{chunk-ANR6WOC3.js → chunk-ISTRDGIX.js} +1 -1
- package/dist/{chunk-4UFJWRHG.js → chunk-IVEFOUZI.js} +211 -83
- package/dist/chunk-IZCW2NKT.js +29 -0
- package/dist/{chunk-X3IA5RYH.js → chunk-J36JVBLR.js} +9 -2
- package/dist/{chunk-Z4R35NJS.js → chunk-J5XEZ24I.js} +3 -3
- package/dist/{chunk-OH56PXFH.js → chunk-K2ZKXTVL.js} +1 -1
- package/dist/{chunk-ATMDOUNN.js → chunk-K73RJB23.js} +2 -2
- package/dist/{chunk-NZ3BE2QE.js → chunk-KQ4JEJLF.js} +10 -10
- package/dist/{chunk-VFBAKPRC.js → chunk-KROXPHXX.js} +9 -3
- package/dist/{chunk-QGOYNPQT.js → chunk-LLFQA7XF.js} +48 -5
- package/dist/chunk-LLMSX6V6.js +17 -0
- package/dist/{chunk-XR5BSEUF.js → chunk-LYKSTRAY.js} +3 -3
- package/dist/{chunk-UNOSCGBG.js → chunk-OAG47RE6.js} +1 -1
- package/dist/{chunk-O7N3A7PE.js → chunk-PHMBMOXF.js} +1 -1
- package/dist/{chunk-BP4VNTZL.js → chunk-PMMQRJDE.js} +1 -1
- package/dist/{chunk-ADDHW2FS.js → chunk-Q447CX26.js} +82 -12
- package/dist/{chunk-WT4PYV2J.js → chunk-Q47FAYYK.js} +202 -55
- package/dist/{chunk-AKFADCMS.js → chunk-RTBSA3EA.js} +1 -1
- package/dist/{chunk-VAK7A2N6.js → chunk-RUEGYANA.js} +11 -11
- package/dist/{chunk-OYLO6TYK.js → chunk-RUOG4VB7.js} +1 -1
- package/dist/{chunk-EVAQPW6O.js → chunk-SKYPMHQC.js} +4 -4
- package/dist/{chunk-B2SZZFWW.js → chunk-SQVRXHOW.js} +3 -3
- package/dist/{chunk-CJYAJ3QM.js → chunk-TAX2ZJAP.js} +24 -16
- package/dist/{chunk-GTE5WZAM.js → chunk-TOI35GN2.js} +1 -1
- package/dist/{chunk-XJHKJXT4.js → chunk-UPR3MU6Z.js} +1 -1
- package/dist/{chunk-DLC2FICN.js → chunk-WQLKDL35.js} +2 -1
- package/dist/{chunk-3BA2GP4H.js → chunk-X6L6MD5B.js} +5 -5
- package/dist/{chunk-XAQDR5Y5.js → chunk-XGHHVYC7.js} +94 -32
- package/dist/{chunk-HLBODNGW.js → chunk-XWC7CNPY.js} +1 -1
- package/dist/{clean-WNEIVBF3.js → clean-7J6ZCCGV.js} +19 -18
- package/dist/cli.js +53 -53
- package/dist/{cloud-6GSSDCJL.js → cloud-7IJCJCDD.js} +4 -4
- package/dist/{cloudrun-4NEJRE4T.js → cloudrun-UNZRIIDB.js} +7 -7
- package/dist/commands/contrast-audit.browser.js +1 -2
- package/dist/commands/layout-audit.browser.js +196 -0
- package/dist/{compare-2JWQ5ABA.js → compare-Q7VW5JZT.js} +29 -28
- package/dist/{compiler-27KQD7KW.js → compiler-KPHYGFXL.js} +6 -6
- package/dist/{component-HCRET3MH.js → component-UUBREJKN.js} +3 -3
- package/dist/{compositions-HTSQ6SUJ.js → compositions-T4FTKIDP.js} +14 -13
- package/dist/{delete-GHQ5UYM7.js → delete-WZQF2IIA.js} +3 -3
- package/dist/{deploy-I3Z3NAVA.js → deploy-JU7A3XNC.js} +1 -1
- package/dist/{deterministicFonts-JFLSSKRB.js → deterministicFonts-EGAAE7QL.js} +3 -3
- package/dist/{dist-SENYPQGW.js → dist-LM7AVHOU.js} +3 -3
- package/dist/{dist-WRDLWRMS.js → dist-ULGTPSU4.js} +8 -4
- package/dist/docs/data-attributes.md +1 -1
- package/dist/{doctor-UGFVQZHI.js → doctor-VSNGRKXJ.js} +14 -13
- package/dist/{events-YS4OVX3I.js → events-CRW2DYUT.js} +3 -3
- package/dist/{events-BLJGWMNP.js → events-E63YBUL2.js} +3 -3
- package/dist/{feedback-AZ3SJ5HF.js → feedback-OSZWVR6N.js} +9 -9
- package/dist/{ffmpeg-2AECXG7V.js → ffmpeg-JLH3Z7G7.js} +10 -9
- package/dist/{figma-DRYIJQHV.js → figma-2BQNNR53.js} +3 -3
- package/dist/fontLocalizeCli.js +13 -12
- package/dist/{get-DDEAOFPB.js → get-P2XI53QW.js} +3 -3
- package/dist/{gpuPolicy-UDJT2MQK.js → gpuPolicy-NTKQJY75.js} +10 -9
- package/dist/{grade-compare-LJKK5NSY.js → grade-compare-OYASIHIB.js} +30 -29
- package/dist/{gsapParserAcorn-7NCK2LVT.js → gsapParserAcorn-SKODXC2N.js} +2 -2
- package/dist/{help-TQBGYOID.js → help-HK6K2N4G.js} +1 -1
- package/dist/{history-5TOOCF2Y.js → history-JMTYKLXW.js} +6 -6
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +65 -65
- package/dist/hyperframes-player.global.js +1 -1
- package/dist/{info-ENI5MP4W.js → info-AW7CIVRE.js} +9 -9
- package/dist/{init-JXPXWV3G.js → init-6KIDG4LB.js} +31 -30
- package/dist/{inspect-WZNYQ5AB.js → inspect-B7BLYMRZ.js} +30 -29
- package/dist/{installer-3SGRBLJW.js → installer-ZP2LQZUQ.js} +7 -7
- package/dist/{keyframes-HEOC4CT4.js → keyframes-EQ36A5JE.js} +7 -7
- package/dist/{lambda-2VHQ4AL2.js → lambda-E6VURLIS.js} +9 -9
- package/dist/{layout-7WEUNO6T.js → layout-XYC64QQQ.js} +30 -29
- package/dist/{lint-5YMAF3L7.js → lint-V5DJYWBX.js} +9 -9
- package/dist/{lintProject-C2ONSH2U.js → lintProject-JATQKR64.js} +3 -3
- package/dist/{list-BIE3X7CO.js → list-RUGVRTVD.js} +3 -3
- package/dist/{login-YDIGJWCG.js → login-ZTKGKXGS.js} +4 -4
- package/dist/{manager-D2UV6RDQ.js → manager-JUP7PM6N.js} +11 -10
- package/dist/{media-treatment-FSKHPMWA.js → media-treatment-VIUPK4OR.js} +16 -15
- package/dist/{models-COEK6LXG.js → models-LJS2HBOZ.js} +14 -13
- package/dist/{motionShot-HYZ2ZGJQ.js → motionShot-3UAXZ7SN.js} +17 -16
- package/dist/{normalize-audio-UXR6WQ7Q.js → normalize-audio-SBYI4YIH.js} +4 -4
- package/dist/{open-OFT2GIDG.js → open-S27TUD3A.js} +14 -14
- package/dist/{parakeetRunner-4NZ3QXS3.js → parakeetRunner-ETLMLJ4L.js} +15 -14
- package/dist/{pipeline-ZKE54JMG.js → pipeline-I2M22M24.js} +11 -10
- package/dist/{play-2VG77FT6.js → play-COJU6VJK.js} +22 -21
- package/dist/{preflight-QTWDIM5C.js → preflight-FZ24NCHH.js} +11 -10
- package/dist/{present-OONXQLJG.js → present-YAHKLC5D.js} +18 -17
- package/dist/{preview-6RZJFU76.js → preview-KQOEU5YE.js} +27 -26
- package/dist/{producer-6YM3UH3B.js → producer-DTNNG4T6.js} +1 -1
- package/dist/{projectConfig-YMW4P2X6.js → projectConfig-4A76VYUP.js} +9 -9
- package/dist/{publication-SEINUAPZ.js → publication-SQPMC2W3.js} +4 -4
- package/dist/{publish-KZBTBWFO.js → publish-QUEJBGGT.js} +13 -12
- package/dist/{remove-background-BIQNMIR7.js → remove-background-FP2ETAQH.js} +12 -11
- package/dist/{render-FIH37HJA.js → render-BIFIL4U6.js} +32 -31
- package/dist/render-GQFXJWLV.js +1504 -0
- package/dist/{render-LW76HOMJ.js → render-P664SMC7.js} +5 -5
- package/dist/{render-batch-POLEEYD4.js → render-batch-ZCPMYH6Z.js} +5 -5
- package/dist/renderSetupWorker.js +3 -3
- package/dist/{resolver-O2SED3XB.js → resolver-BUC2GFZQ.js} +6 -6
- package/dist/{sherpa-HTFFFTVQ.js → sherpa-HFT6XEP6.js} +14 -13
- package/dist/skills/hyperframes/SKILL.md +52 -174
- package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/caption-skin.html +220 -0
- package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/dist/skills/hyperframes/assets/frame-presets/blockframe/FRAME.md +275 -0
- package/dist/skills/hyperframes/assets/frame-presets/blockframe/caption-skin.html +223 -0
- package/dist/skills/hyperframes/assets/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/dist/skills/hyperframes/assets/frame-presets/blue-professional/FRAME.md +307 -0
- package/dist/skills/hyperframes/assets/frame-presets/blue-professional/caption-skin.html +222 -0
- package/dist/skills/hyperframes/assets/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/dist/skills/hyperframes/assets/frame-presets/bold-poster/FRAME.md +275 -0
- package/dist/skills/hyperframes/assets/frame-presets/bold-poster/caption-skin.html +229 -0
- package/dist/skills/hyperframes/assets/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/dist/skills/hyperframes/assets/frame-presets/broadside/FRAME.md +284 -0
- package/dist/skills/hyperframes/assets/frame-presets/broadside/caption-skin.html +224 -0
- package/dist/skills/hyperframes/assets/frame-presets/broadside/frame-showcase.html +1166 -0
- package/dist/skills/hyperframes/assets/frame-presets/capsule/FRAME.md +284 -0
- package/dist/skills/hyperframes/assets/frame-presets/capsule/caption-skin.html +223 -0
- package/dist/skills/hyperframes/assets/frame-presets/capsule/frame-showcase.html +1465 -0
- package/dist/skills/hyperframes/assets/frame-presets/cartesian/FRAME.md +278 -0
- package/dist/skills/hyperframes/assets/frame-presets/cartesian/caption-skin.html +221 -0
- package/dist/skills/hyperframes/assets/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/caption-skin.html +237 -0
- package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/FRAME.md +277 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/caption-skin.html +223 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
- package/dist/skills/hyperframes/assets/frame-presets/code-editorial/frame-showcase.html +1438 -0
- package/dist/skills/hyperframes/assets/frame-presets/coral/FRAME.md +314 -0
- package/dist/skills/hyperframes/assets/frame-presets/coral/caption-skin.html +225 -0
- package/dist/skills/hyperframes/assets/frame-presets/coral/frame-showcase.html +1268 -0
- package/dist/skills/hyperframes/assets/frame-presets/creative-mode/FRAME.md +333 -0
- package/dist/skills/hyperframes/assets/frame-presets/creative-mode/caption-skin.html +226 -0
- package/dist/skills/hyperframes/assets/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/dist/skills/hyperframes/assets/frame-presets/daisy-days/FRAME.md +274 -0
- package/dist/skills/hyperframes/assets/frame-presets/daisy-days/caption-skin.html +229 -0
- package/dist/skills/hyperframes/assets/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/FRAME.md +265 -0
- package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/caption-skin.html +222 -0
- package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/dist/skills/hyperframes/references/captions.md +46 -0
- package/dist/skills/hyperframes/references/film.md +47 -0
- package/dist/skills/hyperframes/references/format.md +157 -0
- package/dist/skills/hyperframes/references/look.md +69 -0
- package/dist/skills/hyperframes/references/motion.md +94 -0
- package/dist/skills/hyperframes/references/overlays.md +39 -0
- package/dist/skills/hyperframes/references/plugin-installation.md +3 -3
- package/dist/skills/hyperframes/references/review.md +51 -0
- package/dist/skills/hyperframes/references/runtimes.md +43 -0
- package/dist/skills/hyperframes/references/skill-lifecycle.md +21 -13
- package/dist/skills/hyperframes/references/sound.md +43 -0
- package/dist/skills/hyperframes/references/spec.md +76 -0
- package/dist/skills/hyperframes/references/story.md +103 -0
- package/dist/skills/hyperframes/references/storyboard-format.md +30 -22
- package/dist/skills/hyperframes/references/storyboard.md +36 -0
- package/dist/skills/hyperframes/references/types/3d.md +25 -0
- package/dist/skills/hyperframes/references/types/character.md +20 -0
- package/dist/skills/hyperframes/references/types/data.md +19 -0
- package/dist/skills/hyperframes/references/types/explainer.md +34 -0
- package/dist/skills/hyperframes/references/types/launch.md +31 -0
- package/dist/skills/hyperframes/references/types/music.md +24 -0
- package/dist/skills/hyperframes/references/types/vertical.md +23 -0
- package/dist/skills/hyperframes/scripts/bake-basemap.mjs +324 -0
- package/dist/skills/hyperframes/scripts/lib/main-module.test.mjs +1 -6
- package/dist/skills/hyperframes/scripts/locate.mjs +228 -0
- package/dist/skills/hyperframes-cli/SKILL.md +76 -179
- package/dist/skills/hyperframes-cli/references/beats.md +1 -1
- package/dist/skills/hyperframes-cli/references/cloud.md +2 -2
- package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
- package/dist/skills/hyperframes-cli/references/conventions.md +17 -0
- package/dist/skills/hyperframes-cli/references/feedback.md +14 -0
- package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +11 -7
- package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
- package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +19 -8
- package/dist/skills/hyperframes-cli/references/preview-render.md +8 -2
- package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +8 -0
- package/dist/skills/media-use/SKILL.md +47 -91
- package/dist/skills/media-use/audio/references/bgm.md +1 -1
- package/dist/skills/media-use/audio/references/captions/authoring.md +1 -2
- package/dist/skills/media-use/audio/references/captions/motion.md +5 -5
- package/dist/skills/media-use/audio/references/tts.md +0 -3
- package/dist/skills/media-use/audio/scripts/audio.mjs +5 -6
- package/dist/skills/media-use/audio/scripts/carve.mjs +560 -0
- package/dist/skills/media-use/audio/scripts/carve.test.mjs +254 -0
- package/dist/skills/media-use/audio/scripts/extract-audio-data.py +199 -0
- package/dist/skills/media-use/references/local.md +24 -0
- package/dist/skills/media-use/references/memory.md +4 -4
- package/dist/skills/media-use/references/mixing.md +71 -0
- package/dist/skills/media-use/references/operations.md +1 -1
- package/dist/skills/media-use/scripts/compatibility.test.mjs +1 -56
- package/dist/skills/media-use/scripts/lib/prefs-store.mjs +1 -1
- package/dist/skills/media-use/scripts/lib/recipe-store.mjs +1 -1
- package/dist/skills/media-use/scripts/prefs.mjs +2 -3
- package/dist/skills/media-use/scripts/recipe.mjs +1 -3
- package/dist/{skills-J6MBGS5O.js → skills-3WEVO3NU.js} +20 -13
- package/dist/{skillsUpdateCheck-ZAXNLBF3.js → skillsUpdateCheck-BFPWFOK5.js} +3 -3
- package/dist/{snapshot-TL7TTFS6.js → snapshot-WDQ6S7CJ.js} +458 -98
- package/dist/{src-Z5H5N5T4.js → src-NPR2JZOJ.js} +15 -11
- package/dist/{src-EL6HGIS4.js → src-RZ574OKP.js} +9 -8
- package/dist/{staticProjectServer-EO7X7RAY.js → staticProjectServer-FTGTEZI4.js} +18 -17
- package/dist/studio/assets/{hyperframes-player-hz_VqxBZ.js → hyperframes-player-CoOdf435.js} +1 -1
- package/dist/studio/assets/{index-CV_ojgp5.js → index-CR85xg2x.js} +1 -1
- package/dist/studio/assets/{index-S1ceEagc.js → index-C_6rTpaB.js} +5 -5
- package/dist/studio/index.html +1 -1
- package/dist/{studio-api-CUZDC5B3.js → studio-api-TAWB7B23.js} +12 -11
- package/dist/{studioServer-EZPRV43Y.js → studioServer-HRQGJTBU.js} +49 -48
- package/dist/{telemetry-LFUVHARP.js → telemetry-QZ6HJF4W.js} +3 -3
- package/dist/templates/_shared/AGENTS.md +14 -19
- package/dist/templates/_shared/CLAUDE.md +14 -19
- package/dist/templates/blank/index.html +10 -4
- package/dist/{timeline-GSH743JE.js → timeline-IKUEW42T.js} +21 -19
- package/dist/{tokens-3ZMPSH7B.js → tokens-AUGUEWHS.js} +2 -2
- package/dist/{transcribe-4SHNDPWW.js → transcribe-7734CG3N.js} +19 -18
- package/dist/{transcribe-TV7JBZQS.js → transcribe-FWU6EMEO.js} +13 -12
- package/dist/{updateCheck-W7FTFOQF.js → updateCheck-VIPQ3FPW.js} +2 -2
- package/dist/{upgrade-7YYYNAPF.js → upgrade-4VNDQTVO.js} +2 -2
- package/dist/{urlDownloader-PQSUS2CP.js → urlDownloader-6CXL4CL7.js} +9 -8
- package/dist/{validate-GCHAEVXM.js → validate-QWCMVWID.js} +24 -23
- package/dist/{video-KGN7NJS5.js → video-245Q5WN4.js} +10 -9
- package/dist/warmCheck.js +37 -36
- package/package.json +1 -1
- package/dist/chunk-GMNHAOMJ.js +0 -3805
- package/dist/render-65K3K6SD.js +0 -719
- package/dist/skills/hyperframes/references/brief-contract.md +0 -108
- package/dist/skills/hyperframes/references/brief-format.md +0 -72
- package/dist/skills/hyperframes/references/capability-menu.md +0 -47
- package/dist/skills/hyperframes/references/frame-worker-core.md +0 -82
- package/dist/skills/hyperframes/references/intent-interview.md +0 -73
- package/dist/skills/hyperframes/references/pitch-round.md +0 -40
- package/dist/skills/hyperframes/references/production-loop.md +0 -26
- package/dist/skills/hyperframes/references/review-loop.md +0 -37
- package/dist/skills/hyperframes/references/route-briefs.md +0 -11
- package/dist/skills/hyperframes/references/routes/embedded-captions.md +0 -11
- package/dist/skills/hyperframes/references/routes/faceless-explainer.md +0 -12
- package/dist/skills/hyperframes/references/routes/general-video.md +0 -12
- package/dist/skills/hyperframes/references/routes/motion-graphics.md +0 -11
- package/dist/skills/hyperframes/references/routes/music-to-video.md +0 -12
- package/dist/skills/hyperframes/references/routes/pr-to-video.md +0 -28
- package/dist/skills/hyperframes/references/routes/product-launch-video.md +0 -13
- package/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +0 -9
- package/dist/skills/hyperframes/references/routes/slideshow.md +0 -11
- package/dist/skills/hyperframes/references/routes/talking-head-recut.md +0 -11
- package/dist/skills/hyperframes/references/script-format.md +0 -52
- package/dist/skills/hyperframes/references/subagent-dispatch.md +0 -35
- package/dist/skills/hyperframes/references/workflow-catalog.md +0 -10
- package/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +0 -176
- package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +0 -28
- package/dist/skills/media-use/audio/scripts/lib/host-audio.test.mjs +0 -106
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
EncoderInterruptedError,
|
|
9
9
|
encoderFailureError,
|
|
10
10
|
prepareAnimatedGifInputs
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-K73RJB23.js";
|
|
12
12
|
import {
|
|
13
13
|
GENERIC_FAMILIES,
|
|
14
14
|
collectFontFamilyCustomProperties,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
iterateFontFamilyDeclarations,
|
|
17
17
|
normalizeSystemFontPrimaryFamilies,
|
|
18
18
|
resolveFontFamilyDeclarationFamilies
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-LLFQA7XF.js";
|
|
20
20
|
import {
|
|
21
21
|
parseEncoderOptions
|
|
22
22
|
} from "./chunk-KLIKCX6Q.js";
|
|
@@ -154,7 +154,7 @@ import {
|
|
|
154
154
|
validateEngineConfigSnapshot,
|
|
155
155
|
verifyDiskDrawElementSamples,
|
|
156
156
|
writeCapturedFrame
|
|
157
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-I3IH5MV5.js";
|
|
158
158
|
import {
|
|
159
159
|
DISTRIBUTED_FPS,
|
|
160
160
|
HF_VFX_ATTR,
|
|
@@ -169,7 +169,7 @@ import {
|
|
|
169
169
|
parseVfxChain,
|
|
170
170
|
resolveAuthoredTimingWindow,
|
|
171
171
|
toFps
|
|
172
|
-
} from "./chunk-
|
|
172
|
+
} from "./chunk-KROXPHXX.js";
|
|
173
173
|
import {
|
|
174
174
|
assignBundledRuntimeCompositionIds,
|
|
175
175
|
buildVariablesByCompScript,
|
|
@@ -182,7 +182,7 @@ import {
|
|
|
182
182
|
isTemplateEntry,
|
|
183
183
|
parsesAsScript,
|
|
184
184
|
prepareFlattenedInnerRoot
|
|
185
|
-
} from "./chunk-
|
|
185
|
+
} from "./chunk-Q47FAYYK.js";
|
|
186
186
|
import {
|
|
187
187
|
COMPOSITION_SOURCE_URL,
|
|
188
188
|
HF_COLOR_GRADING_ATTR,
|
|
@@ -210,7 +210,7 @@ import {
|
|
|
210
210
|
shouldClampResolvedMediaDuration,
|
|
211
211
|
sourceTimeAt,
|
|
212
212
|
styleElementsFor
|
|
213
|
-
} from "./chunk-
|
|
213
|
+
} from "./chunk-3NPOFC43.js";
|
|
214
214
|
import {
|
|
215
215
|
MAX_AUDIO_GAIN
|
|
216
216
|
} from "./chunk-UJKQWGFF.js";
|
|
@@ -224,7 +224,7 @@ import {
|
|
|
224
224
|
isAspectAgnosticResolutionAlias,
|
|
225
225
|
normalizeResolutionFlag,
|
|
226
226
|
suggestMatchingPreset
|
|
227
|
-
} from "./chunk-
|
|
227
|
+
} from "./chunk-B2A56S5C.js";
|
|
228
228
|
import {
|
|
229
229
|
TRANSITIONS,
|
|
230
230
|
convertTransfer,
|
|
@@ -240,7 +240,7 @@ import {
|
|
|
240
240
|
import {
|
|
241
241
|
lintHyperframeHtml,
|
|
242
242
|
resolveReferencedStart
|
|
243
|
-
} from "./chunk-
|
|
243
|
+
} from "./chunk-Q447CX26.js";
|
|
244
244
|
import {
|
|
245
245
|
isUnresolvedAssetPlaceholder,
|
|
246
246
|
readProjectFile,
|
|
@@ -6604,7 +6604,7 @@ async function readLocalFont(absPath) {
|
|
|
6604
6604
|
return { kind: "inline", buffer: Buffer.concat(chunks, totalBytes) };
|
|
6605
6605
|
}
|
|
6606
6606
|
async function embedLocalFontFaces(html, projectDir) {
|
|
6607
|
-
const { fontToDataUri: toDataUri } = await import("./deterministicFonts-
|
|
6607
|
+
const { fontToDataUri: toDataUri } = await import("./deterministicFonts-EGAAE7QL.js");
|
|
6608
6608
|
const styleBlockRe = /<style\b[^>]*>([\s\S]*?)<\/style>/gi;
|
|
6609
6609
|
const fontFaceRe = /@font-face\s*\{([^}]*)\}/gi;
|
|
6610
6610
|
let result = html;
|
|
@@ -8623,6 +8623,7 @@ async function runCaptureStage(input) {
|
|
|
8623
8623
|
if (progress.capturedFrames === 0) reportWorkerStartup(job, progress, onProgress);
|
|
8624
8624
|
return;
|
|
8625
8625
|
}
|
|
8626
|
+
if (progress.landedFrame) input.onFrameLanded?.(progress.landedFrame);
|
|
8626
8627
|
job.framesRendered = progress.capturedFrames;
|
|
8627
8628
|
checkDiskProjection(progress.capturedFrames);
|
|
8628
8629
|
const frameProgress = progress.capturedFrames / progress.totalFrames;
|
|
@@ -9769,6 +9770,7 @@ import {
|
|
|
9769
9770
|
statSync as statSync4,
|
|
9770
9771
|
writeFileSync as writeFileSync4
|
|
9771
9772
|
} from "fs";
|
|
9773
|
+
import { readFile as readFile2 } from "fs/promises";
|
|
9772
9774
|
import { dirname as dirname7, join as join23 } from "path";
|
|
9773
9775
|
|
|
9774
9776
|
// ../producer/src/services/render/stages/gifEncodeArgs.ts
|
|
@@ -9900,6 +9902,124 @@ function startEncodeProgress(job, stage, onProgress) {
|
|
|
9900
9902
|
});
|
|
9901
9903
|
return (frames = total) => reportEncodeProgress(job, frames, total, onProgress, 75);
|
|
9902
9904
|
}
|
|
9905
|
+
function resolveEngineConfig(input) {
|
|
9906
|
+
return input.engineConfig ?? input.job.config.producerConfig ?? resolveConfig();
|
|
9907
|
+
}
|
|
9908
|
+
function videoEncoderOptions(input, engineCfg) {
|
|
9909
|
+
const { job, preset } = input;
|
|
9910
|
+
return {
|
|
9911
|
+
fps: job.config.fps,
|
|
9912
|
+
width: input.width,
|
|
9913
|
+
height: input.height,
|
|
9914
|
+
codec: preset.codec,
|
|
9915
|
+
preset: preset.preset,
|
|
9916
|
+
quality: input.effectiveQuality,
|
|
9917
|
+
bitrate: input.effectiveBitrate,
|
|
9918
|
+
pixelFormat: preset.pixelFormat,
|
|
9919
|
+
vp9CpuUsed: engineCfg.vp9CpuUsed,
|
|
9920
|
+
useGpu: job.config.useGpu,
|
|
9921
|
+
hdr: preset.hdr,
|
|
9922
|
+
// Distributed chunk renders pass these so the encoder writes closed-GOP
|
|
9923
|
+
// keyframes that survive `-f concat -c copy` at assemble time. In-process
|
|
9924
|
+
// renders leave both undefined → preserves the existing open-GOP output.
|
|
9925
|
+
lockGopForChunkConcat: input.lockGopForChunkConcat === true,
|
|
9926
|
+
gopSize: input.gopSize
|
|
9927
|
+
};
|
|
9928
|
+
}
|
|
9929
|
+
function canEncodeWhileCapturing(input, workerCount, cpuCount) {
|
|
9930
|
+
return workerCount > 1 && workerCount < cpuCount && !input.isPngSequence && !input.isGif && !input.enableChunkedEncode && input.preset.codec === "h264" && !input.preset.hdr && input.job.config.useGpu !== true && input.captureImageFormat === "jpeg" && input.lockGopForChunkConcat !== true;
|
|
9931
|
+
}
|
|
9932
|
+
async function readLandedFrame(workerPath, mergedPath) {
|
|
9933
|
+
if (workerPath !== void 0) {
|
|
9934
|
+
try {
|
|
9935
|
+
return await readFile2(workerPath);
|
|
9936
|
+
} catch (error) {
|
|
9937
|
+
if (error.code !== "ENOENT") throw error;
|
|
9938
|
+
}
|
|
9939
|
+
}
|
|
9940
|
+
return readFile2(mergedPath);
|
|
9941
|
+
}
|
|
9942
|
+
function encodeWhileCapturing(input, totalFrames) {
|
|
9943
|
+
const engineCfg = resolveEngineConfig(input);
|
|
9944
|
+
const stop = new AbortController();
|
|
9945
|
+
const signal = input.abortSignal ? AbortSignal.any([input.abortSignal, stop.signal]) : stop.signal;
|
|
9946
|
+
const landed = /* @__PURE__ */ new Map();
|
|
9947
|
+
let captureDone = false;
|
|
9948
|
+
let framesFed = 0;
|
|
9949
|
+
let wake = null;
|
|
9950
|
+
const nudge = () => {
|
|
9951
|
+
wake?.();
|
|
9952
|
+
wake = null;
|
|
9953
|
+
};
|
|
9954
|
+
signal.addEventListener("abort", nudge, { once: true });
|
|
9955
|
+
let reportFed = null;
|
|
9956
|
+
const encoder = spawnStreamingEncoder(
|
|
9957
|
+
input.videoOnlyPath,
|
|
9958
|
+
{ ...videoEncoderOptions(input, engineCfg), imageFormat: "jpeg" },
|
|
9959
|
+
signal,
|
|
9960
|
+
engineCfg
|
|
9961
|
+
);
|
|
9962
|
+
const fed = (async () => {
|
|
9963
|
+
const stream = await encoder;
|
|
9964
|
+
for (let next = 0; next < totalFrames; next++) {
|
|
9965
|
+
while (!landed.has(next) && !captureDone && !signal.aborted) {
|
|
9966
|
+
await new Promise((resolve11) => wake = resolve11);
|
|
9967
|
+
}
|
|
9968
|
+
if (signal.aborted) return;
|
|
9969
|
+
const mergedPath = join23(input.framesDir, formatCaptureFrameName(next, "jpg"));
|
|
9970
|
+
const frame = await readLandedFrame(landed.get(next), mergedPath);
|
|
9971
|
+
landed.delete(next);
|
|
9972
|
+
if (!await stream.writeFrame(frame)) {
|
|
9973
|
+
throw new Error(stream.getExitError() ?? "encoder exited before the last frame");
|
|
9974
|
+
}
|
|
9975
|
+
framesFed++;
|
|
9976
|
+
reportFed?.(framesFed);
|
|
9977
|
+
}
|
|
9978
|
+
})().then(
|
|
9979
|
+
() => void 0,
|
|
9980
|
+
(error) => error ?? new Error("encode failed")
|
|
9981
|
+
);
|
|
9982
|
+
const closeEncoder = async () => (await encoder.catch(() => null))?.close();
|
|
9983
|
+
return {
|
|
9984
|
+
onFrameLanded: (frame) => {
|
|
9985
|
+
landed.set(frame.index, frame.path);
|
|
9986
|
+
nudge();
|
|
9987
|
+
},
|
|
9988
|
+
finish: async () => {
|
|
9989
|
+
const start = Date.now();
|
|
9990
|
+
captureDone = true;
|
|
9991
|
+
input.log.info("[Render] Encoded frames while capturing", {
|
|
9992
|
+
framesFed,
|
|
9993
|
+
totalFrames
|
|
9994
|
+
});
|
|
9995
|
+
const encoded = startEncodeProgress(input.job, "Encoding video", input.onProgress);
|
|
9996
|
+
reportFed = encoded;
|
|
9997
|
+
nudge();
|
|
9998
|
+
const failure = await fed;
|
|
9999
|
+
const result = await closeEncoder();
|
|
10000
|
+
input.assertNotAborted();
|
|
10001
|
+
if (failure === void 0 && result?.success) {
|
|
10002
|
+
encoded();
|
|
10003
|
+
return { encodeMs: Date.now() - start };
|
|
10004
|
+
}
|
|
10005
|
+
input.log.warn(
|
|
10006
|
+
"[Render] Encoding while capturing failed; encoding the frames after capture",
|
|
10007
|
+
{
|
|
10008
|
+
error: String(failure ?? result?.error)
|
|
10009
|
+
}
|
|
10010
|
+
);
|
|
10011
|
+
return runEncodeStage(input);
|
|
10012
|
+
},
|
|
10013
|
+
abort: async () => {
|
|
10014
|
+
stop.abort();
|
|
10015
|
+
await fed;
|
|
10016
|
+
await closeEncoder();
|
|
10017
|
+
},
|
|
10018
|
+
get framesFed() {
|
|
10019
|
+
return framesFed;
|
|
10020
|
+
}
|
|
10021
|
+
};
|
|
10022
|
+
}
|
|
9903
10023
|
async function runEncodeStage(input) {
|
|
9904
10024
|
const {
|
|
9905
10025
|
job,
|
|
@@ -9907,16 +10027,11 @@ async function runEncodeStage(input) {
|
|
|
9907
10027
|
outputPath,
|
|
9908
10028
|
framesDir,
|
|
9909
10029
|
videoOnlyPath,
|
|
9910
|
-
width,
|
|
9911
|
-
height,
|
|
9912
10030
|
needsAlpha,
|
|
9913
10031
|
hasAudio,
|
|
9914
10032
|
audioOutputPath,
|
|
9915
10033
|
isPngSequence,
|
|
9916
10034
|
isGif,
|
|
9917
|
-
preset,
|
|
9918
|
-
effectiveQuality,
|
|
9919
|
-
effectiveBitrate,
|
|
9920
10035
|
enableChunkedEncode,
|
|
9921
10036
|
chunkedEncodeSize,
|
|
9922
10037
|
abortSignal,
|
|
@@ -9946,7 +10061,7 @@ async function runEncodeStage(input) {
|
|
|
9946
10061
|
encoded();
|
|
9947
10062
|
return { encodeMs: Date.now() - stage5Start };
|
|
9948
10063
|
}
|
|
9949
|
-
const engineCfg = input
|
|
10064
|
+
const engineCfg = resolveEngineConfig(input);
|
|
9950
10065
|
if (isGif) {
|
|
9951
10066
|
const encoded = startEncodeProgress(job, "Encoding GIF", onProgress);
|
|
9952
10067
|
if (hasAudio) {
|
|
@@ -9976,24 +10091,7 @@ async function runEncodeStage(input) {
|
|
|
9976
10091
|
const videoEngineCfg = scaledEncodeTimeout > engineCfg.ffmpegEncodeTimeout ? { ...engineCfg, ffmpegEncodeTimeout: scaledEncodeTimeout } : engineCfg;
|
|
9977
10092
|
const frameExt = frameFileExtension(input.captureImageFormat);
|
|
9978
10093
|
const framePattern = `frame_%06d.${frameExt}`;
|
|
9979
|
-
const encoderOpts =
|
|
9980
|
-
fps: job.config.fps,
|
|
9981
|
-
width,
|
|
9982
|
-
height,
|
|
9983
|
-
codec: preset.codec,
|
|
9984
|
-
preset: preset.preset,
|
|
9985
|
-
quality: effectiveQuality,
|
|
9986
|
-
bitrate: effectiveBitrate,
|
|
9987
|
-
pixelFormat: preset.pixelFormat,
|
|
9988
|
-
vp9CpuUsed: engineCfg.vp9CpuUsed,
|
|
9989
|
-
useGpu: job.config.useGpu,
|
|
9990
|
-
hdr: preset.hdr,
|
|
9991
|
-
// Distributed chunk renders pass these so the encoder writes closed-GOP
|
|
9992
|
-
// keyframes that survive `-f concat -c copy` at assemble time. In-process
|
|
9993
|
-
// renders leave both undefined → preserves the existing open-GOP output.
|
|
9994
|
-
lockGopForChunkConcat: input.lockGopForChunkConcat === true,
|
|
9995
|
-
gopSize: input.gopSize
|
|
9996
|
-
};
|
|
10094
|
+
const encoderOpts = videoEncoderOptions(input, engineCfg);
|
|
9997
10095
|
const encodeResult = enableChunkedEncode ? await encodeFramesChunkedConcat(
|
|
9998
10096
|
framesDir,
|
|
9999
10097
|
framePattern,
|
|
@@ -10259,7 +10357,6 @@ async function enforceAacTruePeak(input) {
|
|
|
10259
10357
|
try {
|
|
10260
10358
|
scratchDir = mkdtempSync3(join24(dirname8(input.audioPath), ".true-peak-"));
|
|
10261
10359
|
const correctedPath = join24(scratchDir, "audio.m4a");
|
|
10262
|
-
const correctionTargetDbfs = AAC_DELIVERY_TRUE_PEAK_DBFS - AAC_TRUE_PEAK_CORRECTION_HEADROOM_DB;
|
|
10263
10360
|
const measurements = [];
|
|
10264
10361
|
let attenuationDb = 0;
|
|
10265
10362
|
let measuredPath = input.audioPath;
|
|
@@ -10277,7 +10374,8 @@ async function enforceAacTruePeak(input) {
|
|
|
10277
10374
|
return { success: true, loweredDb: Number((-attenuationDb).toFixed(2)) };
|
|
10278
10375
|
}
|
|
10279
10376
|
if (pass === MAX_TRUE_PEAK_CORRECTION_PASSES) break;
|
|
10280
|
-
|
|
10377
|
+
const headroomDb = AAC_TRUE_PEAK_CORRECTION_HEADROOM_DB * 2 ** pass;
|
|
10378
|
+
attenuationDb += AAC_DELIVERY_TRUE_PEAK_DBFS - headroomDb - truePeakDbfs;
|
|
10281
10379
|
const result = await input.encode(
|
|
10282
10380
|
input.audioPath,
|
|
10283
10381
|
correctedPath,
|
|
@@ -12901,6 +12999,34 @@ async function executeRenderPipeline(input) {
|
|
|
12901
12999
|
throw new Error(`Disk capture requires sdr_disk plan; got ${capturePlan.kind}`);
|
|
12902
13000
|
}
|
|
12903
13001
|
resetCaptureAttemptProgress(job);
|
|
13002
|
+
const encodeInput = {
|
|
13003
|
+
job,
|
|
13004
|
+
log,
|
|
13005
|
+
outputPath: stagedOutputPath,
|
|
13006
|
+
framesDir,
|
|
13007
|
+
videoOnlyPath,
|
|
13008
|
+
width,
|
|
13009
|
+
height,
|
|
13010
|
+
needsAlpha,
|
|
13011
|
+
captureImageFormat: captureOptions.format ?? "jpeg",
|
|
13012
|
+
hasAudio,
|
|
13013
|
+
audioOutputPath,
|
|
13014
|
+
isPngSequence,
|
|
13015
|
+
isGif,
|
|
13016
|
+
preset,
|
|
13017
|
+
effectiveQuality,
|
|
13018
|
+
effectiveBitrate,
|
|
13019
|
+
enableChunkedEncode,
|
|
13020
|
+
chunkedEncodeSize,
|
|
13021
|
+
engineConfig: cfg,
|
|
13022
|
+
// Same value the streaming encoder above spreads — the disk and
|
|
13023
|
+
// chunked-concat encoders need an identical GOP lock for HLS.
|
|
13024
|
+
...hlsEncoderGopLock,
|
|
13025
|
+
abortSignal: executionSignal,
|
|
13026
|
+
assertNotAborted,
|
|
13027
|
+
onProgress
|
|
13028
|
+
};
|
|
13029
|
+
const overlap = !cfg.useDrawElement && workerSizing !== void 0 && canEncodeWhileCapturing(encodeInput, capturePlan.workerCount, workerSizing.cpuCount) ? encodeWhileCapturing(encodeInput, totalFrames) : null;
|
|
12904
13030
|
const captureFrameStart = Date.now();
|
|
12905
13031
|
const invokeDiskCapture = (diskPlan) => observeRenderStage(
|
|
12906
13032
|
observability,
|
|
@@ -12922,13 +13048,15 @@ async function executeRenderPipeline(input) {
|
|
|
12922
13048
|
createRenderVideoFrameInjector,
|
|
12923
13049
|
abortSignal: executionSignal,
|
|
12924
13050
|
assertNotAborted,
|
|
12925
|
-
onProgress
|
|
13051
|
+
onProgress,
|
|
13052
|
+
onFrameLanded: (frame) => overlap?.onFrameLanded(frame)
|
|
12926
13053
|
})
|
|
12927
13054
|
);
|
|
12928
13055
|
let captureRes;
|
|
12929
13056
|
try {
|
|
12930
13057
|
captureRes = await invokeDiskCapture(capturePlan);
|
|
12931
13058
|
} catch (err) {
|
|
13059
|
+
await overlap?.abort();
|
|
12932
13060
|
if (!isDrawElementVerificationError(err) && !isDrawElementCaptureError(err) || err instanceof RenderCancelledError || executionSignal?.aborted === true) {
|
|
12933
13061
|
throw err;
|
|
12934
13062
|
}
|
|
@@ -12997,33 +13125,7 @@ async function executeRenderPipeline(input) {
|
|
|
12997
13125
|
isGif,
|
|
12998
13126
|
chunkedEncode: enableChunkedEncode
|
|
12999
13127
|
}),
|
|
13000
|
-
() => runEncodeStage(
|
|
13001
|
-
job,
|
|
13002
|
-
log,
|
|
13003
|
-
outputPath: stagedOutputPath,
|
|
13004
|
-
framesDir,
|
|
13005
|
-
videoOnlyPath,
|
|
13006
|
-
width,
|
|
13007
|
-
height,
|
|
13008
|
-
needsAlpha,
|
|
13009
|
-
captureImageFormat: captureOptions.format ?? "jpeg",
|
|
13010
|
-
hasAudio,
|
|
13011
|
-
audioOutputPath,
|
|
13012
|
-
isPngSequence,
|
|
13013
|
-
isGif,
|
|
13014
|
-
preset,
|
|
13015
|
-
effectiveQuality,
|
|
13016
|
-
effectiveBitrate,
|
|
13017
|
-
enableChunkedEncode,
|
|
13018
|
-
chunkedEncodeSize,
|
|
13019
|
-
engineConfig: cfg,
|
|
13020
|
-
// Same value the streaming encoder above spreads — the disk and
|
|
13021
|
-
// chunked-concat encoders need an identical GOP lock for HLS.
|
|
13022
|
-
...hlsEncoderGopLock,
|
|
13023
|
-
abortSignal: executionSignal,
|
|
13024
|
-
assertNotAborted,
|
|
13025
|
-
onProgress
|
|
13026
|
-
})
|
|
13128
|
+
() => overlap ? overlap.finish() : runEncodeStage(encodeInput)
|
|
13027
13129
|
);
|
|
13028
13130
|
perfStages.encodeMs = encodeRes.encodeMs;
|
|
13029
13131
|
}
|
|
@@ -13585,7 +13687,14 @@ var RenderChunkValidationError = class extends Error {
|
|
|
13585
13687
|
}
|
|
13586
13688
|
};
|
|
13587
13689
|
function createChunkVideoFrameInjectorFactory(frameLookup) {
|
|
13588
|
-
return () => createVideoFrameInjector(frameLookup);
|
|
13690
|
+
if (!(frameLookup instanceof Promise)) return () => createVideoFrameInjector(frameLookup);
|
|
13691
|
+
return () => {
|
|
13692
|
+
let hook;
|
|
13693
|
+
return async (page, time, heldVideoTime) => {
|
|
13694
|
+
hook ??= createVideoFrameInjector(await frameLookup);
|
|
13695
|
+
await hook?.(page, time, heldVideoTime);
|
|
13696
|
+
};
|
|
13697
|
+
};
|
|
13589
13698
|
}
|
|
13590
13699
|
function frameNumberFromFileName(name) {
|
|
13591
13700
|
const match = /(\d+)(?=\.[^.]+$)/.exec(name);
|
|
@@ -15361,7 +15470,7 @@ async function compilePlanComposition(projectDir, config, planDir, options) {
|
|
|
15361
15470
|
if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
|
|
15362
15471
|
if (probeResult.probeSession) {
|
|
15363
15472
|
try {
|
|
15364
|
-
const { closeCaptureSession: closeCaptureSession2 } = await import("./src-
|
|
15473
|
+
const { closeCaptureSession: closeCaptureSession2 } = await import("./src-RZ574OKP.js");
|
|
15365
15474
|
await closeCaptureSession2(probeResult.probeSession);
|
|
15366
15475
|
} catch (err) {
|
|
15367
15476
|
log.warn("[plan] probe session close failed", {
|
|
@@ -16576,9 +16685,6 @@ function validateOutputResolutionOverride(body) {
|
|
|
16576
16685
|
if (body.outputResolution.trim().length > 0 && normalized === void 0) {
|
|
16577
16686
|
return `Invalid outputResolution "${body.outputResolution}". Must be one of: landscape, portrait, landscape-4k, portrait-4k, square, square-4k (aliases: 1080p, 4k, \u2026).`;
|
|
16578
16687
|
}
|
|
16579
|
-
if (normalized !== void 0 && (body.format === "webm" || body.format === "mov")) {
|
|
16580
|
-
return `outputResolution is not supported with format "${body.format}": the alpha (webm/mov) capture path can't supersample. Use format "mp4", or omit outputResolution to render at the composition's native dimensions.`;
|
|
16581
|
-
}
|
|
16582
16688
|
return void 0;
|
|
16583
16689
|
}
|
|
16584
16690
|
function prepareProjectDirectory(projectDir, options) {
|
|
@@ -17024,7 +17130,7 @@ function startServer(options = {}) {
|
|
|
17024
17130
|
});
|
|
17025
17131
|
async function shutdown(signal) {
|
|
17026
17132
|
log.info(`Received ${signal}, shutting down`);
|
|
17027
|
-
const { drainBrowserPool } = await import("./src-
|
|
17133
|
+
const { drainBrowserPool } = await import("./src-RZ574OKP.js");
|
|
17028
17134
|
await drainBrowserPool().catch(() => {
|
|
17029
17135
|
});
|
|
17030
17136
|
const handle = await Promise.race([
|
|
@@ -18266,6 +18372,12 @@ function validatePlanVideosForChunk(value) {
|
|
|
18266
18372
|
);
|
|
18267
18373
|
}
|
|
18268
18374
|
}
|
|
18375
|
+
var MIN_FRAMES_PER_CHUNK_BROWSER = 20;
|
|
18376
|
+
function resolveChunkCaptureWorkers(framesInChunk, machineSized, maxCaptureWorkers) {
|
|
18377
|
+
if (maxCaptureWorkers === void 0) return machineSized;
|
|
18378
|
+
const byFrames = Math.floor(framesInChunk / MIN_FRAMES_PER_CHUNK_BROWSER);
|
|
18379
|
+
return Math.max(machineSized, Math.floor(Math.min(maxCaptureWorkers, byFrames)));
|
|
18380
|
+
}
|
|
18269
18381
|
function resolveChunkFrameRange(slice, chunkIndex, frameRange) {
|
|
18270
18382
|
if (frameRange === void 0) return { startFrame: slice.startFrame, endFrame: slice.endFrame };
|
|
18271
18383
|
const { startFrame, endFrame } = frameRange;
|
|
@@ -18502,7 +18614,11 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18502
18614
|
deferredVideos.filter((video) => remoteVideoIds.has(video.videoId))
|
|
18503
18615
|
)
|
|
18504
18616
|
});
|
|
18505
|
-
const chunkWorkerCount =
|
|
18617
|
+
const chunkWorkerCount = resolveChunkCaptureWorkers(
|
|
18618
|
+
framesInChunk,
|
|
18619
|
+
calculateOptimalWorkers(framesInChunk, void 0, cfg),
|
|
18620
|
+
options?.maxCaptureWorkers
|
|
18621
|
+
);
|
|
18506
18622
|
let session = null;
|
|
18507
18623
|
let outputKind;
|
|
18508
18624
|
let framesEncoded = 0;
|
|
@@ -18514,6 +18630,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18514
18630
|
const captureAttempts = [];
|
|
18515
18631
|
let forceScreenshotForChunk = encoder.forceScreenshot;
|
|
18516
18632
|
let shownBoxes;
|
|
18633
|
+
let extraction;
|
|
18517
18634
|
try {
|
|
18518
18635
|
if (chunkWorkerCount === 1 || !forceScreenshotForChunk) {
|
|
18519
18636
|
const bootStarted = Date.now();
|
|
@@ -18570,7 +18687,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18570
18687
|
session = null;
|
|
18571
18688
|
}
|
|
18572
18689
|
}
|
|
18573
|
-
const deferredVideoFrames = planVideos ?
|
|
18690
|
+
const deferredVideoFrames = planVideos ? extractDeferredVideoFramesForChunk({
|
|
18574
18691
|
planDir,
|
|
18575
18692
|
planVideos,
|
|
18576
18693
|
frames: chunkFrameNumbers,
|
|
@@ -18579,19 +18696,24 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18579
18696
|
cfg,
|
|
18580
18697
|
remoteSources,
|
|
18581
18698
|
shownBoxes
|
|
18582
|
-
}) : [];
|
|
18583
|
-
|
|
18584
|
-
|
|
18585
|
-
|
|
18586
|
-
|
|
18587
|
-
|
|
18588
|
-
|
|
18589
|
-
|
|
18590
|
-
|
|
18591
|
-
|
|
18592
|
-
|
|
18593
|
-
|
|
18699
|
+
}) : Promise.resolve([]);
|
|
18700
|
+
extraction = deferredVideoFrames;
|
|
18701
|
+
const videoFrameLookup = planVideos && planVideos.extracted.length > 0 ? deferredVideoFrames.then(
|
|
18702
|
+
(deferred) => createFrameLookupTable(
|
|
18703
|
+
planVideos.videos,
|
|
18704
|
+
[
|
|
18705
|
+
...rebuildExtractedFramesFromPlanDir(
|
|
18706
|
+
planDir,
|
|
18707
|
+
planVideos.extracted.filter((video) => !video.deferredRange),
|
|
18708
|
+
v2Manifest === null ? "dense-v1" : "sparse-v2"
|
|
18709
|
+
),
|
|
18710
|
+
...deferred
|
|
18711
|
+
],
|
|
18712
|
+
resolveRenderFpsConfig(job.config.fps).value
|
|
18713
|
+
)
|
|
18594
18714
|
) : null;
|
|
18715
|
+
videoFrameLookup?.catch(() => {
|
|
18716
|
+
});
|
|
18595
18717
|
const createChunkVideoFrameInjector = createChunkVideoFrameInjectorFactory(videoFrameLookup);
|
|
18596
18718
|
const captureStarted = Date.now();
|
|
18597
18719
|
captureMode = await runCaptureWithScreenshotFallback({
|
|
@@ -18674,7 +18796,11 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18674
18796
|
}
|
|
18675
18797
|
);
|
|
18676
18798
|
}
|
|
18799
|
+
}).catch(async (captureError) => {
|
|
18800
|
+
await deferredVideoFrames;
|
|
18801
|
+
throw captureError;
|
|
18677
18802
|
});
|
|
18803
|
+
await deferredVideoFrames;
|
|
18678
18804
|
captureStageMs = Date.now() - captureStarted;
|
|
18679
18805
|
applyRenderWarningPolicy(
|
|
18680
18806
|
job,
|
|
@@ -18753,6 +18879,8 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath, options) {
|
|
|
18753
18879
|
}
|
|
18754
18880
|
encodeStageMs = Date.now() - encodeStarted;
|
|
18755
18881
|
} finally {
|
|
18882
|
+
await extraction?.catch(() => {
|
|
18883
|
+
});
|
|
18756
18884
|
if (session) {
|
|
18757
18885
|
try {
|
|
18758
18886
|
await closeCaptureSession(session);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createRequire as __hf_createRequire } from "node:module";
|
|
2
|
+
import { fileURLToPath as __hf_fileURLToPath } from "node:url";
|
|
3
|
+
import { dirname as __hf_dirname } from "node:path";
|
|
4
|
+
var require = __hf_createRequire(import.meta.url);
|
|
5
|
+
var __filename = __hf_fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = __hf_dirname(__filename);
|
|
7
|
+
|
|
8
|
+
// ../parsers/dist/mediaAlpha.js
|
|
9
|
+
var ALPHA_PIX_FMT_RE = /^(?:yuva|rgba|argb|bgra|abgr|gbrap|ya|ayuv)/i;
|
|
10
|
+
function pixelFormatHasAlpha(pixFmt) {
|
|
11
|
+
return pixFmt !== void 0 && ALPHA_PIX_FMT_RE.test(pixFmt);
|
|
12
|
+
}
|
|
13
|
+
function videoStreamHasAlpha(stream) {
|
|
14
|
+
if (pixelFormatHasAlpha(stream.pix_fmt)) return true;
|
|
15
|
+
return Object.entries(stream.tags ?? {}).some(
|
|
16
|
+
([key, value]) => key.toLowerCase() === "alpha_mode" && value === "1"
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
function alphaDecoderFor(codecName) {
|
|
20
|
+
const codec = codecName?.toLowerCase();
|
|
21
|
+
if (codec === "vp9") return "libvpx-vp9";
|
|
22
|
+
if (codec === "vp8") return "libvpx";
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
videoStreamHasAlpha,
|
|
28
|
+
alphaDecoderFor
|
|
29
|
+
};
|
|
@@ -112,12 +112,18 @@ function wrapWith401Retry(client) {
|
|
|
112
112
|
|
|
113
113
|
// src/cloud/errors.ts
|
|
114
114
|
var ERROR_CODE_HINTS = {
|
|
115
|
-
hyperframes_project_too_large: "The zip exceeded the 200 MB limit. Run `hyperframes cloud render --dry-run
|
|
115
|
+
hyperframes_project_too_large: "The zip exceeded the 200 MB limit. Run `hyperframes cloud render --dry-run` to see what stays in it, then add only verified-unneeded paths to `.hyperframesignore`.",
|
|
116
116
|
hyperframes_render_not_found: "The render_id no longer exists \u2014 either soft-deleted or never created.",
|
|
117
117
|
invalid_parameter: "Check the listed parameter against `hyperframes cloud render --help` for the accepted values.",
|
|
118
118
|
authentication_failed: "Run `hyperframes auth status` to confirm your credential; `hyperframes auth login` to re-auth.",
|
|
119
119
|
rate_limit_exceeded: "Retry after the duration in the Retry-After header."
|
|
120
120
|
};
|
|
121
|
+
function hintCode(err) {
|
|
122
|
+
if (err.code === "invalid_parameter" && /^File too large\b/.test(err.message)) {
|
|
123
|
+
return "hyperframes_project_too_large";
|
|
124
|
+
}
|
|
125
|
+
return err.code;
|
|
126
|
+
}
|
|
121
127
|
function reportApiError(stage, err, options = {}) {
|
|
122
128
|
const hints = { ...ERROR_CODE_HINTS, ...options.extraHints };
|
|
123
129
|
if (err instanceof HyperframesApiError) {
|
|
@@ -125,7 +131,8 @@ function reportApiError(stage, err, options = {}) {
|
|
|
125
131
|
errorBox("Not found", options.notFound);
|
|
126
132
|
failCommand();
|
|
127
133
|
}
|
|
128
|
-
const
|
|
134
|
+
const code = hintCode(err);
|
|
135
|
+
const hint = code ? hints[code] : void 0;
|
|
129
136
|
const title = `${stage} (HTTP ${err.status})`;
|
|
130
137
|
if (hint) {
|
|
131
138
|
errorBox(title, err.message, hint);
|
|
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
getMimeType,
|
|
9
9
|
injectMediaCodecMapIntoHtml
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KQ4JEJLF.js";
|
|
11
11
|
import {
|
|
12
12
|
PROXY_VARIANT_CONFIG,
|
|
13
13
|
ProxyCapacityError,
|
|
@@ -18,10 +18,10 @@ import {
|
|
|
18
18
|
recordProxyRequest,
|
|
19
19
|
resolveProxy,
|
|
20
20
|
resolveProxyVariantRequest
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-6GPR3G3C.js";
|
|
22
22
|
import {
|
|
23
23
|
resolveAutoProxy
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-HDIRZGK4.js";
|
|
25
25
|
import {
|
|
26
26
|
decodeWellFormedEscapes
|
|
27
27
|
} from "./chunk-BSQ7XANM.js";
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
DEFAULT_VP9_CPU_USED,
|
|
9
9
|
isHttpUrl,
|
|
10
10
|
runFfmpeg
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-I3IH5MV5.js";
|
|
12
12
|
import {
|
|
13
13
|
parseAnimatedGifMetadata
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-KROXPHXX.js";
|
|
15
15
|
import {
|
|
16
16
|
parseHTML
|
|
17
17
|
} from "./chunk-SDYDNHEE.js";
|