hyperframes 0.8.169 → 0.8.170

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 (178) hide show
  1. package/dist/{add-7GLP4BPM.js → add-KDCZCEMQ.js} +11 -11
  2. package/dist/{animatedGifPrep-NEBEGVSO.js → animatedGifPrep-MVP5LCEM.js} +5 -5
  3. package/dist/api.js +11 -11
  4. package/dist/{asset-RORTT5HS.js → asset-6VH3OCEC.js} +2 -2
  5. package/dist/{assetCataloger-RLJ6MDGF.js → assetCataloger-RN5A2SVA.js} +5 -5
  6. package/dist/{audio-OKDGU7TY.js → audio-636CQSXK.js} +11 -11
  7. package/dist/{auth-QWYNCU5U.js → auth-AHLKM4M2.js} +1 -1
  8. package/dist/{autoUpdate-EDJJPWAU.js → autoUpdate-5UA6TJW7.js} +2 -2
  9. package/dist/{backgroundChecks-KQR6FGVU.js → backgroundChecks-DP242536.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-YKTTAIHH.js → batchRender-KWBVAUE3.js} +3 -3
  12. package/dist/{beats-I6AGLTLW.js → beats-HKY5L463.js} +4 -4
  13. package/dist/{benchmark-NBSV7PNB.js → benchmark-4YQDVIO5.js} +8 -8
  14. package/dist/{browser-FPEL5FGW.js → browser-7ZPWXEYW.js} +3 -3
  15. package/dist/{bundleWithLocalizedFonts-TYQXMNSU.js → bundleWithLocalizedFonts-42V34HJF.js} +2 -2
  16. package/dist/{capture-FXGOI23U.js → capture-572X5NDD.js} +8 -8
  17. package/dist/{capture-5BRJJMZB.js → capture-VXMUZSBI.js} +2 -2
  18. package/dist/{catalog-SG3ZIS45.js → catalog-PUUTHPP7.js} +11 -11
  19. package/dist/{catch-up-ETXUT6Q5.js → catch-up-K6CV44WQ.js} +4 -4
  20. package/dist/{check-KXNNIEUR.js → check-MBDLSWCY.js} +32 -32
  21. package/dist/{checkBrowser-546UMI3N.js → checkBrowser-33UWWDZG.js} +29 -29
  22. package/dist/{chunk-EELTMBCC.js → chunk-2E7NDKTN.js} +1 -1
  23. package/dist/{chunk-DCG22HKT.js → chunk-2UD6O6QG.js} +6 -6
  24. package/dist/{chunk-5SQHHBAR.js → chunk-44GV6ZMC.js} +1 -1
  25. package/dist/{chunk-FQJDV2RI.js → chunk-4B6PUT4R.js} +1 -1
  26. package/dist/{chunk-UCNQE52B.js → chunk-4RXJG3SY.js} +197 -26
  27. package/dist/chunk-6M3IPJS6.js +3803 -0
  28. package/dist/{chunk-TJSTGSAW.js → chunk-7FMUTGOH.js} +2 -77
  29. package/dist/{chunk-T4HL3SZH.js → chunk-AGHHZIZN.js} +1 -1
  30. package/dist/{chunk-CNP6AMFM.js → chunk-AUMJ3QSO.js} +2 -2
  31. package/dist/{chunk-A6K7M46D.js → chunk-AWSVUIWG.js} +1 -1
  32. package/dist/{chunk-5ETJPA5Z.js → chunk-BAW7UNLK.js} +9 -9
  33. package/dist/{chunk-XK5SZNYE.js → chunk-CFBGKAKQ.js} +9 -9
  34. package/dist/{chunk-VCXVZRR2.js → chunk-EHDKCMKX.js} +1 -1
  35. package/dist/{chunk-AP5AVVAB.js → chunk-EJYBYR4C.js} +1 -1
  36. package/dist/{chunk-SJPNVLYS.js → chunk-ERJHLFPD.js} +2 -2
  37. package/dist/{chunk-P24X6CGY.js → chunk-FAORS3UR.js} +28 -13
  38. package/dist/{chunk-EEP5Y5IE.js → chunk-FE2XTCTM.js} +18 -1
  39. package/dist/{chunk-FSX7GTBB.js → chunk-FSP2JNAP.js} +1 -1
  40. package/dist/{chunk-ZFJ5RI7A.js → chunk-G6GKIAEM.js} +3 -3
  41. package/dist/{chunk-TVDXMJ43.js → chunk-GBWSBTEE.js} +1 -1
  42. package/dist/{chunk-K5PU5ISL.js → chunk-GG3V5BHG.js} +1 -1
  43. package/dist/{chunk-KA4LSAD5.js → chunk-GU5FLCZV.js} +1 -1
  44. package/dist/{chunk-EFP25BUY.js → chunk-JAERN4RH.js} +1 -1
  45. package/dist/{chunk-YT6TFGIS.js → chunk-KUFEPCR3.js} +1 -1
  46. package/dist/{chunk-S6U7YLPJ.js → chunk-KUW4LWY6.js} +1 -1
  47. package/dist/{chunk-TEFHMDVR.js → chunk-LMMFO5UV.js} +2 -2
  48. package/dist/{chunk-PVTHDNDZ.js → chunk-LWB3KZ5E.js} +1 -1
  49. package/dist/{chunk-QD5VJOQK.js → chunk-MSFON5DJ.js} +3 -3
  50. package/dist/{chunk-XJQ6NN2L.js → chunk-MXMIVNUE.js} +19 -23
  51. package/dist/{chunk-CESKA6VO.js → chunk-NSJLCWLG.js} +1 -1
  52. package/dist/{chunk-MCPDZWZY.js → chunk-NYCJCQNY.js} +4 -4
  53. package/dist/{chunk-RUYYAL3T.js → chunk-OGVQJHNM.js} +2 -2
  54. package/dist/{chunk-J5Z56PU3.js → chunk-PCX3YF2U.js} +1 -1
  55. package/dist/{chunk-U7P2XTRY.js → chunk-PECICVTJ.js} +2 -2
  56. package/dist/{chunk-GVX2443P.js → chunk-PH3RS5X4.js} +2 -2
  57. package/dist/{chunk-YZRS3COO.js → chunk-PP64Q43K.js} +1 -1
  58. package/dist/{chunk-Q5K73VW3.js → chunk-PXA4S6OE.js} +2 -2
  59. package/dist/{chunk-5FWVFCQM.js → chunk-QO3JEPEW.js} +2 -2
  60. package/dist/{chunk-O3J7BHBU.js → chunk-QZUVPWC4.js} +1 -1
  61. package/dist/{chunk-2F4HJFGW.js → chunk-T56MM7RC.js} +2 -2
  62. package/dist/{chunk-RZKQ3G6B.js → chunk-T5LGOTQR.js} +1 -1
  63. package/dist/{chunk-WAVFNZB7.js → chunk-UDDJQEGS.js} +1 -1
  64. package/dist/{chunk-BNEKKUPG.js → chunk-UQPH3Y45.js} +2 -2
  65. package/dist/{chunk-XZNHVWDD.js → chunk-UUP4KOMD.js} +4 -4
  66. package/dist/{chunk-UISU4SYG.js → chunk-V2T7FFPB.js} +1 -1
  67. package/dist/{chunk-7FHFPHEM.js → chunk-VKFYI7AQ.js} +182 -77
  68. package/dist/{chunk-JPN7SVWC.js → chunk-WLNNWLIE.js} +7 -7
  69. package/dist/{chunk-7635SDI5.js → chunk-WZQSL7UX.js} +2 -2
  70. package/dist/{chunk-YLAREDAU.js → chunk-X3U6KEID.js} +1 -1
  71. package/dist/{chunk-M4N6IHCQ.js → chunk-XRQBHOBT.js} +7 -1
  72. package/dist/{chunk-NKG3LTPI.js → chunk-YFGJVADL.js} +1 -1
  73. package/dist/{chunk-QLHXC4E6.js → chunk-ZINH7YA2.js} +1 -1
  74. package/dist/{clean-ARH23EGW.js → clean-5AXXHD45.js} +12 -12
  75. package/dist/cli.js +53 -53
  76. package/dist/{cloud-GBY7MRZM.js → cloud-DQCCYKOB.js} +4 -4
  77. package/dist/{cloudrun-HBVA5UZB.js → cloudrun-CDFL5JBL.js} +9 -11
  78. package/dist/{compare-Z4YNESYN.js → compare-6RB5X3SO.js} +24 -24
  79. package/dist/{compiler-6WJ5SVTD.js → compiler-GU5GPO5A.js} +2 -2
  80. package/dist/{component-AR4MS4R7.js → component-7RRNNC5F.js} +3 -3
  81. package/dist/{compositions-ERZVZBYW.js → compositions-CANET3EJ.js} +9 -9
  82. package/dist/{delete-NWSW3BET.js → delete-KEZJPDWJ.js} +2 -2
  83. package/dist/{deterministicFonts-KXVO7QEL.js → deterministicFonts-RWGQPEZU.js} +2 -2
  84. package/dist/{dist-VKLSNKRZ.js → dist-IDZRZHGE.js} +2 -2
  85. package/dist/{doctor-P4QZQRCB.js → doctor-5RAEGA6G.js} +7 -7
  86. package/dist/{events-F2UVJQIC.js → events-4ZJSJ76H.js} +2 -2
  87. package/dist/{events-SV46AWMI.js → events-SHOWEHI5.js} +3 -3
  88. package/dist/{feedback-XS4IK6SW.js → feedback-4IIGUUYZ.js} +6 -6
  89. package/dist/{figma-DELISEUP.js → figma-BFDECPE5.js} +3 -3
  90. package/dist/fontLocalizeCli.js +9 -9
  91. package/dist/{get-DNGXCEFB.js → get-BO32YZUQ.js} +2 -2
  92. package/dist/{gpuPolicy-JG5PUOJP.js → gpuPolicy-QWJYZLVJ.js} +5 -5
  93. package/dist/{grade-compare-F46JWE4O.js → grade-compare-SW4SAG5R.js} +24 -24
  94. package/dist/{help-XVEBMX3U.js → help-7AMSMPUF.js} +1 -1
  95. package/dist/{history-NS4PKG4S.js → history-VXAQFJJV.js} +6 -6
  96. package/dist/hyperframe-runtime.js +58 -57
  97. package/dist/hyperframe.manifest.json +1 -1
  98. package/dist/hyperframe.runtime.iife.js +58 -57
  99. package/dist/hyperframes-player.global.js +1 -1
  100. package/dist/{info-DJ6VNESS.js → info-KN4TX6T5.js} +7 -7
  101. package/dist/{init-TSRTMVRN.js → init-7A2T7LDW.js} +20 -20
  102. package/dist/{inspect-VTZXXDJ4.js → inspect-CCCV6JFV.js} +25 -25
  103. package/dist/{installer-3ERHU4CD.js → installer-ZCCZUOPN.js} +4 -4
  104. package/dist/{keyframes-6DN7BOYJ.js → keyframes-K6XNZGK3.js} +6 -6
  105. package/dist/{lambda-RCOIEGL6.js → lambda-B2K237DX.js} +10 -12
  106. package/dist/{layout-FFGRLVK4.js → layout-HAPR5OV4.js} +25 -25
  107. package/dist/{lint-MBYIDFKS.js → lint-3COFAXAJ.js} +6 -6
  108. package/dist/{list-KEZDFW5R.js → list-QCNHO7DR.js} +2 -2
  109. package/dist/{login-7ZV374QL.js → login-BAFYZS6W.js} +4 -4
  110. package/dist/{media-treatment-LGWWRXAX.js → media-treatment-C53ZBW2B.js} +8 -8
  111. package/dist/{models-TC4K6UQP.js → models-INX67ETR.js} +8 -8
  112. package/dist/{motionShot-4E3RTV5O.js → motionShot-UOS26VLB.js} +12 -12
  113. package/dist/{normalize-audio-XCGB2IQP.js → normalize-audio-I7HGJGA5.js} +4 -4
  114. package/dist/{open-JNNJSNTH.js → open-RFXGV4RY.js} +4 -4
  115. package/dist/{parakeetRunner-S3DG4BJB.js → parakeetRunner-PCCBODBS.js} +8 -8
  116. package/dist/{pipeline-3SIYCBLU.js → pipeline-GDC7SL5N.js} +5 -5
  117. package/dist/{play-LBPOOD3V.js → play-DRCWK35L.js} +17 -17
  118. package/dist/{present-PWEN5SDL.js → present-HUJV553D.js} +13 -13
  119. package/dist/{preview-IS32RLKM.js → preview-CZENYIGN.js} +15 -15
  120. package/dist/{producer-4UUUEPPS.js → producer-23NJEJRO.js} +1 -1
  121. package/dist/{projectConfig-K347VIO3.js → projectConfig-R3FCIARW.js} +6 -6
  122. package/dist/{publication-4CQS532O.js → publication-GY3OJ6VH.js} +2 -2
  123. package/dist/{publish-OJYF37FY.js → publish-XBW4NVFY.js} +7 -7
  124. package/dist/{remove-background-HO6YL2HU.js → remove-background-Q7CQ3PJF.js} +6 -6
  125. package/dist/{render-L76SEAMC.js → render-24JWWXMA.js} +3 -3
  126. package/dist/{render-Q6QAXJCN.js → render-DOHHCT2G.js} +8 -8
  127. package/dist/{render-QBQYF2NC.js → render-WWAXTKYR.js} +22 -22
  128. package/dist/{render-batch-JLANN5Y2.js → render-batch-EK4ZBQHH.js} +3 -3
  129. package/dist/renderSetupWorker.js +9 -1
  130. package/dist/{resolver-EDUM4DHG.js → resolver-5Y6VNMTC.js} +4 -4
  131. package/dist/{sherpa-QEM5XYHD.js → sherpa-VMADZBF7.js} +7 -7
  132. package/dist/skills/media-use/SKILL.md +3 -3
  133. package/dist/skills/media-use/audio/references/requirements.md +7 -7
  134. package/dist/skills/media-use/audio/references/sfx.md +19 -13
  135. package/dist/skills/media-use/audio/scripts/audio.mjs +9 -9
  136. package/dist/skills/media-use/audio/scripts/audio.test.mjs +17 -10
  137. package/dist/skills/media-use/audio/scripts/lib/media-record.mjs +7 -3
  138. package/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +22 -3
  139. package/dist/skills/media-use/audio/scripts/lib/openverse.mjs +134 -0
  140. package/dist/skills/media-use/audio/scripts/lib/sfx.mjs +120 -89
  141. package/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +222 -12
  142. package/dist/skills/media-use/references/audio.md +1 -1
  143. package/dist/skills/media-use/references/resolve.md +1 -1
  144. package/dist/skills/media-use/references/setup-providers.md +13 -12
  145. package/dist/skills/media-use/scripts/lib/heygen-cli.mjs +4 -7
  146. package/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +5 -5
  147. package/dist/skills/media-use/scripts/lib/manifest.d.mts +1 -0
  148. package/dist/skills/media-use/scripts/lib/manifest.mjs +9 -6
  149. package/dist/skills/media-use/scripts/lib/openverse.mjs +134 -0
  150. package/dist/skills/media-use/scripts/lib/openverse.test.mjs +219 -0
  151. package/dist/skills/media-use/scripts/lib/registry.mjs +4 -2
  152. package/dist/skills/media-use/scripts/lib/registry.test.mjs +13 -13
  153. package/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -13
  154. package/dist/skills/media-use/scripts/resolve.mjs +45 -55
  155. package/dist/{skills-FSZK6FIG.js → skills-ONFYYL6R.js} +5 -5
  156. package/dist/{skillsUpdateCheck-3354HXDJ.js → skillsUpdateCheck-JTHZOHRT.js} +3 -3
  157. package/dist/{snapshot-5VVMFEMM.js → snapshot-SUA62VQ2.js} +27 -27
  158. package/dist/{src-RYILCNU7.js → src-J6KABXGZ.js} +8 -8
  159. package/dist/{src-ZGMLMQ3B.js → src-VFTQPSQD.js} +4 -4
  160. package/dist/{staticProjectServer-PIVSGEAO.js → staticProjectServer-XQPUABYX.js} +13 -13
  161. package/dist/studio/assets/{hyperframes-player-B04Yx96S.js → hyperframes-player-Dsmhm7Q8.js} +1 -1
  162. package/dist/studio/assets/{index-D2e0J6kh.js → index-CV00F8qG.js} +4 -4
  163. package/dist/studio/assets/{index-D9CDX_Rr.js → index-DT1wigvW.js} +1 -1
  164. package/dist/studio/index.html +1 -1
  165. package/dist/{studio-api-PHADR6VB.js → studio-api-MBDDFEA2.js} +7 -7
  166. package/dist/{studioServer-5AVDKN5V.js → studioServer-7HWDCLKT.js} +37 -37
  167. package/dist/{telemetry-JCTHMPSB.js → telemetry-763NW3QF.js} +3 -3
  168. package/dist/{timeline-QU2F6R2M.js → timeline-ZLFPNI27.js} +15 -15
  169. package/dist/{tokens-YYK4G36C.js → tokens-RXJLVZKD.js} +2 -2
  170. package/dist/{transcribe-7ORH7R6O.js → transcribe-IM5UNBSH.js} +6 -6
  171. package/dist/{transcribe-PRG4FLLA.js → transcribe-UDISJXCZ.js} +12 -12
  172. package/dist/{updateCheck-NV7QNANK.js → updateCheck-V2RXHFQL.js} +2 -2
  173. package/dist/{upgrade-UZXN36J2.js → upgrade-MJI3EW3W.js} +2 -2
  174. package/dist/{urlDownloader-AW57H722.js → urlDownloader-BOLOMGC7.js} +4 -4
  175. package/dist/{validate-QD53ABUM.js → validate-IM5NPJHI.js} +19 -19
  176. package/dist/{video-VLVPYQQR.js → video-HUNOZDLT.js} +5 -5
  177. package/package.json +1 -1
  178. package/dist/chunk-BIV5HVTQ.js +0 -3803
@@ -18,7 +18,7 @@ import {
18
18
  import {
19
19
  resolveProject,
20
20
  resolveProjectOrThrow
21
- } from "./chunk-AP5AVVAB.js";
21
+ } from "./chunk-EJYBYR4C.js";
22
22
  import "./chunk-K2FLNJVB.js";
23
23
  import "./chunk-DCAI5DBR.js";
24
24
  import {
@@ -31,21 +31,21 @@ import {
31
31
  } from "./chunk-DQBY7FRR.js";
32
32
  import {
33
33
  resolveLocalBrowserGpuMode
34
- } from "./chunk-Q5K73VW3.js";
34
+ } from "./chunk-PXA4S6OE.js";
35
35
  import {
36
36
  resolveAutoProxy
37
- } from "./chunk-J5Z56PU3.js";
37
+ } from "./chunk-PCX3YF2U.js";
38
38
  import "./chunk-XT7X6QCP.js";
39
39
  import "./chunk-4YYJOFKS.js";
40
40
  import "./chunk-HVW7ABXD.js";
41
- import "./chunk-5SQHHBAR.js";
42
- import "./chunk-5FWVFCQM.js";
43
- import "./chunk-EELTMBCC.js";
41
+ import "./chunk-44GV6ZMC.js";
42
+ import "./chunk-QO3JEPEW.js";
43
+ import "./chunk-2E7NDKTN.js";
44
44
  import "./chunk-AWDFDFI3.js";
45
45
  import "./chunk-P6LJ4Y32.js";
46
46
  import "./chunk-GMECXFAN.js";
47
- import "./chunk-FQJDV2RI.js";
48
- import "./chunk-FSX7GTBB.js";
47
+ import "./chunk-4B6PUT4R.js";
48
+ import "./chunk-FSP2JNAP.js";
49
49
  import "./chunk-VWG7OQKU.js";
50
50
  import "./chunk-QWQ6GQTI.js";
51
51
  import {
@@ -70,19 +70,19 @@ import "./chunk-WERLJGIC.js";
70
70
  import {
71
71
  isDevMode
72
72
  } from "./chunk-ISN5GRYI.js";
73
- import "./chunk-BNEKKUPG.js";
73
+ import "./chunk-UQPH3Y45.js";
74
74
  import "./chunk-EOVYQ3IG.js";
75
75
  import {
76
76
  buildNpxCommand
77
77
  } from "./chunk-6BEFEWFB.js";
78
78
  import "./chunk-XT6MXC7A.js";
79
- import "./chunk-7FHFPHEM.js";
80
- import "./chunk-P24X6CGY.js";
79
+ import "./chunk-VKFYI7AQ.js";
80
+ import "./chunk-FAORS3UR.js";
81
81
  import "./chunk-KCF6GHJP.js";
82
82
  import "./chunk-JYVGYKXG.js";
83
83
  import "./chunk-7KDQAD2W.js";
84
- import "./chunk-O3J7BHBU.js";
85
- import "./chunk-BIV5HVTQ.js";
84
+ import "./chunk-QZUVPWC4.js";
85
+ import "./chunk-6M3IPJS6.js";
86
86
  import "./chunk-VC76R6W2.js";
87
87
  import "./chunk-UJKQWGFF.js";
88
88
  import "./chunk-YMS5FOMC.js";
@@ -1701,7 +1701,7 @@ async function runLocalStudioMode(dir, options) {
1701
1701
  return waitForStudioChildClose(child);
1702
1702
  }
1703
1703
  async function runEmbeddedMode(dir, startPort, options) {
1704
- const { createStudioServer, loadPreviewServerBuildSignature, resolveStudioBundle } = await import("./studioServer-5AVDKN5V.js");
1704
+ const { createStudioServer, loadPreviewServerBuildSignature, resolveStudioBundle } = await import("./studioServer-7HWDCLKT.js");
1705
1705
  const pName = options?.projectName ?? basename(dir);
1706
1706
  const studioBundle = resolveStudioBundle();
1707
1707
  if (!options?.json) ge(c.bold("hyperframes preview"));
@@ -1831,7 +1831,7 @@ async function runEmbeddedMode(dir, startPort, options) {
1831
1831
  };
1832
1832
  process.on("SIGINT", shutdown);
1833
1833
  process.on("SIGTERM", shutdown);
1834
- import("./src-ZGMLMQ3B.js").then(({ killTrackedProcesses }) => {
1834
+ import("./src-VFTQPSQD.js").then(({ killTrackedProcesses }) => {
1835
1835
  process.once("exit", () => {
1836
1836
  if (!shuttingDown) killTrackedProcesses();
1837
1837
  });
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  loadProducer
9
- } from "./chunk-CESKA6VO.js";
9
+ } from "./chunk-NSJLCWLG.js";
10
10
  import "./chunk-M2WBOQ2Q.js";
11
11
  export {
12
12
  loadProducer
@@ -17,18 +17,18 @@ import {
17
17
  resolveAutoProxy,
18
18
  seedProjectAuthoringSkill,
19
19
  writeProjectConfig
20
- } from "./chunk-J5Z56PU3.js";
20
+ } from "./chunk-PCX3YF2U.js";
21
21
  import "./chunk-XT7X6QCP.js";
22
22
  import "./chunk-4YYJOFKS.js";
23
23
  import "./chunk-HVW7ABXD.js";
24
- import "./chunk-5SQHHBAR.js";
25
- import "./chunk-5FWVFCQM.js";
26
- import "./chunk-EELTMBCC.js";
24
+ import "./chunk-44GV6ZMC.js";
25
+ import "./chunk-QO3JEPEW.js";
26
+ import "./chunk-2E7NDKTN.js";
27
27
  import "./chunk-AWDFDFI3.js";
28
28
  import "./chunk-P6LJ4Y32.js";
29
29
  import "./chunk-GMECXFAN.js";
30
- import "./chunk-O3J7BHBU.js";
31
- import "./chunk-BIV5HVTQ.js";
30
+ import "./chunk-QZUVPWC4.js";
31
+ import "./chunk-6M3IPJS6.js";
32
32
  import "./chunk-VC76R6W2.js";
33
33
  import "./chunk-UJKQWGFF.js";
34
34
  import "./chunk-YMS5FOMC.js";
@@ -8,8 +8,8 @@ import {
8
8
  publishRegistryFile,
9
9
  registryTargetPath
10
10
  } from "./chunk-GMECXFAN.js";
11
- import "./chunk-O3J7BHBU.js";
12
- import "./chunk-BIV5HVTQ.js";
11
+ import "./chunk-QZUVPWC4.js";
12
+ import "./chunk-6M3IPJS6.js";
13
13
  import "./chunk-VC76R6W2.js";
14
14
  import "./chunk-UJKQWGFF.js";
15
15
  import "./chunk-YMS5FOMC.js";
@@ -29,17 +29,17 @@ import {
29
29
  proxyVariantFor,
30
30
  resolveProxies,
31
31
  scanProjectMediaCodecMap
32
- } from "./chunk-T4HL3SZH.js";
32
+ } from "./chunk-AGHHZIZN.js";
33
33
  import "./chunk-FFDC5OWV.js";
34
34
  import {
35
35
  resolveAutoProxy
36
- } from "./chunk-J5Z56PU3.js";
36
+ } from "./chunk-PCX3YF2U.js";
37
37
  import "./chunk-XT7X6QCP.js";
38
38
  import "./chunk-4YYJOFKS.js";
39
39
  import "./chunk-HVW7ABXD.js";
40
- import "./chunk-5SQHHBAR.js";
41
- import "./chunk-5FWVFCQM.js";
42
- import "./chunk-EELTMBCC.js";
40
+ import "./chunk-44GV6ZMC.js";
41
+ import "./chunk-QO3JEPEW.js";
42
+ import "./chunk-2E7NDKTN.js";
43
43
  import "./chunk-AWDFDFI3.js";
44
44
  import "./chunk-P6LJ4Y32.js";
45
45
  import "./chunk-GMECXFAN.js";
@@ -64,8 +64,8 @@ import {
64
64
  definitiveEntryMismatchComposition,
65
65
  hasDefinitiveEntryMismatch
66
66
  } from "./chunk-Q5X2B5WT.js";
67
- import "./chunk-O3J7BHBU.js";
68
- import "./chunk-BIV5HVTQ.js";
67
+ import "./chunk-QZUVPWC4.js";
68
+ import "./chunk-6M3IPJS6.js";
69
69
  import "./chunk-VC76R6W2.js";
70
70
  import "./chunk-UJKQWGFF.js";
71
71
  import "./chunk-YMS5FOMC.js";
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  RemoveBackgroundError,
21
21
  removeBackground
22
- } from "./chunk-YLAREDAU.js";
22
+ } from "./chunk-X3U6KEID.js";
23
23
  import {
24
24
  DEFAULT_MODEL,
25
25
  DEFAULT_QUALITY,
@@ -31,19 +31,19 @@ import {
31
31
  listAvailableProviders,
32
32
  modelPath,
33
33
  selectProviders
34
- } from "./chunk-SJPNVLYS.js";
34
+ } from "./chunk-ERJHLFPD.js";
35
35
  import "./chunk-3DKN5WKL.js";
36
36
  import "./chunk-6BEFEWFB.js";
37
37
  import "./chunk-PO2SDVQA.js";
38
38
  import "./chunk-IK3SOMZ4.js";
39
39
  import "./chunk-XT6MXC7A.js";
40
- import "./chunk-7FHFPHEM.js";
41
- import "./chunk-P24X6CGY.js";
40
+ import "./chunk-VKFYI7AQ.js";
41
+ import "./chunk-FAORS3UR.js";
42
42
  import "./chunk-KCF6GHJP.js";
43
43
  import "./chunk-JYVGYKXG.js";
44
44
  import "./chunk-7KDQAD2W.js";
45
- import "./chunk-O3J7BHBU.js";
46
- import "./chunk-BIV5HVTQ.js";
45
+ import "./chunk-QZUVPWC4.js";
46
+ import "./chunk-6M3IPJS6.js";
47
47
  import "./chunk-VC76R6W2.js";
48
48
  import "./chunk-UJKQWGFF.js";
49
49
  import "./chunk-YMS5FOMC.js";
@@ -15,7 +15,7 @@ import {
15
15
  reportVariableIssues,
16
16
  resolveVariablesArg,
17
17
  validateVariablesAgainstProject
18
- } from "./chunk-RZKQ3G6B.js";
18
+ } from "./chunk-T5LGOTQR.js";
19
19
  import "./chunk-FH7WODJH.js";
20
20
  import "./chunk-K2FLNJVB.js";
21
21
  import "./chunk-442JNXRM.js";
@@ -25,8 +25,8 @@ import {
25
25
  import {
26
26
  c
27
27
  } from "./chunk-ZTZA4UWZ.js";
28
- import "./chunk-O3J7BHBU.js";
29
- import "./chunk-BIV5HVTQ.js";
28
+ import "./chunk-QZUVPWC4.js";
29
+ import "./chunk-6M3IPJS6.js";
30
30
  import "./chunk-VC76R6W2.js";
31
31
  import "./chunk-UJKQWGFF.js";
32
32
  import "./chunk-YMS5FOMC.js";
@@ -35,18 +35,18 @@ import {
35
35
  reportVariableIssues,
36
36
  resolveVariablesArg,
37
37
  validateVariablesAgainstProject
38
- } from "./chunk-RZKQ3G6B.js";
38
+ } from "./chunk-T5LGOTQR.js";
39
39
  import {
40
40
  resolveProject
41
- } from "./chunk-AP5AVVAB.js";
41
+ } from "./chunk-EJYBYR4C.js";
42
42
  import {
43
43
  errorBox,
44
44
  formatBytes,
45
45
  formatDuration
46
46
  } from "./chunk-K2FLNJVB.js";
47
47
  import "./chunk-442JNXRM.js";
48
- import "./chunk-FQJDV2RI.js";
49
- import "./chunk-FSX7GTBB.js";
48
+ import "./chunk-4B6PUT4R.js";
49
+ import "./chunk-FSP2JNAP.js";
50
50
  import "./chunk-VWG7OQKU.js";
51
51
  import "./chunk-QWQ6GQTI.js";
52
52
  import {
@@ -61,12 +61,12 @@ import {
61
61
  } from "./chunk-ZTZA4UWZ.js";
62
62
  import {
63
63
  withMeta
64
- } from "./chunk-K5PU5ISL.js";
64
+ } from "./chunk-GG3V5BHG.js";
65
65
  import "./chunk-K4WIOZFP.js";
66
66
  import "./chunk-XUXGIA7H.js";
67
67
  import "./chunk-WERLJGIC.js";
68
68
  import "./chunk-ISN5GRYI.js";
69
- import "./chunk-BNEKKUPG.js";
69
+ import "./chunk-UQPH3Y45.js";
70
70
  import {
71
71
  downloadToFile
72
72
  } from "./chunk-BXCMXMJQ.js";
@@ -74,8 +74,8 @@ import "./chunk-EOVYQ3IG.js";
74
74
  import "./chunk-XT6MXC7A.js";
75
75
  import "./chunk-JYVGYKXG.js";
76
76
  import "./chunk-7KDQAD2W.js";
77
- import "./chunk-O3J7BHBU.js";
78
- import "./chunk-BIV5HVTQ.js";
77
+ import "./chunk-QZUVPWC4.js";
78
+ import "./chunk-6M3IPJS6.js";
79
79
  import "./chunk-VC76R6W2.js";
80
80
  import "./chunk-UJKQWGFF.js";
81
81
  import "./chunk-YMS5FOMC.js";
@@ -6,24 +6,24 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  maybePromptRenderFeedback
9
- } from "./chunk-2F4HJFGW.js";
9
+ } from "./chunk-T56MM7RC.js";
10
10
  import {
11
11
  captureArtifactRevision
12
- } from "./chunk-NKG3LTPI.js";
13
- import "./chunk-YT6TFGIS.js";
12
+ } from "./chunk-YFGJVADL.js";
13
+ import "./chunk-KUFEPCR3.js";
14
14
  import "./chunk-X7MTZ4T2.js";
15
15
  import {
16
16
  reportVariableIssues,
17
17
  resolveVariablesArg,
18
18
  validateVariablesAgainstProject
19
- } from "./chunk-RZKQ3G6B.js";
19
+ } from "./chunk-T5LGOTQR.js";
20
20
  import {
21
21
  loadProducer
22
- } from "./chunk-CESKA6VO.js";
22
+ } from "./chunk-NSJLCWLG.js";
23
23
  import {
24
24
  renderJobObservabilityTelemetryPayload,
25
25
  startRenderCpuSampler
26
- } from "./chunk-QLHXC4E6.js";
26
+ } from "./chunk-ZINH7YA2.js";
27
27
  import {
28
28
  hasExplicitCompositionArg,
29
29
  parseGifLoopArg,
@@ -32,11 +32,11 @@ import {
32
32
  resolveCompositionEntryArg,
33
33
  resolveDefaultFpsArg,
34
34
  windowsChromeCrashRemediation
35
- } from "./chunk-TEFHMDVR.js";
35
+ } from "./chunk-LMMFO5UV.js";
36
36
  import {
37
37
  sandboxDeniedRemediation
38
38
  } from "./chunk-WICIV6R3.js";
39
- import "./chunk-EFP25BUY.js";
39
+ import "./chunk-JAERN4RH.js";
40
40
  import {
41
41
  formatLintStartupMessage
42
42
  } from "./chunk-6CSYCFQV.js";
@@ -45,7 +45,7 @@ import {
45
45
  } from "./chunk-EDUBJPGL.js";
46
46
  import {
47
47
  resolveProject
48
- } from "./chunk-AP5AVVAB.js";
48
+ } from "./chunk-EJYBYR4C.js";
49
49
  import {
50
50
  errorBox,
51
51
  formatBytes,
@@ -69,15 +69,15 @@ import {
69
69
  loadProjectConfig,
70
70
  readProjectConfigWithStatus,
71
71
  seedProjectAuthoringSkill
72
- } from "./chunk-J5Z56PU3.js";
72
+ } from "./chunk-PCX3YF2U.js";
73
73
  import "./chunk-XT7X6QCP.js";
74
74
  import "./chunk-4YYJOFKS.js";
75
75
  import {
76
76
  normalizeSkillSlug
77
77
  } from "./chunk-HVW7ABXD.js";
78
- import "./chunk-5SQHHBAR.js";
79
- import "./chunk-5FWVFCQM.js";
80
- import "./chunk-EELTMBCC.js";
78
+ import "./chunk-44GV6ZMC.js";
79
+ import "./chunk-QO3JEPEW.js";
80
+ import "./chunk-2E7NDKTN.js";
81
81
  import "./chunk-AWDFDFI3.js";
82
82
  import "./chunk-P6LJ4Y32.js";
83
83
  import "./chunk-GMECXFAN.js";
@@ -86,8 +86,8 @@ import {
86
86
  trackRenderError,
87
87
  trackRenderObservation,
88
88
  trackRenderPreflightRejected
89
- } from "./chunk-FQJDV2RI.js";
90
- import "./chunk-FSX7GTBB.js";
89
+ } from "./chunk-4B6PUT4R.js";
90
+ import "./chunk-FSP2JNAP.js";
91
91
  import "./chunk-VWG7OQKU.js";
92
92
  import {
93
93
  bytesToMb
@@ -128,11 +128,11 @@ import {
128
128
  } from "./chunk-ISN5GRYI.js";
129
129
  import {
130
130
  VERSION
131
- } from "./chunk-BNEKKUPG.js";
131
+ } from "./chunk-UQPH3Y45.js";
132
132
  import "./chunk-EOVYQ3IG.js";
133
133
  import {
134
134
  createRenderCancellationScope
135
- } from "./chunk-A6K7M46D.js";
135
+ } from "./chunk-AWSVUIWG.js";
136
136
  import {
137
137
  H264EncoderUnavailableError,
138
138
  chromeLaunchRemediation,
@@ -148,8 +148,8 @@ import {
148
148
  MIN_VP9_CPU_USED,
149
149
  audioFailureDiagnostics,
150
150
  isVideoFrameFormat
151
- } from "./chunk-7FHFPHEM.js";
152
- import "./chunk-P24X6CGY.js";
151
+ } from "./chunk-VKFYI7AQ.js";
152
+ import "./chunk-FAORS3UR.js";
153
153
  import "./chunk-KCF6GHJP.js";
154
154
  import "./chunk-JYVGYKXG.js";
155
155
  import "./chunk-7KDQAD2W.js";
@@ -158,8 +158,8 @@ import {
158
158
  fpsToFfmpegArg,
159
159
  fpsToNumber,
160
160
  parseFps
161
- } from "./chunk-O3J7BHBU.js";
162
- import "./chunk-BIV5HVTQ.js";
161
+ } from "./chunk-QZUVPWC4.js";
162
+ import "./chunk-6M3IPJS6.js";
163
163
  import "./chunk-VC76R6W2.js";
164
164
  import "./chunk-UJKQWGFF.js";
165
165
  import {
@@ -690,7 +690,7 @@ async function executeRenderPlan(plan, dependencies, cancellation) {
690
690
  let batchModule;
691
691
  let preparedBatch;
692
692
  if (plan.batchPath) {
693
- batchModule = await import("./batchRender-YKTTAIHH.js");
693
+ batchModule = await import("./batchRender-KWBVAUE3.js");
694
694
  try {
695
695
  preparedBatch = batchModule.prepareBatchRender({
696
696
  batchPath: plan.batchPath,
@@ -14,7 +14,7 @@ import {
14
14
  loadProjectVariableSchema,
15
15
  reportVariableIssues,
16
16
  validateVariablesAgainstSchema
17
- } from "./chunk-RZKQ3G6B.js";
17
+ } from "./chunk-T5LGOTQR.js";
18
18
  import "./chunk-FH7WODJH.js";
19
19
  import {
20
20
  errorBox
@@ -27,8 +27,8 @@ import {
27
27
  import {
28
28
  c
29
29
  } from "./chunk-ZTZA4UWZ.js";
30
- import "./chunk-O3J7BHBU.js";
31
- import "./chunk-BIV5HVTQ.js";
30
+ import "./chunk-QZUVPWC4.js";
31
+ import "./chunk-6M3IPJS6.js";
32
32
  import "./chunk-VC76R6W2.js";
33
33
  import "./chunk-UJKQWGFF.js";
34
34
  import "./chunk-YMS5FOMC.js";
@@ -43,10 +43,18 @@ var disposeSignalHandlers = installRenderSetupSignalHandlers(
43
43
  (signal) => process.kill(process.pid, signal),
44
44
  process.env.HYPERFRAMES_RENDER_DETACHED !== "1"
45
45
  );
46
+ function lowerPriority() {
47
+ try {
48
+ setPriority(constants.priority.PRIORITY_LOW);
49
+ } catch (error) {
50
+ process.stderr.write(`Lint runs at normal priority: ${error.message}
51
+ `);
52
+ }
53
+ }
46
54
  async function runMode() {
47
55
  if (mode === "browser") return ensureBrowser(input);
48
56
  if (mode === "lint") {
49
- setPriority(constants.priority.PRIORITY_LOW);
57
+ lowerPriority();
50
58
  return lintProject(
51
59
  input.projectDir,
52
60
  input.entryFile,
@@ -11,13 +11,13 @@ import {
11
11
  resolveItemWithDependencies,
12
12
  resolveItemsByTag,
13
13
  unreachableRegistryMessage
14
- } from "./chunk-5SQHHBAR.js";
15
- import "./chunk-EELTMBCC.js";
14
+ } from "./chunk-44GV6ZMC.js";
15
+ import "./chunk-2E7NDKTN.js";
16
16
  import "./chunk-AWDFDFI3.js";
17
17
  import "./chunk-P6LJ4Y32.js";
18
18
  import "./chunk-GMECXFAN.js";
19
- import "./chunk-O3J7BHBU.js";
20
- import "./chunk-BIV5HVTQ.js";
19
+ import "./chunk-QZUVPWC4.js";
20
+ import "./chunk-6M3IPJS6.js";
21
21
  import "./chunk-VC76R6W2.js";
22
22
  import "./chunk-UJKQWGFF.js";
23
23
  import "./chunk-YMS5FOMC.js";
@@ -17,24 +17,24 @@ import {
17
17
  sherpaRuntimeLoadError,
18
18
  sherpaUnsupportedReason,
19
19
  transcribeWithSherpa
20
- } from "./chunk-U7P2XTRY.js";
20
+ } from "./chunk-PECICVTJ.js";
21
21
  import "./chunk-BXCMXMJQ.js";
22
22
  import "./chunk-3DKN5WKL.js";
23
23
  import "./chunk-EOVYQ3IG.js";
24
- import "./chunk-UISU4SYG.js";
25
- import "./chunk-A6K7M46D.js";
24
+ import "./chunk-V2T7FFPB.js";
25
+ import "./chunk-AWSVUIWG.js";
26
26
  import "./chunk-6BEFEWFB.js";
27
27
  import "./chunk-X3SCQP2A.js";
28
28
  import "./chunk-PO2SDVQA.js";
29
29
  import "./chunk-IK3SOMZ4.js";
30
30
  import "./chunk-XT6MXC7A.js";
31
- import "./chunk-7FHFPHEM.js";
32
- import "./chunk-P24X6CGY.js";
31
+ import "./chunk-VKFYI7AQ.js";
32
+ import "./chunk-FAORS3UR.js";
33
33
  import "./chunk-KCF6GHJP.js";
34
34
  import "./chunk-JYVGYKXG.js";
35
35
  import "./chunk-7KDQAD2W.js";
36
- import "./chunk-O3J7BHBU.js";
37
- import "./chunk-BIV5HVTQ.js";
36
+ import "./chunk-QZUVPWC4.js";
37
+ import "./chunk-6M3IPJS6.js";
38
38
  import "./chunk-VC76R6W2.js";
39
39
  import "./chunk-UJKQWGFF.js";
40
40
  import "./chunk-YMS5FOMC.js";
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: media-use
3
- description: Agent Media OS for a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal. When the host app provides its own music or sound-effect tools, use those for music and sound effects; `resolve --type bgm|sfx` needs the heygen CLI. When `HEYGEN_API_BASE` is set, HeyGen calls go through that host with no CLI sign-in.
3
+ description: Agent Media OS for a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal. When the host app provides its own music or sound-effect tools, use those for music and sound effects; `resolve --type bgm` needs the heygen CLI, while `--type sfx` needs no account (Openverse, then a bundled library). When `HEYGEN_API_BASE` is set, HeyGen calls go through that host with no CLI sign-in.
4
4
  ---
5
5
 
6
6
  **Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](../hyperframes/references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
@@ -13,7 +13,7 @@ Only when `HEYGEN_API_BASE` is set in your environment (a host app set it and pa
13
13
 
14
14
  First run otherwise (no `HEYGEN_API_BASE`), when you will use HeyGen media (catalog search, TTS, avatar video): install and sign in to the `heygen` CLI (the free-usage path), then verify with `npx hyperframes media-use resolve --doctor`. Setup and providers: `references/setup-providers.md`.
15
15
 
16
- Music and sound effects inside a host app: when the app you run in gives you its own music or sound-effect tools, use those. Without `HEYGEN_API_BASE`, `resolve --type bgm` and `--type sfx` search the HeyGen catalog through the `heygen` CLI; without it they fail and say so (`sfx` still answers from its bundled library).
16
+ Music and sound effects inside a host app: when the app you run in gives you its own music or sound-effect tools, use those. Without `HEYGEN_API_BASE`, `resolve --type bgm` searches the HeyGen catalog through the `heygen` CLI and fails without it, saying so. `resolve --type sfx` searches Openverse (CC0 and CC BY only, no account) and falls back to its bundled library offline; credit CC BY sounds as `audio/references/sfx.md` says.
17
17
 
18
18
  Without `HEYGEN_API_BASE`, before generating a voiceover or an avatar video, tell the person: signing in to the heygen CLI with OAuth (`heygen auth login --oauth`) gives a free allowance for TTS voiceover and avatar videos, while an API key bills API credits.
19
19
 
@@ -28,7 +28,7 @@ Returns one line: `resolved <id> → <path> (<type>, <metadata>)`. All search no
28
28
  | Type | One-line intent |
29
29
  | ------- | -------------------------------------------------------------------------------- |
30
30
  | `bgm` | background music (HeyGen catalog via the `heygen` CLI, 10k+ tracks) |
31
- | `sfx` | sound effects (bundled 19-file library + catalog via the `heygen` CLI) |
31
+ | `sfx` | sound effects (Openverse CC0 / CC BY, bundled 21-file library offline) |
32
32
  | `image` | photos, backgrounds (HeyGen asset search, 75k+ vectors) |
33
33
  | `icon` | icons, symbols (transparent) |
34
34
  | `logo` | official brand marks (theSVG → GitHub avatar → favicon; never redrawn) |
@@ -4,13 +4,13 @@
4
4
 
5
5
  Run `npx hyperframes auth status` to see what's configured and which engines a workflow will use (see the skill's **Preflight** section). Keys resolve in this order — **first match wins**:
6
6
 
7
- | Provider | Resolution order (first non-empty wins) | Local deps when used |
8
- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
9
- | **HeyGen** (TTS + BGM/SFX retrieval) | `$HEYGEN_API_KEY` → `$HYPERFRAMES_API_KEY` → `~/.heygen/credentials` (shared with heygen-cli; `$HEYGEN_CONFIG_DIR` overrides the dir; written by `hyperframes auth login`) | none (REST) |
10
- | **ElevenLabs** (TTS fallback) | `$ELEVENLABS_API_KEY` | `pip install elevenlabs` |
11
- | **Lyria** (BGM fallback) | `$GEMINI_API_KEY` → `$GOOGLE_API_KEY` | `pip install google-genai` |
12
- | **Kokoro** (TTS, no key) | always — final voice fallback | `pip install kokoro-onnx soundfile` |
13
- | **MusicGen** (BGM, no key) | always — final music fallback | `pip install transformers torch soundfile numpy` |
7
+ | Provider | Resolution order (first non-empty wins) | Local deps when used |
8
+ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
9
+ | **HeyGen** (TTS + BGM retrieval) | `$HEYGEN_API_KEY` → `$HYPERFRAMES_API_KEY` → `~/.heygen/credentials` (shared with heygen-cli; `$HEYGEN_CONFIG_DIR` overrides the dir; written by `hyperframes auth login`) | none (REST) |
10
+ | **ElevenLabs** (TTS fallback) | `$ELEVENLABS_API_KEY` | `pip install elevenlabs` |
11
+ | **Lyria** (BGM fallback) | `$GEMINI_API_KEY` → `$GOOGLE_API_KEY` | `pip install google-genai` |
12
+ | **Kokoro** (TTS, no key) | always — final voice fallback | `pip install kokoro-onnx soundfile` |
13
+ | **MusicGen** (BGM, no key) | always — final music fallback | `pip install transformers torch soundfile numpy` |
14
14
 
15
15
  `hyperframes auth login` (browser OAuth) is the recommended setup: one sign-in, every project, no per-repo `.env`. An OAuth login is sent as `Authorization: Bearer`; an API key as `X-Api-Key`; both are tagged with `X-HeyGen-Source: cli`. OAuth CLI users can consume the web-plan free allowance for HeyGen TTS (10 min/month); API keys follow the normal API billing path. With no HeyGen credential, voice/BGM run fully locally (Kokoro / MusicGen) — `hyperframes auth status` and `hyperframes doctor` both report whether those local deps are installed.
16
16
 
@@ -1,35 +1,41 @@
1
1
  # Sound effects (SFX)
2
2
 
3
- Named sound effects, produced by the shared audio engine (`scripts/audio.mjs` → `scripts/lib/sfx.mjs`). **Provider-gated** by the engine's one switch — whether a HeyGen credential is present, decided once (not per cue):
3
+ Named sound effects, produced by the shared audio engine (`scripts/audio.mjs` → `scripts/lib/sfx.mjs`). No account or key is needed:
4
4
 
5
- - **HeyGen credential present → retrieve every cue** from HeyGen's audio library (`/v3/audio/sounds`, `type=sound_effects`, `min_score=0.4`). Search-and-download, **not** generation. The bundled library is NOT consulted.
6
- - **No credential → the bundled 21-file library** (`assets/sfx/` + `manifest.json`): match each cue name, copy the matched file into the project. Offline, deterministic, free.
5
+ - **Openverse first, per cue.** Each cue is searched on [Openverse](https://openverse.org)'s free audio API (most sound effects come from Freesound). Search-and-download, **not** generation.
6
+ - **The bundled 21-file library is the fallback** (`assets/sfx/` + `manifest.json`): a cue Openverse has no usable match for, and every cue once Openverse is offline or rate limited, is matched against it and the file copied into the project.
7
7
 
8
- There is no `npx hyperframes sfx` command. SFX is never generated — it is retrieved (online) or taken from the bundled library (offline).
8
+ There is no `npx hyperframes sfx` command. SFX is never generated — it is retrieved from Openverse (online) or taken from the bundled library (offline). `npx hyperframes media-use resolve --type sfx` follows the same order (`--local-only` skips Openverse).
9
+
10
+ ## Licences
11
+
12
+ Only **CC0** and **CC BY** sounds are used: never NonCommercial, ShareAlike or NoDerivatives. Each CC BY sound is credited in the project's `assets/sfx/CREDITS.md` (title, creator, licence, source link; for `resolve`, in a `CREDITS.md` beside the sound files it saves) and its `audio_meta.sfx[]` entry carries `license` and `credit`. Tell the person to include those credits wherever the video is published.
9
13
 
10
14
  ## Cues — request → meta
11
15
 
12
- Each line names the effects it wants: `lines[].sfx: ["whoosh", "ui click"]`. The engine flattens these into cues, resolves them per the switch, dedupes identical `(id, name)` pairs (the same effect named twice downloads/copies once), and writes `audio_meta.sfx[]`:
16
+ Each line names the effects it wants: `lines[].sfx: ["whoosh", "ui click"]`. The engine flattens these into cues, resolves each, dedupes identical `(id, name)` pairs (the same effect named twice downloads/copies once), and writes `audio_meta.sfx[]`:
13
17
 
14
18
  ```jsonc
15
19
  {
16
20
  "id": "3", // joins the cue to the caller's model (frame / scene / segment)
17
21
  "name": "whoosh",
18
22
  "file": "assets/sfx/whoosh.mp3", // downloaded or copied, relative to project root
19
- "source": "heygen" | "local", // which route resolved it
23
+ "source": "openverse" | "local", // which route resolved it
20
24
  "offset_s": 0, // delay from the line's start
21
25
  "duration_s": 0.57,
22
- "volume": 0.35 // SFX sit UNDER voice + BGM
26
+ "volume": 0.35, // SFX sit UNDER voice + BGM
27
+ "license": "by", // Openverse only: "cc0" or "by"
28
+ "credit": "\"Swoosh\" by Ana is licensed under CC BY 4.0. …" // Openverse only
23
29
  }
24
30
  ```
25
31
 
26
32
  A cue that matches nothing is **skipped** (recorded as an anomaly); SFX never blocks a render. Neither route replaces a file of yours already at the output name: the cue gets the next free name (`whoosh-2.mp3`), reported as an anomaly, and `file` carries the real path.
27
33
 
28
- ## HeyGen retrieval (credentialed)
34
+ ## Openverse
29
35
 
30
- `searchSounds(name, "sound_effects", { limit: 3, minScore: 0.4 })` → top hit → `assets/sfx/<slug>.mp3`. Results are ranked by `score` (each carries a presigned `audio_url`, `duration`, `description`). The floor is **0.4** because good SFX hits score ~0.5–0.67 — below the API's default `0.7`, which would silently drop most named cues (only whoosh/swoosh-family clears 0.7). `duration_s` comes from the result (else 1.0). Name effects concretely (`glass shatter`, not `dramatic sound`); a vague query returns a poor match.
36
+ One search per distinct effect name (20 results, `license=cc0,by`; each result's licence is checked again). The pick keeps Openverse's relevance order, prefers clips that fit a cue (15 s at most; past ~4 s ranks lower) and CC0 over CC BY when they are close. The file lands at `assets/sfx/<slug>.<ext>` and `duration_s` comes from the result. Name effects concretely (`glass shatter`, not `dramatic sound`); a vague query returns a poor match. Anonymous use allows 20 searches a minute and 200 a day: past that, the rest of the run uses the bundled library.
31
37
 
32
- ## Bundled library (no credential)
38
+ ## Bundled library (fallback)
33
39
 
34
40
  21 curated files in `assets/sfx/`, indexed by `manifest.json` — `{ file, duration, description }` per key (e.g. `whoosh`, `pop`, `click`, `chime`, `riser`, `impact-bass-1`, `glitch-1`, `typing`, …). A cue name resolves by **manifest key, file basename, or slug**, so `whoosh`, `whoosh.mp3`, or `"ui click"` (→ slug) all match. Matched files are copied into the project's `assets/sfx/`; `duration_s` comes from the manifest, so timing is known **offline** — e.g. `riser` is 10.03s, so trigger it at `climax − 10.03s`. The manifest's `description` field carries placement hints per effect; read `assets/sfx/manifest.json` for the full set and usage.
35
41
 
@@ -37,6 +43,6 @@ A cue that matches nothing is **skipped** (recorded as an anomaly); SFX never bl
37
43
 
38
44
  - **Volume ~0.35.** SFX must sit under narration and BGM, not fight them.
39
45
  - **No match → skip, don't fail.** A missing effect logs an anomaly and moves on; never a render blocker.
40
- - **Retrieval (credentialed) or bundled library (offline) — never generation.** You search HeyGen by text, or match a name against the 21-file manifest.
41
- - **One asset per distinct name.** Reuse across lines is deduped to a single download/copy, many cues.
42
- - **The switch is global, not per cue.** With a credential, retrieval handles even the long tail (effects not in the 21); without one, only the 21 bundled names resolve.
46
+ - **Retrieval (Openverse) or bundled library (offline) — never generation.**
47
+ - **One asset per distinct name.** Reuse across lines is deduped to a single search and download, many cues.
48
+ - **Credit CC BY sounds.** `CREDITS.md` lists them; keep it with the project.