hyperframes 0.8.140 → 0.8.142

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 (167) hide show
  1. package/dist/{add-7SPPQB64.js → add-YS2RCWEK.js} +11 -11
  2. package/dist/{animatedGifPrep-HN3CJSFX.js → animatedGifPrep-SAMCDT7T.js} +6 -7
  3. package/dist/{asset-AZMFUTRL.js → asset-BLWC2NWB.js} +2 -2
  4. package/dist/{assetCataloger-TQUWYLHE.js → assetCataloger-FVNBBRP3.js} +2 -2
  5. package/dist/{auth-XGY74R4A.js → auth-DRZB7OAC.js} +5 -4
  6. package/dist/{autoUpdate-44NTJBQU.js → autoUpdate-I5I3BOJK.js} +2 -2
  7. package/dist/{backgroundChecks-ET4DJEPG.js → backgroundChecks-VR2QHGNY.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-HTWWNF3P.js → batchRender-4YUHQI6X.js} +3 -3
  10. package/dist/{beats-4GYTZUZG.js → beats-7OT7ALV3.js} +11 -12
  11. package/dist/{benchmark-CJQHE3QN.js → benchmark-Q2XQCRTR.js} +8 -8
  12. package/dist/{browser-NXOVPGDG.js → browser-7VAWQQZC.js} +3 -3
  13. package/dist/{bundleWithLocalizedFonts-6PJP54TC.js → bundleWithLocalizedFonts-DDMLLL2R.js} +2 -2
  14. package/dist/{capture-EHOMO4MP.js → capture-HEJS6M5A.js} +74 -33
  15. package/dist/{capture-5EHGRJZM.js → capture-U7ABPKS5.js} +24 -8
  16. package/dist/{catalog-PTX5Z52R.js → catalog-DVJ3XPDN.js} +11 -11
  17. package/dist/{catch-up-I45SPSCU.js → catch-up-DF6AVSN2.js} +4 -4
  18. package/dist/{check-LJ7LG7OI.js → check-KXORRWAE.js} +75 -72
  19. package/dist/{checkBrowser-6EK5E4PG.js → checkBrowser-J7HZJTRH.js} +28 -29
  20. package/dist/{chunk-XTFJOR3K.js → chunk-4SFGME7K.js} +1 -1
  21. package/dist/{chunk-EDYBFSPE.js → chunk-6RAD4BCC.js} +5 -8
  22. package/dist/{chunk-MTVDXB6S.js → chunk-6UM3R7PP.js} +21 -13
  23. package/dist/{chunk-IRBESGJ7.js → chunk-6UYZB4TY.js} +1 -1
  24. package/dist/{chunk-VVJFZU6B.js → chunk-75JJVANE.js} +2 -2
  25. package/dist/{chunk-F3SPK6SO.js → chunk-7FCDA4RH.js} +1 -1
  26. package/dist/{chunk-R4QIE6UY.js → chunk-7M4KAPAA.js} +92 -31
  27. package/dist/{chunk-HKCNZITN.js → chunk-AM5L5YIA.js} +1 -1
  28. package/dist/{chunk-BRITLL56.js → chunk-B4P5VDFQ.js} +1 -1
  29. package/dist/{chunk-2GMKWYEH.js → chunk-B6SMSALD.js} +53 -12
  30. package/dist/{chunk-DQNOPYAG.js → chunk-BPZVDBHY.js} +1 -1
  31. package/dist/{chunk-246MOR5U.js → chunk-DKSDVDXG.js} +175 -162
  32. package/dist/{chunk-6U3MN4HW.js → chunk-DPHJKWP5.js} +2 -2
  33. package/dist/{chunk-MUINFURL.js → chunk-DZEVA7DI.js} +2 -2
  34. package/dist/{chunk-KMKWRIMC.js → chunk-EFDXGAAD.js} +1 -1
  35. package/dist/{chunk-LQG6GPVK.js → chunk-FWRNQOLT.js} +1 -1
  36. package/dist/{chunk-IFY57LUW.js → chunk-FZK35GT4.js} +1 -1
  37. package/dist/{chunk-PUBKHEEA.js → chunk-GYE63V4P.js} +10 -10
  38. package/dist/{chunk-WQBA3MH4.js → chunk-H2X52H2N.js} +3 -3
  39. package/dist/{chunk-QG3PDRSO.js → chunk-HMUF7FEO.js} +1 -1
  40. package/dist/{chunk-TPECLKPA.js → chunk-IDX52YJN.js} +5 -5
  41. package/dist/{chunk-ABJNXQUA.js → chunk-IMY4QQTQ.js} +7 -7
  42. package/dist/{chunk-WY5OODN5.js → chunk-IW2CKH6A.js} +3645 -3
  43. package/dist/{chunk-X3X3VETN.js → chunk-IXCTG2WY.js} +3 -3
  44. package/dist/chunk-J4UX3RS3.js +3717 -0
  45. package/dist/{chunk-DDQ4LOML.js → chunk-JLKMWY2T.js} +1 -1
  46. package/dist/{chunk-ASW6NWON.js → chunk-JOTLPC6S.js} +1 -1
  47. package/dist/{chunk-MU6C2VP6.js → chunk-JU6Y5TTZ.js} +2 -2
  48. package/dist/{chunk-PPKFM5WE.js → chunk-KYN364DU.js} +2 -2
  49. package/dist/{chunk-C2JUHIG5.js → chunk-LBKDQKWV.js} +1 -1
  50. package/dist/{chunk-PB3P4MKP.js → chunk-LJAU4TPS.js} +1 -1
  51. package/dist/{chunk-PFJFHNU3.js → chunk-LQASVU3I.js} +3 -3
  52. package/dist/{chunk-KJLY2SDJ.js → chunk-LTGGTEMA.js} +2 -2
  53. package/dist/{chunk-L2H2L22P.js → chunk-MVTUV4TP.js} +2 -2
  54. package/dist/{chunk-QBK7WKHT.js → chunk-OKCR3JTO.js} +104 -4
  55. package/dist/{chunk-BQKEGPPL.js → chunk-OSUKETIH.js} +1 -1
  56. package/dist/chunk-P36MALQF.js +15 -0
  57. package/dist/{chunk-KECV5G4V.js → chunk-QGRFOOLE.js} +10 -10
  58. package/dist/{chunk-5IKJONRY.js → chunk-QXPCARFE.js} +1 -1
  59. package/dist/{chunk-WKTHUC2R.js → chunk-R2JEKLDZ.js} +1 -1
  60. package/dist/{chunk-TYT2TLJR.js → chunk-TY6XOHEM.js} +1 -1
  61. package/dist/{chunk-SLEPCESN.js → chunk-WGVOWWVK.js} +2 -2
  62. package/dist/{chunk-KFQNMY36.js → chunk-WSGY5CDQ.js} +5 -5
  63. package/dist/{chunk-PE2I3AFA.js → chunk-WTMUCJ6Z.js} +1 -1
  64. package/dist/{chunk-JSGANFFH.js → chunk-XGMNQQTJ.js} +1 -1
  65. package/dist/{chunk-BJ5JWOES.js → chunk-XTLBLWOV.js} +1 -1
  66. package/dist/{chunk-QP3BRKGF.js → chunk-YFT3BL7N.js} +19 -1
  67. package/dist/{chunk-MHK5DE2P.js → chunk-YHRZQJXH.js} +59 -37
  68. package/dist/{clean-Y3AQITOX.js → clean-KTHTV5G5.js} +12 -13
  69. package/dist/cli.js +52 -52
  70. package/dist/{cloud-TDPOMBZF.js → cloud-ARSZWALC.js} +4 -4
  71. package/dist/{cloudrun-FPAVAVHP.js → cloudrun-NM7RXOCL.js} +3 -3
  72. package/dist/commands/layout-audit.browser.js +20 -20
  73. package/dist/{compare-LHL225ND.js → compare-CY4UO3RW.js} +23 -24
  74. package/dist/{compiler-RTU3KTLF.js → compiler-VTH2D3ID.js} +3 -4
  75. package/dist/{component-L2YX7J56.js → component-FRUIAXIR.js} +3 -3
  76. package/dist/{compositions-V2UZKG7S.js → compositions-CUSY6ZYY.js} +10 -11
  77. package/dist/{delete-OXZEXUQY.js → delete-KT3VHP4L.js} +5 -5
  78. package/dist/{deterministicFonts-GTITFRSJ.js → deterministicFonts-F6WIVL2W.js} +1 -1
  79. package/dist/{dist-N33CM63P.js → dist-2GC6XKRQ.js} +8 -2
  80. package/dist/{dist-NZSQCYOF.js → dist-7SZU7MA7.js} +1 -2
  81. package/dist/{doctor-MWTPSIVD.js → doctor-4ROTBL5U.js} +8 -9
  82. package/dist/{events-4TZGQZWF.js → events-Q5PXT5UC.js} +2 -2
  83. package/dist/{events-7VJJGC3D.js → events-QJDVMKSR.js} +3 -3
  84. package/dist/{feedback-HSGAPVN7.js → feedback-PQ7TWESA.js} +10 -10
  85. package/dist/{figma-AMC6FAK3.js → figma-JN5DDBDS.js} +3 -3
  86. package/dist/fontLocalizeCli.js +9 -10
  87. package/dist/{get-Y7DFEFYM.js → get-KT6OTERO.js} +5 -5
  88. package/dist/{gpuPolicy-A45VSUKR.js → gpuPolicy-LCBWVGEH.js} +6 -7
  89. package/dist/{grade-compare-ERSA3OUI.js → grade-compare-VS3RP73G.js} +23 -24
  90. package/dist/{help-TW2AADLZ.js → help-AD6FIZIO.js} +1 -1
  91. package/dist/{history-DKGDSVWF.js → history-ZRWYRY7R.js} +5 -5
  92. package/dist/hyperframe-runtime.js +54 -54
  93. package/dist/hyperframe.manifest.json +1 -1
  94. package/dist/hyperframe.runtime.iife.js +54 -54
  95. package/dist/hyperframes-player.global.js +3 -3
  96. package/dist/{info-I3NRRNX4.js → info-WBBQA2AX.js} +7 -7
  97. package/dist/{init-5Y3ZWZNF.js → init-A2XBDFGF.js} +21 -22
  98. package/dist/{inspect-BJQKBB3X.js → inspect-CLTZHA5O.js} +24 -25
  99. package/dist/{installer-27K4JS2I.js → installer-WQDRVXH4.js} +4 -4
  100. package/dist/{keyframes-6V2NZO22.js → keyframes-3FYOK6H6.js} +6 -6
  101. package/dist/{lambda-AIMF3K4A.js → lambda-Y2PA2BGS.js} +4 -4
  102. package/dist/{layout-YAPEBTU4.js → layout-4KP5O7IJ.js} +24 -25
  103. package/dist/{lint-3LWWUIV7.js → lint-V4GRFHOJ.js} +7 -8
  104. package/dist/{lintProject-LM3XZRPZ.js → lintProject-RG2KGAXB.js} +1 -2
  105. package/dist/{list-NTSGEZJ6.js → list-OQ4VED6E.js} +5 -5
  106. package/dist/{login-ZTDFGCCW.js → login-W47NKN5S.js} +20 -24
  107. package/dist/{logout-GJXZQKOA.js → logout-B4KS4A7S.js} +6 -6
  108. package/dist/{media-treatment-ARHX446F.js → media-treatment-HJYL3EME.js} +43 -24
  109. package/dist/{models-VHNQVTHG.js → models-DYBAD2GQ.js} +7 -8
  110. package/dist/{motionShot-35HCSNCI.js → motionShot-7NE2YBB3.js} +12 -13
  111. package/dist/{normalize-audio-AUC73JH3.js → normalize-audio-INKCLMS2.js} +4 -4
  112. package/dist/{open-C5LVNU3U.js → open-TYC5THVY.js} +4 -4
  113. package/dist/{pipeline-4GDTK54T.js → pipeline-EVKEPQEW.js} +6 -7
  114. package/dist/{play-U7UANF7Z.js → play-QMZEM6X3.js} +17 -18
  115. package/dist/{present-X6V6TX3E.js → present-Y7IK3C4W.js} +13 -14
  116. package/dist/{preview-K43RTRU2.js → preview-5OQRYE6A.js} +16 -17
  117. package/dist/{producer-PVMFMW23.js → producer-Q6G6JU7B.js} +1 -1
  118. package/dist/{projectConfig-PI6MEN2T.js → projectConfig-RJN3DKDB.js} +6 -6
  119. package/dist/{publication-67C7KVTL.js → publication-QCPGGN3U.js} +2 -2
  120. package/dist/{publish-RBV7EAMH.js → publish-VZLFIGYY.js} +15 -15
  121. package/dist/{refresh-MFITBIKV.js → refresh-PVHBEABE.js} +2 -2
  122. package/dist/{remove-background-Z2ECZX2Q.js → remove-background-TKOEHBA5.js} +7 -8
  123. package/dist/{render-EFU4BZRZ.js → render-KIIIF6PS.js} +13 -13
  124. package/dist/{render-YBS3XGRJ.js → render-X3NFNVEQ.js} +19 -20
  125. package/dist/{render-2GQMQBU3.js → render-XTXE5CRU.js} +3 -3
  126. package/dist/{render-batch-QC64OTB5.js → render-batch-M55YZLZ5.js} +3 -3
  127. package/dist/{renderCancellation-NTVU7IMB.js → renderCancellation-X5BEHAZU.js} +6 -7
  128. package/dist/renderSetupWorker.js +1 -2
  129. package/dist/{resolver-GBWYG3EI.js → resolver-GAMXRA42.js} +4 -4
  130. package/dist/{screenshotCapture-ECBTLCU6.js → screenshotCapture-TEUIWXWN.js} +53 -33
  131. package/dist/{sherpa-ZW6PWJS4.js → sherpa-ZYTNFHD5.js} +7 -8
  132. package/dist/skills/hyperframes-cli/references/cloud.md +1 -1
  133. package/dist/skills/media-use/SKILL.md +6 -4
  134. package/dist/skills/media-use/audio/scripts/lib/heygen.mjs +47 -4
  135. package/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +125 -18
  136. package/dist/skills/media-use/references/grading.md +4 -2
  137. package/dist/skills/media-use/references/setup-providers.md +13 -0
  138. package/dist/{skills-VKZAX5AS.js → skills-CZHVAD3J.js} +5 -5
  139. package/dist/{skillsUpdateCheck-PAY2OPDE.js → skillsUpdateCheck-6WLLX53A.js} +3 -3
  140. package/dist/{snapshot-SD5R3NWX.js → snapshot-K7BTJPYQ.js} +24 -25
  141. package/dist/{src-7SSERHNP.js → src-3I3RH3V5.js} +5 -6
  142. package/dist/{src-RXTXL3VL.js → src-YUW26JU5.js} +8 -9
  143. package/dist/{staticProjectServer-XELJXX4J.js → staticProjectServer-IKCSGN2B.js} +13 -14
  144. package/dist/{status-JA6SKQVH.js → status-LXPGSSKY.js} +6 -4
  145. package/dist/studio/assets/hyperframes-player-sAsRuV73.js +473 -0
  146. package/dist/studio/assets/{index-VAHDM_zL.js → index-B-wffzRH.js} +126 -126
  147. package/dist/studio/assets/{index-CWfuDCoA.js → index-D3Vij9t1.js} +1 -1
  148. package/dist/studio/assets/{index-Dr3Bo9uH.js → index-D5q2_7Gw.js} +1 -1
  149. package/dist/studio/index.html +1 -1
  150. package/dist/studio/index.js +46 -15
  151. package/dist/studio/index.js.map +1 -1
  152. package/dist/{studio-api-4FNUZPJ4.js → studio-api-SQ3NXFSM.js} +7 -8
  153. package/dist/{studioServer-GHLL3F2M.js → studioServer-VVEO7XCH.js} +36 -37
  154. package/dist/{telemetry-7AO77PMH.js → telemetry-FQDKR5XA.js} +3 -3
  155. package/dist/{timeline-6LTHSRXM.js → timeline-N6ZASFNE.js} +13 -14
  156. package/dist/{tokens-K6B46KNL.js → tokens-2OIIBBCW.js} +2 -2
  157. package/dist/{transcribe-CLLISRLZ.js → transcribe-4F6MK73N.js} +7 -8
  158. package/dist/{transcribe-K2OU6FZF.js → transcribe-7YTUCXDX.js} +6 -6
  159. package/dist/{updateCheck-X6UQBS6I.js → updateCheck-AZ2COZFR.js} +2 -2
  160. package/dist/{upgrade-BZFKEADI.js → upgrade-QAJEYB4X.js} +2 -2
  161. package/dist/{urlDownloader-VAVUXYEQ.js → urlDownloader-LSMFEO3R.js} +5 -6
  162. package/dist/{validate-VO5KEXWN.js → validate-GW5MDL36.js} +15 -16
  163. package/dist/{video-JV6Y4UJR.js → video-PRNOKUK3.js} +6 -7
  164. package/package.json +1 -1
  165. package/dist/chunk-24OWOBQH.js +0 -3656
  166. package/dist/chunk-B3I3XJ47.js +0 -3711
  167. package/dist/studio/assets/hyperframes-player-BLuyxnK7.js +0 -473
@@ -9,18 +9,18 @@ import {
9
9
  } from "./chunk-ZKDMAOFU.js";
10
10
  import {
11
11
  resolveProject
12
- } from "./chunk-PB3P4MKP.js";
12
+ } from "./chunk-LJAU4TPS.js";
13
13
  import "./chunk-IHFUKJOR.js";
14
14
  import {
15
15
  patchElementInHtml
16
- } from "./chunk-QBK7WKHT.js";
16
+ } from "./chunk-OKCR3JTO.js";
17
17
  import {
18
18
  findFFmpeg,
19
19
  findFFprobe,
20
20
  getFFmpegInstallHint
21
21
  } from "./chunk-TVCRUG2S.js";
22
- import "./chunk-JSGANFFH.js";
23
- import "./chunk-C2JUHIG5.js";
22
+ import "./chunk-XGMNQQTJ.js";
23
+ import "./chunk-LBKDQKWV.js";
24
24
  import "./chunk-VWG7OQKU.js";
25
25
  import "./chunk-GQJZORQP.js";
26
26
  import "./chunk-AMKC3AXA.js";
@@ -33,16 +33,17 @@ import {
33
33
  } from "./chunk-PBN6GBJE.js";
34
34
  import "./chunk-A4KQZXZI.js";
35
35
  import "./chunk-USDEMXXL.js";
36
- import "./chunk-QP3BRKGF.js";
36
+ import "./chunk-YFT3BL7N.js";
37
37
  import "./chunk-OZUQF4NB.js";
38
38
  import "./chunk-DPVXBVLL.js";
39
39
  import {
40
40
  HF_COLOR_GRADING_ATTR,
41
+ HF_COLOR_GRADING_HUE_CURVE_KEYS,
41
42
  getHfColorGradingCapabilities,
42
43
  hasHfColorGradingAuthoredValues,
43
44
  normalizeHfColorGrading,
44
45
  serializeHfColorGrading
45
- } from "./chunk-B3I3XJ47.js";
46
+ } from "./chunk-J4UX3RS3.js";
46
47
  import "./chunk-VC76R6W2.js";
47
48
  import "./chunk-YA62XGXS.js";
48
49
  import "./chunk-OFQWTKPW.js";
@@ -50,12 +51,15 @@ import "./chunk-T76PLPD6.js";
50
51
  import "./chunk-FXMKHHPO.js";
51
52
  import "./chunk-RQVDTPGD.js";
52
53
  import "./chunk-LCSMOLGX.js";
53
- import "./chunk-24OWOBQH.js";
54
+ import {
55
+ lintHyperframeHtml
56
+ } from "./chunk-IW2CKH6A.js";
54
57
  import {
55
58
  cleanAssetUrl,
56
59
  isRemoteOrInlineUrl,
57
60
  resolveExistingLocalAsset
58
61
  } from "./chunk-JFKL3WAE.js";
62
+ import "./chunk-HBBJFK6I.js";
59
63
  import "./chunk-PJ3HDUCY.js";
60
64
  import {
61
65
  isColorGradingVariableRef,
@@ -70,12 +74,12 @@ import "./chunk-2PSPARWP.js";
70
74
  import "./chunk-PMRBLBUP.js";
71
75
  import {
72
76
  withMeta
73
- } from "./chunk-DDQ4LOML.js";
77
+ } from "./chunk-JLKMWY2T.js";
74
78
  import "./chunk-K4WIOZFP.js";
75
79
  import "./chunk-XUXGIA7H.js";
76
80
  import "./chunk-WERLJGIC.js";
77
81
  import "./chunk-ISN5GRYI.js";
78
- import "./chunk-MUINFURL.js";
82
+ import "./chunk-DZEVA7DI.js";
79
83
  import {
80
84
  normalizeErrorMessage
81
85
  } from "./chunk-KNU5COPB.js";
@@ -407,7 +411,7 @@ function getMediaTreatmentCapabilityDetail(id) {
407
411
  initial: `style="${property.name}: <start>"`,
408
412
  tween: `timeline.to("<selector>", { "${property.name}": <end>, duration: <seconds> })`,
409
413
  rules: [
410
- "Author the initial value inline on the media element.",
414
+ "Once set (inline, in a stylesheet or on a parent), the property overrides the payload's value for this control: set it only on media you animate, starting at the tween's first value.",
411
415
  "Use finite keyframes on a paused timeline registered in window.__timelines.",
412
416
  "Do not use a frame-zero set, timers, random values, or onUpdate callbacks."
413
417
  ]
@@ -619,7 +623,7 @@ var examples = [
619
623
  ],
620
624
  [
621
625
  "Preview the exact mutation without writing",
622
- `hyperframes media-treatment --file compositions/scene.html --selector 'video' --grading '{"preset":"warm-daylight"}' --apply --dry-run --json`
626
+ `hyperframes media-treatment --file compositions/scene.html --selector 'video' --grading '{"preset":"warm-daylight"}' --dry-run --json`
623
627
  ],
624
628
  [
625
629
  "Measure one local media source before choosing a correction",
@@ -663,12 +667,21 @@ function mergeGradingPatch(current, patch) {
663
667
  }
664
668
  return merged;
665
669
  }
670
+ function withoutEmptyHueCurves(grading) {
671
+ if (!isRecord2(grading) || !isRecord2(grading.hueCurves)) return grading;
672
+ const hueCurves = Object.fromEntries(
673
+ Object.entries(grading.hueCurves).filter(
674
+ ([key, curve]) => !HF_COLOR_GRADING_HUE_CURVE_KEYS.some((knownKey) => knownKey === key) || !Array.isArray(curve) || curve.length > 0
675
+ )
676
+ );
677
+ return { ...grading, hueCurves };
678
+ }
666
679
  function serializeGradingPatch(before, patch) {
667
680
  assertKnownGradingShape(patch);
668
681
  if (isColorGradingVariableRef(before) && isRecord2(patch)) {
669
682
  throw new Error("Cannot merge a grading patch into an unresolved whole-grade variable");
670
683
  }
671
- const current = typeof before === "string" && !isColorGradingVariableRef(before) ? { preset: before } : before;
684
+ const current = typeof before === "string" && !isColorGradingVariableRef(before) ? { preset: before } : withoutEmptyHueCurves(before);
672
685
  const grading = mergeGradingPatch(current, patch);
673
686
  assertKnownGradingShape(grading);
674
687
  if (containsColorGradingVariableRef(grading)) {
@@ -757,15 +770,15 @@ function resolveMediaTreatmentSource(projectDir, compositionFile, source) {
757
770
  if (!asset) throw new Error(`Media file not found: ${source}`);
758
771
  return asset.resolved;
759
772
  }
760
- function parseGrading(raw, apply, clear) {
773
+ function parseGrading(raw, apply, clear, dryRun) {
761
774
  if (clear) {
762
775
  if (raw !== void 0 || apply) {
763
776
  throw new Error("Use either --apply with --grading or --clear, not both");
764
777
  }
765
778
  return void 0;
766
779
  }
767
- if (!apply) {
768
- if (raw !== void 0) throw new Error("--grading requires --apply");
780
+ if (!apply && !dryRun) {
781
+ if (raw !== void 0) throw new Error("--grading requires --apply or --dry-run");
769
782
  throw new Error("Use --apply with --grading <json> or --clear");
770
783
  }
771
784
  if (raw === void 0) throw new Error("--apply requires --grading <json>");
@@ -835,20 +848,23 @@ function analyzeTarget(args) {
835
848
  ...analyzeMediaTreatment(mediaPath)
836
849
  };
837
850
  }
838
- function prepareMutation(args) {
851
+ async function prepareMutation(args) {
839
852
  const { project, filePath } = resolveMutationFile(args);
840
853
  const selector = readOptionalString(args.selector);
841
854
  if (!selector) throw new Error("--selector is required");
842
855
  const clear = args.clear === true;
843
856
  const apply = args.apply === true;
857
+ const dryRun = args["dry-run"] === true;
844
858
  const selectorIndex = parseSelectorIndex(readOptionalString(args["selector-index"]));
845
859
  const result = applyMediaTreatmentToHtml(readFileSync(filePath, "utf8"), {
846
860
  selector,
847
861
  selectorIndex,
848
- grading: parseGrading(readOptionalString(args.grading), apply, clear),
862
+ grading: parseGrading(readOptionalString(args.grading), apply, clear, dryRun),
849
863
  clear
850
864
  });
851
- const dryRun = args["dry-run"] === true;
865
+ const lintResult = await lintHyperframeHtml(result.html);
866
+ const findings = lintResult.findings.filter(({ code }) => code.startsWith("color_grading_"));
867
+ const lint = { ok: findings.every(({ severity }) => severity !== "error"), findings };
852
868
  if (result.changed && !dryRun) writeFileSync(filePath, result.html);
853
869
  const action = result.value === null ? "clear" : "apply";
854
870
  return {
@@ -865,7 +881,10 @@ function prepareMutation(args) {
865
881
  changed: result.changed,
866
882
  dryRun,
867
883
  before: result.before,
868
- after: result.after
884
+ after: result.after,
885
+ attribute: HF_COLOR_GRADING_ATTR,
886
+ value: result.value,
887
+ lint
869
888
  }
870
889
  };
871
890
  }
@@ -883,8 +902,8 @@ function printAnalysis(args) {
883
902
  for (const warning of result.warnings) console.log(` ${c.warn(warning)}`);
884
903
  console.log(` suggested patch: ${JSON.stringify(result.suggestedPatch)}`);
885
904
  }
886
- function printMutation(args) {
887
- const { action, result, selector, payload } = prepareMutation(args);
905
+ async function printMutation(args) {
906
+ const { action, result, selector, payload } = await prepareMutation(args);
888
907
  if (args.json === true) {
889
908
  console.log(JSON.stringify(withMeta(payload), null, 2));
890
909
  return;
@@ -945,19 +964,19 @@ var mediaTreatmentCommand = defineCommand({
945
964
  clear: { type: "boolean", description: "Remove color grading from the target", default: false },
946
965
  "dry-run": {
947
966
  type: "boolean",
948
- description: "Validate and report without writing",
967
+ description: "Preview the normalized grading attribute and color-grading lint verdict without writing",
949
968
  default: false
950
969
  },
951
970
  json: { type: "boolean", description: "Output an agent-friendly JSON result", default: false }
952
971
  },
953
- run({ args }) {
972
+ async run({ args }) {
954
973
  try {
955
974
  if (isCapabilityQuery(args)) return runCapabilityQuery(args);
956
975
  if (args.analyze === true) {
957
976
  printAnalysis(args);
958
977
  return;
959
978
  }
960
- printMutation(args);
979
+ await printMutation(args);
961
980
  } catch (error) {
962
981
  printFailure(error, args.json === true);
963
982
  }
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-IHFUKJOR.js";
10
10
  import {
11
11
  createRenderCancellationScope
12
- } from "./chunk-LQG6GPVK.js";
12
+ } from "./chunk-FWRNQOLT.js";
13
13
  import {
14
14
  ft
15
15
  } from "./chunk-WMQNIQDJ.js";
@@ -20,14 +20,14 @@ import {
20
20
  failCommand,
21
21
  setCommandExitCode
22
22
  } from "./chunk-PBN6GBJE.js";
23
- import "./chunk-TPECLKPA.js";
24
- import "./chunk-6U3MN4HW.js";
23
+ import "./chunk-IDX52YJN.js";
24
+ import "./chunk-DPHJKWP5.js";
25
25
  import "./chunk-A4KQZXZI.js";
26
26
  import "./chunk-USDEMXXL.js";
27
- import "./chunk-QP3BRKGF.js";
27
+ import "./chunk-YFT3BL7N.js";
28
28
  import "./chunk-OZUQF4NB.js";
29
29
  import "./chunk-DPVXBVLL.js";
30
- import "./chunk-B3I3XJ47.js";
30
+ import "./chunk-J4UX3RS3.js";
31
31
  import "./chunk-VC76R6W2.js";
32
32
  import "./chunk-YA62XGXS.js";
33
33
  import "./chunk-OFQWTKPW.js";
@@ -37,8 +37,7 @@ import "./chunk-RQVDTPGD.js";
37
37
  import "./chunk-LAOCA3MQ.js";
38
38
  import "./chunk-LCSMOLGX.js";
39
39
  import "./chunk-TWWSYAKJ.js";
40
- import "./chunk-WY5OODN5.js";
41
- import "./chunk-24OWOBQH.js";
40
+ import "./chunk-IW2CKH6A.js";
42
41
  import "./chunk-JFKL3WAE.js";
43
42
  import "./chunk-HBBJFK6I.js";
44
43
  import "./chunk-PJ3HDUCY.js";
@@ -95,7 +94,7 @@ async function installMissing(sherpa, spin, signal) {
95
94
  }
96
95
  var wasCancelled = (err, signal, sherpa) => signal.aborted || err instanceof sherpa.DecodeCancelled;
97
96
  async function installParakeet(json) {
98
- const sherpa = await import("./sherpa-ZW6PWJS4.js");
97
+ const sherpa = await import("./sherpa-ZYTNFHD5.js");
99
98
  const unsupported = sherpa.sherpaUnsupportedReason();
100
99
  if (unsupported) fail(unsupported, json);
101
100
  const spin = json ? null : ft({ output: process.stderr });
@@ -15,35 +15,35 @@ import {
15
15
  } from "./chunk-KZI44OPA.js";
16
16
  import {
17
17
  waitForRuntimeReady
18
- } from "./chunk-KFQNMY36.js";
18
+ } from "./chunk-WSGY5CDQ.js";
19
19
  import {
20
20
  resolveCompositionViewportFromHtml
21
21
  } from "./chunk-5Z63TBTX.js";
22
22
  import {
23
23
  launchManagedBrowser,
24
24
  resolveManagedGpuMode
25
- } from "./chunk-BQKEGPPL.js";
25
+ } from "./chunk-OSUKETIH.js";
26
26
  import {
27
27
  resolveDiagnosticNavigationTimeoutMs
28
- } from "./chunk-TYT2TLJR.js";
28
+ } from "./chunk-TY6XOHEM.js";
29
29
  import "./chunk-YEIFI443.js";
30
30
  import "./chunk-IHFUKJOR.js";
31
31
  import {
32
32
  resolveLocalBrowserGpuMode
33
- } from "./chunk-PE2I3AFA.js";
33
+ } from "./chunk-WTMUCJ6Z.js";
34
34
  import "./chunk-PFCFR3KZ.js";
35
35
  import "./chunk-PBN6GBJE.js";
36
36
  import {
37
37
  assertWebGpuAdapterAvailable,
38
38
  compositionRequiresWebGpu
39
- } from "./chunk-TPECLKPA.js";
40
- import "./chunk-6U3MN4HW.js";
39
+ } from "./chunk-IDX52YJN.js";
40
+ import "./chunk-DPHJKWP5.js";
41
41
  import "./chunk-A4KQZXZI.js";
42
42
  import "./chunk-USDEMXXL.js";
43
- import "./chunk-QP3BRKGF.js";
43
+ import "./chunk-YFT3BL7N.js";
44
44
  import "./chunk-OZUQF4NB.js";
45
45
  import "./chunk-DPVXBVLL.js";
46
- import "./chunk-B3I3XJ47.js";
46
+ import "./chunk-J4UX3RS3.js";
47
47
  import "./chunk-VC76R6W2.js";
48
48
  import "./chunk-YA62XGXS.js";
49
49
  import "./chunk-OFQWTKPW.js";
@@ -51,8 +51,7 @@ import "./chunk-T76PLPD6.js";
51
51
  import "./chunk-FXMKHHPO.js";
52
52
  import "./chunk-RQVDTPGD.js";
53
53
  import "./chunk-TWWSYAKJ.js";
54
- import "./chunk-WY5OODN5.js";
55
- import "./chunk-24OWOBQH.js";
54
+ import "./chunk-IW2CKH6A.js";
56
55
  import "./chunk-JFKL3WAE.js";
57
56
  import "./chunk-HBBJFK6I.js";
58
57
  import "./chunk-PJ3HDUCY.js";
@@ -290,7 +289,7 @@ async function installSeekHelper(page) {
290
289
  }
291
290
  async function openCompositionPage(html, url, executablePath) {
292
291
  const puppeteer = await import("puppeteer-core");
293
- const { buildChromeArgs } = await import("./src-7SSERHNP.js");
292
+ const { buildChromeArgs } = await import("./src-3I3RH3V5.js");
294
293
  const size = resolveCompositionViewportFromHtml(html);
295
294
  const requestedGpuMode = resolveLocalBrowserGpuMode();
296
295
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, executablePath);
@@ -555,8 +554,8 @@ async function captureMotionPathShot(projectDir, requestsIn, outPath, opts = {})
555
554
  const fit = opts.fit ?? true;
556
555
  const camera = parseAngle(opts.angle);
557
556
  const { ensureBrowser } = await import("./manager-CT3D67CG.js");
558
- const { serveStaticProjectHtml } = await import("./staticProjectServer-XELJXX4J.js");
559
- const { bundleToSingleHtml } = await import("./compiler-RTU3KTLF.js");
557
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-IKCSGN2B.js");
558
+ const { bundleToSingleHtml } = await import("./compiler-VTH2D3ID.js");
560
559
  const html = await bundleToSingleHtml(projectDir, { entryFile: opts.entryFile });
561
560
  const server = await serveStaticProjectHtml(
562
561
  projectDir,
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-PB3P4MKP.js";
9
+ } from "./chunk-LJAU4TPS.js";
10
10
  import "./chunk-IHFUKJOR.js";
11
11
  import {
12
12
  DEFAULT_TARGET_LUFS,
@@ -20,8 +20,8 @@ import {
20
20
  resolveLocalAudioPath,
21
21
  updateAudioVolume
22
22
  } from "./chunk-U7E736AJ.js";
23
- import "./chunk-JSGANFFH.js";
24
- import "./chunk-C2JUHIG5.js";
23
+ import "./chunk-XGMNQQTJ.js";
24
+ import "./chunk-LBKDQKWV.js";
25
25
  import "./chunk-VWG7OQKU.js";
26
26
  import "./chunk-GQJZORQP.js";
27
27
  import "./chunk-AMKC3AXA.js";
@@ -41,7 +41,7 @@ import "./chunk-K4WIOZFP.js";
41
41
  import "./chunk-XUXGIA7H.js";
42
42
  import "./chunk-WERLJGIC.js";
43
43
  import "./chunk-ISN5GRYI.js";
44
- import "./chunk-MUINFURL.js";
44
+ import "./chunk-DZEVA7DI.js";
45
45
  import "./chunk-KNU5COPB.js";
46
46
  import {
47
47
  c
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject,
9
9
  resolveProjectOrThrow
10
- } from "./chunk-PB3P4MKP.js";
10
+ } from "./chunk-LJAU4TPS.js";
11
11
  import {
12
12
  downloadHint,
13
13
  openInDesktop
@@ -15,8 +15,8 @@ import {
15
15
  import "./chunk-IHFUKJOR.js";
16
16
  import "./chunk-DCAI5DBR.js";
17
17
  import "./chunk-EOVYQ3IG.js";
18
- import "./chunk-JSGANFFH.js";
19
- import "./chunk-C2JUHIG5.js";
18
+ import "./chunk-XGMNQQTJ.js";
19
+ import "./chunk-LBKDQKWV.js";
20
20
  import "./chunk-VWG7OQKU.js";
21
21
  import "./chunk-GQJZORQP.js";
22
22
  import "./chunk-AMKC3AXA.js";
@@ -35,7 +35,7 @@ import "./chunk-K4WIOZFP.js";
35
35
  import "./chunk-XUXGIA7H.js";
36
36
  import "./chunk-WERLJGIC.js";
37
37
  import "./chunk-ISN5GRYI.js";
38
- import "./chunk-MUINFURL.js";
38
+ import "./chunk-DZEVA7DI.js";
39
39
  import "./chunk-KNU5COPB.js";
40
40
  import {
41
41
  c
@@ -14,21 +14,21 @@ import {
14
14
  render,
15
15
  resolveRenderTargets,
16
16
  waitForExit
17
- } from "./chunk-PPKFM5WE.js";
17
+ } from "./chunk-KYN364DU.js";
18
18
  import "./chunk-3DKN5WKL.js";
19
19
  import "./chunk-2NCHQUPX.js";
20
20
  import "./chunk-6BEFEWFB.js";
21
21
  import "./chunk-WCJGTLPF.js";
22
22
  import "./chunk-TVCRUG2S.js";
23
23
  import "./chunk-AMKC3AXA.js";
24
- import "./chunk-TPECLKPA.js";
25
- import "./chunk-6U3MN4HW.js";
24
+ import "./chunk-IDX52YJN.js";
25
+ import "./chunk-DPHJKWP5.js";
26
26
  import "./chunk-A4KQZXZI.js";
27
27
  import "./chunk-USDEMXXL.js";
28
- import "./chunk-QP3BRKGF.js";
28
+ import "./chunk-YFT3BL7N.js";
29
29
  import "./chunk-OZUQF4NB.js";
30
30
  import "./chunk-DPVXBVLL.js";
31
- import "./chunk-B3I3XJ47.js";
31
+ import "./chunk-J4UX3RS3.js";
32
32
  import "./chunk-VC76R6W2.js";
33
33
  import "./chunk-YA62XGXS.js";
34
34
  import "./chunk-OFQWTKPW.js";
@@ -37,8 +37,7 @@ import "./chunk-FXMKHHPO.js";
37
37
  import "./chunk-RQVDTPGD.js";
38
38
  import "./chunk-LCSMOLGX.js";
39
39
  import "./chunk-TWWSYAKJ.js";
40
- import "./chunk-WY5OODN5.js";
41
- import "./chunk-24OWOBQH.js";
40
+ import "./chunk-IW2CKH6A.js";
42
41
  import "./chunk-JFKL3WAE.js";
43
42
  import "./chunk-HBBJFK6I.js";
44
43
  import "./chunk-PJ3HDUCY.js";
@@ -13,7 +13,7 @@ import {
13
13
  resolvePlayerPath,
14
14
  resolveRuntimePath,
15
15
  revalidatedResponse
16
- } from "./chunk-KJLY2SDJ.js";
16
+ } from "./chunk-LTGGTEMA.js";
17
17
  import {
18
18
  openBrowser,
19
19
  parseRemoteDebuggingPort,
@@ -21,13 +21,13 @@ import {
21
21
  } from "./chunk-LFGJWOVA.js";
22
22
  import {
23
23
  resolveProject
24
- } from "./chunk-PB3P4MKP.js";
24
+ } from "./chunk-LJAU4TPS.js";
25
25
  import "./chunk-IHFUKJOR.js";
26
26
  import {
27
27
  injectMediaCodecMapIntoHtml,
28
28
  requestSubPath
29
- } from "./chunk-MHK5DE2P.js";
30
- import "./chunk-QBK7WKHT.js";
29
+ } from "./chunk-YHRZQJXH.js";
30
+ import "./chunk-OKCR3JTO.js";
31
31
  import "./chunk-QZ3AZTXI.js";
32
32
  import "./chunk-U7E736AJ.js";
33
33
  import {
@@ -40,23 +40,23 @@ import {
40
40
  recordProxyRequest,
41
41
  resolveProxy,
42
42
  resolveProxyVariantRequest
43
- } from "./chunk-MTVDXB6S.js";
43
+ } from "./chunk-6UM3R7PP.js";
44
44
  import "./chunk-G75ENCEZ.js";
45
45
  import "./chunk-EOVYQ3IG.js";
46
46
  import {
47
47
  resolveAutoProxy
48
- } from "./chunk-KMKWRIMC.js";
48
+ } from "./chunk-EFDXGAAD.js";
49
49
  import "./chunk-XT7X6QCP.js";
50
50
  import "./chunk-4YYJOFKS.js";
51
51
  import "./chunk-HVW7ABXD.js";
52
- import "./chunk-ASW6NWON.js";
53
- import "./chunk-VVJFZU6B.js";
54
- import "./chunk-5IKJONRY.js";
52
+ import "./chunk-JOTLPC6S.js";
53
+ import "./chunk-75JJVANE.js";
54
+ import "./chunk-QXPCARFE.js";
55
55
  import "./chunk-AWDFDFI3.js";
56
56
  import "./chunk-P6LJ4Y32.js";
57
57
  import "./chunk-374QQGBQ.js";
58
- import "./chunk-JSGANFFH.js";
59
- import "./chunk-C2JUHIG5.js";
58
+ import "./chunk-XGMNQQTJ.js";
59
+ import "./chunk-LBKDQKWV.js";
60
60
  import "./chunk-VWG7OQKU.js";
61
61
  import "./chunk-GQJZORQP.js";
62
62
  import "./chunk-AMKC3AXA.js";
@@ -75,21 +75,20 @@ import {
75
75
  } from "./chunk-PBN6GBJE.js";
76
76
  import "./chunk-KC5XXX3X.js";
77
77
  import "./chunk-TJSTGSAW.js";
78
- import "./chunk-6U3MN4HW.js";
78
+ import "./chunk-DPHJKWP5.js";
79
79
  import "./chunk-A4KQZXZI.js";
80
80
  import "./chunk-USDEMXXL.js";
81
- import "./chunk-QP3BRKGF.js";
81
+ import "./chunk-YFT3BL7N.js";
82
82
  import "./chunk-OZUQF4NB.js";
83
83
  import "./chunk-DPVXBVLL.js";
84
- import "./chunk-B3I3XJ47.js";
84
+ import "./chunk-J4UX3RS3.js";
85
85
  import "./chunk-VC76R6W2.js";
86
86
  import "./chunk-YA62XGXS.js";
87
87
  import "./chunk-OFQWTKPW.js";
88
88
  import "./chunk-T76PLPD6.js";
89
89
  import "./chunk-FXMKHHPO.js";
90
90
  import "./chunk-RQVDTPGD.js";
91
- import "./chunk-WY5OODN5.js";
92
- import "./chunk-24OWOBQH.js";
91
+ import "./chunk-IW2CKH6A.js";
93
92
  import "./chunk-JFKL3WAE.js";
94
93
  import "./chunk-HBBJFK6I.js";
95
94
  import "./chunk-PJ3HDUCY.js";
@@ -101,7 +100,7 @@ import "./chunk-K4WIOZFP.js";
101
100
  import "./chunk-XUXGIA7H.js";
102
101
  import "./chunk-WERLJGIC.js";
103
102
  import "./chunk-ISN5GRYI.js";
104
- import "./chunk-MUINFURL.js";
103
+ import "./chunk-DZEVA7DI.js";
105
104
  import "./chunk-KNU5COPB.js";
106
105
  import {
107
106
  c
@@ -248,7 +247,7 @@ var play_default = defineCommand({
248
247
  }
249
248
  });
250
249
  async function registerCompositionRoute(app, project, autoProxy) {
251
- const { isSafePath } = await import("./studio-api-4FNUZPJ4.js");
250
+ const { isSafePath } = await import("./studio-api-SQ3NXFSM.js");
252
251
  app.get("/composition/*", async (ctx) => {
253
252
  const reqPath = requestSubPath(ctx.req.url, "composition");
254
253
  const filePath = resolve(project.dir, reqPath);
@@ -9,7 +9,7 @@ import {
9
9
  listenOnFreePort,
10
10
  resolvePlayerPath,
11
11
  resolveSlideshowPath
12
- } from "./chunk-KJLY2SDJ.js";
12
+ } from "./chunk-LTGGTEMA.js";
13
13
  import {
14
14
  openBrowser,
15
15
  parseRemoteDebuggingPort,
@@ -17,20 +17,20 @@ import {
17
17
  } from "./chunk-LFGJWOVA.js";
18
18
  import {
19
19
  resolveProject
20
- } from "./chunk-PB3P4MKP.js";
20
+ } from "./chunk-LJAU4TPS.js";
21
21
  import "./chunk-IHFUKJOR.js";
22
22
  import {
23
23
  requestSubPath
24
- } from "./chunk-MHK5DE2P.js";
25
- import "./chunk-QBK7WKHT.js";
24
+ } from "./chunk-YHRZQJXH.js";
25
+ import "./chunk-OKCR3JTO.js";
26
26
  import "./chunk-QZ3AZTXI.js";
27
27
  import "./chunk-U7E736AJ.js";
28
- import "./chunk-MTVDXB6S.js";
28
+ import "./chunk-6UM3R7PP.js";
29
29
  import "./chunk-G75ENCEZ.js";
30
30
  import "./chunk-EOVYQ3IG.js";
31
31
  import "./chunk-374QQGBQ.js";
32
- import "./chunk-JSGANFFH.js";
33
- import "./chunk-C2JUHIG5.js";
32
+ import "./chunk-XGMNQQTJ.js";
33
+ import "./chunk-LBKDQKWV.js";
34
34
  import "./chunk-VWG7OQKU.js";
35
35
  import "./chunk-GQJZORQP.js";
36
36
  import "./chunk-AMKC3AXA.js";
@@ -48,21 +48,20 @@ import {
48
48
  } from "./chunk-PBN6GBJE.js";
49
49
  import "./chunk-KC5XXX3X.js";
50
50
  import "./chunk-TJSTGSAW.js";
51
- import "./chunk-6U3MN4HW.js";
51
+ import "./chunk-DPHJKWP5.js";
52
52
  import "./chunk-A4KQZXZI.js";
53
53
  import "./chunk-USDEMXXL.js";
54
- import "./chunk-QP3BRKGF.js";
54
+ import "./chunk-YFT3BL7N.js";
55
55
  import "./chunk-OZUQF4NB.js";
56
56
  import "./chunk-DPVXBVLL.js";
57
- import "./chunk-B3I3XJ47.js";
57
+ import "./chunk-J4UX3RS3.js";
58
58
  import "./chunk-VC76R6W2.js";
59
59
  import "./chunk-YA62XGXS.js";
60
60
  import "./chunk-OFQWTKPW.js";
61
61
  import "./chunk-T76PLPD6.js";
62
62
  import "./chunk-FXMKHHPO.js";
63
63
  import "./chunk-RQVDTPGD.js";
64
- import "./chunk-WY5OODN5.js";
65
- import "./chunk-24OWOBQH.js";
64
+ import "./chunk-IW2CKH6A.js";
66
65
  import "./chunk-JFKL3WAE.js";
67
66
  import "./chunk-HBBJFK6I.js";
68
67
  import "./chunk-PJ3HDUCY.js";
@@ -74,7 +73,7 @@ import "./chunk-K4WIOZFP.js";
74
73
  import "./chunk-XUXGIA7H.js";
75
74
  import "./chunk-WERLJGIC.js";
76
75
  import "./chunk-ISN5GRYI.js";
77
- import "./chunk-MUINFURL.js";
76
+ import "./chunk-DZEVA7DI.js";
78
77
  import "./chunk-KNU5COPB.js";
79
78
  import {
80
79
  c
@@ -339,7 +338,7 @@ function escHtml(value) {
339
338
  return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
340
339
  }
341
340
  async function registerPresentCompositionRoute(app, project) {
342
- const { isSafePath } = await import("./studio-api-4FNUZPJ4.js");
341
+ const { isSafePath } = await import("./studio-api-SQ3NXFSM.js");
343
342
  app.get("/composition/*", (ctx) => {
344
343
  const reqPath = requestSubPath(ctx.req.url, "composition");
345
344
  const filePath = resolve(project.dir, reqPath);