hyperframes 0.8.181 → 0.8.183

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 (215) hide show
  1. package/bin/hyperframes.mjs +3 -1
  2. package/dist/{add-AWQ2EGBU.js → add-HW3ZGR36.js} +22 -22
  3. package/dist/{animatedGifPrep-SENXJ7TN.js → animatedGifPrep-EPLN37ZN.js} +13 -13
  4. package/dist/api.js +28 -28
  5. package/dist/{asset-XBH3MN3Y.js → asset-TOASKL3Z.js} +3 -3
  6. package/dist/{assetCataloger-KH4X2CRO.js → assetCataloger-PZN5HYG2.js} +15 -13
  7. package/dist/{audio-Q7I473UN.js → audio-F5OIQVJO.js} +29 -29
  8. package/dist/{auth-I7CBTEUS.js → auth-YVQLRS3T.js} +4 -4
  9. package/dist/{autoUpdate-KY5TLSN7.js → autoUpdate-EG4ZFW4D.js} +2 -2
  10. package/dist/{backgroundChecks-4Q3VVK5W.js → backgroundChecks-WINNQVR2.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-3AYDQRBI.js → batchRender-PASZTMEE.js} +7 -7
  13. package/dist/{beats-P4LENNVT.js → beats-KGIOEBLW.js} +12 -12
  14. package/dist/{benchmark-AXOAECN3.js → benchmark-ZNY2L7HN.js} +24 -24
  15. package/dist/{browser-XZKB5HGJ.js → browser-REAO7RU4.js} +20 -20
  16. package/dist/{bundleWithLocalizedFonts-2WCR57IN.js → bundleWithLocalizedFonts-OAYLYC4W.js} +2 -2
  17. package/dist/{capture-NWARHRHR.js → capture-IK6GWQDD.js} +8 -5
  18. package/dist/{capture-4RN4APDF.js → capture-WOSF276U.js} +49 -41
  19. package/dist/{captureCompositionFrame-QOF5BRF4.js → captureCompositionFrame-DDZNKYRE.js} +21 -20
  20. package/dist/{captureTimeout-K2JNVVCI.js → captureTimeout-RIMG6IYH.js} +1 -1
  21. package/dist/{catalog-CRPOPVD5.js → catalog-AKTXS7OJ.js} +42 -42
  22. package/dist/{catch-up-MHWGUQ42.js → catch-up-O3VZMPVE.js} +15 -15
  23. package/dist/check-6E46NIWI.js +116 -0
  24. package/dist/checkBrowser-UNZHQFNH.js +117 -0
  25. package/dist/{chunk-Y2RXRPL2.js → chunk-3BA2GP4H.js} +5 -5
  26. package/dist/{chunk-N5SXQCJL.js → chunk-3OLIGYWN.js} +3 -3
  27. package/dist/{chunk-OR5WCFWZ.js → chunk-3Q47QC46.js} +2 -2
  28. package/dist/{chunk-EOADENKV.js → chunk-4FQKS7BJ.js} +16 -14
  29. package/dist/{chunk-HODBPO4A.js → chunk-4UFJWRHG.js} +461 -275
  30. package/dist/{chunk-537IYAEE.js → chunk-4UMPIPCQ.js} +9 -1
  31. package/dist/{chunk-OJTDUF4W.js → chunk-5MBLWFLM.js} +1 -1
  32. package/dist/{chunk-UVEQLDKB.js → chunk-5OGDBU4G.js} +3 -2
  33. package/dist/{chunk-L3YOGIPG.js → chunk-66LREXGS.js} +1 -1
  34. package/dist/{chunk-YPBIAONI.js → chunk-73LTCCZI.js} +218 -150
  35. package/dist/{chunk-GZVP4TWN.js → chunk-7JAD4MEW.js} +1 -1
  36. package/dist/{chunk-NAMGMP3R.js → chunk-7KVVNF7B.js} +1 -1
  37. package/dist/{chunk-GK2FIKIQ.js → chunk-ADDHW2FS.js} +214 -37
  38. package/dist/{chunk-WUQUR33W.js → chunk-AKFADCMS.js} +1 -1
  39. package/dist/{chunk-VAJIPSN6.js → chunk-ANR6WOC3.js} +1 -1
  40. package/dist/{chunk-4USWWI2Y.js → chunk-ATMDOUNN.js} +2 -2
  41. package/dist/{chunk-XSRUVMXK.js → chunk-B2SZZFWW.js} +4 -4
  42. package/dist/{chunk-TO6JNTML.js → chunk-BP4VNTZL.js} +13 -8
  43. package/dist/{chunk-DJJ7SK4F.js → chunk-CAHTO62O.js} +8 -8
  44. package/dist/{chunk-GNE57O7U.js → chunk-CGK4XZ2J.js} +1 -1
  45. package/dist/{chunk-O5AE7HOP.js → chunk-CJYAJ3QM.js} +37 -33
  46. package/dist/{chunk-5JMZLQT6.js → chunk-COTLNID2.js} +16 -16
  47. package/dist/{chunk-E24HSMZV.js → chunk-CYBXXSC4.js} +65 -14
  48. package/dist/{chunk-NZZYJOMJ.js → chunk-CZUAX3BV.js} +6 -5
  49. package/dist/{chunk-K26FR4SM.js → chunk-DEORFAWP.js} +12 -12
  50. package/dist/{chunk-GV5R5B7Q.js → chunk-DGECWPTL.js} +1 -1
  51. package/dist/{chunk-BRHI7EIA.js → chunk-DKPNNYBZ.js} +4 -0
  52. package/dist/{chunk-5E5EYPZO.js → chunk-DLC2FICN.js} +7 -7
  53. package/dist/{chunk-D3ZWBHZP.js → chunk-DYAPHNV6.js} +3 -2
  54. package/dist/{chunk-RGHQID2E.js → chunk-EHSBBBR2.js} +5 -3
  55. package/dist/{chunk-IWTRHPTP.js → chunk-EVAQPW6O.js} +8 -8
  56. package/dist/{chunk-S3RYRF3W.js → chunk-F6WHPHLF.js} +1 -1
  57. package/dist/chunk-FG4BBFZI.js +122 -0
  58. package/dist/{chunk-WITHUCCB.js → chunk-GAGMLVCV.js} +2 -2
  59. package/dist/chunk-GMNHAOMJ.js +3805 -0
  60. package/dist/{chunk-KIO3R4QN.js → chunk-GPE3WWTO.js} +16 -6
  61. package/dist/{chunk-IL3GTCQY.js → chunk-GTE5WZAM.js} +72 -140
  62. package/dist/{chunk-55IG255C.js → chunk-HLBODNGW.js} +1 -1
  63. package/dist/{chunk-KMAAOHLO.js → chunk-HRPWRZGF.js} +1 -1
  64. package/dist/{chunk-UPFUC4DB.js → chunk-HTIUNMTP.js} +1 -1
  65. package/dist/{chunk-WUUCEFL5.js → chunk-IC2WYONA.js} +5 -5
  66. package/dist/{chunk-DUN63LHY.js → chunk-ITSLKUQM.js} +2 -2
  67. package/dist/{chunk-YJDB4FLT.js → chunk-JQYJXUJW.js} +1 -1
  68. package/dist/{chunk-PBN6GBJE.js → chunk-JVBRJMOP.js} +14 -1
  69. package/dist/{chunk-XH262OWN.js → chunk-K2Z5DZBS.js} +1 -1
  70. package/dist/{chunk-RHWJKSGH.js → chunk-KANNRHY7.js} +1 -1
  71. package/dist/{chunk-AOWDVB2T.js → chunk-KRFAX5JK.js} +1 -1
  72. package/dist/{chunk-UIDZRCBG.js → chunk-LBWRQ4XA.js} +1 -1
  73. package/dist/{chunk-T7UHTUUE.js → chunk-MIZDJVPZ.js} +9 -9
  74. package/dist/{chunk-32GKETR7.js → chunk-MMQ52NIZ.js} +74 -0
  75. package/dist/chunk-MOEGCMKI.js +180 -0
  76. package/dist/{chunk-E6RPWJVC.js → chunk-NAUKCKCJ.js} +5 -1
  77. package/dist/{chunk-JBCU6NR5.js → chunk-NZ3BE2QE.js} +56 -55
  78. package/dist/{chunk-JMFJI26U.js → chunk-O7N3A7PE.js} +2 -2
  79. package/dist/{chunk-3PULCIY5.js → chunk-OH56PXFH.js} +5 -5
  80. package/dist/{chunk-H4YZZ2VQ.js → chunk-PFD25NAC.js} +1 -1
  81. package/dist/{check-DJCUOUDI.js → chunk-Q6UYKWBG.js} +198 -142
  82. package/dist/{chunk-3DKN5WKL.js → chunk-QH3T4WI2.js} +77 -6
  83. package/dist/{chunk-Y5GY6Y7A.js → chunk-QX4GGPMY.js} +2 -2
  84. package/dist/{chunk-B6JLCPT3.js → chunk-R6OV4J4K.js} +6 -6
  85. package/dist/{chunk-XEWHUPFS.js → chunk-RZXUQR42.js} +2 -2
  86. package/dist/{chunk-YMS6CJCD.js → chunk-SAQYJLI6.js} +1 -1
  87. package/dist/{chunk-OJDXABUF.js → chunk-TJB4GAV6.js} +2 -2
  88. package/dist/{checkBrowser-VES2NF3K.js → chunk-TOHA5NAU.js} +187 -114
  89. package/dist/{chunk-RXQHSGAQ.js → chunk-TXGZZKDF.js} +2 -2
  90. package/dist/{chunk-3XDOGSRD.js → chunk-U5YVWG5W.js} +3 -3
  91. package/dist/{chunk-ICMXC3MI.js → chunk-U6RXZNZE.js} +31 -18
  92. package/dist/{chunk-PF7OWVTL.js → chunk-UNOSCGBG.js} +2 -2
  93. package/dist/{chunk-X7CCSMRR.js → chunk-VAK7A2N6.js} +16 -16
  94. package/dist/{chunk-OFY6JTZC.js → chunk-VDJO4DJ7.js} +2 -2
  95. package/dist/{chunk-LBQFLUIY.js → chunk-VFBAKPRC.js} +9 -49
  96. package/dist/{chunk-ZUOSILUE.js → chunk-VH5KESLX.js} +1 -1
  97. package/dist/{chunk-22QHO26F.js → chunk-W64L7IFS.js} +1 -1
  98. package/dist/{chunk-4IEH6EAC.js → chunk-WT4PYV2J.js} +4 -6
  99. package/dist/{chunk-XFCLWWL3.js → chunk-X3IA5RYH.js} +2 -2
  100. package/dist/{chunk-UZOZ2W2E.js → chunk-XAQDR5Y5.js} +2 -2
  101. package/dist/{chunk-6I7V6Q7F.js → chunk-XJHKJXT4.js} +103 -20
  102. package/dist/{chunk-V2UNZ7QP.js → chunk-XOVHO3TT.js} +25 -14
  103. package/dist/{chunk-65WIUIHL.js → chunk-XR5BSEUF.js} +7 -15
  104. package/dist/{chunk-IZM562YJ.js → chunk-Z4R35NJS.js} +4 -4
  105. package/dist/{chunk-4OT3FWVV.js → chunk-ZFO3A3QL.js} +2 -2
  106. package/dist/{clean-GJNDVVDI.js → clean-WNEIVBF3.js} +40 -40
  107. package/dist/cli.js +68 -64
  108. package/dist/{cloud-JCWNMKXC.js → cloud-6GSSDCJL.js} +4 -4
  109. package/dist/{cloudrun-2BKGY53X.js → cloudrun-4NEJRE4T.js} +8 -8
  110. package/dist/commands/layout-audit.browser.js +15 -4
  111. package/dist/commands/motion-signature.browser.js +52 -0
  112. package/dist/{compare-XWM7FAYM.js → compare-2JWQ5ABA.js} +50 -47
  113. package/dist/{compiler-U3W6CJW7.js → compiler-27KQD7KW.js} +6 -6
  114. package/dist/{component-CBRAE325.js → component-HCRET3MH.js} +4 -4
  115. package/dist/{compositions-EZYJEHQ3.js → compositions-HTSQ6SUJ.js} +28 -29
  116. package/dist/{contactSheet-27SRU7A4.js → contactSheet-CAGMKI3E.js} +3 -1
  117. package/dist/{delete-JWWMOITI.js → delete-GHQ5UYM7.js} +9 -9
  118. package/dist/{deploy-UGOV76OH.js → deploy-I3Z3NAVA.js} +11 -11
  119. package/dist/{destroy-QBLMYDBF.js → destroy-4B5HW5FH.js} +5 -5
  120. package/dist/{deterministicFonts-L7YEEFGI.js → deterministicFonts-JFLSSKRB.js} +2 -2
  121. package/dist/{dist-2FMTAVGL.js → dist-SENYPQGW.js} +4 -4
  122. package/dist/{dist-VO7OXOFK.js → dist-WRDLWRMS.js} +5 -5
  123. package/dist/{docs-MPOM3PHH.js → docs-UEWLIP6D.js} +1 -1
  124. package/dist/{doctor-XSKSZRR7.js → doctor-UGFVQZHI.js} +27 -27
  125. package/dist/{events-AIZODZMP.js → events-BLJGWMNP.js} +9 -9
  126. package/dist/{events-RGS4MAH4.js → events-YS4OVX3I.js} +6 -6
  127. package/dist/{feedback-GE3VDZOH.js → feedback-AZ3SJ5HF.js} +35 -35
  128. package/dist/{ffmpeg-SCXZTR6X.js → ffmpeg-2AECXG7V.js} +15 -15
  129. package/dist/{figma-3R4XST4Y.js → figma-DRYIJQHV.js} +3 -3
  130. package/dist/fontLocalizeCli.js +23 -23
  131. package/dist/{get-4FKJP6IM.js → get-DDEAOFPB.js} +9 -9
  132. package/dist/{gpuPolicy-4NNXESM7.js → gpuPolicy-UDJT2MQK.js} +13 -13
  133. package/dist/{grade-compare-FAYVPXUR.js → grade-compare-LJKK5NSY.js} +55 -50
  134. package/dist/{help-C3UQMYXK.js → help-TQBGYOID.js} +1 -1
  135. package/dist/{history-LDGQ2IZJ.js → history-5TOOCF2Y.js} +15 -15
  136. package/dist/hyperframe.manifest.json +1 -1
  137. package/dist/hyperframe.runtime.iife.js +17 -17
  138. package/dist/hyperframes-player.global.js +8 -3
  139. package/dist/{info-KMXFLD3Q.js → info-ENI5MP4W.js} +20 -20
  140. package/dist/{init-D7GYHSX5.js → init-JXPXWV3G.js} +68 -68
  141. package/dist/{inspect-CUKWHCGS.js → inspect-WZNYQ5AB.js} +45 -44
  142. package/dist/{installer-EPRSH6QI.js → installer-3SGRBLJW.js} +7 -7
  143. package/dist/{keyframes-XCUPHBW3.js → keyframes-HEOC4CT4.js} +16 -16
  144. package/dist/{lambda-IMORFJHN.js → lambda-2VHQ4AL2.js} +15 -15
  145. package/dist/{layout-JD2IOBMS.js → layout-7WEUNO6T.js} +45 -44
  146. package/dist/{lint-FHLER36Y.js → lint-5YMAF3L7.js} +23 -23
  147. package/dist/{lintProject-ARKJXDQF.js → lintProject-C2ONSH2U.js} +4 -4
  148. package/dist/{list-MGCFG5MA.js → list-BIE3X7CO.js} +10 -10
  149. package/dist/{login-QX6M4UTR.js → login-YDIGJWCG.js} +7 -7
  150. package/dist/{logout-DKJANASY.js → logout-DDC4QLVK.js} +3 -3
  151. package/dist/{manager-IETAVBZS.js → manager-D2UV6RDQ.js} +16 -16
  152. package/dist/{manager-V2QCCPOJ.js → manager-UHWEKPXC.js} +8 -3
  153. package/dist/{media-treatment-MDAQRITV.js → media-treatment-FSKHPMWA.js} +33 -33
  154. package/dist/{media-use-4XXGABIL.js → media-use-JBN57JE3.js} +1 -1
  155. package/dist/{models-NZAOSI5A.js → models-COEK6LXG.js} +24 -24
  156. package/dist/{motionShot-6ZDUM2K4.js → motionShot-HYZ2ZGJQ.js} +28 -26
  157. package/dist/{normalize-audio-7PRYX6QM.js → normalize-audio-UXR6WQ7Q.js} +12 -12
  158. package/dist/{open-I254NY5J.js → open-OFT2GIDG.js} +24 -24
  159. package/dist/{parakeetRunner-TL3TOGUS.js → parakeetRunner-4NZ3QXS3.js} +25 -25
  160. package/dist/{pipeline-YPERVOQM.js → pipeline-ZKE54JMG.js} +18 -18
  161. package/dist/{play-MYI7BYKS.js → play-2VG77FT6.js} +39 -38
  162. package/dist/{policies-5NTZOHJA.js → policies-XXNGXWHV.js} +1 -1
  163. package/dist/{preflight-HRCSZ52D.js → preflight-QTWDIM5C.js} +18 -18
  164. package/dist/{present-WYXQDV4Q.js → present-OONXQLJG.js} +33 -33
  165. package/dist/{preview-535HTWQO.js → preview-6RZJFU76.js} +49 -49
  166. package/dist/{producer-C76CRJ5O.js → producer-6YM3UH3B.js} +1 -1
  167. package/dist/{progress-I37JB7R4.js → progress-NHJIHAAG.js} +2 -2
  168. package/dist/{projectConfig-5QCNTGQT.js → projectConfig-YMW4P2X6.js} +9 -9
  169. package/dist/{publication-2QT7VVE2.js → publication-SEINUAPZ.js} +5 -5
  170. package/dist/{publish-53EBL7OO.js → publish-KZBTBWFO.js} +27 -27
  171. package/dist/{refresh-MGCVWX56.js → refresh-RXTOPRBB.js} +3 -3
  172. package/dist/{remove-background-OBYHMPD4.js → remove-background-BIQNMIR7.js} +31 -31
  173. package/dist/{render-5BXTEEG7.js → render-65K3K6SD.js} +31 -31
  174. package/dist/{render-3MELF6Y3.js → render-FIH37HJA.js} +101 -96
  175. package/dist/{render-75CRB3BW.js → render-LW76HOMJ.js} +8 -8
  176. package/dist/{render-batch-CEVWUYBP.js → render-batch-POLEEYD4.js} +8 -8
  177. package/dist/renderSetupWorker.js +12 -9
  178. package/dist/{resolver-4ICE2AT6.js → resolver-O2SED3XB.js} +7 -7
  179. package/dist/{screenshotCapture-HXEZ3TNJ.js → screenshotCapture-UBY6TT75.js} +33 -6
  180. package/dist/{sherpa-L4UACXT3.js → sherpa-HTFFFTVQ.js} +24 -24
  181. package/dist/{sites-3ZBYB5X4.js → sites-MAVH57MO.js} +2 -2
  182. package/dist/skills/hyperframes/references/review-loop.md +1 -1
  183. package/dist/{skills-DXTQPCAO.js → skills-J6MBGS5O.js} +17 -17
  184. package/dist/{skillsUpdateCheck-ULXRGLDU.js → skillsUpdateCheck-ZAXNLBF3.js} +3 -3
  185. package/dist/{snapshot-PWFHQU5E.js → snapshot-TL7TTFS6.js} +72 -71
  186. package/dist/{src-RDSWHMJS.js → src-EL6HGIS4.js} +33 -26
  187. package/dist/{src-S7NVL5VF.js → src-Z5H5N5T4.js} +19 -19
  188. package/dist/{state-KAXGHF77.js → state-ORRPOLMQ.js} +2 -2
  189. package/dist/{staticProjectServer-GYPUQGI7.js → staticProjectServer-EO7X7RAY.js} +20 -20
  190. package/dist/{status-BV7QAUQD.js → status-CM7IQTU2.js} +6 -6
  191. package/dist/studio/assets/{hyperframes-player-DcD3NXpX.js → hyperframes-player-hz_VqxBZ.js} +7 -2
  192. package/dist/studio/assets/{index-BIDKYk0h.js → index-CV_ojgp5.js} +1 -1
  193. package/dist/studio/assets/{index-CFrZAwKo.js → index-S1ceEagc.js} +4 -4
  194. package/dist/studio/index.html +1 -1
  195. package/dist/{studio-api-IXGX5ZFI.js → studio-api-CUZDC5B3.js} +17 -17
  196. package/dist/{studioServer-LA5Z7RSS.js → studioServer-EZPRV43Y.js} +90 -84
  197. package/dist/{telemetry-STEMAMAX.js → telemetry-LFUVHARP.js} +10 -10
  198. package/dist/{telemetry-CQYHCCPL.js → telemetry-QG5AANZ4.js} +1 -1
  199. package/dist/{timeline-KLD24EN6.js → timeline-GSH743JE.js} +41 -41
  200. package/dist/{tokens-ICLORAA4.js → tokens-3ZMPSH7B.js} +3 -3
  201. package/dist/{transcribe-A6IKK7VS.js → transcribe-4SHNDPWW.js} +47 -47
  202. package/dist/{transcribe-CTHZLRXF.js → transcribe-TV7JBZQS.js} +19 -19
  203. package/dist/{tts-EDK3QS7M.js → tts-A2WILYGN.js} +6 -6
  204. package/dist/{updateCheck-FHCAAAXA.js → updateCheck-W7FTFOQF.js} +2 -2
  205. package/dist/{upgrade-7EV4F2R7.js → upgrade-7YYYNAPF.js} +3 -3
  206. package/dist/{urlDownloader-MIMGVASJ.js → urlDownloader-PQSUS2CP.js} +12 -12
  207. package/dist/{validate-LZF46W3V.js → validate-GCHAEVXM.js} +39 -38
  208. package/dist/{video-ZC47NFOL.js → video-KGN7NJS5.js} +16 -14
  209. package/dist/warmCheck.js +227 -0
  210. package/dist/warmCheckClient.js +139 -0
  211. package/package.json +4 -2
  212. package/dist/chunk-BAZ5LCR3.js +0 -3805
  213. package/dist/hyperframe-runtime.js +0 -1125
  214. package/dist/{chunk-B4VT6YU2.js → chunk-QGOYNPQT.js} +3 -3
  215. package/dist/{synthesize-I2C24XJ5.js → synthesize-PKTB5ATG.js} +1 -1
@@ -6,90 +6,90 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  redactHome
9
- } from "./chunk-5JMZLQT6.js";
9
+ } from "./chunk-COTLNID2.js";
10
10
  import "./chunk-Z27A7NUB.js";
11
11
  import "./chunk-5ETJX6WM.js";
12
+ import "./chunk-MIZDJVPZ.js";
13
+ import "./chunk-QH3T4WI2.js";
14
+ import "./chunk-6BEFEWFB.js";
15
+ import "./chunk-OH56PXFH.js";
12
16
  import {
13
17
  loadProducer
14
- } from "./chunk-ZUOSILUE.js";
15
- import "./chunk-JBCU6NR5.js";
16
- import "./chunk-IWTRHPTP.js";
17
- import "./chunk-TTVHYD5R.js";
18
+ } from "./chunk-VH5KESLX.js";
19
+ import "./chunk-NZ3BE2QE.js";
20
+ import "./chunk-EVAQPW6O.js";
18
21
  import "./chunk-6JR2XUEE.js";
19
- import {
20
- CACHE_DIR_NAME,
21
- cleanupProxyCache
22
- } from "./chunk-KIO3R4QN.js";
22
+ import "./chunk-TTVHYD5R.js";
23
23
  import {
24
24
  DEFAULT_HISTORY_ROOT,
25
25
  listProjectHistories,
26
26
  pruneGoneProjectHistories
27
- } from "./chunk-ICMXC3MI.js";
27
+ } from "./chunk-U6RXZNZE.js";
28
+ import {
29
+ CACHE_DIR_NAME,
30
+ cleanupProxyCache
31
+ } from "./chunk-GPE3WWTO.js";
28
32
  import "./chunk-ALVXFXUG.js";
29
33
  import {
30
34
  formatBytes
31
35
  } from "./chunk-K2FLNJVB.js";
32
- import "./chunk-T7UHTUUE.js";
33
36
  import "./chunk-5CS4T6C6.js";
34
- import "./chunk-T6AGUTZJ.js";
37
+ import "./chunk-EOVYQ3IG.js";
35
38
  import {
36
39
  defineCommand
37
40
  } from "./chunk-S3S4TGEH.js";
38
41
  import {
39
42
  setCommandExitCode
40
- } from "./chunk-PBN6GBJE.js";
43
+ } from "./chunk-JVBRJMOP.js";
41
44
  import {
42
45
  c
43
46
  } from "./chunk-ZTZA4UWZ.js";
44
47
  import "./chunk-KLIKCX6Q.js";
45
48
  import "./chunk-EVMY7IPL.js";
46
49
  import "./chunk-7FMUTGOH.js";
47
- import "./chunk-E24HSMZV.js";
48
- import {
49
- withMeta
50
- } from "./chunk-VAJIPSN6.js";
51
- import "./chunk-K4WIOZFP.js";
52
- import "./chunk-XUXGIA7H.js";
53
- import "./chunk-WERLJGIC.js";
54
- import "./chunk-ISN5GRYI.js";
55
- import "./chunk-XEWHUPFS.js";
56
- import "./chunk-3DKN5WKL.js";
57
- import "./chunk-EOVYQ3IG.js";
58
- import "./chunk-6BEFEWFB.js";
59
- import "./chunk-3PULCIY5.js";
60
- import "./chunk-XT6MXC7A.js";
61
50
  import {
62
51
  EXTRACT_CACHE_MIN_AGE_MS,
63
52
  directorySizeBytes,
64
53
  gcExtractionCache,
65
54
  resolveExtractCacheDir
66
- } from "./chunk-YPBIAONI.js";
67
- import "./chunk-4IEH6EAC.js";
68
- import "./chunk-W2LGJSEN.js";
69
- import "./chunk-LBQFLUIY.js";
70
- import "./chunk-BAZ5LCR3.js";
55
+ } from "./chunk-73LTCCZI.js";
56
+ import "./chunk-VFBAKPRC.js";
57
+ import "./chunk-RQVDTPGD.js";
58
+ import "./chunk-WT4PYV2J.js";
59
+ import "./chunk-GMNHAOMJ.js";
71
60
  import "./chunk-VC76R6W2.js";
72
61
  import "./chunk-UJKQWGFF.js";
73
62
  import "./chunk-YMS5FOMC.js";
74
63
  import "./chunk-OFQWTKPW.js";
75
64
  import "./chunk-DPVXBVLL.js";
65
+ import "./chunk-3GXQPCJC.js";
76
66
  import "./chunk-634HSJ3J.js";
77
67
  import "./chunk-FXMKHHPO.js";
78
- import "./chunk-RQVDTPGD.js";
79
- import "./chunk-D3ZWBHZP.js";
80
- import "./chunk-537IYAEE.js";
81
- import "./chunk-GK2FIKIQ.js";
82
- import "./chunk-6BNTGNGD.js";
68
+ import "./chunk-CYBXXSC4.js";
69
+ import "./chunk-DYAPHNV6.js";
70
+ import "./chunk-T6AGUTZJ.js";
71
+ import "./chunk-XT6MXC7A.js";
72
+ import "./chunk-4UMPIPCQ.js";
73
+ import "./chunk-ADDHW2FS.js";
83
74
  import "./chunk-VAS6HQX3.js";
75
+ import "./chunk-6BNTGNGD.js";
84
76
  import "./chunk-OYLO6TYK.js";
85
- import "./chunk-32GKETR7.js";
77
+ import "./chunk-MMQ52NIZ.js";
86
78
  import "./chunk-BSQ7XANM.js";
87
79
  import "./chunk-SDYDNHEE.js";
88
- import "./chunk-TYXH3EKP.js";
89
80
  import "./chunk-IXLUTE6N.js";
81
+ import "./chunk-TYXH3EKP.js";
82
+ import "./chunk-W2LGJSEN.js";
83
+ import {
84
+ withMeta
85
+ } from "./chunk-ANR6WOC3.js";
86
+ import "./chunk-K4WIOZFP.js";
87
+ import "./chunk-XUXGIA7H.js";
88
+ import "./chunk-WERLJGIC.js";
89
+ import "./chunk-ISN5GRYI.js";
90
+ import "./chunk-RZXUQR42.js";
90
91
  import "./chunk-KNU5COPB.js";
91
92
  import "./chunk-KGPLIH7B.js";
92
- import "./chunk-3GXQPCJC.js";
93
93
  import "./chunk-M2WBOQ2Q.js";
94
94
 
95
95
  // src/commands/clean.ts
package/dist/cli.js CHANGED
@@ -10,15 +10,15 @@ import {
10
10
  } from "./chunk-NXMYHJAL.js";
11
11
  import {
12
12
  resolveExtraPositionals
13
- } from "./chunk-GZVP4TWN.js";
13
+ } from "./chunk-7JAD4MEW.js";
14
14
  import "./chunk-K4WKGXRC.js";
15
+ import {
16
+ isRenderSucceeded
17
+ } from "./chunk-66LREXGS.js";
15
18
  import {
16
19
  assertKnownFlags,
17
20
  guardSwallowedFlagValues
18
- } from "./chunk-UPFUC4DB.js";
19
- import {
20
- isRenderSucceeded
21
- } from "./chunk-L3YOGIPG.js";
21
+ } from "./chunk-HTIUNMTP.js";
22
22
  import {
23
23
  defineCommand,
24
24
  parseArgs,
@@ -32,16 +32,17 @@ import {
32
32
  CliRuntimeError,
33
33
  CliUsageError,
34
34
  consumeCommandResult,
35
+ outputWritten,
35
36
  registerRootExitCodeSanitizer,
36
37
  registerRootExitRequester
37
- } from "./chunk-PBN6GBJE.js";
38
+ } from "./chunk-JVBRJMOP.js";
38
39
  import "./chunk-ZTZA4UWZ.js";
39
40
  import {
40
41
  isDevMode
41
42
  } from "./chunk-ISN5GRYI.js";
42
43
  import {
43
44
  VERSION
44
- } from "./chunk-XEWHUPFS.js";
45
+ } from "./chunk-RZXUQR42.js";
45
46
  import "./chunk-M2WBOQ2Q.js";
46
47
 
47
48
  // src/cli.ts
@@ -91,7 +92,7 @@ function guardLeafFlags(cmd, path, ctx, rawArgs) {
91
92
  }
92
93
  async function reportCommandFailure(command2, err) {
93
94
  try {
94
- const { trackCommandFailure } = await import("./events-AIZODZMP.js");
95
+ const { trackCommandFailure } = await import("./events-BLJGWMNP.js");
95
96
  trackCommandFailure(command2, err);
96
97
  } catch {
97
98
  }
@@ -171,55 +172,55 @@ async function assertStudioWorkspaceBuilt() {
171
172
  });
172
173
  }
173
174
  var commandLoaders = {
174
- init: () => import("./init-D7GYHSX5.js").then((m) => m.default),
175
- add: () => import("./add-AWQ2EGBU.js").then((m) => m.default),
176
- catalog: () => import("./catalog-CRPOPVD5.js").then((m) => m.default),
177
- "media-use": () => import("./media-use-4XXGABIL.js").then((m) => m.default),
178
- play: () => import("./play-MYI7BYKS.js").then((m) => m.default),
179
- present: () => import("./present-WYXQDV4Q.js").then((m) => m.default),
180
- preview: () => assertStudioWorkspaceBuilt().then(() => import("./preview-535HTWQO.js").then((m) => m.default)),
181
- publish: () => import("./publish-53EBL7OO.js").then((m) => m.default),
182
- open: () => import("./open-I254NY5J.js").then((m) => m.default),
183
- "catch-up": () => import("./catch-up-MHWGUQ42.js").then((m) => m.default),
184
- render: () => import("./render-3MELF6Y3.js").then((m) => m.default),
185
- lint: () => import("./lint-FHLER36Y.js").then((m) => m.default),
186
- check: () => import("./check-DJCUOUDI.js").then((m) => m.default),
187
- beats: () => import("./beats-P4LENNVT.js").then((m) => m.default),
188
- audio: () => import("./audio-Q7I473UN.js").then((m) => m.default),
189
- "normalize-audio": () => import("./normalize-audio-7PRYX6QM.js").then((m) => m.default),
190
- inspect: () => import("./inspect-CUKWHCGS.js").then((m) => m.default),
191
- keyframes: () => import("./keyframes-XCUPHBW3.js").then((m) => m.default),
192
- layout: () => import("./layout-JD2IOBMS.js").then((m) => m.default),
193
- info: () => import("./info-KMXFLD3Q.js").then((m) => m.default),
194
- compositions: () => import("./compositions-EZYJEHQ3.js").then((m) => m.default),
195
- timeline: () => import("./timeline-KLD24EN6.js").then((m) => m.default),
196
- history: () => import("./history-LDGQ2IZJ.js").then((m) => m.default),
197
- benchmark: () => import("./benchmark-AXOAECN3.js").then((m) => m.default),
198
- browser: () => import("./browser-XZKB5HGJ.js").then((m) => m.default),
199
- "remove-background": () => import("./remove-background-OBYHMPD4.js").then((m) => m.default),
200
- transcribe: () => import("./transcribe-A6IKK7VS.js").then((m) => m.default),
175
+ init: () => import("./init-JXPXWV3G.js").then((m) => m.default),
176
+ add: () => import("./add-HW3ZGR36.js").then((m) => m.default),
177
+ catalog: () => import("./catalog-AKTXS7OJ.js").then((m) => m.default),
178
+ "media-use": () => import("./media-use-JBN57JE3.js").then((m) => m.default),
179
+ play: () => import("./play-2VG77FT6.js").then((m) => m.default),
180
+ present: () => import("./present-OONXQLJG.js").then((m) => m.default),
181
+ preview: () => assertStudioWorkspaceBuilt().then(() => import("./preview-6RZJFU76.js").then((m) => m.default)),
182
+ publish: () => import("./publish-KZBTBWFO.js").then((m) => m.default),
183
+ open: () => import("./open-OFT2GIDG.js").then((m) => m.default),
184
+ "catch-up": () => import("./catch-up-O3VZMPVE.js").then((m) => m.default),
185
+ render: () => import("./render-FIH37HJA.js").then((m) => m.default),
186
+ lint: () => import("./lint-5YMAF3L7.js").then((m) => m.default),
187
+ check: () => import("./check-6E46NIWI.js").then((m) => m.default),
188
+ beats: () => import("./beats-KGIOEBLW.js").then((m) => m.default),
189
+ audio: () => import("./audio-F5OIQVJO.js").then((m) => m.default),
190
+ "normalize-audio": () => import("./normalize-audio-UXR6WQ7Q.js").then((m) => m.default),
191
+ inspect: () => import("./inspect-WZNYQ5AB.js").then((m) => m.default),
192
+ keyframes: () => import("./keyframes-HEOC4CT4.js").then((m) => m.default),
193
+ layout: () => import("./layout-7WEUNO6T.js").then((m) => m.default),
194
+ info: () => import("./info-ENI5MP4W.js").then((m) => m.default),
195
+ compositions: () => import("./compositions-HTSQ6SUJ.js").then((m) => m.default),
196
+ timeline: () => import("./timeline-GSH743JE.js").then((m) => m.default),
197
+ history: () => import("./history-5TOOCF2Y.js").then((m) => m.default),
198
+ benchmark: () => import("./benchmark-ZNY2L7HN.js").then((m) => m.default),
199
+ browser: () => import("./browser-REAO7RU4.js").then((m) => m.default),
200
+ "remove-background": () => import("./remove-background-BIQNMIR7.js").then((m) => m.default),
201
+ transcribe: () => import("./transcribe-4SHNDPWW.js").then((m) => m.default),
201
202
  usage: () => import("./usage-HG4WMM7A.js").then((m) => m.default),
202
- models: () => import("./models-NZAOSI5A.js").then((m) => m.default),
203
- tts: () => import("./tts-EDK3QS7M.js").then((m) => m.default),
204
- docs: () => import("./docs-MPOM3PHH.js").then((m) => m.default),
205
- doctor: () => import("./doctor-XSKSZRR7.js").then((m) => m.default),
206
- clean: () => import("./clean-GJNDVVDI.js").then((m) => m.default),
207
- upgrade: () => import("./upgrade-7EV4F2R7.js").then((m) => m.default),
208
- skills: () => import("./skills-DXTQPCAO.js").then((m) => m.default),
209
- feedback: () => import("./feedback-GE3VDZOH.js").then((m) => m.default),
210
- telemetry: () => import("./telemetry-CQYHCCPL.js").then((m) => m.default),
211
- events: () => import("./events-RGS4MAH4.js").then((m) => m.default),
212
- validate: () => import("./validate-LZF46W3V.js").then((m) => m.default),
213
- snapshot: () => import("./snapshot-PWFHQU5E.js").then((m) => m.default),
214
- "media-treatment": () => import("./media-treatment-MDAQRITV.js").then((m) => m.mediaTreatmentCommand),
215
- "grade-compare": () => import("./grade-compare-FAYVPXUR.js").then((m) => m.default),
216
- compare: () => import("./compare-XWM7FAYM.js").then((m) => m.default),
217
- capture: () => import("./capture-NWARHRHR.js").then((m) => m.default),
218
- lambda: () => import("./lambda-IMORFJHN.js").then((m) => m.default),
219
- cloudrun: () => import("./cloudrun-2BKGY53X.js").then((m) => m.default),
220
- cloud: () => import("./cloud-JCWNMKXC.js").then((m) => m.default),
221
- auth: () => import("./auth-I7CBTEUS.js").then((m) => m.default),
222
- figma: () => import("./figma-3R4XST4Y.js").then((m) => m.default)
203
+ models: () => import("./models-COEK6LXG.js").then((m) => m.default),
204
+ tts: () => import("./tts-A2WILYGN.js").then((m) => m.default),
205
+ docs: () => import("./docs-UEWLIP6D.js").then((m) => m.default),
206
+ doctor: () => import("./doctor-UGFVQZHI.js").then((m) => m.default),
207
+ clean: () => import("./clean-WNEIVBF3.js").then((m) => m.default),
208
+ upgrade: () => import("./upgrade-7YYYNAPF.js").then((m) => m.default),
209
+ skills: () => import("./skills-J6MBGS5O.js").then((m) => m.default),
210
+ feedback: () => import("./feedback-AZ3SJ5HF.js").then((m) => m.default),
211
+ telemetry: () => import("./telemetry-QG5AANZ4.js").then((m) => m.default),
212
+ events: () => import("./events-YS4OVX3I.js").then((m) => m.default),
213
+ validate: () => import("./validate-GCHAEVXM.js").then((m) => m.default),
214
+ snapshot: () => import("./snapshot-TL7TTFS6.js").then((m) => m.default),
215
+ "media-treatment": () => import("./media-treatment-FSKHPMWA.js").then((m) => m.mediaTreatmentCommand),
216
+ "grade-compare": () => import("./grade-compare-LJKK5NSY.js").then((m) => m.default),
217
+ compare: () => import("./compare-2JWQ5ABA.js").then((m) => m.default),
218
+ capture: () => import("./capture-IK6GWQDD.js").then((m) => m.default),
219
+ lambda: () => import("./lambda-2VHQ4AL2.js").then((m) => m.default),
220
+ cloudrun: () => import("./cloudrun-4NEJRE4T.js").then((m) => m.default),
221
+ cloud: () => import("./cloud-6GSSDCJL.js").then((m) => m.default),
222
+ auth: () => import("./auth-YVQLRS3T.js").then((m) => m.default),
223
+ figma: () => import("./figma-DRYIJQHV.js").then((m) => m.default)
223
224
  };
224
225
  var subCommands = Object.fromEntries(
225
226
  Object.entries(commandLoaders).map(([name, load]) => [name, trackCommandFailures(load)])
@@ -243,7 +244,7 @@ var _printStalePinNotice;
243
244
  var _printSkillsUpdateNotice;
244
245
  var telemetryReady = Promise.resolve();
245
246
  if (!isHelp && command !== "telemetry" && command !== "events" && command !== "usage" && command !== "unknown") {
246
- telemetryReady = import("./telemetry-STEMAMAX.js").then((mod) => {
247
+ telemetryReady = import("./telemetry-LFUVHARP.js").then((mod) => {
247
248
  _flushSync = mod.flushSync;
248
249
  _trackCliError = mod.trackCliError;
249
250
  _trackCommandResult = mod.trackCommandResult;
@@ -253,23 +254,23 @@ if (!isHelp && command !== "telemetry" && command !== "events" && command !== "u
253
254
  });
254
255
  }
255
256
  if (!isHelp && !hasJsonFlag && command !== "upgrade" && command !== "events" && command !== "telemetry" && command !== "skills" && command !== "usage") {
256
- import("./autoUpdate-KY5TLSN7.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
257
+ import("./autoUpdate-EG4ZFW4D.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
257
258
  });
258
- import("./updateCheck-FHCAAAXA.js").then(async (mod) => {
259
+ import("./updateCheck-W7FTFOQF.js").then(async (mod) => {
259
260
  _printUpdateNotice = mod.printUpdateNotice;
260
261
  _printStalePinNotice = mod.printStalePinNotice;
261
262
  const result = mod.cachedUpdateCheck();
262
263
  if (result.updateAvailable) {
263
- const auto = await import("./autoUpdate-KY5TLSN7.js").catch(() => null);
264
+ const auto = await import("./autoUpdate-EG4ZFW4D.js").catch(() => null);
264
265
  auto?.scheduleBackgroundInstall(result.latest, result.current);
265
266
  }
266
267
  }).catch(() => {
267
268
  });
268
- import("./skillsUpdateCheck-ULXRGLDU.js").then((mod) => {
269
+ import("./skillsUpdateCheck-ZAXNLBF3.js").then((mod) => {
269
270
  _printSkillsUpdateNotice = mod.printSkillsUpdateNotice;
270
271
  }).catch(() => {
271
272
  });
272
- import("./backgroundChecks-4Q3VVK5W.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
273
+ import("./backgroundChecks-WINNQVR2.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
273
274
  });
274
275
  }
275
276
  var _appHistoryNotice = null;
@@ -310,7 +311,10 @@ registerRootExitRequester((exitCode) => {
310
311
  exitCode,
311
312
  kind: exitCode === 0 ? "success" : "runtime_error",
312
313
  presented: true
313
- }).finally(() => process.exit(exitCode));
314
+ }).finally(async () => {
315
+ await outputWritten();
316
+ process.exit(exitCode);
317
+ });
314
318
  });
315
319
  registerRootExitCodeSanitizer(() => {
316
320
  if (process.exitCode !== void 0 && process.exitCode !== 0) {
@@ -387,7 +391,7 @@ process.on("unhandledRejection", (reason) => {
387
391
  emitCliErrorEvent("unhandled_rejection", error);
388
392
  });
389
393
  async function showUsage(cmd, parent) {
390
- const { showUsage: impl } = await import("./help-C3UQMYXK.js");
394
+ const { showUsage: impl } = await import("./help-TQBGYOID.js");
391
395
  return impl(cmd, parent);
392
396
  }
393
397
  async function showRequestedUsage() {
@@ -55,10 +55,10 @@ ${c.bold("AUTH:")}
55
55
  var cloud_default = defineCommand({
56
56
  meta: { name: "cloud", description: "Render HyperFrames compositions on the HeyGen cloud" },
57
57
  subCommands: {
58
- render: () => import("./render-5BXTEEG7.js").then((m) => m.default),
59
- list: () => import("./list-MGCFG5MA.js").then((m) => m.default),
60
- get: () => import("./get-4FKJP6IM.js").then((m) => m.default),
61
- delete: () => import("./delete-JWWMOITI.js").then((m) => m.default)
58
+ render: () => import("./render-65K3K6SD.js").then((m) => m.default),
59
+ list: () => import("./list-BIE3X7CO.js").then((m) => m.default),
60
+ get: () => import("./get-DDEAOFPB.js").then((m) => m.default),
61
+ delete: () => import("./delete-GHQ5UYM7.js").then((m) => m.default)
62
62
  },
63
63
  async run({ args }) {
64
64
  if (!args._?.[0]) console.log(HELP);
@@ -15,10 +15,10 @@ import {
15
15
  reportVariableIssues,
16
16
  resolveVariablesArg,
17
17
  validateVariablesAgainstProject
18
- } from "./chunk-OR5WCFWZ.js";
18
+ } from "./chunk-3Q47QC46.js";
19
19
  import {
20
20
  defaultCloudFps
21
- } from "./chunk-S3RYRF3W.js";
21
+ } from "./chunk-F6WHPHLF.js";
22
22
  import "./chunk-K2FLNJVB.js";
23
23
  import "./chunk-442JNXRM.js";
24
24
  import {
@@ -26,15 +26,16 @@ import {
26
26
  } from "./chunk-S3S4TGEH.js";
27
27
  import {
28
28
  failCommand
29
- } from "./chunk-PBN6GBJE.js";
29
+ } from "./chunk-JVBRJMOP.js";
30
30
  import {
31
31
  c
32
32
  } from "./chunk-ZTZA4UWZ.js";
33
33
  import {
34
34
  DISTRIBUTED_FPS,
35
35
  isDistributedFps
36
- } from "./chunk-LBQFLUIY.js";
37
- import "./chunk-BAZ5LCR3.js";
36
+ } from "./chunk-VFBAKPRC.js";
37
+ import "./chunk-RQVDTPGD.js";
38
+ import "./chunk-GMNHAOMJ.js";
38
39
  import "./chunk-VC76R6W2.js";
39
40
  import "./chunk-UJKQWGFF.js";
40
41
  import "./chunk-YMS5FOMC.js";
@@ -42,12 +43,11 @@ import "./chunk-OFQWTKPW.js";
42
43
  import "./chunk-DPVXBVLL.js";
43
44
  import "./chunk-634HSJ3J.js";
44
45
  import "./chunk-FXMKHHPO.js";
45
- import "./chunk-RQVDTPGD.js";
46
- import "./chunk-32GKETR7.js";
46
+ import "./chunk-MMQ52NIZ.js";
47
47
  import "./chunk-BSQ7XANM.js";
48
48
  import "./chunk-SDYDNHEE.js";
49
- import "./chunk-TYXH3EKP.js";
50
49
  import "./chunk-IXLUTE6N.js";
50
+ import "./chunk-TYXH3EKP.js";
51
51
  import {
52
52
  normalizeErrorMessage
53
53
  } from "./chunk-KNU5COPB.js";
@@ -107,20 +107,29 @@
107
107
  return `${uniqueSelectorFor(parent)} > ${element.tagName.toLowerCase()}:nth-of-type(${index})`;
108
108
  }
109
109
 
110
+ // Color grading paints an <img>/<video> into a canvas the runtime inserts right after it; that canvas answers
111
+ // to the element the author wrote. ponytail: render-frame siblings sit between them only in render, not check.
112
+ const GRADED_STAND_IN = "[data-hf-color-grading-canvas]";
113
+ function authoredElement(element) {
114
+ return (element.matches(GRADED_STAND_IN) && element.previousElementSibling) || element;
115
+ }
116
+
110
117
  function hasIgnoreFlag(element) {
111
- return !!element.closest("[data-layout-ignore], [data-layout-check='ignore']");
118
+ return !!authoredElement(element).closest("[data-layout-ignore], [data-layout-check='ignore']");
112
119
  }
113
120
 
114
121
  function hasAllowOverflowFlag(element) {
115
- return !!element.closest("[data-layout-allow-overflow]");
122
+ return !!authoredElement(element).closest("[data-layout-allow-overflow]");
116
123
  }
117
124
 
118
125
  function hasAllowCaptionZoneFlag(element) {
119
- return !!element.closest("[data-layout-allow-caption-zone]");
126
+ return !!authoredElement(element).closest("[data-layout-allow-caption-zone]");
120
127
  }
121
128
 
122
129
  function hasTextClipOptOut(element) {
123
- return hasAllowOverflowFlag(element) || element.hasAttribute("data-layout-bleed");
130
+ return (
131
+ hasAllowOverflowFlag(element) || authoredElement(element).hasAttribute("data-layout-bleed")
132
+ );
124
133
  }
125
134
 
126
135
  function opacityChain(element) {
@@ -1935,6 +1944,8 @@
1935
1944
  function canvasEdgeIssues(root, rootRect, time, tolerance) {
1936
1945
  const issues = [];
1937
1946
  for (const canvas of Array.from(root.querySelectorAll("canvas"))) {
1947
+ // A graded stand-in shows the author's media, not drawn art; the media itself is never read here.
1948
+ if (canvas.matches(GRADED_STAND_IN)) continue;
1938
1949
  if (!isVisibleElement(canvas) || hasAllowOverflowFlag(canvas)) continue;
1939
1950
  if (!canvas.width || !canvas.height) continue;
1940
1951
  const rect = toRect(canvas.getBoundingClientRect());
@@ -1,6 +1,7 @@
1
1
  // Shared "what counts as motion" classifier, injected before layout-audit.browser.js and motion-sample.browser.js.
2
2
  // The frozen-sweep guard (sweep_static) and keepsMoving liveness (motion_frozen) meet in one decision, so both
3
3
  // must count the same channels as motion; only quantization differs (liveness buckets 2px and 0.08 opacity).
4
+ // Where both read still, check asks framesDiffer below, which compares the rendered frames.
4
5
  // A channel reader returns a string equal across samples iff it did not visibly change, "" when it does not apply.
5
6
  (function () {
6
7
  const IGNORE_TAGS = new Set(["SCRIPT", "STYLE", "TEMPLATE", "NOSCRIPT", "META", "LINK"]);
@@ -403,6 +404,57 @@
403
404
  return parts.join("|");
404
405
  }
405
406
 
407
+ // --- Rendered frames: the last word where DOM channels cannot see paint ------
408
+ // A frame moved when enough pixels changed by more than render noise (antialiasing, dither) on some channel.
409
+ // ponytail: fewer than FRAME_MIN_CHANGED_PIXELS changed pixels reads as still; lower it for tinier motion.
410
+ const FRAME_CHANNEL_NOISE = 24;
411
+ const FRAME_MIN_CHANGED_PIXELS = 16;
412
+ let reference = { png: "", pixels: null };
413
+
414
+ // Decoded in the page like the contrast pass, so no image library is needed.
415
+ async function framePixels(png) {
416
+ const image = new Image();
417
+ image.src = "data:image/png;base64," + png;
418
+ await image.decode();
419
+ const canvas = document.createElement("canvas");
420
+ canvas.width = image.naturalWidth;
421
+ canvas.height = image.naturalHeight;
422
+ const ctx2d = canvas.getContext("2d", { willReadFrequently: true });
423
+ ctx2d.drawImage(image, 0, 0);
424
+ return ctx2d.getImageData(0, 0, canvas.width, canvas.height);
425
+ }
426
+
427
+ function pixelChanged(a, b, i) {
428
+ return (
429
+ Math.abs(a[i] - b[i]) > FRAME_CHANNEL_NOISE ||
430
+ Math.abs(a[i + 1] - b[i + 1]) > FRAME_CHANNEL_NOISE ||
431
+ Math.abs(a[i + 2] - b[i + 2]) > FRAME_CHANNEL_NOISE ||
432
+ Math.abs(a[i + 3] - b[i + 3]) > FRAME_CHANNEL_NOISE
433
+ );
434
+ }
435
+
436
+ // Base64 PNG screenshots in, "did anything visible change" out. The first frame is usually a run's
437
+ // reference compared against many, so its decode is kept.
438
+ // fallow-ignore-next-line complexity
439
+ async function framesDiffer(first, second) {
440
+ if (first === second) return false;
441
+ if (!first || !second) return true;
442
+ if (reference.png !== first) reference = { png: first, pixels: await framePixels(first) };
443
+ return pixelsDiffer(reference.pixels, await framePixels(second));
444
+ }
445
+
446
+ // fallow-ignore-next-line complexity
447
+ function pixelsDiffer(a, b) {
448
+ if (a.width !== b.width || a.height !== b.height) return true;
449
+ let changed = 0;
450
+ for (let i = 0; i < a.data.length; i += 4) {
451
+ if (pixelChanged(a.data, b.data, i) && ++changed >= FRAME_MIN_CHANGED_PIXELS) return true;
452
+ }
453
+ return false;
454
+ }
455
+
456
+ window.__hyperframesFramesDiffer = framesDiffer;
457
+
406
458
  window.__hyperframesMotionSignature = {
407
459
  compositionRoot,
408
460
  isVisibleElement,