screenci 0.0.34 → 0.0.37

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/src/video.js CHANGED
@@ -1,11 +1,10 @@
1
1
  import { test as base } from '@playwright/test';
2
2
  import { mkdir, rm } from 'fs/promises';
3
3
  import { join } from 'path';
4
- import { spawn } from 'child_process';
4
+ import { attachRecorder } from 'playwright-recorder-plus';
5
5
  import { sanitizeVideoName } from './sanitize.js';
6
6
  export { getDimensions } from './dimensions.js';
7
7
  import { getDimensions, getViewportCenter } from './dimensions.js';
8
- import { isHeadless, startXvfb } from './xvfb.js';
9
8
  import { setActiveCueRecorder, resetCueChain, validateCustomVoiceRefs, } from './cue.js';
10
9
  import { setActiveHideRecorder } from './hide.js';
11
10
  import { setActiveAutoZoomRecorder } from './autoZoom.js';
@@ -15,7 +14,6 @@ import { EventRecorder } from './events.js';
15
14
  import { setActiveClickRecorder, instrumentBrowser, instrumentContext, } from './instrument.js';
16
15
  import { logger } from './logger.js';
17
16
  import { getChromiumLaunchOptions } from './browserLaunchOptions.js';
18
- import { createRecordingChromiumProfile } from './chromiumProfile.js';
19
17
  export const POST_VIDEO_PAUSE = 500;
20
18
  function sleep(ms) {
21
19
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -50,13 +48,6 @@ async function setupMouseTracking(_page, _recorder) {
50
48
  })
51
49
  */
52
50
  }
53
- /**
54
- * Get the path to the system ffmpeg binary
55
- */
56
- function getSystemFfmpegPath() {
57
- // Use system ffmpeg from standard locations
58
- return '/usr/bin/ffmpeg';
59
- }
60
51
  /**
61
52
  * Get CRF value (encoding quality) for a given quality preset.
62
53
  *
@@ -79,187 +70,35 @@ function getCrfForQuality(quality) {
79
70
  return 16;
80
71
  }
81
72
  }
82
- /**
83
- * Start ffmpeg screen recording
84
- */
85
- function startScreenRecording(outputPath, fps, quality, aspectRatio) {
73
+ async function startScreencastRecording(page, outputPath, fps, quality, aspectRatio) {
86
74
  const { width, height } = getDimensions(aspectRatio, quality);
87
75
  const crf = getCrfForQuality(quality);
88
- const display = process.env.DISPLAY || ':0';
89
- const ffmpegArgs = [
90
- '-f',
91
- 'x11grab',
92
- '-draw_mouse',
93
- '0',
94
- '-video_size',
95
- `${width}x${height}`,
96
- '-framerate',
97
- `${fps}`,
98
- '-i',
99
- `${display}+0,0`,
100
- '-c:v',
101
- 'libx264',
102
- '-tune',
103
- 'zerolatency',
104
- '-preset',
105
- 'fast',
106
- '-crf',
107
- `${crf}`,
108
- '-pix_fmt',
109
- 'yuv444p',
110
- '-movflags',
111
- 'frag_keyframe+empty_moov',
112
- '-y',
113
- outputPath,
114
- ];
115
- const ffmpegPath = getSystemFfmpegPath();
116
- const ffmpeg = spawn(ffmpegPath, ffmpegArgs);
117
- activeFFmpegProcesses.add(ffmpeg);
118
- ffmpeg.on('close', () => activeFFmpegProcesses.delete(ffmpeg));
119
- let hasStarted = false;
120
- let hasErrored = false;
121
- const startedPromise = new Promise((resolve) => {
122
- const timeout = setTimeout(() => {
123
- if (!hasStarted && !hasErrored) {
124
- hasStarted = true;
125
- resolve(true);
126
- }
127
- }, 1000);
128
- ffmpeg.stderr.on('data', (data) => {
129
- const output = data.toString();
130
- // ffmpeg outputs info to stderr, check for actual errors
131
- if (output.includes('frame=') || output.includes('fps=')) {
132
- if (!hasStarted) {
133
- hasStarted = true;
134
- clearTimeout(timeout);
135
- resolve(true);
136
- }
137
- }
138
- else if (output.includes('error') ||
139
- output.includes('Error') ||
140
- output.includes('Invalid')) {
141
- if (!hasErrored) {
142
- hasErrored = true;
143
- clearTimeout(timeout);
144
- logger.error('FFmpeg error:', output);
145
- resolve(false);
146
- }
147
- }
148
- });
149
- ffmpeg.on('error', (err) => {
150
- if (!hasErrored) {
151
- hasErrored = true;
152
- clearTimeout(timeout);
153
- logger.error('Failed to start FFmpeg:', err);
154
- resolve(false);
155
- }
156
- });
157
- ffmpeg.on('close', (code) => {
158
- clearTimeout(timeout);
159
- if (code !== null && code !== 0 && code !== 255 && !hasErrored) {
160
- logger.error(`FFmpeg exited with code ${code}`);
161
- }
162
- });
163
- });
164
- return { process: ffmpeg, started: startedPromise };
165
- }
166
- /**
167
- * Stop ffmpeg recording gracefully.
168
- *
169
- * SIGTERM tells ffmpeg to flush buffers and write the moov atom before exiting.
170
- * SIGKILL is a last resort after timeoutMs and will leave the file corrupt.
171
- */
172
- async function stopScreenRecording(ffmpegProcess, timeoutMs = 10000) {
173
- // Already exited (e.g. display closed under it) — nothing to signal
174
- if (ffmpegProcess.exitCode !== null || ffmpegProcess.killed) {
175
- return;
176
- }
177
- return new Promise((resolve) => {
178
- const sigkillTimer = setTimeout(() => {
179
- logger.warn('FFmpeg did not stop gracefully, forcing SIGKILL (file may be corrupt)');
180
- ffmpegProcess.kill('SIGKILL');
181
- resolve();
182
- }, timeoutMs);
183
- ffmpegProcess.on('close', () => {
184
- clearTimeout(sigkillTimer);
185
- resolve();
186
- });
187
- ffmpegProcess.kill('SIGTERM');
76
+ const recorder = await attachRecorder(page, {
77
+ path: outputPath,
78
+ autoStart: false,
79
+ size: { width, height },
80
+ fps,
81
+ jpegQuality: 100,
82
+ ffmpegArgs: [
83
+ '-c:v',
84
+ 'libx264',
85
+ '-preset',
86
+ 'fast',
87
+ '-crf',
88
+ `${crf}`,
89
+ '-pix_fmt',
90
+ 'yuv444p',
91
+ '-movflags',
92
+ 'frag_keyframe+empty_moov',
93
+ ],
188
94
  });
95
+ return recorder;
189
96
  }
190
- // Internal state for xvfb management (not exposed to users)
191
- let currentXvfb = null;
192
- let originalDisplay;
193
- // Track active ffmpeg processes so they can be killed if the process is
194
- // interrupted before the fixture teardown has a chance to stop them.
195
- const activeFFmpegProcesses = new Set();
196
- function killActiveFFmpegProcesses() {
197
- for (const proc of activeFFmpegProcesses) {
198
- try {
199
- proc.kill('SIGTERM');
200
- }
201
- catch { }
202
- }
203
- activeFFmpegProcesses.clear();
204
- }
205
- // Clean up Xvfb and any active ffmpeg processes when the worker process exits
206
- // so lock/socket files don't persist and block the next run.
207
- process.on('exit', () => {
208
- killActiveFFmpegProcesses();
209
- if (currentXvfb) {
210
- try {
211
- currentXvfb.process.kill('SIGTERM');
212
- }
213
- catch { }
214
- }
215
- });
216
- // Forward SIGTERM/SIGINT: clean up recorder processes, then re-raise the
217
- // original signal so parent processes treat the worker as interrupted.
218
- const handleTermSignal = (signal) => {
219
- killActiveFFmpegProcesses();
220
- if (currentXvfb) {
221
- try {
222
- currentXvfb.process.kill('SIGTERM');
223
- }
224
- catch { }
225
- }
226
- process.off('SIGTERM', handleSigterm);
227
- process.off('SIGINT', handleSigint);
228
- process.kill(process.pid, signal);
229
- };
230
- const handleSigterm = () => handleTermSignal('SIGTERM');
231
- const handleSigint = () => handleTermSignal('SIGINT');
232
- process.on('SIGTERM', handleSigterm);
233
- process.on('SIGINT', handleSigint);
234
97
  const _videoBase = base.extend({
235
98
  recordOptions: [DEFAULT_VIDEO_OPTIONS, { option: true }],
236
99
  renderOptions: [undefined, { option: true }],
237
- // Internal worker fixture to manage xvfb per test
238
- _xvfbSetup: [
239
- async ({ recordOptions: _recordOptions }, use) => {
240
- const shouldRecord = process.env.SCREENCI_RECORD === 'true';
241
- if (shouldRecord && !currentXvfb && isHeadless()) {
242
- // Start Xvfb once per worker at 3840×3840 — a square large enough to
243
- // contain any quality/aspect-ratio combination. Per-test sizing is
244
- // handled by the Playwright viewport override and the FFmpeg capture
245
- // region. The framebuffer costs ~56 MB of RAM, negligible on any runner.
246
- logger.info('Starting Xvfb at 3840×3840');
247
- currentXvfb = await startXvfb(3840, 3840);
248
- logger.info(`Xvfb started on ${currentXvfb.display}`);
249
- if (originalDisplay === undefined) {
250
- originalDisplay = process.env.DISPLAY;
251
- }
252
- process.env.DISPLAY = currentXvfb.display;
253
- }
254
- await use();
255
- // Xvfb stays alive between tests — cleanup happens on process exit.
256
- },
257
- { scope: 'test', auto: true },
258
- ],
259
100
  browser: async ({ playwright }, use) => {
260
- // Launch browser with kiosk mode when recording for fullscreen capture
261
- // Note: _xvfbSetup runs automatically before this due to auto: true
262
- const shouldRecord = process.env.SCREENCI_RECORD === 'true';
101
+ const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
263
102
  const launchOptions = getChromiumLaunchOptions(shouldRecord);
264
103
  const browser = await playwright.chromium.launch(launchOptions);
265
104
  instrumentBrowser(browser);
@@ -268,20 +107,14 @@ const _videoBase = base.extend({
268
107
  await browser.close();
269
108
  }
270
109
  },
271
- context: async ({ browser, playwright, recordOptions }, use) => {
110
+ context: async ({ browser, recordOptions }, use) => {
272
111
  // Configure browser context
273
112
  const aspectRatio = recordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
274
113
  const quality = recordOptions.quality ?? DEFAULT_QUALITY;
275
114
  const dimensions = getDimensions(aspectRatio, quality);
276
- const shouldRecord = process.env.SCREENCI_RECORD === 'true';
115
+ const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
277
116
  if (shouldRecord) {
278
- if (browser.isConnected()) {
279
- await browser.close();
280
- }
281
- const profile = await createRecordingChromiumProfile();
282
- const launchOptions = getChromiumLaunchOptions(true);
283
- const context = await playwright.chromium.launchPersistentContext(profile.userDataDir, {
284
- ...launchOptions,
117
+ const context = await browser.newContext({
285
118
  locale: 'en-US',
286
119
  viewport: dimensions,
287
120
  });
@@ -291,7 +124,6 @@ const _videoBase = base.extend({
291
124
  }
292
125
  finally {
293
126
  await context.close();
294
- await profile.cleanup();
295
127
  }
296
128
  return;
297
129
  }
@@ -304,7 +136,7 @@ const _videoBase = base.extend({
304
136
  },
305
137
  page: async ({ context, recordOptions, renderOptions }, use, testInfo) => {
306
138
  // Only record when explicitly enabled (record command)
307
- const shouldRecord = process.env.SCREENCI_RECORD === 'true';
139
+ const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
308
140
  if (!shouldRecord) {
309
141
  // Skip recording, just create page
310
142
  resetCueChain();
@@ -338,8 +170,6 @@ const _videoBase = base.extend({
338
170
  await mkdir(videoDir, { recursive: true });
339
171
  // Video output path - always use recording.mp4
340
172
  const videoPath = join(videoDir, 'recording.mp4');
341
- logger.info(`Recording video to: ${videoPath}`);
342
- logger.info(`Recording with ${aspectRatio} ${quality} (${dimensions.width}x${dimensions.height}), ${fps}fps`);
343
173
  const recorder = new EventRecorder(renderOptions, recordOptions);
344
174
  resetCueChain();
345
175
  setActiveCueRecorder(recorder);
@@ -357,61 +187,31 @@ const _videoBase = base.extend({
357
187
  await page.waitForTimeout(1500);
358
188
  await validateCustomVoiceRefs(testInfo.file);
359
189
  await validateRegisteredAssetPaths(testInfo.file);
360
- // Hide browser toolbar via CDP fullscreen. --kiosk alone is not reliable on
361
- // Xvfb; the CDP call triggers Chromium's internal fullscreen mode which
362
- // removes all browser UI chrome. No explicit dims here — those conflict with
363
- // windowState and are not needed (FFmpeg captures from +0,0 at test dims).
190
+ const screenRecorder = await startScreencastRecording(page, videoPath, fps, quality, aspectRatio);
191
+ const viewportCenter = getViewportCenter(dimensions);
192
+ await page.mouse._move(viewportCenter.x, viewportCenter.y);
193
+ await screenRecorder.start();
194
+ // Mark the moment the video recording actually begins after the cursor is positioned.
195
+ recorder.start();
364
196
  try {
365
- const cdpSession = await context.newCDPSession(page);
366
- const { windowId } = await cdpSession.send('Browser.getWindowForTarget', {});
367
- await cdpSession.send('Browser.setWindowBounds', {
368
- windowId,
369
- bounds: { windowState: 'fullscreen' },
370
- });
371
- await cdpSession.detach();
372
- }
373
- catch (cdpError) {
374
- logger.warn('CDP fullscreen failed, toolbar may be visible:', cdpError);
375
- }
376
- // Start ffmpeg recording after browser window is ready
377
- const { process: ffmpegProcess, started } = startScreenRecording(videoPath, fps, quality, aspectRatio);
378
- // Wait for ffmpeg to start or fail
379
- const didStart = await started;
380
- if (didStart) {
381
- const viewportCenter = getViewportCenter(dimensions);
382
- await page.mouse._move(viewportCenter.x, viewportCenter.y);
383
- // Mark the moment the video recording actually begins after the cursor is positioned.
384
- recorder.start();
385
- }
386
- else {
387
- logger.warn('Screen recording failed to start. Test will continue without recording.');
388
- logger.warn(`Note: Recording at ${dimensions.width}x${dimensions.height} requires a display of at least that size.`);
389
- }
390
- await use(page);
391
- // Do not end video abruptly.
392
- await sleep(POST_VIDEO_PAUSE);
393
- // Stop ffmpeg BEFORE closing the page to avoid a black frame at the end
394
- if (didStart) {
395
- logger.info('Stopping recording...');
396
- await stopScreenRecording(ffmpegProcess);
397
- logger.info(`Video saved to: ${videoPath}`);
197
+ await use(page);
198
+ // Do not end video abruptly.
199
+ await sleep(POST_VIDEO_PAUSE);
398
200
  }
399
- else {
400
- // Kill the process if it's still running
401
- if (!ffmpegProcess.killed) {
402
- ffmpegProcess.kill('SIGKILL');
201
+ finally {
202
+ const stopResult = await screenRecorder.stop();
203
+ await screenRecorder.finalized;
204
+ if (!stopResult.written) {
205
+ logger.warn('Screen recording did not write any frames. Test will continue without recording.');
403
206
  }
404
- }
405
- await page.close();
406
- setActiveCueRecorder(null);
407
- setActiveClickRecorder(null);
408
- setActiveHideRecorder(null);
409
- setActiveAutoZoomRecorder(null);
410
- setActiveAssetRecorder(null);
411
- // Write recorded events next to the video
412
- if (didStart) {
207
+ await page.close();
208
+ setActiveCueRecorder(null);
209
+ setActiveClickRecorder(null);
210
+ setActiveHideRecorder(null);
211
+ setActiveAutoZoomRecorder(null);
212
+ setActiveAssetRecorder(null);
213
+ // Write recorded events next to the video
413
214
  await recorder.writeToFile(videoDir, testInfo.title);
414
- logger.info(`Events saved to: ${join(videoDir, 'data.json')}`);
415
215
  }
416
216
  },
417
217
  });
@@ -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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"}