screenci 0.0.76 → 0.0.79

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 (184) hide show
  1. package/dist/cli.d.ts +58 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +584 -200
  4. package/dist/cli.js.map +1 -1
  5. package/dist/docs/manifest.d.ts +253 -98
  6. package/dist/docs/manifest.d.ts.map +1 -1
  7. package/dist/docs/manifest.js +92 -32
  8. package/dist/docs/manifest.js.map +1 -1
  9. package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
  10. package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
  11. package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
  12. package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
  13. package/dist/docs/video-sources/installation.screenci.js +9 -6
  14. package/dist/docs/video-sources/installation.screenci.js.map +1 -1
  15. package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
  16. package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
  17. package/dist/docs/video-sources/languages.screenci.js +68 -0
  18. package/dist/docs/video-sources/languages.screenci.js.map +1 -0
  19. package/dist/docs/video-sources/locator-highlight-animated.screenci.js +1 -1
  20. package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
  21. package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
  22. package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
  23. package/dist/docs/video-sources/narration.screenci.js +71 -0
  24. package/dist/docs/video-sources/narration.screenci.js.map +1 -0
  25. package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
  26. package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
  27. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
  28. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
  29. package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
  30. package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
  31. package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
  32. package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
  33. package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
  34. package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
  35. package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
  36. package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
  37. package/dist/docs/videos.d.ts +20 -0
  38. package/dist/docs/videos.d.ts.map +1 -1
  39. package/dist/docs/videos.js +25 -0
  40. package/dist/docs/videos.js.map +1 -1
  41. package/dist/e2e/instrument.e2e.js +8 -0
  42. package/dist/e2e/instrument.e2e.js.map +1 -1
  43. package/dist/e2e/redact.e2e.d.ts +2 -0
  44. package/dist/e2e/redact.e2e.d.ts.map +1 -0
  45. package/dist/e2e/redact.e2e.js +161 -0
  46. package/dist/e2e/redact.e2e.js.map +1 -0
  47. package/dist/index.d.ts +10 -3
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +8 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/src/asset.d.ts +154 -13
  52. package/dist/src/asset.d.ts.map +1 -1
  53. package/dist/src/asset.js +262 -32
  54. package/dist/src/asset.js.map +1 -1
  55. package/dist/src/assetHash.d.ts +27 -0
  56. package/dist/src/assetHash.d.ts.map +1 -0
  57. package/dist/src/assetHash.js +0 -0
  58. package/dist/src/assetHash.js.map +1 -0
  59. package/dist/src/audio.d.ts +8 -5
  60. package/dist/src/audio.d.ts.map +1 -1
  61. package/dist/src/audio.js +56 -31
  62. package/dist/src/audio.js.map +1 -1
  63. package/dist/src/builder.d.ts +132 -32
  64. package/dist/src/builder.d.ts.map +1 -1
  65. package/dist/src/builder.js +66 -20
  66. package/dist/src/builder.js.map +1 -1
  67. package/dist/src/changeFocus.d.ts.map +1 -1
  68. package/dist/src/changeFocus.js +103 -34
  69. package/dist/src/changeFocus.js.map +1 -1
  70. package/dist/src/cue.d.ts +29 -17
  71. package/dist/src/cue.d.ts.map +1 -1
  72. package/dist/src/cue.js +138 -61
  73. package/dist/src/cue.js.map +1 -1
  74. package/dist/src/declare.d.ts +8 -4
  75. package/dist/src/declare.d.ts.map +1 -1
  76. package/dist/src/declare.js +28 -10
  77. package/dist/src/declare.js.map +1 -1
  78. package/dist/src/defaults.d.ts +23 -0
  79. package/dist/src/defaults.d.ts.map +1 -1
  80. package/dist/src/defaults.js +23 -0
  81. package/dist/src/defaults.js.map +1 -1
  82. package/dist/src/events.d.ts +289 -25
  83. package/dist/src/events.d.ts.map +1 -1
  84. package/dist/src/events.js +145 -13
  85. package/dist/src/events.js.map +1 -1
  86. package/dist/src/htmlRasterizer.d.ts +10 -0
  87. package/dist/src/htmlRasterizer.d.ts.map +1 -1
  88. package/dist/src/htmlRasterizer.js +12 -2
  89. package/dist/src/htmlRasterizer.js.map +1 -1
  90. package/dist/src/init.d.ts +2 -0
  91. package/dist/src/init.d.ts.map +1 -1
  92. package/dist/src/init.js +60 -28
  93. package/dist/src/init.js.map +1 -1
  94. package/dist/src/instrument.d.ts.map +1 -1
  95. package/dist/src/instrument.js +25 -7
  96. package/dist/src/instrument.js.map +1 -1
  97. package/dist/src/locales.d.ts.map +1 -1
  98. package/dist/src/locales.js +1 -0
  99. package/dist/src/locales.js.map +1 -1
  100. package/dist/src/localize.d.ts +25 -17
  101. package/dist/src/localize.d.ts.map +1 -1
  102. package/dist/src/localize.js +18 -10
  103. package/dist/src/localize.js.map +1 -1
  104. package/dist/src/localizeRuntime.d.ts +18 -13
  105. package/dist/src/localizeRuntime.d.ts.map +1 -1
  106. package/dist/src/localizeRuntime.js +28 -18
  107. package/dist/src/localizeRuntime.js.map +1 -1
  108. package/dist/src/logger.d.ts +5 -0
  109. package/dist/src/logger.d.ts.map +1 -1
  110. package/dist/src/logger.js +7 -0
  111. package/dist/src/logger.js.map +1 -1
  112. package/dist/src/narrationVisibility.d.ts +19 -0
  113. package/dist/src/narrationVisibility.d.ts.map +1 -0
  114. package/dist/src/narrationVisibility.js +26 -0
  115. package/dist/src/narrationVisibility.js.map +1 -0
  116. package/dist/src/recordingData.d.ts +7 -0
  117. package/dist/src/recordingData.d.ts.map +1 -1
  118. package/dist/src/recordingSize.d.ts +32 -0
  119. package/dist/src/recordingSize.d.ts.map +1 -0
  120. package/dist/src/recordingSize.js +54 -0
  121. package/dist/src/recordingSize.js.map +1 -0
  122. package/dist/src/redact.d.ts +68 -0
  123. package/dist/src/redact.d.ts.map +1 -0
  124. package/dist/src/redact.js +138 -0
  125. package/dist/src/redact.js.map +1 -0
  126. package/dist/src/redactController.d.ts +61 -0
  127. package/dist/src/redactController.d.ts.map +1 -0
  128. package/dist/src/redactController.js +232 -0
  129. package/dist/src/redactController.js.map +1 -0
  130. package/dist/src/runtimeContext.d.ts +32 -0
  131. package/dist/src/runtimeContext.d.ts.map +1 -1
  132. package/dist/src/runtimeContext.js +21 -0
  133. package/dist/src/runtimeContext.js.map +1 -1
  134. package/dist/src/runtimeMode.d.ts +15 -7
  135. package/dist/src/runtimeMode.d.ts.map +1 -1
  136. package/dist/src/runtimeMode.js +17 -6
  137. package/dist/src/runtimeMode.js.map +1 -1
  138. package/dist/src/screenAudio.d.ts +34 -4
  139. package/dist/src/screenAudio.d.ts.map +1 -1
  140. package/dist/src/screenAudio.js +0 -0
  141. package/dist/src/screenAudio.js.map +1 -1
  142. package/dist/src/screenAudioSink.d.ts +12 -0
  143. package/dist/src/screenAudioSink.d.ts.map +1 -1
  144. package/dist/src/screenAudioSink.js +30 -0
  145. package/dist/src/screenAudioSink.js.map +1 -1
  146. package/dist/src/screenshot.d.ts +16 -14
  147. package/dist/src/screenshot.d.ts.map +1 -1
  148. package/dist/src/screenshot.js +11 -11
  149. package/dist/src/screenshot.js.map +1 -1
  150. package/dist/src/sourceTrim.d.ts +29 -0
  151. package/dist/src/sourceTrim.d.ts.map +1 -0
  152. package/dist/src/sourceTrim.js +76 -0
  153. package/dist/src/sourceTrim.js.map +1 -0
  154. package/dist/src/studio.d.ts +71 -3
  155. package/dist/src/studio.d.ts.map +1 -1
  156. package/dist/src/studio.js +19 -1
  157. package/dist/src/studio.js.map +1 -1
  158. package/dist/src/timelineOffset.d.ts +46 -0
  159. package/dist/src/timelineOffset.d.ts.map +1 -0
  160. package/dist/src/timelineOffset.js +66 -0
  161. package/dist/src/timelineOffset.js.map +1 -0
  162. package/dist/src/titleValidation.d.ts +38 -0
  163. package/dist/src/titleValidation.d.ts.map +1 -1
  164. package/dist/src/titleValidation.js +42 -0
  165. package/dist/src/titleValidation.js.map +1 -1
  166. package/dist/src/types.d.ts +85 -0
  167. package/dist/src/types.d.ts.map +1 -1
  168. package/dist/src/types.js +1 -1
  169. package/dist/src/types.js.map +1 -1
  170. package/dist/src/video.d.ts +37 -34
  171. package/dist/src/video.d.ts.map +1 -1
  172. package/dist/src/video.js +99 -48
  173. package/dist/src/video.js.map +1 -1
  174. package/dist/src/voiceSampleAudio.d.ts +34 -0
  175. package/dist/src/voiceSampleAudio.d.ts.map +1 -0
  176. package/dist/src/voiceSampleAudio.js +105 -0
  177. package/dist/src/voiceSampleAudio.js.map +1 -0
  178. package/dist/src/voices.d.ts +2 -2
  179. package/dist/src/voices.d.ts.map +1 -1
  180. package/dist/src/voices.js +8 -3
  181. package/dist/src/voices.js.map +1 -1
  182. package/dist/tsconfig.tsbuildinfo +1 -1
  183. package/package.json +3 -2
  184. package/templates/recordings/assets/logo.png +0 -0
package/dist/src/video.js CHANGED
@@ -2,12 +2,14 @@ import { test as base } from '@playwright/test';
2
2
  import { mkdir, rm } from 'fs/promises';
3
3
  import { join, relative } from 'path';
4
4
  import { attachRecorder } from 'playwright-recorder-plus';
5
+ import { ScreenciError } from './errors.js';
6
+ import { isStudioMarker } from './studio.js';
5
7
  export { getDimensions } from './dimensions.js';
6
8
  import { getDimensions, getViewportCenter } from './dimensions.js';
7
9
  import { resetCueChain } from './cue.js';
8
10
  import { setActiveCueRecorder } from './cue.js';
9
11
  import { createVideoBuilder, } from './builder.js';
10
- import { buildNarrationMarkers, buildTextDeclaration, buildTextValues, narrationVoiceConfigFromRenderOptions, } from './localizeRuntime.js';
12
+ import { buildNarrationMarkers, buildValuesDeclaration, buildValues, narrationVoiceConfigFromRenderOptions, } from './localizeRuntime.js';
11
13
  import { setActiveHideRecorder } from './hide.js';
12
14
  import { setActiveAutoZoomRecorder, setActiveZoomPage } from './autoZoom.js';
13
15
  import { setActiveAssetRecorder, buildOverlays, validateRegisteredAssetPaths, } from './asset.js';
@@ -20,18 +22,27 @@ import { logger } from './logger.js';
20
22
  import { setMousePosition } from './mouse.js';
21
23
  import { captureRequestedButNotEnabled, getChromiumLaunchOptions, isCaptureAudioEnabled, } from './browserLaunchOptions.js';
22
24
  import { createScreenCIRuntimeContext, runWithScreenCIRuntimeContext, setActiveScreenCIRuntimeContext, setRuntimeAssetRecorder, setRuntimeAudioRecorder, setRuntimeAutoZoomRecorder, setRuntimeClickRecorder, setRuntimeCueRecorder, setRuntimeHideRecorder, setRuntimePage, } from './runtimeContext.js';
25
+ import { installRedactController } from './redact.js';
23
26
  import { escapeFileSystemPathSegment } from './fileSystemName.js';
24
- import { resolveRecordingTimingDuration, parseTextOverrides, parseRecordOptions, mergeStudioRecordOptions, } from './runtimeMode.js';
27
+ import { resolveRecordingTimingDuration, parseValuesOverrides, parseRecordOptions, mergeStudioRecordOptions, } from './runtimeMode.js';
25
28
  import { buildScreenCIContextOptions } from './contextOptions.js';
26
29
  import { bindStillCaptureToPage } from './stillCapture.js';
27
30
  import { startScreenAudioCapture, isScreenAudioSupported, screenAudioUnsupportedMessage, setActiveCaptureDevice, SCREEN_AUDIO_DOCS_URL, } from './screenAudio.js';
28
- import { createNullSink, unloadNullSink, workerSinkName, } from './screenAudioSink.js';
31
+ import { assertScreenAudioCaptureReady, createNullSink, unloadNullSink, workerSinkName, } from './screenAudioSink.js';
29
32
  export const POST_VIDEO_PAUSE = 500;
33
+ /** The old `'studio'` string sentinel is retired: use `studio()` / `studio({...})`. */
34
+ function assertNotLegacyStudioString(value, option) {
35
+ if (value === 'studio') {
36
+ throw new ScreenciError(`use({ ${option}: 'studio' }) is no longer supported. Use ${option}: studio() ` +
37
+ `to hand the options to the web app, or studio({ ... }) to seed them, ` +
38
+ `imported from 'screenci'.`);
39
+ }
40
+ }
30
41
  /**
31
42
  * The record options actually used for the capture: when record options are
32
- * deferred to Studio (`use({ recordOptions: 'studio' })`), the values fetched
33
- * before recording (keyed by video name) override the code-declared aspect
34
- * ratio, quality, and fps. Otherwise the code values are used as-is.
43
+ * deferred to Studio (`use({ recordOptions: studio() })`), the values fetched
44
+ * before recording (keyed by video name) override the base (seeded or default)
45
+ * aspect ratio, quality, and fps. Otherwise the code values are used as-is.
35
46
  */
36
47
  export function resolveEffectiveRecordOptions(recordOptions, studioRecordOptions, videoName) {
37
48
  if (!studioRecordOptions)
@@ -39,23 +50,39 @@ export function resolveEffectiveRecordOptions(recordOptions, studioRecordOptions
39
50
  return mergeStudioRecordOptions(recordOptions, parseRecordOptions()?.[videoName]);
40
51
  }
41
52
  /**
42
- * Resolve the `recordOptions` option, which may be the `'studio'` sentinel
43
- * (`use({ recordOptions: 'studio' })`) deferring the capture options to the web
44
- * app. Returns the base options to record with (defaults when deferred) and
45
- * whether the bag is Studio-managed.
53
+ * Resolve the `recordOptions` option, which may be `studio()` / `studio({...})`
54
+ * (`use({ recordOptions: studio() })`) deferring the capture options to the web
55
+ * app. Returns the base options to record with (the seed merged over defaults
56
+ * when seeded, plain defaults when blank) and whether the bag is Studio-managed.
46
57
  */
47
58
  export function resolveStudioRecordOptions(recordOptions) {
48
- const studio = recordOptions === 'studio';
49
- return { base: studio ? DEFAULT_VIDEO_OPTIONS : recordOptions, studio };
59
+ assertNotLegacyStudioString(recordOptions, 'recordOptions');
60
+ if (isStudioMarker(recordOptions)) {
61
+ const seed = recordOptions.seed;
62
+ return {
63
+ base: seed
64
+ ? { ...DEFAULT_VIDEO_OPTIONS, ...seed }
65
+ : DEFAULT_VIDEO_OPTIONS,
66
+ studio: true,
67
+ };
68
+ }
69
+ return { base: recordOptions, studio: false };
50
70
  }
51
71
  /**
52
- * Resolve the `renderOptions` option, which may be the `'studio'` sentinel
53
- * deferring the render options to the web app. Returns the code render options
54
- * (`undefined` when deferred) and whether they are Studio-managed.
72
+ * Resolve the `renderOptions` option, which may be `studio()` / `studio({...})`
73
+ * deferring the render options to the web app. Returns the render options to use
74
+ * as the starting point (the seed when seeded, `undefined` when blank) and
75
+ * whether they are Studio-managed.
55
76
  */
56
77
  export function resolveStudioRenderOptions(renderOptions) {
57
- const studio = renderOptions === 'studio';
58
- return { obj: studio ? undefined : renderOptions, studio };
78
+ assertNotLegacyStudioString(renderOptions, 'renderOptions');
79
+ if (isStudioMarker(renderOptions)) {
80
+ return {
81
+ obj: renderOptions.seed,
82
+ studio: true,
83
+ };
84
+ }
85
+ return { obj: renderOptions, studio: false };
59
86
  }
60
87
  export async function finalizeDeferredRecordingStops(entries) {
61
88
  await Promise.all(entries.map(async ({ recorder }) => {
@@ -240,7 +267,7 @@ export function autoEndOpenOverlays(runtimeContext, recorder) {
240
267
  runtimeContext.asset.activeRuns.clear();
241
268
  }
242
269
  export async function withActiveRecordingContext(params) {
243
- const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw', textDeclaration, } = params;
270
+ const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw', valuesDeclaration, } = params;
244
271
  setActiveScreenCIRuntimeContext(runtimeContext);
245
272
  try {
246
273
  return await runWithScreenCIRuntimeContext(runtimeContext, async () => {
@@ -268,8 +295,8 @@ export async function withActiveRecordingContext(params) {
268
295
  await validateRegisteredAssetPaths(runtimeContext.testFilePath);
269
296
  await validateRegisteredAudioPaths(runtimeContext.testFilePath);
270
297
  }
271
- if (textDeclaration) {
272
- recorder.addTextDeclare(textDeclaration.fields, textDeclaration.studioFields, textDeclaration.seed);
298
+ if (valuesDeclaration) {
299
+ recorder.addValuesDeclare(valuesDeclaration.fields, valuesDeclaration.studioFields, valuesDeclaration.seed);
273
300
  }
274
301
  const result = await fn();
275
302
  if (unendedOverlays === 'autoEnd') {
@@ -297,7 +324,7 @@ const _videoBase = base.extend({
297
324
  _screenciLanguage: [undefined, { option: true }],
298
325
  _screenciVideoName: [undefined, { option: true }],
299
326
  _screenciNarration: [undefined, { option: true }],
300
- _screenciText: [undefined, { option: true }],
327
+ _screenciValues: [undefined, { option: true }],
301
328
  _screenciOverlays: [undefined, { option: true }],
302
329
  _screenciAudio: [undefined, { option: true }],
303
330
  _screenciRecordingLocalize: [undefined, { option: true }],
@@ -305,18 +332,23 @@ const _videoBase = base.extend({
305
332
  language: async ({ _screenciLanguage }, use) => {
306
333
  await use(_screenciLanguage);
307
334
  },
308
- narration: async ({ _screenciNarration, _screenciRecordingLocalize, renderOptions }, use) => {
335
+ narration: async ({ _screenciNarration, _screenciRecordingLocalize, renderOptions, _screenciSourceFile, }, use, testInfo) => {
309
336
  const { obj: renderOptionsObj, studio: studioRender } = resolveStudioRenderOptions(renderOptions);
310
- await use(buildNarrationMarkers(_screenciNarration, _screenciRecordingLocalize?.languages ?? [], narrationVoiceConfigFromRenderOptions(renderOptionsObj, studioRender)));
337
+ await use(buildNarrationMarkers(_screenciNarration, _screenciRecordingLocalize?.languages ?? [], narrationVoiceConfigFromRenderOptions(renderOptionsObj, studioRender), undefined,
338
+ // Pre-warm media-cue hashes before recording so a video cue's start()
339
+ // does not pay the file read on the timeline.
340
+ _screenciSourceFile ?? testInfo.file));
311
341
  },
312
- text: async ({ _screenciText, _screenciLanguage }, use) => {
313
- await use(buildTextValues(_screenciText, _screenciLanguage, parseTextOverrides()));
342
+ values: async ({ _screenciValues, _screenciLanguage }, use) => {
343
+ await use(buildValues(_screenciValues, _screenciLanguage, parseValuesOverrides()));
314
344
  },
315
345
  overlays: async ({ _screenciOverlays, _screenciLanguage }, use) => {
316
346
  await use(buildOverlays(_screenciOverlays, _screenciLanguage));
317
347
  },
318
- audio: async ({ _screenciAudio, _screenciLanguage }, use) => {
319
- await use(buildAudio(_screenciAudio, _screenciLanguage));
348
+ audio: async ({ _screenciAudio, _screenciLanguage, _screenciSourceFile }, use, testInfo) => {
349
+ // Pre-warm audio-track hashes before recording so a track's start() does not
350
+ // pay the file read on the timeline.
351
+ await use(buildAudio(_screenciAudio, _screenciLanguage, _screenciSourceFile ?? testInfo.file));
320
352
  },
321
353
  recordingFinalizationQueue: [
322
354
  async ({}, use) => {
@@ -331,24 +363,34 @@ const _videoBase = base.extend({
331
363
  ],
332
364
  browser: async ({ playwright }, use) => {
333
365
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
334
- // Audio capture only runs on Linux; elsewhere we leave the browser in the
335
- // normal muted launch and warn (see the per-video capture site below).
336
- const audioActive = shouldRecord && isCaptureAudioEnabled() && isScreenAudioSupported();
366
+ // captureAudio requires isolated capture (a per-worker null sink). It must
367
+ // succeed or the run fails, so a recording never silently ships without the
368
+ // isolated audio it promises.
369
+ const captureAudioRequested = shouldRecord && isCaptureAudioEnabled();
370
+ // Isolated capture is Linux-only (macOS/Windows cannot isolate the browser's
371
+ // audio from the rest of the machine). Requested on an unsupported platform:
372
+ // fail fast rather than recording silently.
373
+ if (captureAudioRequested && !isScreenAudioSupported()) {
374
+ throw new Error(screenAudioUnsupportedMessage() ??
375
+ '[screenci] captureAudio is not supported on this platform.');
376
+ }
377
+ const audioActive = captureAudioRequested && isScreenAudioSupported();
337
378
  // Give this worker a dedicated null sink so capture is silent on the host,
338
379
  // isolated from other apps, and safe under parallel workers. The browser is
339
380
  // routed into it via PULSE_SINK and the recorder captures its monitor.
340
381
  let sink = null;
341
382
  if (audioActive) {
383
+ // Requires `pactl` and a reachable pulse server (PulseAudio or PipeWire);
384
+ // the pulseaudio daemon binary itself is not needed. Throws if unavailable.
385
+ await assertScreenAudioCaptureReady();
342
386
  sink = await createNullSink(workerSinkName());
343
- if (sink) {
344
- setActiveCaptureDevice(sink.monitorSource);
345
- }
346
- else {
347
- logger.warn(`captureAudio: could not create a dedicated audio sink (is pactl ` +
348
- `available?). Falling back to the default device, so recording ` +
349
- `audio will play out loud and may include other apps' sound. ` +
387
+ if (!sink) {
388
+ throw new Error(`[screenci] captureAudio: could not create an isolated audio sink ` +
389
+ `(\`pactl load-module module-null-sink\` failed). Isolated ` +
390
+ `recording is required, so the run is stopped. ` +
350
391
  `See ${SCREEN_AUDIO_DOCS_URL}`);
351
392
  }
393
+ setActiveCaptureDevice(sink.monitorSource);
352
394
  }
353
395
  const launchOptions = getChromiumLaunchOptions(shouldRecord, audioActive);
354
396
  const browser = await playwright.chromium.launch(sink
@@ -366,11 +408,6 @@ const _videoBase = base.extend({
366
408
  await unloadNullSink(sink);
367
409
  setActiveCaptureDevice(null);
368
410
  }
369
- // End-of-run reminder on platforms where capture was skipped.
370
- const unsupported = screenAudioUnsupportedMessage();
371
- if (shouldRecord && isCaptureAudioEnabled() && unsupported !== null) {
372
- logger.warn(unsupported);
373
- }
374
411
  },
375
412
  context: async ({ browser, recordOptions, _screenciVideoName, colorScheme, locale, timezoneId, userAgent, geolocation, permissions, extraHTTPHeaders, httpCredentials, ignoreHTTPSErrors, offline, storageState, baseURL, bypassCSP, acceptDownloads, javaScriptEnabled, hasTouch, isMobile, }, use, testInfo) => {
376
413
  // Configure browser context. The viewport is derived from recordOptions
@@ -416,7 +453,7 @@ const _videoBase = base.extend({
416
453
  await context.close();
417
454
  }
418
455
  },
419
- page: async ({ context, recordOptions: codeRecordOptions, renderOptions, recordingFinalizationQueue, _screenciLanguage, _screenciText, _screenciVideoName, _screenciSourceFile, }, use, testInfo) => {
456
+ page: async ({ context, recordOptions: codeRecordOptions, renderOptions, recordingFinalizationQueue, _screenciLanguage, _screenciValues, _screenciVideoName, _screenciSourceFile, _screenciRecordingLocalize, }, use, testInfo) => {
420
457
  // Only record when explicitly enabled (record command)
421
458
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
422
459
  // Apply Studio record-option overrides (when deferred) so the capture,
@@ -427,10 +464,13 @@ const _videoBase = base.extend({
427
464
  const recorder = new EventRecorder(renderOptionsObj, recordOptions, {
428
465
  renderOptions: studioRender,
429
466
  recordOptions: studioRecord,
467
+ // Web-owned language set: stamped into metadata.studio.languages so the app
468
+ // knows this video may have languages added/rendered from Studio.
469
+ languages: _screenciRecordingLocalize?.studioOwned ?? false,
430
470
  });
431
- // Declared `text` fields (and the active language's seeds) emitted once at
471
+ // Declared `values` fields (and the active language's seeds) emitted once at
432
472
  // recording start so the backend/Studio learn them.
433
- const textDeclaration = buildTextDeclaration(_screenciText, _screenciLanguage);
473
+ const valuesDeclaration = buildValuesDeclaration(_screenciValues, _screenciLanguage);
434
474
  // Asset paths are authored relative to the user's script. Playwright reports
435
475
  // `testInfo.file` as the builder module that registered the test, so prefer
436
476
  // the script path captured at the call site.
@@ -439,6 +479,15 @@ const _videoBase = base.extend({
439
479
  // translations and stamps metadata so the upload becomes a single language
440
480
  // version. `null` (shared / single-language) keeps every language.
441
481
  recorder.setActiveLanguage(_screenciLanguage ?? null);
482
+ // Stamp the full declared language set (regardless of the `--languages`
483
+ // render filter), but only when a set was explicitly declared. A plain video
484
+ // with the implicit `['en']` default records no availableLanguages, so the
485
+ // app does not treat it as a managed language set. The app unions this across
486
+ // a video's recordings to know every code-defined language even when only a
487
+ // subset was rendered this run.
488
+ if (_screenciRecordingLocalize?.explicit === true) {
489
+ recorder.setAvailableLanguages(_screenciRecordingLocalize.availableLanguages ?? []);
490
+ }
442
491
  // Per-language passes use a unique test title (so each gets its own
443
492
  // recording directory) but share one `videoName` so they group as language
444
493
  // versions of one video. Plain videos fall back to the test title.
@@ -454,12 +503,13 @@ const _videoBase = base.extend({
454
503
  });
455
504
  bindStillCaptureToPage(page);
456
505
  await setupMouseTracking(page, recorder);
506
+ await installRedactController(page, runtimeContext.redact, recordOptions.redact);
457
507
  recorder.start();
458
508
  await withActiveRecordingContext({
459
509
  runtimeContext,
460
510
  page,
461
511
  recorder,
462
- textDeclaration,
512
+ valuesDeclaration,
463
513
  fn: async () => {
464
514
  await use(page);
465
515
  },
@@ -498,6 +548,7 @@ const _videoBase = base.extend({
498
548
  renderOptions: renderOptionsObj,
499
549
  });
500
550
  await setupMouseTracking(page, recorder);
551
+ await installRedactController(page, runtimeContext.redact, recordOptions.redact);
501
552
  // Navigate to blank page to ensure window is ready and rendered
502
553
  await page.goto('about:blank');
503
554
  // Wait for browser window to be fully rendered before starting recording
@@ -541,7 +592,7 @@ const _videoBase = base.extend({
541
592
  runtimeContext,
542
593
  page,
543
594
  recorder,
544
- textDeclaration,
595
+ valuesDeclaration,
545
596
  fn: async () => {
546
597
  await use(page);
547
598
  // Do not end video abruptly.
@@ -611,7 +662,7 @@ export const video = _videoBase;
611
662
  // instance, so per-language / per-variant passes inherit every video fixture.
612
663
  const _rootBuilder = createVideoBuilder(_videoBase);
613
664
  video.narration = _rootBuilder.narration;
614
- video.text = _rootBuilder.text;
665
+ video.values = _rootBuilder.values;
615
666
  video.overlays = _rootBuilder.overlays;
616
667
  video.audio = _rootBuilder.audio;
617
668
  video.languages = _rootBuilder.languages;
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Upper bound on the bytes we send as a voice-clone sample. ElevenLabs rejects
3
+ * larger uploads ("a maximum of 11MB"); we shrink or reject before upload so a
4
+ * failure surfaces here, at record time, rather than mid-render. Mirrors the
5
+ * backend's MAX_CUSTOM_VOICE_SIZE_BYTES.
6
+ */
7
+ export declare const MAX_VOICE_SAMPLE_BYTES = 11000000;
8
+ export type ExtractedVoiceSample = {
9
+ buffer: Buffer;
10
+ /** MIME type of the produced bytes. */
11
+ contentType: string;
12
+ /** Extension (with leading dot) describing the produced bytes. */
13
+ extension: string;
14
+ };
15
+ /** Injectable side effects, so the extraction flow can be unit tested without a
16
+ * real ffmpeg binary or filesystem. */
17
+ export type VoiceSampleAudioDeps = {
18
+ runFfmpeg: (args: string[]) => Promise<void>;
19
+ makeTempDir: (prefix: string) => Promise<string>;
20
+ readOutput: (path: string) => Promise<Buffer>;
21
+ removeDir: (path: string) => Promise<void>;
22
+ };
23
+ /**
24
+ * Returns an extracted/transcoded audio sample when the source is a video
25
+ * container or exceeds {@link MAX_VOICE_SAMPLE_BYTES}, or `null` when the source
26
+ * is already an audio file within the limit (upload it unchanged).
27
+ *
28
+ * Extraction strips any video track and transcodes to MP3 at 192 kbps, the
29
+ * format ElevenLabs recommends for cloning. A 20 MB screen recording becomes a
30
+ * few hundred KB of audio. If the result is still over the limit (e.g. a very
31
+ * long sample), this throws so the CLI can fail fast with a clear message.
32
+ */
33
+ export declare function maybeExtractVoiceSampleAudio(sourcePath: string, sourceByteLength: number, deps?: Partial<VoiceSampleAudioDeps>): Promise<ExtractedVoiceSample | null>;
34
+ //# sourceMappingURL=voiceSampleAudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceSampleAudio.d.ts","sourceRoot":"","sources":["../../src/voiceSampleAudio.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,WAAa,CAAA;AAMhD,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;wCACwC;AACxC,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAChD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C,CAAA;AAyCD;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACvC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkDtC"}
@@ -0,0 +1,105 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { extname, join } from 'node:path';
5
+ import ffmpegStatic from 'ffmpeg-static';
6
+ const ffmpegPath = ffmpegStatic;
7
+ /**
8
+ * Upper bound on the bytes we send as a voice-clone sample. ElevenLabs rejects
9
+ * larger uploads ("a maximum of 11MB"); we shrink or reject before upload so a
10
+ * failure surfaces here, at record time, rather than mid-render. Mirrors the
11
+ * backend's MAX_CUSTOM_VOICE_SIZE_BYTES.
12
+ */
13
+ export const MAX_VOICE_SAMPLE_BYTES = 11_000_000;
14
+ // Containers that carry a video track. A voice clone only needs the audio, so
15
+ // for these we always strip to a small audio file before upload.
16
+ const VIDEO_EXTENSIONS = new Set(['.mp4', '.mov', '.webm', '.mkv', '.avi']);
17
+ function defaultRunFfmpeg(args) {
18
+ return new Promise((resolve, reject) => {
19
+ if (ffmpegPath === null) {
20
+ reject(new Error('[screenci] ffmpeg binary not found; cannot extract audio from the voice sample.'));
21
+ return;
22
+ }
23
+ const child = spawn(ffmpegPath, args, {
24
+ stdio: ['ignore', 'ignore', 'pipe'],
25
+ });
26
+ let stderr = '';
27
+ child.stderr?.on('data', (chunk) => {
28
+ stderr += chunk.toString();
29
+ });
30
+ child.on('error', reject);
31
+ child.on('close', (code) => {
32
+ if (code === 0) {
33
+ resolve();
34
+ return;
35
+ }
36
+ reject(new Error(`[screenci] ffmpeg exited with code ${String(code)} while extracting voice-sample audio.\n${stderr.slice(-2000)}`));
37
+ });
38
+ });
39
+ }
40
+ const defaultDeps = {
41
+ runFfmpeg: defaultRunFfmpeg,
42
+ makeTempDir: (prefix) => mkdtemp(prefix),
43
+ readOutput: (path) => readFile(path),
44
+ removeDir: (path) => rm(path, { recursive: true, force: true }),
45
+ };
46
+ /**
47
+ * Returns an extracted/transcoded audio sample when the source is a video
48
+ * container or exceeds {@link MAX_VOICE_SAMPLE_BYTES}, or `null` when the source
49
+ * is already an audio file within the limit (upload it unchanged).
50
+ *
51
+ * Extraction strips any video track and transcodes to MP3 at 192 kbps, the
52
+ * format ElevenLabs recommends for cloning. A 20 MB screen recording becomes a
53
+ * few hundred KB of audio. If the result is still over the limit (e.g. a very
54
+ * long sample), this throws so the CLI can fail fast with a clear message.
55
+ */
56
+ export async function maybeExtractVoiceSampleAudio(sourcePath, sourceByteLength, deps = {}) {
57
+ const ext = extname(sourcePath).toLowerCase();
58
+ const isVideo = VIDEO_EXTENSIONS.has(ext);
59
+ const tooLarge = sourceByteLength > MAX_VOICE_SAMPLE_BYTES;
60
+ if (!isVideo && !tooLarge)
61
+ return null;
62
+ const { runFfmpeg, makeTempDir, readOutput, removeDir } = {
63
+ ...defaultDeps,
64
+ ...deps,
65
+ };
66
+ const dir = await makeTempDir(join(tmpdir(), 'screenci-voice-'));
67
+ const outputPath = join(dir, 'voice-sample.mp3');
68
+ try {
69
+ // The clone cache is keyed by the SHA-256 of these uploaded bytes, so the
70
+ // output must be byte-reproducible: the same source must always yield the
71
+ // same MP3, otherwise the voice gets re-cloned on every run and the clone
72
+ // service accumulates duplicates. `-bitexact` stops ffmpeg embedding its
73
+ // version string, `-map_metadata -1` drops copied source tags (timestamps,
74
+ // device info), and `-map 0:a:0` at a fixed CBR bitrate makes the encode
75
+ // deterministic. The hash then only moves if the bundled encoder itself
76
+ // changes its output (e.g. an ffmpeg-static bump), which re-clones once.
77
+ await runFfmpeg([
78
+ '-y',
79
+ '-bitexact',
80
+ '-i',
81
+ sourcePath,
82
+ '-vn',
83
+ '-map',
84
+ '0:a:0',
85
+ '-map_metadata',
86
+ '-1',
87
+ '-acodec',
88
+ 'libmp3lame',
89
+ '-b:a',
90
+ '192k',
91
+ '-bitexact',
92
+ outputPath,
93
+ ]);
94
+ const buffer = await readOutput(outputPath);
95
+ if (buffer.byteLength > MAX_VOICE_SAMPLE_BYTES) {
96
+ const limitMb = Math.floor(MAX_VOICE_SAMPLE_BYTES / (1000 * 1000));
97
+ throw new Error(`[screenci] Voice sample audio is still too large after extraction (${buffer.byteLength} bytes; the limit is ${limitMb} MB). Use a shorter sample (about 1-2 minutes of clean speech is ideal).`);
98
+ }
99
+ return { buffer, contentType: 'audio/mpeg', extension: '.mp3' };
100
+ }
101
+ finally {
102
+ await removeDir(dir).catch(() => { });
103
+ }
104
+ }
105
+ //# sourceMappingURL=voiceSampleAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceSampleAudio.js","sourceRoot":"","sources":["../../src/voiceSampleAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,YAAY,MAAM,eAAe,CAAA;AAExC,MAAM,UAAU,GAAG,YAAwC,CAAA;AAE3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAA;AAEhD,8EAA8E;AAC9E,iEAAiE;AACjE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAmB3E,SAAS,gBAAgB,CAAC,IAAc;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,CACJ,IAAI,KAAK,CACP,iFAAiF,CAClF,CACF,CAAA;YACD,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;SACpC,CAAC,CAAA;QACF,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC5B,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACzB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YACD,MAAM,CACJ,IAAI,KAAK,CACP,sCAAsC,MAAM,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAClH,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,WAAW,GAAyB;IACxC,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;CAChE,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,UAAkB,EAClB,gBAAwB,EACxB,OAAsC,EAAE;IAExC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;IAC7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,sBAAsB,CAAA;IAC1D,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEtC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG;QACxD,GAAG,WAAW;QACd,GAAG,IAAI;KACR,CAAA;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;IAChD,IAAI,CAAC;QACH,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,yEAAyE;QACzE,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,SAAS,CAAC;YACd,IAAI;YACJ,WAAW;YACX,IAAI;YACJ,UAAU;YACV,KAAK;YACL,MAAM;YACN,OAAO;YACP,eAAe;YACf,IAAI;YACJ,SAAS;YACT,YAAY;YACZ,MAAM;YACN,MAAM;YACN,WAAW;YACX,UAAU;SACX,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAA;QAC3C,IAAI,MAAM,CAAC,UAAU,GAAG,sBAAsB,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;YAClE,MAAM,IAAI,KAAK,CACb,sEAAsE,MAAM,CAAC,UAAU,wBAAwB,OAAO,0EAA0E,CACjM,CAAA;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IACjE,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,CAAC;AACH,CAAC"}
@@ -121,9 +121,9 @@ export type ModelVoiceKey = keyof Omit<typeof voices, 'elevenlabs'>;
121
121
  export type ElevenLabsVoiceKey = `elevenlabs:${string}`;
122
122
  /** Union of all valid voice keys, e.g. `'Aria' | 'elevenlabs:abc123'`. */
123
123
  export type VoiceKey = ModelVoiceKey | ElevenLabsVoiceKey;
124
- declare const supportedBaseLanguageCodes: readonly ["ar", "bn", "nl", "en", "fr", "de", "hi", "id", "it", "ja", "ko", "mr", "pl", "pt", "ro", "ru", "es", "ta", "te", "th", "tr", "uk", "vi", "af", "sq", "am", "hy", "az", "eu", "be", "bg", "my", "ca", "ceb", "cmn", "hr", "cs", "da", "et", "fil", "fi", "gl", "ka", "el", "gu", "ht", "he", "hu", "is", "jv", "kn", "kok", "lo", "la", "lv", "lt", "lb", "mk", "mai", "mg", "ms", "ml", "mn", "ne", "nb", "nn", "or", "ps", "fa", "pa", "sr", "sd", "si", "sk", "sl", "sw", "sv", "ur"];
124
+ declare const supportedBaseLanguageCodes: readonly ["ar", "bn", "nl", "en", "fr", "de", "hi", "id", "it", "ja", "ko", "mr", "pl", "pt", "ro", "ru", "es", "ta", "te", "th", "tr", "uk", "vi", "af", "sq", "am", "hy", "az", "eu", "be", "bg", "my", "ca", "ceb", "cmn", "yue", "hr", "cs", "da", "et", "fil", "fi", "gl", "ka", "el", "gu", "ht", "he", "hu", "is", "jv", "kn", "kok", "lo", "la", "lv", "lt", "lb", "mk", "mai", "mg", "ms", "ml", "mn", "ne", "nb", "nn", "or", "ps", "fa", "pa", "sr", "sd", "si", "sk", "sl", "sw", "sv", "ur"];
125
125
  type SupportedBaseLanguageCode = (typeof supportedBaseLanguageCodes)[number];
126
- export declare const supportedLanguages: readonly ["ar", "bn", "nl", "en", "fr", "de", "hi", "id", "it", "ja", "ko", "mr", "pl", "pt", "ro", "ru", "es", "ta", "te", "th", "tr", "uk", "vi", "af", "sq", "am", "hy", "az", "eu", "be", "bg", "my", "ca", "ceb", "cmn", "hr", "cs", "da", "et", "fil", "fi", "gl", "ka", "el", "gu", "ht", "he", "hu", "is", "jv", "kn", "kok", "lo", "la", "lv", "lt", "lb", "mk", "mai", "mg", "ms", "ml", "mn", "ne", "nb", "nn", "or", "ps", "fa", "pa", "sr", "sd", "si", "sk", "sl", "sw", "sv", "ur"];
126
+ export declare const supportedLanguages: readonly ["ar", "bn", "nl", "en", "fr", "de", "hi", "id", "it", "ja", "ko", "mr", "pl", "pt", "ro", "ru", "es", "ta", "te", "th", "tr", "uk", "vi", "af", "sq", "am", "hy", "az", "eu", "be", "bg", "my", "ca", "ceb", "cmn", "yue", "hr", "cs", "da", "et", "fil", "fi", "gl", "ka", "el", "gu", "ht", "he", "hu", "is", "jv", "kn", "kok", "lo", "la", "lv", "lt", "lb", "mk", "mai", "mg", "ms", "ml", "mn", "ne", "nb", "nn", "or", "ps", "fa", "pa", "sr", "sd", "si", "sk", "sl", "sw", "sv", "ur"];
127
127
  /** Union of supported language codes, e.g. `'en' | 'fi' | 'cmn'`. */
128
128
  export type Lang = SupportedBaseLanguageCode;
129
129
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../../src/voices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU;;;CAGb,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,iBAAS,eAAe,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAA;AACtE,iBAAS,eAAe,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAA;AAY/D,eAAO,MAAM,MAAM;IACjB,oFAAoF;;IAGpF,2FAA2F;;IAG3F,+EAA+E;;IAG/E,+EAA+E;;IAG/E,4FAA4F;;IAG5F,+FAA+F;;IAG/F,yFAAyF;;IAGzF,gGAAgG;;IAGhG,+EAA+E;;IAG/E,qFAAqF;;IAGrF,0FAA0F;;IAG1F,iFAAiF;;IAGjF,+EAA+E;;IAG/E,sFAAsF;;IAGtF,uEAAuE;;IAGvE,4FAA4F;;IAG5F,4FAA4F;;IAG5F,sFAAsF;;IAGtF,qFAAqF;;IAGrF,yFAAyF;;IAGzF,4EAA4E;;IAG5E,+EAA+E;;IAG/E,wEAAwE;;IAGxE,6FAA6F;;IAG7F,gFAAgF;;IAGhF,oFAAoF;;IAGpF,6EAA6E;;IAG7E,iFAAiF;;IAGjF,sFAAsF;;IAGtF,oFAAoF;;;CAI5E,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,MAAM,EAAE,YAAY,CAAC,CAAA;AACnE,MAAM,MAAM,kBAAkB,GAAG,cAAc,MAAM,EAAE,CAAA;AAEvD,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,kBAAkB,CAAA;AAKzD,QAAA,MAAM,0BAA0B,oeA+EtB,CAAA;AAEV,KAAK,yBAAyB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5E,eAAO,MAAM,kBAAkB,oeAA6B,CAAA;AAE5D,qEAAqE;AACrE,MAAM,MAAM,IAAI,GAAG,yBAAyB,CAAA;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../../src/voices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU;;;CAGb,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,iBAAS,eAAe,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAA;AACtE,iBAAS,eAAe,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAA;AAY/D,eAAO,MAAM,MAAM;IACjB,oFAAoF;;IAGpF,2FAA2F;;IAG3F,+EAA+E;;IAG/E,+EAA+E;;IAG/E,4FAA4F;;IAG5F,+FAA+F;;IAG/F,yFAAyF;;IAGzF,gGAAgG;;IAGhG,+EAA+E;;IAG/E,qFAAqF;;IAGrF,0FAA0F;;IAG1F,iFAAiF;;IAGjF,+EAA+E;;IAG/E,sFAAsF;;IAGtF,uEAAuE;;IAGvE,4FAA4F;;IAG5F,4FAA4F;;IAG5F,sFAAsF;;IAGtF,qFAAqF;;IAGrF,yFAAyF;;IAGzF,4EAA4E;;IAG5E,+EAA+E;;IAG/E,wEAAwE;;IAGxE,6FAA6F;;IAG7F,gFAAgF;;IAGhF,oFAAoF;;IAGpF,6EAA6E;;IAG7E,iFAAiF;;IAGjF,sFAAsF;;IAGtF,oFAAoF;;;CAI5E,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,MAAM,EAAE,YAAY,CAAC,CAAA;AACnE,MAAM,MAAM,kBAAkB,GAAG,cAAc,MAAM,EAAE,CAAA;AAEvD,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,kBAAkB,CAAA;AASzD,QAAA,MAAM,0BAA0B,2eAgFtB,CAAA;AAEV,KAAK,yBAAyB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5E,eAAO,MAAM,kBAAkB,2eAA6B,CAAA;AAE5D,qEAAqE;AACrE,MAAM,MAAM,IAAI,GAAG,yBAAyB,CAAA;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -25,7 +25,7 @@ function elevenlabsVoice(ref) {
25
25
  : `elevenlabs:${ref.voiceId}`;
26
26
  }
27
27
  // DOCS_SYNC:
28
- // Keep the "Available voices" section in docs/narration-and-localization.md
28
+ // Keep the "Available voices" section in docs/narration.md
29
29
  // in sync with this list and the voice character blurbs below.
30
30
  export const voices = {
31
31
  /** Male — Clear — Direct and structured, ideal for straightforward explanations. */
@@ -91,8 +91,12 @@ export const voices = {
91
91
  elevenlabs: elevenlabsVoice,
92
92
  };
93
93
  // DOCS_SYNC:
94
- // Keep the "Available languages" section in docs/narration-and-localization.md
95
- // in sync with this source of truth.
94
+ // Keep the "Available languages" section in docs/languages.md in sync with this
95
+ // source of truth. This is the full set the `Lang` type accepts; narration
96
+ // coverage is split by model (the consistent model covers a subset, the
97
+ // expressive model covers all of these). The per-model split lives in the
98
+ // backend (apps/backend/src/cues/languageCodes.ts) and is mirrored into the
99
+ // two tables in docs/languages.md.
96
100
  const supportedBaseLanguageCodes = [
97
101
  'ar',
98
102
  'bn',
@@ -129,6 +133,7 @@ const supportedBaseLanguageCodes = [
129
133
  'ca',
130
134
  'ceb',
131
135
  'cmn',
136
+ 'yue',
132
137
  'hr',
133
138
  'cs',
134
139
  'da',
@@ -1 +1 @@
1
- {"version":3,"file":"voices.js","sourceRoot":"","sources":["../../src/voices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../../src/voices.ts"],"names":[],"mappings":"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"}