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.
Files changed (314) hide show
  1. package/dist/{add-HW3ZGR36.js → add-ODTNPRGG.js} +14 -14
  2. package/dist/{agentPromptGenerator-VIIPZCJ3.js → agentPromptGenerator-KYO5MKTW.js} +1 -1
  3. package/dist/{animatedGifPrep-EPLN37ZN.js → animatedGifPrep-PEP5GWOJ.js} +10 -9
  4. package/dist/api.js +18 -17
  5. package/dist/{asset-TOASKL3Z.js → asset-EZG42XPA.js} +2 -2
  6. package/dist/{assetCataloger-PZN5HYG2.js → assetCataloger-OHAJFCA7.js} +10 -9
  7. package/dist/{audio-F5OIQVJO.js → audio-65R4T74I.js} +18 -16
  8. package/dist/{auth-YVQLRS3T.js → auth-VP2SIZFN.js} +1 -1
  9. package/dist/{autoUpdate-EG4ZFW4D.js → autoUpdate-RVSUX4SS.js} +2 -2
  10. package/dist/{backgroundChecks-WINNQVR2.js → backgroundChecks-LEHK74NS.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-PASZTMEE.js → batchRender-3X6CL7PK.js} +5 -5
  13. package/dist/{beats-KGIOEBLW.js → beats-66VPQLSC.js} +6 -6
  14. package/dist/{benchmark-ZNY2L7HN.js → benchmark-PBJVTOJP.js} +10 -10
  15. package/dist/{browser-REAO7RU4.js → browser-TPL5MWGC.js} +3 -3
  16. package/dist/{bundleWithLocalizedFonts-OAYLYC4W.js → bundleWithLocalizedFonts-67MLTHKM.js} +2 -2
  17. package/dist/{capture-WOSF276U.js → capture-F3GNMRZM.js} +14 -13
  18. package/dist/{capture-IK6GWQDD.js → capture-YYRE7EV3.js} +2 -2
  19. package/dist/{captureCompositionFrame-DDZNKYRE.js → captureCompositionFrame-PXV2ISHD.js} +14 -13
  20. package/dist/{catalog-AKTXS7OJ.js → catalog-6SDD3OHF.js} +14 -14
  21. package/dist/{catch-up-O3VZMPVE.js → catch-up-CWIVA5VG.js} +4 -4
  22. package/dist/{check-6E46NIWI.js → check-YQ6REK2S.js} +35 -34
  23. package/dist/{checkBrowser-UNZHQFNH.js → checkBrowser-5XZCBRXM.js} +32 -31
  24. package/dist/{chunk-TOHA5NAU.js → chunk-2TAS5O4P.js} +56 -11
  25. package/dist/{chunk-3Q47QC46.js → chunk-37CNYTQQ.js} +2 -2
  26. package/dist/chunk-3NPOFC43.js +3805 -0
  27. package/dist/{chunk-EEP5Y5IE.js → chunk-46HEFGXJ.js} +1 -1
  28. package/dist/{chunk-GAGMLVCV.js → chunk-4CTNDBE3.js} +2 -2
  29. package/dist/{chunk-CGK4XZ2J.js → chunk-55YELV7B.js} +1 -1
  30. package/dist/{chunk-TJB4GAV6.js → chunk-5GUKZRQN.js} +1 -1
  31. package/dist/{chunk-J4L5TPLS.js → chunk-5UDRPPN2.js} +48 -6
  32. package/dist/{chunk-SAQYJLI6.js → chunk-6ASIXMFP.js} +1 -1
  33. package/dist/{chunk-GPE3WWTO.js → chunk-6GPR3G3C.js} +14 -11
  34. package/dist/{chunk-MIZDJVPZ.js → chunk-6RIZY7OP.js} +1 -1
  35. package/dist/{chunk-5CS4T6C6.js → chunk-7L37AB57.js} +1 -1
  36. package/dist/{chunk-VH5KESLX.js → chunk-7PS6RVWD.js} +1 -1
  37. package/dist/{chunk-U5YVWG5W.js → chunk-7RAY4WZP.js} +3 -3
  38. package/dist/{chunk-COTLNID2.js → chunk-A6QCO474.js} +5 -5
  39. package/dist/{chunk-YMS5FOMC.js → chunk-B2A56S5C.js} +1 -1
  40. package/dist/{chunk-4FQKS7BJ.js → chunk-BH7TTIPN.js} +11 -13
  41. package/dist/{chunk-LBWRQ4XA.js → chunk-BRAPBUPQ.js} +1 -1
  42. package/dist/{chunk-IC2WYONA.js → chunk-CX3USX23.js} +3 -3
  43. package/dist/{chunk-ITSLKUQM.js → chunk-D42NU3DZ.js} +1 -1
  44. package/dist/{chunk-Q6UYKWBG.js → chunk-EMAWIZ54.js} +481 -36
  45. package/dist/{chunk-ZFO3A3QL.js → chunk-EMSDWBG3.js} +2 -2
  46. package/dist/{chunk-KRFAX5JK.js → chunk-ESBMUZXZ.js} +1 -1
  47. package/dist/{chunk-CAHTO62O.js → chunk-F3OPUWQX.js} +7 -7
  48. package/dist/{chunk-R6OV4J4K.js → chunk-FX6RUJUY.js} +3 -3
  49. package/dist/{chunk-F6WHPHLF.js → chunk-G2UANIDX.js} +1 -1
  50. package/dist/{chunk-DEORFAWP.js → chunk-H5SM5PJI.js} +1 -1
  51. package/dist/{chunk-5OGDBU4G.js → chunk-H6UY725W.js} +2 -2
  52. package/dist/{chunk-K2Z5DZBS.js → chunk-HDIRZGK4.js} +1 -1
  53. package/dist/{chunk-TXGZZKDF.js → chunk-HHSJJFVM.js} +2 -2
  54. package/dist/{chunk-VDJO4DJ7.js → chunk-HXUTX5GR.js} +3 -3
  55. package/dist/{chunk-73LTCCZI.js → chunk-I3IH5MV5.js} +19 -23
  56. package/dist/{chunk-3OLIGYWN.js → chunk-I45HL3VP.js} +3 -3
  57. package/dist/{chunk-TYXH3EKP.js → chunk-I5JRXMCV.js} +16 -1
  58. package/dist/{chunk-RZXUQR42.js → chunk-I7QMXZSB.js} +2 -2
  59. package/dist/{chunk-XOVHO3TT.js → chunk-IDFNKFPL.js} +7 -7
  60. package/dist/{chunk-QX4GGPMY.js → chunk-IDGLGXPA.js} +1 -1
  61. package/dist/{chunk-5MBLWFLM.js → chunk-IPDKZ5IN.js} +33 -6
  62. package/dist/{chunk-ANR6WOC3.js → chunk-ISTRDGIX.js} +1 -1
  63. package/dist/{chunk-4UFJWRHG.js → chunk-IVEFOUZI.js} +211 -83
  64. package/dist/chunk-IZCW2NKT.js +29 -0
  65. package/dist/{chunk-X3IA5RYH.js → chunk-J36JVBLR.js} +9 -2
  66. package/dist/{chunk-Z4R35NJS.js → chunk-J5XEZ24I.js} +3 -3
  67. package/dist/{chunk-OH56PXFH.js → chunk-K2ZKXTVL.js} +1 -1
  68. package/dist/{chunk-ATMDOUNN.js → chunk-K73RJB23.js} +2 -2
  69. package/dist/{chunk-NZ3BE2QE.js → chunk-KQ4JEJLF.js} +10 -10
  70. package/dist/{chunk-VFBAKPRC.js → chunk-KROXPHXX.js} +9 -3
  71. package/dist/{chunk-QGOYNPQT.js → chunk-LLFQA7XF.js} +48 -5
  72. package/dist/chunk-LLMSX6V6.js +17 -0
  73. package/dist/{chunk-XR5BSEUF.js → chunk-LYKSTRAY.js} +3 -3
  74. package/dist/{chunk-UNOSCGBG.js → chunk-OAG47RE6.js} +1 -1
  75. package/dist/{chunk-O7N3A7PE.js → chunk-PHMBMOXF.js} +1 -1
  76. package/dist/{chunk-BP4VNTZL.js → chunk-PMMQRJDE.js} +1 -1
  77. package/dist/{chunk-ADDHW2FS.js → chunk-Q447CX26.js} +82 -12
  78. package/dist/{chunk-WT4PYV2J.js → chunk-Q47FAYYK.js} +202 -55
  79. package/dist/{chunk-AKFADCMS.js → chunk-RTBSA3EA.js} +1 -1
  80. package/dist/{chunk-VAK7A2N6.js → chunk-RUEGYANA.js} +11 -11
  81. package/dist/{chunk-OYLO6TYK.js → chunk-RUOG4VB7.js} +1 -1
  82. package/dist/{chunk-EVAQPW6O.js → chunk-SKYPMHQC.js} +4 -4
  83. package/dist/{chunk-B2SZZFWW.js → chunk-SQVRXHOW.js} +3 -3
  84. package/dist/{chunk-CJYAJ3QM.js → chunk-TAX2ZJAP.js} +24 -16
  85. package/dist/{chunk-GTE5WZAM.js → chunk-TOI35GN2.js} +1 -1
  86. package/dist/{chunk-XJHKJXT4.js → chunk-UPR3MU6Z.js} +1 -1
  87. package/dist/{chunk-DLC2FICN.js → chunk-WQLKDL35.js} +2 -1
  88. package/dist/{chunk-3BA2GP4H.js → chunk-X6L6MD5B.js} +5 -5
  89. package/dist/{chunk-XAQDR5Y5.js → chunk-XGHHVYC7.js} +94 -32
  90. package/dist/{chunk-HLBODNGW.js → chunk-XWC7CNPY.js} +1 -1
  91. package/dist/{clean-WNEIVBF3.js → clean-7J6ZCCGV.js} +19 -18
  92. package/dist/cli.js +53 -53
  93. package/dist/{cloud-6GSSDCJL.js → cloud-7IJCJCDD.js} +4 -4
  94. package/dist/{cloudrun-4NEJRE4T.js → cloudrun-UNZRIIDB.js} +7 -7
  95. package/dist/commands/contrast-audit.browser.js +1 -2
  96. package/dist/commands/layout-audit.browser.js +196 -0
  97. package/dist/{compare-2JWQ5ABA.js → compare-Q7VW5JZT.js} +29 -28
  98. package/dist/{compiler-27KQD7KW.js → compiler-KPHYGFXL.js} +6 -6
  99. package/dist/{component-HCRET3MH.js → component-UUBREJKN.js} +3 -3
  100. package/dist/{compositions-HTSQ6SUJ.js → compositions-T4FTKIDP.js} +14 -13
  101. package/dist/{delete-GHQ5UYM7.js → delete-WZQF2IIA.js} +3 -3
  102. package/dist/{deploy-I3Z3NAVA.js → deploy-JU7A3XNC.js} +1 -1
  103. package/dist/{deterministicFonts-JFLSSKRB.js → deterministicFonts-EGAAE7QL.js} +3 -3
  104. package/dist/{dist-SENYPQGW.js → dist-LM7AVHOU.js} +3 -3
  105. package/dist/{dist-WRDLWRMS.js → dist-ULGTPSU4.js} +8 -4
  106. package/dist/docs/data-attributes.md +1 -1
  107. package/dist/{doctor-UGFVQZHI.js → doctor-VSNGRKXJ.js} +14 -13
  108. package/dist/{events-YS4OVX3I.js → events-CRW2DYUT.js} +3 -3
  109. package/dist/{events-BLJGWMNP.js → events-E63YBUL2.js} +3 -3
  110. package/dist/{feedback-AZ3SJ5HF.js → feedback-OSZWVR6N.js} +9 -9
  111. package/dist/{ffmpeg-2AECXG7V.js → ffmpeg-JLH3Z7G7.js} +10 -9
  112. package/dist/{figma-DRYIJQHV.js → figma-2BQNNR53.js} +3 -3
  113. package/dist/fontLocalizeCli.js +13 -12
  114. package/dist/{get-DDEAOFPB.js → get-P2XI53QW.js} +3 -3
  115. package/dist/{gpuPolicy-UDJT2MQK.js → gpuPolicy-NTKQJY75.js} +10 -9
  116. package/dist/{grade-compare-LJKK5NSY.js → grade-compare-OYASIHIB.js} +30 -29
  117. package/dist/{gsapParserAcorn-7NCK2LVT.js → gsapParserAcorn-SKODXC2N.js} +2 -2
  118. package/dist/{help-TQBGYOID.js → help-HK6K2N4G.js} +1 -1
  119. package/dist/{history-5TOOCF2Y.js → history-JMTYKLXW.js} +6 -6
  120. package/dist/hyperframe.manifest.json +1 -1
  121. package/dist/hyperframe.runtime.iife.js +65 -65
  122. package/dist/hyperframes-player.global.js +1 -1
  123. package/dist/{info-ENI5MP4W.js → info-AW7CIVRE.js} +9 -9
  124. package/dist/{init-JXPXWV3G.js → init-6KIDG4LB.js} +31 -30
  125. package/dist/{inspect-WZNYQ5AB.js → inspect-B7BLYMRZ.js} +30 -29
  126. package/dist/{installer-3SGRBLJW.js → installer-ZP2LQZUQ.js} +7 -7
  127. package/dist/{keyframes-HEOC4CT4.js → keyframes-EQ36A5JE.js} +7 -7
  128. package/dist/{lambda-2VHQ4AL2.js → lambda-E6VURLIS.js} +9 -9
  129. package/dist/{layout-7WEUNO6T.js → layout-XYC64QQQ.js} +30 -29
  130. package/dist/{lint-5YMAF3L7.js → lint-V5DJYWBX.js} +9 -9
  131. package/dist/{lintProject-C2ONSH2U.js → lintProject-JATQKR64.js} +3 -3
  132. package/dist/{list-BIE3X7CO.js → list-RUGVRTVD.js} +3 -3
  133. package/dist/{login-YDIGJWCG.js → login-ZTKGKXGS.js} +4 -4
  134. package/dist/{manager-D2UV6RDQ.js → manager-JUP7PM6N.js} +11 -10
  135. package/dist/{media-treatment-FSKHPMWA.js → media-treatment-VIUPK4OR.js} +16 -15
  136. package/dist/{models-COEK6LXG.js → models-LJS2HBOZ.js} +14 -13
  137. package/dist/{motionShot-HYZ2ZGJQ.js → motionShot-3UAXZ7SN.js} +17 -16
  138. package/dist/{normalize-audio-UXR6WQ7Q.js → normalize-audio-SBYI4YIH.js} +4 -4
  139. package/dist/{open-OFT2GIDG.js → open-S27TUD3A.js} +14 -14
  140. package/dist/{parakeetRunner-4NZ3QXS3.js → parakeetRunner-ETLMLJ4L.js} +15 -14
  141. package/dist/{pipeline-ZKE54JMG.js → pipeline-I2M22M24.js} +11 -10
  142. package/dist/{play-2VG77FT6.js → play-COJU6VJK.js} +22 -21
  143. package/dist/{preflight-QTWDIM5C.js → preflight-FZ24NCHH.js} +11 -10
  144. package/dist/{present-OONXQLJG.js → present-YAHKLC5D.js} +18 -17
  145. package/dist/{preview-6RZJFU76.js → preview-KQOEU5YE.js} +27 -26
  146. package/dist/{producer-6YM3UH3B.js → producer-DTNNG4T6.js} +1 -1
  147. package/dist/{projectConfig-YMW4P2X6.js → projectConfig-4A76VYUP.js} +9 -9
  148. package/dist/{publication-SEINUAPZ.js → publication-SQPMC2W3.js} +4 -4
  149. package/dist/{publish-KZBTBWFO.js → publish-QUEJBGGT.js} +13 -12
  150. package/dist/{remove-background-BIQNMIR7.js → remove-background-FP2ETAQH.js} +12 -11
  151. package/dist/{render-FIH37HJA.js → render-BIFIL4U6.js} +32 -31
  152. package/dist/render-GQFXJWLV.js +1504 -0
  153. package/dist/{render-LW76HOMJ.js → render-P664SMC7.js} +5 -5
  154. package/dist/{render-batch-POLEEYD4.js → render-batch-ZCPMYH6Z.js} +5 -5
  155. package/dist/renderSetupWorker.js +3 -3
  156. package/dist/{resolver-O2SED3XB.js → resolver-BUC2GFZQ.js} +6 -6
  157. package/dist/{sherpa-HTFFFTVQ.js → sherpa-HFT6XEP6.js} +14 -13
  158. package/dist/skills/hyperframes/SKILL.md +52 -174
  159. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/FRAME.md +289 -0
  160. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/caption-skin.html +220 -0
  161. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  162. package/dist/skills/hyperframes/assets/frame-presets/blockframe/FRAME.md +275 -0
  163. package/dist/skills/hyperframes/assets/frame-presets/blockframe/caption-skin.html +223 -0
  164. package/dist/skills/hyperframes/assets/frame-presets/blockframe/frame-showcase.html +1347 -0
  165. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/FRAME.md +307 -0
  166. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/caption-skin.html +222 -0
  167. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/frame-showcase.html +1372 -0
  168. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/FRAME.md +275 -0
  169. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/caption-skin.html +229 -0
  170. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/frame-showcase.html +1140 -0
  171. package/dist/skills/hyperframes/assets/frame-presets/broadside/FRAME.md +284 -0
  172. package/dist/skills/hyperframes/assets/frame-presets/broadside/caption-skin.html +224 -0
  173. package/dist/skills/hyperframes/assets/frame-presets/broadside/frame-showcase.html +1166 -0
  174. package/dist/skills/hyperframes/assets/frame-presets/capsule/FRAME.md +284 -0
  175. package/dist/skills/hyperframes/assets/frame-presets/capsule/caption-skin.html +223 -0
  176. package/dist/skills/hyperframes/assets/frame-presets/capsule/frame-showcase.html +1465 -0
  177. package/dist/skills/hyperframes/assets/frame-presets/cartesian/FRAME.md +278 -0
  178. package/dist/skills/hyperframes/assets/frame-presets/cartesian/caption-skin.html +221 -0
  179. package/dist/skills/hyperframes/assets/frame-presets/cartesian/frame-showcase.html +1263 -0
  180. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/FRAME.md +265 -0
  181. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/caption-skin.html +237 -0
  182. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  183. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/FRAME.md +277 -0
  184. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/caption-skin.html +223 -0
  185. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
  186. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
  187. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
  188. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
  189. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
  190. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
  191. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
  192. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
  193. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
  194. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/frame-showcase.html +1438 -0
  195. package/dist/skills/hyperframes/assets/frame-presets/coral/FRAME.md +314 -0
  196. package/dist/skills/hyperframes/assets/frame-presets/coral/caption-skin.html +225 -0
  197. package/dist/skills/hyperframes/assets/frame-presets/coral/frame-showcase.html +1268 -0
  198. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/FRAME.md +333 -0
  199. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/caption-skin.html +226 -0
  200. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/frame-showcase.html +1330 -0
  201. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/FRAME.md +274 -0
  202. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/caption-skin.html +229 -0
  203. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/frame-showcase.html +1444 -0
  204. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/FRAME.md +265 -0
  205. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/caption-skin.html +222 -0
  206. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  207. package/dist/skills/hyperframes/references/captions.md +46 -0
  208. package/dist/skills/hyperframes/references/film.md +47 -0
  209. package/dist/skills/hyperframes/references/format.md +157 -0
  210. package/dist/skills/hyperframes/references/look.md +69 -0
  211. package/dist/skills/hyperframes/references/motion.md +94 -0
  212. package/dist/skills/hyperframes/references/overlays.md +39 -0
  213. package/dist/skills/hyperframes/references/plugin-installation.md +3 -3
  214. package/dist/skills/hyperframes/references/review.md +51 -0
  215. package/dist/skills/hyperframes/references/runtimes.md +43 -0
  216. package/dist/skills/hyperframes/references/skill-lifecycle.md +21 -13
  217. package/dist/skills/hyperframes/references/sound.md +43 -0
  218. package/dist/skills/hyperframes/references/spec.md +76 -0
  219. package/dist/skills/hyperframes/references/story.md +103 -0
  220. package/dist/skills/hyperframes/references/storyboard-format.md +30 -22
  221. package/dist/skills/hyperframes/references/storyboard.md +36 -0
  222. package/dist/skills/hyperframes/references/types/3d.md +25 -0
  223. package/dist/skills/hyperframes/references/types/character.md +20 -0
  224. package/dist/skills/hyperframes/references/types/data.md +19 -0
  225. package/dist/skills/hyperframes/references/types/explainer.md +34 -0
  226. package/dist/skills/hyperframes/references/types/launch.md +31 -0
  227. package/dist/skills/hyperframes/references/types/music.md +24 -0
  228. package/dist/skills/hyperframes/references/types/vertical.md +23 -0
  229. package/dist/skills/hyperframes/scripts/bake-basemap.mjs +324 -0
  230. package/dist/skills/hyperframes/scripts/lib/main-module.test.mjs +1 -6
  231. package/dist/skills/hyperframes/scripts/locate.mjs +228 -0
  232. package/dist/skills/hyperframes-cli/SKILL.md +76 -179
  233. package/dist/skills/hyperframes-cli/references/beats.md +1 -1
  234. package/dist/skills/hyperframes-cli/references/cloud.md +2 -2
  235. package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
  236. package/dist/skills/hyperframes-cli/references/conventions.md +17 -0
  237. package/dist/skills/hyperframes-cli/references/feedback.md +14 -0
  238. package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +11 -7
  239. package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
  240. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +19 -8
  241. package/dist/skills/hyperframes-cli/references/preview-render.md +8 -2
  242. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +8 -0
  243. package/dist/skills/media-use/SKILL.md +47 -91
  244. package/dist/skills/media-use/audio/references/bgm.md +1 -1
  245. package/dist/skills/media-use/audio/references/captions/authoring.md +1 -2
  246. package/dist/skills/media-use/audio/references/captions/motion.md +5 -5
  247. package/dist/skills/media-use/audio/references/tts.md +0 -3
  248. package/dist/skills/media-use/audio/scripts/audio.mjs +5 -6
  249. package/dist/skills/media-use/audio/scripts/carve.mjs +560 -0
  250. package/dist/skills/media-use/audio/scripts/carve.test.mjs +254 -0
  251. package/dist/skills/media-use/audio/scripts/extract-audio-data.py +199 -0
  252. package/dist/skills/media-use/references/local.md +24 -0
  253. package/dist/skills/media-use/references/memory.md +4 -4
  254. package/dist/skills/media-use/references/mixing.md +71 -0
  255. package/dist/skills/media-use/references/operations.md +1 -1
  256. package/dist/skills/media-use/scripts/compatibility.test.mjs +1 -56
  257. package/dist/skills/media-use/scripts/lib/prefs-store.mjs +1 -1
  258. package/dist/skills/media-use/scripts/lib/recipe-store.mjs +1 -1
  259. package/dist/skills/media-use/scripts/prefs.mjs +2 -3
  260. package/dist/skills/media-use/scripts/recipe.mjs +1 -3
  261. package/dist/{skills-J6MBGS5O.js → skills-3WEVO3NU.js} +20 -13
  262. package/dist/{skillsUpdateCheck-ZAXNLBF3.js → skillsUpdateCheck-BFPWFOK5.js} +3 -3
  263. package/dist/{snapshot-TL7TTFS6.js → snapshot-WDQ6S7CJ.js} +458 -98
  264. package/dist/{src-Z5H5N5T4.js → src-NPR2JZOJ.js} +15 -11
  265. package/dist/{src-EL6HGIS4.js → src-RZ574OKP.js} +9 -8
  266. package/dist/{staticProjectServer-EO7X7RAY.js → staticProjectServer-FTGTEZI4.js} +18 -17
  267. package/dist/studio/assets/{hyperframes-player-hz_VqxBZ.js → hyperframes-player-CoOdf435.js} +1 -1
  268. package/dist/studio/assets/{index-CV_ojgp5.js → index-CR85xg2x.js} +1 -1
  269. package/dist/studio/assets/{index-S1ceEagc.js → index-C_6rTpaB.js} +5 -5
  270. package/dist/studio/index.html +1 -1
  271. package/dist/{studio-api-CUZDC5B3.js → studio-api-TAWB7B23.js} +12 -11
  272. package/dist/{studioServer-EZPRV43Y.js → studioServer-HRQGJTBU.js} +49 -48
  273. package/dist/{telemetry-LFUVHARP.js → telemetry-QZ6HJF4W.js} +3 -3
  274. package/dist/templates/_shared/AGENTS.md +14 -19
  275. package/dist/templates/_shared/CLAUDE.md +14 -19
  276. package/dist/templates/blank/index.html +10 -4
  277. package/dist/{timeline-GSH743JE.js → timeline-IKUEW42T.js} +21 -19
  278. package/dist/{tokens-3ZMPSH7B.js → tokens-AUGUEWHS.js} +2 -2
  279. package/dist/{transcribe-4SHNDPWW.js → transcribe-7734CG3N.js} +19 -18
  280. package/dist/{transcribe-TV7JBZQS.js → transcribe-FWU6EMEO.js} +13 -12
  281. package/dist/{updateCheck-W7FTFOQF.js → updateCheck-VIPQ3FPW.js} +2 -2
  282. package/dist/{upgrade-7YYYNAPF.js → upgrade-4VNDQTVO.js} +2 -2
  283. package/dist/{urlDownloader-PQSUS2CP.js → urlDownloader-6CXL4CL7.js} +9 -8
  284. package/dist/{validate-GCHAEVXM.js → validate-QWCMVWID.js} +24 -23
  285. package/dist/{video-KGN7NJS5.js → video-245Q5WN4.js} +10 -9
  286. package/dist/warmCheck.js +37 -36
  287. package/package.json +1 -1
  288. package/dist/chunk-GMNHAOMJ.js +0 -3805
  289. package/dist/render-65K3K6SD.js +0 -719
  290. package/dist/skills/hyperframes/references/brief-contract.md +0 -108
  291. package/dist/skills/hyperframes/references/brief-format.md +0 -72
  292. package/dist/skills/hyperframes/references/capability-menu.md +0 -47
  293. package/dist/skills/hyperframes/references/frame-worker-core.md +0 -82
  294. package/dist/skills/hyperframes/references/intent-interview.md +0 -73
  295. package/dist/skills/hyperframes/references/pitch-round.md +0 -40
  296. package/dist/skills/hyperframes/references/production-loop.md +0 -26
  297. package/dist/skills/hyperframes/references/review-loop.md +0 -37
  298. package/dist/skills/hyperframes/references/route-briefs.md +0 -11
  299. package/dist/skills/hyperframes/references/routes/embedded-captions.md +0 -11
  300. package/dist/skills/hyperframes/references/routes/faceless-explainer.md +0 -12
  301. package/dist/skills/hyperframes/references/routes/general-video.md +0 -12
  302. package/dist/skills/hyperframes/references/routes/motion-graphics.md +0 -11
  303. package/dist/skills/hyperframes/references/routes/music-to-video.md +0 -12
  304. package/dist/skills/hyperframes/references/routes/pr-to-video.md +0 -28
  305. package/dist/skills/hyperframes/references/routes/product-launch-video.md +0 -13
  306. package/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +0 -9
  307. package/dist/skills/hyperframes/references/routes/slideshow.md +0 -11
  308. package/dist/skills/hyperframes/references/routes/talking-head-recut.md +0 -11
  309. package/dist/skills/hyperframes/references/script-format.md +0 -52
  310. package/dist/skills/hyperframes/references/subagent-dispatch.md +0 -35
  311. package/dist/skills/hyperframes/references/workflow-catalog.md +0 -10
  312. package/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +0 -176
  313. package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +0 -28
  314. 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-ATMDOUNN.js";
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-QGOYNPQT.js";
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-73LTCCZI.js";
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-VFBAKPRC.js";
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-WT4PYV2J.js";
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-GMNHAOMJ.js";
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-YMS5FOMC.js";
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-ADDHW2FS.js";
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-JFLSSKRB.js");
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.engineConfig ?? job.config.producerConfig ?? resolveConfig();
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
- attenuationDb += correctionTargetDbfs - truePeakDbfs;
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-EL6HGIS4.js");
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-EL6HGIS4.js");
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 = calculateOptimalWorkers(framesInChunk, void 0, cfg);
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 ? await extractDeferredVideoFramesForChunk({
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
- const videoFrameLookup = planVideos && planVideos.extracted.length > 0 ? createFrameLookupTable(
18584
- planVideos.videos,
18585
- [
18586
- ...rebuildExtractedFramesFromPlanDir(
18587
- planDir,
18588
- planVideos.extracted.filter((video) => !video.deferredRange),
18589
- v2Manifest === null ? "dense-v1" : "sparse-v2"
18590
- ),
18591
- ...deferredVideoFrames
18592
- ],
18593
- resolveRenderFpsConfig(job.config.fps).value
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`, then add only verified-unneeded paths to `.hyperframesignore` or pre-host required large media.",
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 hint = err.code ? hints[err.code] : void 0;
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-NZ3BE2QE.js";
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-GPE3WWTO.js";
21
+ } from "./chunk-6GPR3G3C.js";
22
22
  import {
23
23
  resolveAutoProxy
24
- } from "./chunk-K2Z5DZBS.js";
24
+ } from "./chunk-HDIRZGK4.js";
25
25
  import {
26
26
  decodeWellFormedEscapes
27
27
  } from "./chunk-BSQ7XANM.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  detectGpuEncoder
9
- } from "./chunk-73LTCCZI.js";
9
+ } from "./chunk-I3IH5MV5.js";
10
10
  import {
11
11
  runCancellableProcess
12
12
  } from "./chunk-DYAPHNV6.js";
@@ -8,10 +8,10 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-73LTCCZI.js";
11
+ } from "./chunk-I3IH5MV5.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
- } from "./chunk-VFBAKPRC.js";
14
+ } from "./chunk-KROXPHXX.js";
15
15
  import {
16
16
  parseHTML
17
17
  } from "./chunk-SDYDNHEE.js";