screenci 0.0.75 → 0.0.78
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.
- package/dist/cli.d.ts +62 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +699 -229
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +277 -91
- package/dist/docs/manifest.d.ts.map +1 -1
- package/dist/docs/manifest.js +101 -30
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
- package/dist/docs/video-sources/installation.screenci.js +19 -10
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/landing.screenci.js +6 -8
- package/dist/docs/video-sources/landing.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
- package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +68 -0
- package/dist/docs/video-sources/languages.screenci.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +4 -5
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +3 -4
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
- package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/narration.screenci.js +71 -0
- package/dist/docs/video-sources/narration.screenci.js.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
- package/dist/docs/video-sources/studio.screenci.js +8 -10
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
- package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
- package/dist/docs/videos.d.ts +20 -0
- package/dist/docs/videos.d.ts.map +1 -1
- package/dist/docs/videos.js +25 -0
- package/dist/docs/videos.js.map +1 -1
- package/dist/e2e/instrument.e2e.js +60 -1
- package/dist/e2e/instrument.e2e.js.map +1 -1
- package/dist/e2e/redact.e2e.d.ts +2 -0
- package/dist/e2e/redact.e2e.d.ts.map +1 -0
- package/dist/e2e/redact.e2e.js +161 -0
- package/dist/e2e/redact.e2e.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +174 -14
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +320 -39
- package/dist/src/asset.js.map +1 -1
- package/dist/src/assetHash.d.ts +27 -0
- package/dist/src/assetHash.d.ts.map +1 -0
- package/dist/src/assetHash.js +0 -0
- package/dist/src/assetHash.js.map +1 -0
- package/dist/src/audio.d.ts +20 -1
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +126 -24
- package/dist/src/audio.js.map +1 -1
- package/dist/src/autoZoom.d.ts.map +1 -1
- package/dist/src/autoZoom.js +3 -1
- package/dist/src/autoZoom.js.map +1 -1
- package/dist/src/browserLaunchOptions.d.ts +24 -2
- package/dist/src/browserLaunchOptions.d.ts.map +1 -1
- package/dist/src/browserLaunchOptions.js +57 -3
- package/dist/src/browserLaunchOptions.js.map +1 -1
- package/dist/src/builder.d.ts +229 -136
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +264 -77
- package/dist/src/builder.js.map +1 -1
- package/dist/src/callerFile.d.ts +12 -0
- package/dist/src/callerFile.d.ts.map +1 -0
- package/dist/src/callerFile.js +46 -0
- package/dist/src/callerFile.js.map +1 -0
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +109 -36
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +15 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/cue.d.ts +29 -17
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +138 -61
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +63 -0
- package/dist/src/declare.d.ts.map +1 -0
- package/dist/src/declare.js +111 -0
- package/dist/src/declare.js.map +1 -0
- package/dist/src/defaults.d.ts +23 -0
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +27 -3
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +339 -25
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +250 -26
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +10 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +12 -2
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +81 -33
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +164 -8
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/locales.d.ts.map +1 -1
- package/dist/src/locales.js +1 -0
- package/dist/src/locales.js.map +1 -1
- package/dist/src/localize.d.ts +26 -17
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +19 -11
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +29 -33
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +74 -49
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +7 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/manualZoom.d.ts.map +1 -1
- package/dist/src/manualZoom.js +8 -5
- package/dist/src/manualZoom.js.map +1 -1
- package/dist/src/narrationVisibility.d.ts +19 -0
- package/dist/src/narrationVisibility.d.ts.map +1 -0
- package/dist/src/narrationVisibility.js +26 -0
- package/dist/src/narrationVisibility.js.map +1 -0
- package/dist/src/openBrowser.d.ts +34 -0
- package/dist/src/openBrowser.d.ts.map +1 -0
- package/dist/src/openBrowser.js +62 -0
- package/dist/src/openBrowser.js.map +1 -0
- package/dist/src/recordingData.d.ts +27 -0
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/recordingSize.d.ts +32 -0
- package/dist/src/recordingSize.d.ts.map +1 -0
- package/dist/src/recordingSize.js +54 -0
- package/dist/src/recordingSize.js.map +1 -0
- package/dist/src/redact.d.ts +68 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +138 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/redactController.d.ts +61 -0
- package/dist/src/redactController.d.ts.map +1 -0
- package/dist/src/redactController.js +232 -0
- package/dist/src/redactController.js.map +1 -0
- package/dist/src/runtimeContext.d.ts +32 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +21 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +15 -7
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +17 -6
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenAudio.d.ts +88 -0
- package/dist/src/screenAudio.d.ts.map +1 -0
- package/dist/src/screenAudio.js +0 -0
- package/dist/src/screenAudio.js.map +1 -0
- package/dist/src/screenAudioSink.d.ts +46 -0
- package/dist/src/screenAudioSink.d.ts.map +1 -0
- package/dist/src/screenAudioSink.js +77 -0
- package/dist/src/screenAudioSink.js.map +1 -0
- package/dist/src/screenshot.d.ts +27 -29
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +39 -24
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/sourceTrim.d.ts +29 -0
- package/dist/src/sourceTrim.d.ts.map +1 -0
- package/dist/src/sourceTrim.js +76 -0
- package/dist/src/sourceTrim.js.map +1 -0
- package/dist/src/stillCapture.d.ts +5 -0
- package/dist/src/stillCapture.d.ts.map +1 -1
- package/dist/src/stillCapture.js +11 -1
- package/dist/src/stillCapture.js.map +1 -1
- package/dist/src/studio.d.ts +69 -57
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +16 -38
- package/dist/src/studio.js.map +1 -1
- package/dist/src/timelineOffset.d.ts +46 -0
- package/dist/src/timelineOffset.d.ts.map +1 -0
- package/dist/src/timelineOffset.js +66 -0
- package/dist/src/timelineOffset.js.map +1 -0
- package/dist/src/titleValidation.d.ts +38 -0
- package/dist/src/titleValidation.d.ts.map +1 -1
- package/dist/src/titleValidation.js +42 -0
- package/dist/src/titleValidation.js.map +1 -1
- package/dist/src/types.d.ts +218 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +74 -60
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +201 -39
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceSampleAudio.d.ts +34 -0
- package/dist/src/voiceSampleAudio.d.ts.map +1 -0
- package/dist/src/voiceSampleAudio.js +105 -0
- package/dist/src/voiceSampleAudio.js.map +1 -0
- package/dist/src/voices.d.ts +2 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +8 -3
- package/dist/src/voices.js.map +1 -1
- package/dist/src/zoom.d.ts +1 -0
- package/dist/src/zoom.d.ts.map +1 -1
- package/dist/src/zoom.js +3 -0
- package/dist/src/zoom.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/skills/screenci/SKILL.md +2 -2
- package/skills/screenci/references/init.md +4 -3
- package/skills/screenci/references/record.md +1 -1
- package/templates/recordings/assets/logo.png +0 -0
- package/dist/docs/video-sources/public-urls.screenci.d.ts +0 -2
- package/dist/docs/video-sources/public-urls.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/public-urls.screenci.js +0 -41
- package/dist/docs/video-sources/public-urls.screenci.js.map +0 -1
package/dist/src/video.js
CHANGED
|
@@ -2,41 +2,88 @@ 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 {
|
|
5
|
+
import { ScreenciError } from './errors.js';
|
|
6
|
+
import { isStudioMarker } from './studio.js';
|
|
6
7
|
export { getDimensions } from './dimensions.js';
|
|
7
8
|
import { getDimensions, getViewportCenter } from './dimensions.js';
|
|
8
9
|
import { resetCueChain } from './cue.js';
|
|
9
10
|
import { setActiveCueRecorder } from './cue.js';
|
|
10
|
-
import { createVideoBuilder } from './builder.js';
|
|
11
|
-
import { buildNarrationMarkers,
|
|
11
|
+
import { createVideoBuilder, } from './builder.js';
|
|
12
|
+
import { buildNarrationMarkers, buildValuesDeclaration, buildValues, narrationVoiceConfigFromRenderOptions, } from './localizeRuntime.js';
|
|
12
13
|
import { setActiveHideRecorder } from './hide.js';
|
|
13
14
|
import { setActiveAutoZoomRecorder, setActiveZoomPage } from './autoZoom.js';
|
|
14
|
-
import { setActiveAssetRecorder,
|
|
15
|
+
import { setActiveAssetRecorder, buildOverlays, validateRegisteredAssetPaths, } from './asset.js';
|
|
15
16
|
import { flushPendingOverlays } from './overlayFlush.js';
|
|
16
|
-
import { setActiveAudioRecorder,
|
|
17
|
+
import { setActiveAudioRecorder, buildAudio, validateRegisteredAudioPaths, } from './audio.js';
|
|
17
18
|
import { DEFAULT_VIDEO_OPTIONS, DEFAULT_ASPECT_RATIO, DEFAULT_QUALITY, DEFAULT_FPS, DEFAULT_VIDEO_ENCODER, } from './defaults.js';
|
|
18
19
|
import { EventRecorder } from './events.js';
|
|
19
20
|
import { bindClickRecorderToPage, instrumentBrowser, instrumentContext, setActiveClickRecorder, } from './instrument.js';
|
|
20
21
|
import { logger } from './logger.js';
|
|
21
22
|
import { setMousePosition } from './mouse.js';
|
|
22
|
-
import { getChromiumLaunchOptions } from './browserLaunchOptions.js';
|
|
23
|
+
import { captureRequestedButNotEnabled, getChromiumLaunchOptions, isCaptureAudioEnabled, } from './browserLaunchOptions.js';
|
|
23
24
|
import { createScreenCIRuntimeContext, runWithScreenCIRuntimeContext, setActiveScreenCIRuntimeContext, setRuntimeAssetRecorder, setRuntimeAudioRecorder, setRuntimeAutoZoomRecorder, setRuntimeClickRecorder, setRuntimeCueRecorder, setRuntimeHideRecorder, setRuntimePage, } from './runtimeContext.js';
|
|
25
|
+
import { installRedactController } from './redact.js';
|
|
24
26
|
import { escapeFileSystemPathSegment } from './fileSystemName.js';
|
|
25
|
-
import { resolveRecordingTimingDuration,
|
|
27
|
+
import { resolveRecordingTimingDuration, parseValuesOverrides, parseRecordOptions, mergeStudioRecordOptions, } from './runtimeMode.js';
|
|
26
28
|
import { buildScreenCIContextOptions } from './contextOptions.js';
|
|
27
29
|
import { bindStillCaptureToPage } from './stillCapture.js';
|
|
30
|
+
import { startScreenAudioCapture, isScreenAudioSupported, screenAudioUnsupportedMessage, setActiveCaptureDevice, SCREEN_AUDIO_DOCS_URL, } from './screenAudio.js';
|
|
31
|
+
import { assertScreenAudioCaptureReady, createNullSink, unloadNullSink, workerSinkName, } from './screenAudioSink.js';
|
|
28
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
|
+
}
|
|
29
41
|
/**
|
|
30
42
|
* The record options actually used for the capture: when record options are
|
|
31
|
-
* deferred to Studio (`
|
|
32
|
-
*
|
|
43
|
+
* deferred to Studio (`use({ recordOptions: studio() })`), the values fetched
|
|
44
|
+
* before recording (keyed by video name) override the base (seeded or default)
|
|
33
45
|
* aspect ratio, quality, and fps. Otherwise the code values are used as-is.
|
|
34
46
|
*/
|
|
35
|
-
export function resolveEffectiveRecordOptions(recordOptions,
|
|
36
|
-
if (!
|
|
47
|
+
export function resolveEffectiveRecordOptions(recordOptions, studioRecordOptions, videoName) {
|
|
48
|
+
if (!studioRecordOptions)
|
|
37
49
|
return recordOptions;
|
|
38
50
|
return mergeStudioRecordOptions(recordOptions, parseRecordOptions()?.[videoName]);
|
|
39
51
|
}
|
|
52
|
+
/**
|
|
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.
|
|
57
|
+
*/
|
|
58
|
+
export function resolveStudioRecordOptions(recordOptions) {
|
|
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 };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
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.
|
|
76
|
+
*/
|
|
77
|
+
export function resolveStudioRenderOptions(renderOptions) {
|
|
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 };
|
|
86
|
+
}
|
|
40
87
|
export async function finalizeDeferredRecordingStops(entries) {
|
|
41
88
|
await Promise.all(entries.map(async ({ recorder }) => {
|
|
42
89
|
const stopResult = await recorder.stop();
|
|
@@ -220,7 +267,7 @@ export function autoEndOpenOverlays(runtimeContext, recorder) {
|
|
|
220
267
|
runtimeContext.asset.activeRuns.clear();
|
|
221
268
|
}
|
|
222
269
|
export async function withActiveRecordingContext(params) {
|
|
223
|
-
const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw',
|
|
270
|
+
const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw', valuesDeclaration, } = params;
|
|
224
271
|
setActiveScreenCIRuntimeContext(runtimeContext);
|
|
225
272
|
try {
|
|
226
273
|
return await runWithScreenCIRuntimeContext(runtimeContext, async () => {
|
|
@@ -240,8 +287,16 @@ export async function withActiveRecordingContext(params) {
|
|
|
240
287
|
setActiveClickRecorder(recorder);
|
|
241
288
|
bindClickRecorderToPage(page, recorder);
|
|
242
289
|
setRuntimePage(page);
|
|
243
|
-
|
|
244
|
-
|
|
290
|
+
// Fail fast on missing overlay/audio files before the body runs. Only
|
|
291
|
+
// when actually recording and when testFilePath is known (relative asset
|
|
292
|
+
// paths can only be resolved with an anchor file).
|
|
293
|
+
if (runtimeContext.recordingDir !== null &&
|
|
294
|
+
runtimeContext.testFilePath !== null) {
|
|
295
|
+
await validateRegisteredAssetPaths(runtimeContext.testFilePath);
|
|
296
|
+
await validateRegisteredAudioPaths(runtimeContext.testFilePath);
|
|
297
|
+
}
|
|
298
|
+
if (valuesDeclaration) {
|
|
299
|
+
recorder.addValuesDeclare(valuesDeclaration.fields, valuesDeclaration.studioFields, valuesDeclaration.seed);
|
|
245
300
|
}
|
|
246
301
|
const result = await fn();
|
|
247
302
|
if (unendedOverlays === 'autoEnd') {
|
|
@@ -268,23 +323,32 @@ const _videoBase = base.extend({
|
|
|
268
323
|
renderOptions: [undefined, { option: true }],
|
|
269
324
|
_screenciLanguage: [undefined, { option: true }],
|
|
270
325
|
_screenciVideoName: [undefined, { option: true }],
|
|
271
|
-
|
|
272
|
-
|
|
326
|
+
_screenciNarration: [undefined, { option: true }],
|
|
327
|
+
_screenciValues: [undefined, { option: true }],
|
|
328
|
+
_screenciOverlays: [undefined, { option: true }],
|
|
329
|
+
_screenciAudio: [undefined, { option: true }],
|
|
330
|
+
_screenciRecordingLocalize: [undefined, { option: true }],
|
|
273
331
|
_screenciSourceFile: [undefined, { option: true }],
|
|
274
332
|
language: async ({ _screenciLanguage }, use) => {
|
|
275
333
|
await use(_screenciLanguage);
|
|
276
334
|
},
|
|
277
|
-
narration: async ({
|
|
278
|
-
|
|
335
|
+
narration: async ({ _screenciNarration, _screenciRecordingLocalize, renderOptions, _screenciSourceFile, }, use, testInfo) => {
|
|
336
|
+
const { obj: renderOptionsObj, studio: studioRender } = resolveStudioRenderOptions(renderOptions);
|
|
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));
|
|
279
341
|
},
|
|
280
|
-
|
|
281
|
-
await use(
|
|
342
|
+
values: async ({ _screenciValues, _screenciLanguage }, use) => {
|
|
343
|
+
await use(buildValues(_screenciValues, _screenciLanguage, parseValuesOverrides()));
|
|
282
344
|
},
|
|
283
|
-
overlays: async ({
|
|
284
|
-
await use(
|
|
345
|
+
overlays: async ({ _screenciOverlays, _screenciLanguage }, use) => {
|
|
346
|
+
await use(buildOverlays(_screenciOverlays, _screenciLanguage));
|
|
285
347
|
},
|
|
286
|
-
audio: async ({
|
|
287
|
-
|
|
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));
|
|
288
352
|
},
|
|
289
353
|
recordingFinalizationQueue: [
|
|
290
354
|
async ({}, use) => {
|
|
@@ -299,20 +363,59 @@ const _videoBase = base.extend({
|
|
|
299
363
|
],
|
|
300
364
|
browser: async ({ playwright }, use) => {
|
|
301
365
|
const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
|
|
302
|
-
|
|
303
|
-
|
|
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();
|
|
378
|
+
// Give this worker a dedicated null sink so capture is silent on the host,
|
|
379
|
+
// isolated from other apps, and safe under parallel workers. The browser is
|
|
380
|
+
// routed into it via PULSE_SINK and the recorder captures its monitor.
|
|
381
|
+
let sink = null;
|
|
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();
|
|
386
|
+
sink = await createNullSink(workerSinkName());
|
|
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. ` +
|
|
391
|
+
`See ${SCREEN_AUDIO_DOCS_URL}`);
|
|
392
|
+
}
|
|
393
|
+
setActiveCaptureDevice(sink.monitorSource);
|
|
394
|
+
}
|
|
395
|
+
const launchOptions = getChromiumLaunchOptions(shouldRecord, audioActive);
|
|
396
|
+
const browser = await playwright.chromium.launch(sink
|
|
397
|
+
? {
|
|
398
|
+
...launchOptions,
|
|
399
|
+
env: { ...process.env, PULSE_SINK: sink.sinkName },
|
|
400
|
+
}
|
|
401
|
+
: launchOptions);
|
|
304
402
|
instrumentBrowser(browser);
|
|
305
403
|
await use(browser);
|
|
306
404
|
if (browser.isConnected()) {
|
|
307
405
|
await browser.close();
|
|
308
406
|
}
|
|
407
|
+
if (sink) {
|
|
408
|
+
await unloadNullSink(sink);
|
|
409
|
+
setActiveCaptureDevice(null);
|
|
410
|
+
}
|
|
309
411
|
},
|
|
310
|
-
context: async ({ browser, recordOptions,
|
|
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) => {
|
|
311
413
|
// Configure browser context. The viewport is derived from recordOptions
|
|
312
414
|
// (with Studio record-option overrides applied when deferred); other
|
|
313
415
|
// Playwright `use` options (colorScheme, locale, storageState, ...) are
|
|
314
416
|
// forwarded so they take effect on the context screenci creates.
|
|
315
|
-
const
|
|
417
|
+
const { base: baseRecordOptions, studio: studioRecord } = resolveStudioRecordOptions(recordOptions);
|
|
418
|
+
const effectiveRecordOptions = resolveEffectiveRecordOptions(baseRecordOptions, studioRecord, _screenciVideoName ?? testInfo.title);
|
|
316
419
|
const aspectRatio = effectiveRecordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
|
|
317
420
|
const quality = effectiveRecordOptions.quality ?? DEFAULT_QUALITY;
|
|
318
421
|
const dimensions = getDimensions(aspectRatio, quality);
|
|
@@ -350,16 +453,24 @@ const _videoBase = base.extend({
|
|
|
350
453
|
await context.close();
|
|
351
454
|
}
|
|
352
455
|
},
|
|
353
|
-
page: async ({ context, recordOptions: codeRecordOptions, renderOptions, recordingFinalizationQueue, _screenciLanguage,
|
|
456
|
+
page: async ({ context, recordOptions: codeRecordOptions, renderOptions, recordingFinalizationQueue, _screenciLanguage, _screenciValues, _screenciVideoName, _screenciSourceFile, _screenciRecordingLocalize, }, use, testInfo) => {
|
|
354
457
|
// Only record when explicitly enabled (record command)
|
|
355
458
|
const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
|
|
356
459
|
// Apply Studio record-option overrides (when deferred) so the capture,
|
|
357
460
|
// serialized recordOptions, and viewport all use the effective values.
|
|
358
|
-
const
|
|
359
|
-
const
|
|
360
|
-
|
|
461
|
+
const { base: baseRecordOptions, studio: studioRecord } = resolveStudioRecordOptions(codeRecordOptions);
|
|
462
|
+
const { obj: renderOptionsObj, studio: studioRender } = resolveStudioRenderOptions(renderOptions);
|
|
463
|
+
const recordOptions = resolveEffectiveRecordOptions(baseRecordOptions, studioRecord, _screenciVideoName ?? testInfo.title);
|
|
464
|
+
const recorder = new EventRecorder(renderOptionsObj, recordOptions, {
|
|
465
|
+
renderOptions: studioRender,
|
|
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,
|
|
470
|
+
});
|
|
471
|
+
// Declared `values` fields (and the active language's seeds) emitted once at
|
|
361
472
|
// recording start so the backend/Studio learn them.
|
|
362
|
-
const
|
|
473
|
+
const valuesDeclaration = buildValuesDeclaration(_screenciValues, _screenciLanguage);
|
|
363
474
|
// Asset paths are authored relative to the user's script. Playwright reports
|
|
364
475
|
// `testInfo.file` as the builder module that registered the test, so prefer
|
|
365
476
|
// the script path captured at the call site.
|
|
@@ -368,6 +479,15 @@ const _videoBase = base.extend({
|
|
|
368
479
|
// translations and stamps metadata so the upload becomes a single language
|
|
369
480
|
// version. `null` (shared / single-language) keeps every language.
|
|
370
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
|
+
}
|
|
371
491
|
// Per-language passes use a unique test title (so each gets its own
|
|
372
492
|
// recording directory) but share one `videoName` so they group as language
|
|
373
493
|
// versions of one video. Plain videos fall back to the test title.
|
|
@@ -379,16 +499,17 @@ const _videoBase = base.extend({
|
|
|
379
499
|
page,
|
|
380
500
|
testFilePath,
|
|
381
501
|
recordOptions,
|
|
382
|
-
renderOptions,
|
|
502
|
+
renderOptions: renderOptionsObj,
|
|
383
503
|
});
|
|
384
504
|
bindStillCaptureToPage(page);
|
|
385
505
|
await setupMouseTracking(page, recorder);
|
|
506
|
+
await installRedactController(page, runtimeContext.redact, recordOptions.redact);
|
|
386
507
|
recorder.start();
|
|
387
508
|
await withActiveRecordingContext({
|
|
388
509
|
runtimeContext,
|
|
389
510
|
page,
|
|
390
511
|
recorder,
|
|
391
|
-
|
|
512
|
+
valuesDeclaration,
|
|
392
513
|
fn: async () => {
|
|
393
514
|
await use(page);
|
|
394
515
|
},
|
|
@@ -424,9 +545,10 @@ const _videoBase = base.extend({
|
|
|
424
545
|
testFilePath,
|
|
425
546
|
recordingDir: videoDir,
|
|
426
547
|
recordOptions,
|
|
427
|
-
renderOptions,
|
|
548
|
+
renderOptions: renderOptionsObj,
|
|
428
549
|
});
|
|
429
550
|
await setupMouseTracking(page, recorder);
|
|
551
|
+
await installRedactController(page, runtimeContext.redact, recordOptions.redact);
|
|
430
552
|
// Navigate to blank page to ensure window is ready and rendered
|
|
431
553
|
await page.goto('about:blank');
|
|
432
554
|
// Wait for browser window to be fully rendered before starting recording
|
|
@@ -437,6 +559,28 @@ const _videoBase = base.extend({
|
|
|
437
559
|
await screenRecorder.start();
|
|
438
560
|
// Mark the moment the video recording actually begins after the cursor is positioned.
|
|
439
561
|
recorder.start();
|
|
562
|
+
const captureVolume = recordOptions.captureAudio ?? 0;
|
|
563
|
+
// captureAudio is Linux-only. On macOS/Windows skip capture entirely (a
|
|
564
|
+
// warning was already emitted at run start, and the worker fixture emits one
|
|
565
|
+
// at the end) rather than writing a silent or whole-machine track.
|
|
566
|
+
const audioSupported = isScreenAudioSupported();
|
|
567
|
+
// The recording browser is launched once per worker (audio mode is decided
|
|
568
|
+
// then from the root-level enableCaptureAudio switch), before this per-video
|
|
569
|
+
// recordOptions is known. If a video requests captureAudio without that
|
|
570
|
+
// switch on, the browser was launched muted on the legacy headless shell and
|
|
571
|
+
// the captured track would be silent. Fail loudly instead of writing silence.
|
|
572
|
+
if (audioSupported &&
|
|
573
|
+
captureRequestedButNotEnabled(captureVolume, isCaptureAudioEnabled())) {
|
|
574
|
+
throw new Error(`[screenci] "${videoName}" sets captureAudio but enableCaptureAudio is ` +
|
|
575
|
+
`not turned on. Add "enableCaptureAudio: true" at the top level of ` +
|
|
576
|
+
`your screenci config so the recording browser launches in audio mode ` +
|
|
577
|
+
`(it is decided once per worker, before a video's options are known). ` +
|
|
578
|
+
`See ${SCREEN_AUDIO_DOCS_URL}`);
|
|
579
|
+
}
|
|
580
|
+
const audioCapturePath = join(videoDir, 'screen-audio.wav');
|
|
581
|
+
const audioCapture = captureVolume > 0 && audioSupported && isCaptureAudioEnabled()
|
|
582
|
+
? startScreenAudioCapture(audioCapturePath)
|
|
583
|
+
: null;
|
|
440
584
|
// Wrap `page.screenshot()` only now, AFTER the screen recorder has started.
|
|
441
585
|
// The recorder captures a baseline frame via `page.screenshot()` inside
|
|
442
586
|
// `screenRecorder.start()`; wrapping earlier intercepted that internal call
|
|
@@ -448,7 +592,7 @@ const _videoBase = base.extend({
|
|
|
448
592
|
runtimeContext,
|
|
449
593
|
page,
|
|
450
594
|
recorder,
|
|
451
|
-
|
|
595
|
+
valuesDeclaration,
|
|
452
596
|
fn: async () => {
|
|
453
597
|
await use(page);
|
|
454
598
|
// Do not end video abruptly.
|
|
@@ -460,6 +604,21 @@ const _videoBase = base.extend({
|
|
|
460
604
|
restoreStillCapture();
|
|
461
605
|
await screenRecorder.pause();
|
|
462
606
|
recordingFinalizationQueue.push({ recorder: screenRecorder });
|
|
607
|
+
if (audioCapture !== null) {
|
|
608
|
+
try {
|
|
609
|
+
const captured = await audioCapture.stop();
|
|
610
|
+
recorder.addScreenAudioTrack({
|
|
611
|
+
path: captured.path,
|
|
612
|
+
fileHash: captured.fileHash,
|
|
613
|
+
volume: captureVolume,
|
|
614
|
+
repeat: false,
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
catch (err) {
|
|
618
|
+
logger.warn(`captureAudio: failed to capture audio track and it will be omitted. ` +
|
|
619
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
463
622
|
await page.close();
|
|
464
623
|
if (testInfo.status === 'passed') {
|
|
465
624
|
const configDir = process.env.SCREENCI_CONFIG_DIR ?? process.cwd();
|
|
@@ -502,7 +661,10 @@ export const video = _videoBase;
|
|
|
502
661
|
// Attach the chainable fan-out builders. They register through the same test
|
|
503
662
|
// instance, so per-language / per-variant passes inherit every video fixture.
|
|
504
663
|
const _rootBuilder = createVideoBuilder(_videoBase);
|
|
505
|
-
video.
|
|
506
|
-
video.
|
|
664
|
+
video.narration = _rootBuilder.narration;
|
|
665
|
+
video.values = _rootBuilder.values;
|
|
666
|
+
video.overlays = _rootBuilder.overlays;
|
|
667
|
+
video.audio = _rootBuilder.audio;
|
|
668
|
+
video.languages = _rootBuilder.languages;
|
|
507
669
|
video.each = _rootBuilder.each;
|
|
508
670
|
//# sourceMappingURL=video.js.map
|
package/dist/src/video.js.map
CHANGED
|
@@ -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":"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"}
|
package/dist/src/voices.d.ts
CHANGED
|
@@ -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
|
/**
|