screenci 0.0.68 → 0.0.69
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/README.md +1 -1
- package/dist/cli.d.ts +3 -18
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +105 -154
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +13 -13
- package/dist/docs/manifest.js +4 -4
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/studio.video.d.ts +2 -0
- package/dist/docs/video-sources/studio.video.d.ts.map +1 -0
- package/dist/docs/video-sources/studio.video.js +57 -0
- package/dist/docs/video-sources/studio.video.js.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.d.ts +2 -0
- package/dist/e2e/htmlRasterizer.e2e.d.ts.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.js +107 -0
- package/dist/e2e/htmlRasterizer.e2e.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +141 -53
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +533 -78
- package/dist/src/asset.js.map +1 -1
- package/dist/src/audio.d.ts +113 -0
- package/dist/src/audio.d.ts.map +1 -0
- package/dist/src/audio.js +204 -0
- package/dist/src/audio.js.map +1 -0
- package/dist/src/defaults.d.ts +7 -1
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +7 -0
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +134 -6
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +73 -2
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +110 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -0
- package/dist/src/htmlRasterizer.js +364 -0
- package/dist/src/htmlRasterizer.js.map +1 -0
- package/dist/src/init.d.ts +17 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +127 -7
- package/dist/src/init.js.map +1 -1
- package/dist/src/linkSession.d.ts +36 -0
- package/dist/src/linkSession.d.ts.map +1 -0
- package/dist/src/linkSession.js +122 -0
- package/dist/src/linkSession.js.map +1 -0
- package/dist/src/performance.d.ts +1 -3
- package/dist/src/performance.d.ts.map +1 -1
- package/dist/src/performance.js +0 -12
- package/dist/src/performance.js.map +1 -1
- package/dist/src/recording.d.ts +1 -1
- package/dist/src/recording.d.ts.map +1 -1
- package/dist/src/recordingData.d.ts +2 -2
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/runtimeContext.d.ts +38 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +25 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/types.d.ts +25 -7
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +34 -1
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +120 -19
- package/dist/src/video.js.map +1 -1
- package/dist/src/voices.d.ts +22 -9
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +6 -24
- package/dist/src/voices.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -2
- package/skills/screenci/SKILL.md +27 -5
- package/skills/screenci/references/init.md +2 -0
- package/skills/screenci/references/record.md +6 -1
package/dist/src/asset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { IEventRecorder } from './events.js';
|
|
2
|
+
/**
|
|
3
|
+
* Display/playback options for a background audio track.
|
|
4
|
+
*
|
|
5
|
+
* Background audio is mixed *under* the recording (and any narration). Unlike
|
|
6
|
+
* overlays it has no visual and never freezes a frame: it simply plays from the
|
|
7
|
+
* point it is started until it is ended (or until the end of the video).
|
|
8
|
+
*/
|
|
9
|
+
export type AudioConfig = {
|
|
10
|
+
/** File path: `.mp3`, `.wav`, `.m4a`, `.aac`, or an audio-only `.mp4`. */
|
|
11
|
+
path: string;
|
|
12
|
+
/**
|
|
13
|
+
* Linear gain. `1` (the default) plays the source at its natural level, `0`
|
|
14
|
+
* mutes it, and values above `1` boost it (e.g. `2` is twice as loud). Capped
|
|
15
|
+
* at {@link MAX_AUDIO_LEVEL}.
|
|
16
|
+
*/
|
|
17
|
+
volume?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Loop the source to fill the playback span. With `repeat: true` a short
|
|
20
|
+
* track repeats until the track is ended (or the video ends). Defaults to
|
|
21
|
+
* `false` (the source plays once and then falls silent).
|
|
22
|
+
*/
|
|
23
|
+
repeat?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A value accepted by {@link createAudio} for each key: a file path string or an
|
|
27
|
+
* {@link AudioConfig} object.
|
|
28
|
+
*/
|
|
29
|
+
export type AudioInput = string | AudioConfig;
|
|
30
|
+
/**
|
|
31
|
+
* A background audio controller.
|
|
32
|
+
*
|
|
33
|
+
* Calling it (`await music.theme()`) starts the track at the current point and
|
|
34
|
+
* lets it play for the rest of the video. Use `start()`/`end()` to bound the
|
|
35
|
+
* track to a specific span. Tracks are non-exclusive: starting one never stops
|
|
36
|
+
* another, so music and a sound effect can overlap.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // Background music for the whole video:
|
|
41
|
+
* await music.theme()
|
|
42
|
+
*
|
|
43
|
+
* // Bounded span:
|
|
44
|
+
* await music.sting.start()
|
|
45
|
+
* await page.click('#celebrate')
|
|
46
|
+
* await music.sting.end()
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export type AudioController = {
|
|
50
|
+
(): Promise<void>;
|
|
51
|
+
start(): Promise<void>;
|
|
52
|
+
end(): Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
/** Typed audio controllers keyed by the names passed to {@link createAudio}. */
|
|
55
|
+
export type AudioTracks<T extends Record<string, AudioInput>> = {
|
|
56
|
+
[K in keyof T]: AudioController;
|
|
57
|
+
};
|
|
58
|
+
export declare function setActiveAudioRecorder(recorder: IEventRecorder | null): void;
|
|
59
|
+
export declare function resetAudioChain(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a set of typed background audio controllers, one per key in the map.
|
|
62
|
+
* Each value is a file path string or an {@link AudioConfig} object.
|
|
63
|
+
*
|
|
64
|
+
* Background audio is mixed under the recording (and narration). Calling a
|
|
65
|
+
* controller starts the track at the current point and plays it for the rest of
|
|
66
|
+
* the video; `start()`/`end()` bound it to a span. Set `repeat: true` to loop a
|
|
67
|
+
* short track and `volume` to balance it against the recording.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const music = createAudio({
|
|
72
|
+
* theme: { path: 'bg.mp3', volume: 0.3, repeat: true },
|
|
73
|
+
* sting: 'celebrate.wav',
|
|
74
|
+
* })
|
|
75
|
+
*
|
|
76
|
+
* video('Product demo', async ({ page }) => {
|
|
77
|
+
* await music.theme() // plays under the whole video, looping
|
|
78
|
+
* await page.goto('/dashboard')
|
|
79
|
+
* await music.sting.start()
|
|
80
|
+
* await page.click('#celebrate')
|
|
81
|
+
* await music.sting.end()
|
|
82
|
+
* })
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function createAudio<const T extends Record<string, AudioInput>>(tracks: T): AudioTracks<T>;
|
|
86
|
+
/**
|
|
87
|
+
* Creates typed background audio controllers whose files, volume, and repeat are
|
|
88
|
+
* configured on the ScreenCI Studio page instead of in code. Business tier only.
|
|
89
|
+
*
|
|
90
|
+
* Each key becomes a callable controller with the same timeline behavior as
|
|
91
|
+
* {@link createAudio} controllers, including `start()`/`end()`. The audio file,
|
|
92
|
+
* volume, and repeat all come from Studio (mirrors {@link createStudioOverlays}
|
|
93
|
+
* for overlays).
|
|
94
|
+
*
|
|
95
|
+
* On the first upload of a studio-mode video, rendering is held until the video
|
|
96
|
+
* is configured in Studio (the CLI prints a direct link). Later uploads reuse
|
|
97
|
+
* the saved Studio configuration automatically.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const music = createStudioAudio('theme', 'sting')
|
|
102
|
+
*
|
|
103
|
+
* video('Product demo', async ({ page }) => {
|
|
104
|
+
* await music.theme() // plays under the whole video
|
|
105
|
+
* await page.goto('/dashboard')
|
|
106
|
+
* await music.sting.start()
|
|
107
|
+
* await page.click('#celebrate')
|
|
108
|
+
* await music.sting.end()
|
|
109
|
+
* })
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export declare function createStudioAudio<const K extends readonly [string, ...string[]]>(...keys: K): Record<K[number], AudioController>;
|
|
113
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAA;AAcpE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAA;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB,CAAA;AAED,gFAAgF;AAChF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI;KAC7D,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe;CAChC,CAAA;AAID,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAG5E;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0DD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACpE,MAAM,EAAE,CAAC,GACR,WAAW,CAAC,CAAC,CAAC,CAMhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAC9C,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAgBhD"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
import { dirname, resolve } from 'path';
|
|
4
|
+
import { isInsideHide } from './hide.js';
|
|
5
|
+
import { MAX_AUDIO_LEVEL } from './asset.js';
|
|
6
|
+
import { getScreenCIRuntimeContext, getRuntimeAudioRecorder, setRuntimeAudioRecorder, resetAudioRuntimeState, } from './runtimeContext.js';
|
|
7
|
+
const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.m4a', '.aac', '.mp4'];
|
|
8
|
+
export function setActiveAudioRecorder(recorder) {
|
|
9
|
+
setRuntimeAudioRecorder(recorder);
|
|
10
|
+
resetAudioRuntimeState();
|
|
11
|
+
}
|
|
12
|
+
export function resetAudioChain() {
|
|
13
|
+
resetAudioRuntimeState();
|
|
14
|
+
}
|
|
15
|
+
function hasAudioExtension(path) {
|
|
16
|
+
const dotIndex = path.lastIndexOf('.');
|
|
17
|
+
if (dotIndex === -1)
|
|
18
|
+
return false;
|
|
19
|
+
const extension = path.slice(dotIndex).toLowerCase();
|
|
20
|
+
return AUDIO_EXTENSIONS.includes(extension);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves an audio file path (as-is or relative to the test file) and returns
|
|
24
|
+
* its absolute path plus a SHA-256 hash for upload/caching. Throws when the file
|
|
25
|
+
* does not exist.
|
|
26
|
+
*/
|
|
27
|
+
async function resolveAudioFile(name, path, testFilePath) {
|
|
28
|
+
const candidates = [path];
|
|
29
|
+
if (testFilePath !== null) {
|
|
30
|
+
candidates.push(resolve(dirname(testFilePath), path));
|
|
31
|
+
}
|
|
32
|
+
for (const candidate of candidates) {
|
|
33
|
+
try {
|
|
34
|
+
const fileBuffer = await readFile(candidate);
|
|
35
|
+
return {
|
|
36
|
+
path,
|
|
37
|
+
fileHash: createHash('sha256').update(fileBuffer).digest('hex'),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// try next candidate
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`[screenci] Audio file not found for "${name}": ${path}`);
|
|
45
|
+
}
|
|
46
|
+
function normalizeAudioConfig(name, input) {
|
|
47
|
+
const config = typeof input === 'string' ? { path: input } : input;
|
|
48
|
+
if (!hasAudioExtension(config.path)) {
|
|
49
|
+
throw new Error(`[screenci] Audio "${name}" must use one of: ${AUDIO_EXTENSIONS.join(', ')}. Received: ${config.path}`);
|
|
50
|
+
}
|
|
51
|
+
if (config.volume !== undefined &&
|
|
52
|
+
(!Number.isFinite(config.volume) ||
|
|
53
|
+
config.volume < 0 ||
|
|
54
|
+
config.volume > MAX_AUDIO_LEVEL)) {
|
|
55
|
+
throw new Error(`[screenci] Audio "${name}" (${config.path}) must provide a finite volume between 0 and ${MAX_AUDIO_LEVEL}. 1 is the natural level, 0 is silent, and values above 1 boost it.`);
|
|
56
|
+
}
|
|
57
|
+
return config;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates a set of typed background audio controllers, one per key in the map.
|
|
61
|
+
* Each value is a file path string or an {@link AudioConfig} object.
|
|
62
|
+
*
|
|
63
|
+
* Background audio is mixed under the recording (and narration). Calling a
|
|
64
|
+
* controller starts the track at the current point and plays it for the rest of
|
|
65
|
+
* the video; `start()`/`end()` bound it to a span. Set `repeat: true` to loop a
|
|
66
|
+
* short track and `volume` to balance it against the recording.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const music = createAudio({
|
|
71
|
+
* theme: { path: 'bg.mp3', volume: 0.3, repeat: true },
|
|
72
|
+
* sting: 'celebrate.wav',
|
|
73
|
+
* })
|
|
74
|
+
*
|
|
75
|
+
* video('Product demo', async ({ page }) => {
|
|
76
|
+
* await music.theme() // plays under the whole video, looping
|
|
77
|
+
* await page.goto('/dashboard')
|
|
78
|
+
* await music.sting.start()
|
|
79
|
+
* await page.click('#celebrate')
|
|
80
|
+
* await music.sting.end()
|
|
81
|
+
* })
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function createAudio(tracks) {
|
|
85
|
+
const result = {};
|
|
86
|
+
for (const name in tracks) {
|
|
87
|
+
result[name] = buildAudioController(name, tracks[name]);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates typed background audio controllers whose files, volume, and repeat are
|
|
93
|
+
* configured on the ScreenCI Studio page instead of in code. Business tier only.
|
|
94
|
+
*
|
|
95
|
+
* Each key becomes a callable controller with the same timeline behavior as
|
|
96
|
+
* {@link createAudio} controllers, including `start()`/`end()`. The audio file,
|
|
97
|
+
* volume, and repeat all come from Studio (mirrors {@link createStudioOverlays}
|
|
98
|
+
* for overlays).
|
|
99
|
+
*
|
|
100
|
+
* On the first upload of a studio-mode video, rendering is held until the video
|
|
101
|
+
* is configured in Studio (the CLI prints a direct link). Later uploads reuse
|
|
102
|
+
* the saved Studio configuration automatically.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* const music = createStudioAudio('theme', 'sting')
|
|
107
|
+
*
|
|
108
|
+
* video('Product demo', async ({ page }) => {
|
|
109
|
+
* await music.theme() // plays under the whole video
|
|
110
|
+
* await page.goto('/dashboard')
|
|
111
|
+
* await music.sting.start()
|
|
112
|
+
* await page.click('#celebrate')
|
|
113
|
+
* await music.sting.end()
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export function createStudioAudio(...keys) {
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
for (const key of keys) {
|
|
120
|
+
if (seen.has(key)) {
|
|
121
|
+
throw new Error(`Duplicate audio key "${key}" passed to createStudioAudio. Audio keys must be unique.`);
|
|
122
|
+
}
|
|
123
|
+
seen.add(key);
|
|
124
|
+
}
|
|
125
|
+
const result = {};
|
|
126
|
+
for (const key of keys) {
|
|
127
|
+
result[key] = buildStudioAudioController(key);
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Builds the callable/`start()`/`end()` audio controller shared by code-defined
|
|
133
|
+
* ({@link createAudio}) and Studio ({@link createStudioAudio}) tracks. The only
|
|
134
|
+
* difference is how `emitStart` records the start event.
|
|
135
|
+
*/
|
|
136
|
+
function createAudioControllerCore(name, emitStart) {
|
|
137
|
+
// start()/end() register a live run so end() can pair to its start and a
|
|
138
|
+
// double start() is rejected.
|
|
139
|
+
const start = async () => {
|
|
140
|
+
if (isInsideHide()) {
|
|
141
|
+
throw new Error('[screenci] Cannot start audio inside hide()');
|
|
142
|
+
}
|
|
143
|
+
const context = getScreenCIRuntimeContext();
|
|
144
|
+
if (context.audio.activeRuns.has(name)) {
|
|
145
|
+
throw new Error(`[screenci] Audio "${name}" is already started. Call end() for it before starting it again.`);
|
|
146
|
+
}
|
|
147
|
+
let resolveFinished;
|
|
148
|
+
const finished = new Promise((res) => {
|
|
149
|
+
resolveFinished = res;
|
|
150
|
+
});
|
|
151
|
+
const run = { finished, resolveFinished };
|
|
152
|
+
context.audio.activeRuns.set(name, run);
|
|
153
|
+
await emitStart(getRuntimeAudioRecorder());
|
|
154
|
+
};
|
|
155
|
+
const end = async () => {
|
|
156
|
+
if (isInsideHide()) {
|
|
157
|
+
throw new Error('[screenci] Cannot call end() for audio inside hide()');
|
|
158
|
+
}
|
|
159
|
+
const context = getScreenCIRuntimeContext();
|
|
160
|
+
const run = context.audio.activeRuns.get(name);
|
|
161
|
+
if (run === undefined) {
|
|
162
|
+
throw new Error(`Cannot call end() for audio "${name}" because it is not a started track`);
|
|
163
|
+
}
|
|
164
|
+
getRuntimeAudioRecorder().addAudioEnd(name, 'wait');
|
|
165
|
+
context.audio.activeRuns.delete(name);
|
|
166
|
+
run.resolveFinished();
|
|
167
|
+
await run.finished;
|
|
168
|
+
};
|
|
169
|
+
// Bare call: play from here to the end of the video (no end recorded). It is
|
|
170
|
+
// fire-and-forget, so it never registers a live run.
|
|
171
|
+
const controller = (async () => {
|
|
172
|
+
if (isInsideHide()) {
|
|
173
|
+
throw new Error('[screenci] Cannot start audio inside hide()');
|
|
174
|
+
}
|
|
175
|
+
await emitStart(getRuntimeAudioRecorder());
|
|
176
|
+
});
|
|
177
|
+
controller.start = start;
|
|
178
|
+
controller.end = end;
|
|
179
|
+
return controller;
|
|
180
|
+
}
|
|
181
|
+
function buildAudioController(name, input) {
|
|
182
|
+
const config = normalizeAudioConfig(name, input);
|
|
183
|
+
const buildPayload = async () => {
|
|
184
|
+
const testFilePath = getScreenCIRuntimeContext().testFilePath;
|
|
185
|
+
const resolved = await resolveAudioFile(name, config.path, testFilePath);
|
|
186
|
+
return {
|
|
187
|
+
path: resolved.path,
|
|
188
|
+
fileHash: resolved.fileHash,
|
|
189
|
+
volume: config.volume ?? 1,
|
|
190
|
+
repeat: config.repeat ?? false,
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
return createAudioControllerCore(name, async (recorder) => {
|
|
194
|
+
const payload = await buildPayload();
|
|
195
|
+
recorder.addAudioStart(name, payload);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function buildStudioAudioController(name) {
|
|
199
|
+
return createAudioControllerCore(name, (recorder) => {
|
|
200
|
+
recorder.addStudioAudioStart(name);
|
|
201
|
+
return Promise.resolve();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/audio.ts"],"names":[],"mappings":"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"}
|
package/dist/src/defaults.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AspectRatio, AutoZoomOptions, FPS, Quality, RecordUploadPolicy, RecordOptions } from './types.js';
|
|
1
|
+
import type { AspectRatio, AutoZoomOptions, FPS, Quality, RecordUploadPolicy, RecordOptions, VideoEncoderPreset } from './types.js';
|
|
2
2
|
export declare const DEFAULT_ZOOM_OPTIONS: Required<AutoZoomOptions>;
|
|
3
3
|
/**
|
|
4
4
|
* Default cursor move duration for click-like actions, in milliseconds.
|
|
@@ -41,6 +41,12 @@ export declare const DEFAULT_ACTION_TIMEOUT: number;
|
|
|
41
41
|
* Keeps page navigations at a sane timeout independent of the long test timeout.
|
|
42
42
|
*/
|
|
43
43
|
export declare const DEFAULT_NAVIGATION_TIMEOUT: number;
|
|
44
|
+
/**
|
|
45
|
+
* Default capture encoder preset. `'fast'` is the safest baseline (lightest
|
|
46
|
+
* encode, never falls behind realtime on weak runners). The `init`-scaffolded
|
|
47
|
+
* config opts into `'sharp'` locally for crisper text and keeps `'fast'` in CI.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DEFAULT_VIDEO_ENCODER: VideoEncoderPreset;
|
|
44
50
|
/**
|
|
45
51
|
* Default video options combining all video-related defaults
|
|
46
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,GAAG,EACH,OAAO,EACP,kBAAkB,EAClB,aAAa,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,GAAG,EACH,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAQnB,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,eAAe,CAQ1D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAY,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAoB,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,OAAiB,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,GAAQ,CAAA;AAElC;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAmB,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,kBAAkC,CAAA;AAE7E;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAuB,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAe,CAAA;AAEpD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAe,CAAA;AAExD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,kBAA2B,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAKnC,CAAA"}
|
package/dist/src/defaults.js
CHANGED
|
@@ -54,6 +54,12 @@ export const DEFAULT_ACTION_TIMEOUT = 30_000;
|
|
|
54
54
|
* Keeps page navigations at a sane timeout independent of the long test timeout.
|
|
55
55
|
*/
|
|
56
56
|
export const DEFAULT_NAVIGATION_TIMEOUT = 30_000;
|
|
57
|
+
/**
|
|
58
|
+
* Default capture encoder preset. `'fast'` is the safest baseline (lightest
|
|
59
|
+
* encode, never falls behind realtime on weak runners). The `init`-scaffolded
|
|
60
|
+
* config opts into `'sharp'` locally for crisper text and keeps `'fast'` in CI.
|
|
61
|
+
*/
|
|
62
|
+
export const DEFAULT_VIDEO_ENCODER = 'fast';
|
|
57
63
|
/**
|
|
58
64
|
* Default video options combining all video-related defaults
|
|
59
65
|
*/
|
|
@@ -61,5 +67,6 @@ export const DEFAULT_VIDEO_OPTIONS = {
|
|
|
61
67
|
aspectRatio: DEFAULT_ASPECT_RATIO,
|
|
62
68
|
quality: DEFAULT_QUALITY,
|
|
63
69
|
fps: DEFAULT_FPS,
|
|
70
|
+
encoder: DEFAULT_VIDEO_ENCODER,
|
|
64
71
|
};
|
|
65
72
|
//# sourceMappingURL=defaults.js.map
|
package/dist/src/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAUA,aAAa;AACb,4EAA4E;AAC5E,wBAAwB;AACxB,0BAA0B;AAC1B,+BAA+B;AAC/B,cAAc;AACd,MAAM,CAAC,MAAM,oBAAoB,GAA8B;IAC7D,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,CAAC;IACZ,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,GAAG;CACnB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAW,GAAG,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAgB,MAAM,CAAA;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAY,OAAO,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAQ,EAAE,CAAA;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,UAAU,CAAA;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAuB,aAAa,CAAA;AAE7E;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAW,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW,MAAM,CAAA;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAW,MAAM,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAuB,MAAM,CAAA;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAkB;IAClD,WAAW,EAAE,oBAAoB;IACjC,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,qBAAqB;CAC/B,CAAA"}
|
package/dist/src/events.d.ts
CHANGED
|
@@ -192,9 +192,37 @@ export type VideoCueStartEvent = {
|
|
|
192
192
|
/** Multi-language API — per-language translations keyed by language code. */
|
|
193
193
|
translations?: Record<string, VideoCueTranslation>;
|
|
194
194
|
};
|
|
195
|
+
/**
|
|
196
|
+
* Placement of a visual asset overlay. Coordinates are normalized 0-1 fractions
|
|
197
|
+
* of a reference box, with the asset anchored at its top-left corner.
|
|
198
|
+
*
|
|
199
|
+
* - `fullScreen` fills the entire output frame.
|
|
200
|
+
* - The positioned variants place the asset against the full output frame
|
|
201
|
+
* (`relativeTo: 'screen'`) or the composited recording area
|
|
202
|
+
* (`relativeTo: 'recording'`, the default). Provide exactly one of `width` or
|
|
203
|
+
* `height`; the other dimension is derived from the asset's intrinsic aspect
|
|
204
|
+
* ratio.
|
|
205
|
+
*/
|
|
206
|
+
export type OverlayPlacement = {
|
|
207
|
+
fullScreen: true;
|
|
208
|
+
} | {
|
|
209
|
+
relativeTo: 'screen' | 'recording';
|
|
210
|
+
x: number;
|
|
211
|
+
y: number;
|
|
212
|
+
width: number;
|
|
213
|
+
} | {
|
|
214
|
+
relativeTo: 'screen' | 'recording';
|
|
215
|
+
x: number;
|
|
216
|
+
y: number;
|
|
217
|
+
height: number;
|
|
218
|
+
};
|
|
195
219
|
/**
|
|
196
220
|
* Asset format policy is recorded explicitly so renderers never need to infer
|
|
197
221
|
* timing or audio rules from file extensions after the recording phase.
|
|
222
|
+
*
|
|
223
|
+
* `durationMs` is present for blocking overlays (the asset holds a frozen frame
|
|
224
|
+
* for that long). It is omitted when the overlay is driven by `start()`/`end()`,
|
|
225
|
+
* in which case a paired `assetEnd` event defines the visible window.
|
|
198
226
|
*/
|
|
199
227
|
export type ImageAssetStartEvent = {
|
|
200
228
|
type: 'assetStart';
|
|
@@ -203,8 +231,9 @@ export type ImageAssetStartEvent = {
|
|
|
203
231
|
kind: 'image';
|
|
204
232
|
path: string;
|
|
205
233
|
fileHash?: string;
|
|
206
|
-
durationMs
|
|
234
|
+
durationMs?: number;
|
|
207
235
|
fullScreen: boolean;
|
|
236
|
+
placement?: OverlayPlacement;
|
|
208
237
|
};
|
|
209
238
|
export type VideoAssetStartEvent = {
|
|
210
239
|
type: 'assetStart';
|
|
@@ -215,11 +244,48 @@ export type VideoAssetStartEvent = {
|
|
|
215
244
|
fileHash?: string;
|
|
216
245
|
audio: number;
|
|
217
246
|
fullScreen: boolean;
|
|
247
|
+
placement?: OverlayPlacement;
|
|
218
248
|
};
|
|
219
|
-
export type AssetStartEvent = ImageAssetStartEvent | VideoAssetStartEvent;
|
|
220
|
-
export type AssetStartPayload = Omit<ImageAssetStartEvent, 'type' | 'timeMs' | 'name'> | Omit<VideoAssetStartEvent, 'type' | 'timeMs' | 'name'>;
|
|
221
249
|
/**
|
|
222
|
-
*
|
|
250
|
+
* An animated HTML/React overlay captured to a single alpha-preserving video.
|
|
251
|
+
* It behaves like an {@link ImageAssetStartEvent} on the timeline (a blocking
|
|
252
|
+
* call holds a frozen frame for `durationMs`; `start()`/`end()` drives a live
|
|
253
|
+
* window), but the renderer composites it as a video so the animation plays.
|
|
254
|
+
* It never carries audio.
|
|
255
|
+
*/
|
|
256
|
+
export type AnimationAssetStartEvent = {
|
|
257
|
+
type: 'assetStart';
|
|
258
|
+
timeMs: number;
|
|
259
|
+
name: string;
|
|
260
|
+
kind: 'animation';
|
|
261
|
+
path: string;
|
|
262
|
+
fileHash?: string;
|
|
263
|
+
durationMs?: number;
|
|
264
|
+
fullScreen: boolean;
|
|
265
|
+
placement?: OverlayPlacement;
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* End marker for an asset overlay driven by `start()`/`end()`. The asset is
|
|
269
|
+
* visible from its `assetStart` until this event (a live overlay over the
|
|
270
|
+
* recording, no frozen frame). `reason` mirrors cue ends: `'wait'` for an
|
|
271
|
+
* explicit `end()`, `'auto'` when this one was auto-ended.
|
|
272
|
+
*
|
|
273
|
+
* `name` identifies which overlay this end belongs to. Because overlays may
|
|
274
|
+
* overlap (several live at once, interleaved rather than nested), ends are
|
|
275
|
+
* paired to their starts by name rather than by position. Older recordings
|
|
276
|
+
* predate this field, so it is optional; the renderer falls back to closing
|
|
277
|
+
* the most recently opened overlay when it is absent.
|
|
278
|
+
*/
|
|
279
|
+
export type AssetEndEvent = {
|
|
280
|
+
type: 'assetEnd';
|
|
281
|
+
timeMs: number;
|
|
282
|
+
name?: string;
|
|
283
|
+
reason?: 'auto' | 'wait';
|
|
284
|
+
};
|
|
285
|
+
export type AssetStartEvent = ImageAssetStartEvent | VideoAssetStartEvent | AnimationAssetStartEvent;
|
|
286
|
+
export type AssetStartPayload = Omit<ImageAssetStartEvent, 'type' | 'timeMs' | 'name'> | Omit<VideoAssetStartEvent, 'type' | 'timeMs' | 'name'> | Omit<AnimationAssetStartEvent, 'type' | 'timeMs' | 'name'>;
|
|
287
|
+
/**
|
|
288
|
+
* Asset declared via `createStudioOverlays` — the file and display options are
|
|
223
289
|
* configured in Studio, so the recording only marks the timeline point.
|
|
224
290
|
*/
|
|
225
291
|
export type StudioAssetStartEvent = {
|
|
@@ -228,6 +294,47 @@ export type StudioAssetStartEvent = {
|
|
|
228
294
|
name: string;
|
|
229
295
|
studio: true;
|
|
230
296
|
};
|
|
297
|
+
/**
|
|
298
|
+
* Start of a background audio track (`createAudio`). Unlike asset overlays this
|
|
299
|
+
* carries no visual: it is mixed under the recording from `timeMs` until its
|
|
300
|
+
* paired {@link AudioEndEvent}, or until the end of the video when no end is
|
|
301
|
+
* recorded (the common background-music case). `volume` is a linear gain (`1`
|
|
302
|
+
* is natural); `repeat` loops the source to fill the span.
|
|
303
|
+
*/
|
|
304
|
+
export type AudioStartEvent = {
|
|
305
|
+
type: 'audioStart';
|
|
306
|
+
timeMs: number;
|
|
307
|
+
name: string;
|
|
308
|
+
path: string;
|
|
309
|
+
/** SHA-256 of the audio file — present only during recording; used for upload/caching. */
|
|
310
|
+
fileHash?: string;
|
|
311
|
+
volume: number;
|
|
312
|
+
repeat: boolean;
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
315
|
+
* End marker for a background audio track. `name` pairs it to its
|
|
316
|
+
* {@link AudioStartEvent}; an audioStart with no matching end plays to the end
|
|
317
|
+
* of the video.
|
|
318
|
+
*/
|
|
319
|
+
export type AudioEndEvent = {
|
|
320
|
+
type: 'audioEnd';
|
|
321
|
+
timeMs: number;
|
|
322
|
+
name?: string;
|
|
323
|
+
reason?: 'wait';
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* Background audio track declared via `createStudioAudio` — the file, volume,
|
|
327
|
+
* and repeat are configured in Studio, so the recording only marks the timeline
|
|
328
|
+
* point (mirrors {@link StudioAssetStartEvent} for overlays).
|
|
329
|
+
*/
|
|
330
|
+
export type StudioAudioStartEvent = {
|
|
331
|
+
type: 'audioStart';
|
|
332
|
+
timeMs: number;
|
|
333
|
+
name: string;
|
|
334
|
+
studio: true;
|
|
335
|
+
};
|
|
336
|
+
/** Payload for {@link IEventRecorder.addAudioStart} (timing/name added by the recorder). */
|
|
337
|
+
export type AudioStartPayload = Omit<AudioStartEvent, 'type' | 'timeMs' | 'name'>;
|
|
231
338
|
export type HideStartEvent = {
|
|
232
339
|
type: 'hideStart';
|
|
233
340
|
timeMs: number;
|
|
@@ -268,7 +375,7 @@ export type AutoZoomEndEvent = {
|
|
|
268
375
|
easing: string;
|
|
269
376
|
duration: number;
|
|
270
377
|
};
|
|
271
|
-
export type RecordingEvent = VideoStartEvent | InputEvent | CueStartEvent | CueEndEvent | VideoCueStartEvent | AssetStartEvent | StudioAssetStartEvent | HideStartEvent | HideEndEvent | SpeedStartEvent | SpeedEndEvent | TimeStartEvent | TimeEndEvent | AutoZoomStartEvent | AutoZoomEndEvent;
|
|
378
|
+
export type RecordingEvent = VideoStartEvent | InputEvent | CueStartEvent | CueEndEvent | VideoCueStartEvent | AssetStartEvent | AssetEndEvent | StudioAssetStartEvent | AudioStartEvent | StudioAudioStartEvent | AudioEndEvent | HideStartEvent | HideEndEvent | SpeedStartEvent | SpeedEndEvent | TimeStartEvent | TimeEndEvent | AutoZoomStartEvent | AutoZoomEndEvent;
|
|
272
379
|
export type VoiceLanguageMeta = {
|
|
273
380
|
/** Voice key string: a built-in voice name or an external voice key. */
|
|
274
381
|
name: string;
|
|
@@ -300,12 +407,14 @@ export type RecordingMetadata = {
|
|
|
300
407
|
* Which parts of this recording opted into Studio configuration.
|
|
301
408
|
* `renderOptions` is set when `STUDIO_RENDER_OPTIONS` was used; `narration`
|
|
302
409
|
* when the recording contains `createStudioNarration` cues; `assets` when it
|
|
303
|
-
* contains `
|
|
410
|
+
* contains `createStudioOverlays` assets; `audio` when it contains
|
|
411
|
+
* `createStudioAudio` tracks.
|
|
304
412
|
*/
|
|
305
413
|
studio?: {
|
|
306
414
|
renderOptions?: boolean;
|
|
307
415
|
narration?: boolean;
|
|
308
416
|
assets?: boolean;
|
|
417
|
+
audio?: boolean;
|
|
309
418
|
};
|
|
310
419
|
};
|
|
311
420
|
export type RecordingData = {
|
|
@@ -329,8 +438,23 @@ export interface IEventRecorder {
|
|
|
329
438
|
addCueEnd(reason?: 'auto' | 'wait'): void;
|
|
330
439
|
addVideoCueStart(name: string, assetPath: string | undefined, assetHash: string | undefined, subtitle?: string, translations?: Record<string, VideoCueTranslation>): void;
|
|
331
440
|
addAssetStart(name: string, asset: AssetStartPayload): void;
|
|
441
|
+
/**
|
|
442
|
+
* Records the end of a `start()`/`end()`-driven asset overlay. `name`
|
|
443
|
+
* identifies which overlay ended (overlays may overlap), so the renderer can
|
|
444
|
+
* pair this end to its start by name.
|
|
445
|
+
*/
|
|
446
|
+
addAssetEnd(name: string | undefined, reason?: 'auto' | 'wait'): void;
|
|
332
447
|
/** Records a studio-mode asset start — the file and options are configured in Studio. */
|
|
333
448
|
addStudioAssetStart(name: string): void;
|
|
449
|
+
/** Records the start of a background audio track (`createAudio`). */
|
|
450
|
+
addAudioStart(name: string, audio: AudioStartPayload): void;
|
|
451
|
+
/** Records a studio-mode audio start — the file, volume, and repeat are configured in Studio. */
|
|
452
|
+
addStudioAudioStart(name: string): void;
|
|
453
|
+
/**
|
|
454
|
+
* Records the end of a background audio track. `name` pairs it to its start;
|
|
455
|
+
* an audio track left open plays to the end of the video.
|
|
456
|
+
*/
|
|
457
|
+
addAudioEnd(name: string | undefined, reason?: 'wait'): void;
|
|
334
458
|
addHideStart(): void;
|
|
335
459
|
addHideEnd(): void;
|
|
336
460
|
/** Resolved cursor/scroll dispatch intervals from `recordOptions.performance`. */
|
|
@@ -368,7 +492,11 @@ export declare class EventRecorder implements IEventRecorder {
|
|
|
368
492
|
addCueEnd(reason?: 'auto' | 'wait'): void;
|
|
369
493
|
addVideoCueStart(name: string, assetPath: string | undefined, assetHash: string | undefined, subtitle?: string, translations?: Record<string, VideoCueTranslation>): void;
|
|
370
494
|
addAssetStart(name: string, asset: AssetStartPayload): void;
|
|
495
|
+
addAssetEnd(name: string | undefined, reason?: 'auto' | 'wait'): void;
|
|
371
496
|
addStudioAssetStart(name: string): void;
|
|
497
|
+
addAudioStart(name: string, audio: AudioStartPayload): void;
|
|
498
|
+
addStudioAudioStart(name: string): void;
|
|
499
|
+
addAudioEnd(name: string | undefined, reason?: 'wait'): void;
|
|
372
500
|
addHideStart(): void;
|
|
373
501
|
addHideEnd(): void;
|
|
374
502
|
getPerformanceIntervals(): PerformanceIntervals;
|