@argo-video/cli 0.2.0 → 0.3.0
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 +47 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +24 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -3
- package/dist/config.js.map +1 -1
- package/dist/export.d.ts +8 -0
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +26 -3
- package/dist/export.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +12 -5
- package/dist/init.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +6 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/record.d.ts +3 -0
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +11 -1
- package/dist/record.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Write a demo script with Playwright. Add a voiceover manifest. Run one command.
|
|
|
17
17
|
|
|
18
18
|
## Showcase
|
|
19
19
|
|
|
20
|
-
[Watch the demo video](https://gist.github.com/user-attachments/assets/
|
|
20
|
+
[Watch the demo video](https://gist.github.com/user-attachments/assets/1344780c-75e4-40fc-ab4a-c9e546f8c2ea)
|
|
21
21
|
|
|
22
22
|
> *This demo was recorded by Argo, using Argo. Yes, really.*
|
|
23
23
|
|
|
@@ -64,22 +64,38 @@ A demo is two files: a **script** and a **voiceover manifest**.
|
|
|
64
64
|
|
|
65
65
|
```ts
|
|
66
66
|
import { test } from '@argo-video/cli';
|
|
67
|
-
import {
|
|
67
|
+
import { showOverlay, withOverlay } from '@argo-video/cli';
|
|
68
68
|
|
|
69
69
|
test('my-feature', async ({ page, narration }) => {
|
|
70
70
|
await page.goto('/');
|
|
71
71
|
|
|
72
72
|
narration.mark('intro');
|
|
73
|
-
await
|
|
73
|
+
await showOverlay(page, 'intro', {
|
|
74
|
+
type: 'lower-third',
|
|
75
|
+
text: 'Welcome to our product',
|
|
76
|
+
placement: 'bottom-center',
|
|
77
|
+
motion: 'fade-in',
|
|
78
|
+
autoBackground: true,
|
|
79
|
+
}, narration.durationFor('intro'));
|
|
74
80
|
|
|
75
81
|
narration.mark('action');
|
|
76
|
-
await
|
|
82
|
+
await withOverlay(page, 'action', {
|
|
83
|
+
type: 'headline-card',
|
|
84
|
+
title: 'Watch this',
|
|
85
|
+
placement: 'top-right',
|
|
86
|
+
motion: 'slide-in',
|
|
87
|
+
}, async () => {
|
|
77
88
|
await page.click('#get-started');
|
|
78
|
-
await page.waitForTimeout(
|
|
89
|
+
await page.waitForTimeout(narration.durationFor('action'));
|
|
79
90
|
});
|
|
80
91
|
|
|
81
92
|
narration.mark('done');
|
|
82
|
-
await
|
|
93
|
+
await showOverlay(page, 'done', {
|
|
94
|
+
type: 'callout',
|
|
95
|
+
text: "That's it!",
|
|
96
|
+
placement: 'top-left',
|
|
97
|
+
motion: 'fade-in',
|
|
98
|
+
}, narration.durationFor('done'));
|
|
83
99
|
});
|
|
84
100
|
```
|
|
85
101
|
|
|
@@ -105,17 +121,24 @@ export default {
|
|
|
105
121
|
demosDir: 'demos/',
|
|
106
122
|
outputDir: 'videos/',
|
|
107
123
|
tts: { defaultVoice: 'af_heart', defaultSpeed: 1.0 },
|
|
108
|
-
video: { width: 1920, height: 1080, fps: 30 },
|
|
109
|
-
export: { preset: 'slow', crf: 16 },
|
|
124
|
+
video: { width: 1920, height: 1080, fps: 30, browser: 'chromium', deviceScaleFactor: 1 },
|
|
125
|
+
export: { preset: 'slow', crf: 16, thumbnailPath: 'assets/logo-thumb.png' },
|
|
110
126
|
};
|
|
111
127
|
```
|
|
112
128
|
|
|
129
|
+
> **Tip:** Use `browser: 'webkit'` for sharper video on macOS. Chromium has a [known video capture quality issue](https://github.com/microsoft/playwright/issues/31424). Set `deviceScaleFactor: 2` for retina-quality recordings (captured at 2x, downscaled with lanczos in export).
|
|
130
|
+
|
|
113
131
|
### `playwright.config.ts`
|
|
114
132
|
|
|
115
133
|
Argo scaffolds this for you via `argo init`. The key settings:
|
|
116
134
|
|
|
117
135
|
```ts
|
|
118
136
|
import { defineConfig } from '@playwright/test';
|
|
137
|
+
import config from './argo.config.js';
|
|
138
|
+
|
|
139
|
+
const scale = Math.max(1, Math.round(config.video?.deviceScaleFactor ?? 1));
|
|
140
|
+
const width = config.video?.width ?? 1920;
|
|
141
|
+
const height = config.video?.height ?? 1080;
|
|
119
142
|
|
|
120
143
|
export default defineConfig({
|
|
121
144
|
preserveOutput: 'always',
|
|
@@ -124,9 +147,11 @@ export default defineConfig({
|
|
|
124
147
|
testDir: 'demos',
|
|
125
148
|
testMatch: '**/*.demo.ts',
|
|
126
149
|
use: {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
browserName: config.video?.browser ?? 'chromium',
|
|
151
|
+
baseURL: process.env.BASE_URL || config.baseURL || 'http://localhost:3000',
|
|
152
|
+
viewport: { width, height },
|
|
153
|
+
deviceScaleFactor: scale,
|
|
154
|
+
video: { mode: 'on', size: { width: width * scale, height: height * scale } },
|
|
130
155
|
},
|
|
131
156
|
}],
|
|
132
157
|
});
|
|
@@ -141,6 +166,9 @@ argo tts generate <manifest> Generate TTS clips from manifest
|
|
|
141
166
|
argo export <demo> Merge video + audio to MP4
|
|
142
167
|
argo pipeline <demo> Run all steps end-to-end
|
|
143
168
|
argo --config <path> <command> Use a custom config file
|
|
169
|
+
|
|
170
|
+
Options:
|
|
171
|
+
--browser <engine> chromium | webkit | firefox (overrides config)
|
|
144
172
|
```
|
|
145
173
|
|
|
146
174
|
## API
|
|
@@ -149,6 +177,7 @@ Argo exports Playwright fixtures and helpers for use in demo scripts:
|
|
|
149
177
|
|
|
150
178
|
```ts
|
|
151
179
|
import { test, expect, demoType } from '@argo-video/cli';
|
|
180
|
+
import { showOverlay, hideOverlay, withOverlay } from '@argo-video/cli';
|
|
152
181
|
import { showCaption, hideCaption, withCaption } from '@argo-video/cli';
|
|
153
182
|
import { defineConfig, demosProject } from '@argo-video/cli';
|
|
154
183
|
```
|
|
@@ -158,9 +187,14 @@ import { defineConfig, demosProject } from '@argo-video/cli';
|
|
|
158
187
|
| `test` | Playwright `test` with `narration` fixture injected |
|
|
159
188
|
| `expect` | Re-exported from Playwright |
|
|
160
189
|
| `demoType(page, selector, text, delay?)` | Type text character-by-character (cinematic) |
|
|
161
|
-
| `
|
|
190
|
+
| `showOverlay(page, scene, cue, durationMs)` | Show a templated overlay (lower-third, headline-card, callout, image-card) |
|
|
191
|
+
| `withOverlay(page, scene, cue, action)` | Show overlay during an async action |
|
|
192
|
+
| `hideOverlay(page, zone?)` | Remove overlay from a zone |
|
|
193
|
+
| `showCaption(page, scene, text, durationMs)` | Show a simple text caption |
|
|
162
194
|
| `withCaption(page, scene, text, action)` | Show caption during an async action |
|
|
163
|
-
| `hideCaption(page)` | Remove caption
|
|
195
|
+
| `hideCaption(page)` | Remove caption |
|
|
196
|
+
| `narration.mark(scene)` | Record a scene timestamp |
|
|
197
|
+
| `narration.durationFor(scene, opts?)` | Compute hold duration from TTS clip length |
|
|
164
198
|
| `defineConfig(userConfig)` | Create config with defaults |
|
|
165
199
|
| `demosProject(options)` | Create Playwright project entry |
|
|
166
200
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAgB5C,wBAAgB,aAAa,IAAI,OAAO,CAwFvC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
2
|
import { loadConfig } from './config.js';
|
|
3
3
|
import { record } from './record.js';
|
|
4
4
|
import { generateClips } from './tts/generate.js';
|
|
@@ -21,16 +21,20 @@ export function createProgram() {
|
|
|
21
21
|
program
|
|
22
22
|
.command('record <demo>')
|
|
23
23
|
.description('Record a demo using Playwright')
|
|
24
|
-
.
|
|
24
|
+
.addOption(new Option('--browser <engine>', 'browser engine').choices(['chromium', 'webkit', 'firefox']))
|
|
25
|
+
.action(async (demo, cmdOpts) => {
|
|
25
26
|
const configPath = program.opts().config;
|
|
26
27
|
const config = await loadConfig(process.cwd(), configPath);
|
|
27
28
|
if (!config.baseURL) {
|
|
28
29
|
throw new Error('baseURL is required but not set. Set it in argo.config.js or pass --config.');
|
|
29
30
|
}
|
|
31
|
+
const browser = cmdOpts.browser ?? config.video.browser;
|
|
30
32
|
await record(demo, {
|
|
31
33
|
demosDir: config.demosDir,
|
|
32
34
|
baseURL: config.baseURL,
|
|
33
35
|
video: { width: config.video.width, height: config.video.height },
|
|
36
|
+
browser,
|
|
37
|
+
deviceScaleFactor: config.video.deviceScaleFactor,
|
|
34
38
|
});
|
|
35
39
|
});
|
|
36
40
|
const tts = program
|
|
@@ -63,14 +67,22 @@ export function createProgram() {
|
|
|
63
67
|
preset: config.export.preset,
|
|
64
68
|
crf: config.export.crf,
|
|
65
69
|
fps: config.video.fps,
|
|
70
|
+
outputWidth: config.video.width,
|
|
71
|
+
outputHeight: config.video.height,
|
|
72
|
+
deviceScaleFactor: config.video.deviceScaleFactor,
|
|
73
|
+
thumbnailPath: config.export.thumbnailPath,
|
|
66
74
|
});
|
|
67
75
|
});
|
|
68
76
|
program
|
|
69
77
|
.command('pipeline <demo>')
|
|
70
78
|
.description('Run the full pipeline: TTS → record → export')
|
|
71
|
-
.
|
|
79
|
+
.addOption(new Option('--browser <engine>', 'browser engine').choices(['chromium', 'webkit', 'firefox']))
|
|
80
|
+
.action(async (demo, cmdOpts) => {
|
|
72
81
|
const configPath = program.opts().config;
|
|
73
|
-
const
|
|
82
|
+
const loaded = await ensureTTSEngine(await loadConfig(process.cwd(), configPath));
|
|
83
|
+
const config = cmdOpts.browser
|
|
84
|
+
? { ...loaded, video: { ...loaded.video, browser: cmdOpts.browser } }
|
|
85
|
+
: loaded;
|
|
74
86
|
await runPipeline(demo, config);
|
|
75
87
|
});
|
|
76
88
|
program
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -5,14 +5,18 @@ export interface TTSConfig {
|
|
|
5
5
|
defaultSpeed: number;
|
|
6
6
|
engine?: TTSEngine;
|
|
7
7
|
}
|
|
8
|
+
export type BrowserEngine = 'chromium' | 'webkit' | 'firefox';
|
|
8
9
|
export interface VideoConfig {
|
|
9
10
|
width: number;
|
|
10
11
|
height: number;
|
|
11
12
|
fps: number;
|
|
13
|
+
browser: BrowserEngine;
|
|
14
|
+
deviceScaleFactor: number;
|
|
12
15
|
}
|
|
13
16
|
export interface ExportConfig {
|
|
14
17
|
preset: string;
|
|
15
18
|
crf: number;
|
|
19
|
+
thumbnailPath?: string;
|
|
16
20
|
}
|
|
17
21
|
export interface OverlayConfig {
|
|
18
22
|
autoBackground: boolean;
|
|
@@ -32,17 +36,36 @@ export type UserConfig = Partial<Omit<ArgoConfig, 'tts' | 'video' | 'export' | '
|
|
|
32
36
|
export: Partial<ExportConfig>;
|
|
33
37
|
overlays: Partial<OverlayConfig>;
|
|
34
38
|
}>;
|
|
39
|
+
export declare function normalizeDeviceScaleFactor(rawScale?: number): number;
|
|
35
40
|
export declare function defineConfig(userConfig: UserConfig): ArgoConfig;
|
|
36
41
|
export declare function demosProject(options: {
|
|
37
42
|
baseURL: string;
|
|
38
43
|
demosDir?: string;
|
|
44
|
+
browser?: BrowserEngine;
|
|
45
|
+
deviceScaleFactor?: number;
|
|
46
|
+
video?: {
|
|
47
|
+
width: number;
|
|
48
|
+
height: number;
|
|
49
|
+
};
|
|
39
50
|
}): {
|
|
40
51
|
name: string;
|
|
41
52
|
testDir: string;
|
|
42
53
|
testMatch: string;
|
|
43
54
|
use: {
|
|
55
|
+
browserName: BrowserEngine;
|
|
44
56
|
baseURL: string;
|
|
45
|
-
|
|
57
|
+
viewport: {
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
60
|
+
};
|
|
61
|
+
deviceScaleFactor: number;
|
|
62
|
+
video: {
|
|
63
|
+
mode: "on";
|
|
64
|
+
size: {
|
|
65
|
+
width: number;
|
|
66
|
+
height: number;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
46
69
|
};
|
|
47
70
|
};
|
|
48
71
|
export declare function loadConfig(cwd: string, explicitPath?: string): Promise<ArgoConfig>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,CAAC;AAI1B,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,CAAC;AAI1B,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAC9B,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GAAG;IAC1D,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC,CACF,CAAC;AAeF,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAe/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;;;;;;;;;;;;;;;;;;;;EAmBA;AAkBD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CA0BrB"}
|
package/dist/config.js
CHANGED
|
@@ -6,29 +6,47 @@ const DEFAULTS = {
|
|
|
6
6
|
demosDir: 'demos',
|
|
7
7
|
outputDir: 'videos',
|
|
8
8
|
tts: { defaultVoice: 'af_heart', defaultSpeed: 1.0 },
|
|
9
|
-
video: { width: 1920, height: 1080, fps: 30 },
|
|
9
|
+
video: { width: 1920, height: 1080, fps: 30, browser: 'chromium', deviceScaleFactor: 1 },
|
|
10
10
|
export: { preset: 'slow', crf: 16 },
|
|
11
11
|
overlays: { autoBackground: false },
|
|
12
12
|
};
|
|
13
13
|
// ---- Functions ----
|
|
14
|
+
export function normalizeDeviceScaleFactor(rawScale) {
|
|
15
|
+
const scale = typeof rawScale === 'number' && Number.isFinite(rawScale) ? rawScale : 1;
|
|
16
|
+
return Math.max(1, Math.round(scale));
|
|
17
|
+
}
|
|
14
18
|
export function defineConfig(userConfig) {
|
|
19
|
+
const video = {
|
|
20
|
+
...DEFAULTS.video,
|
|
21
|
+
...userConfig.video,
|
|
22
|
+
};
|
|
23
|
+
video.deviceScaleFactor = normalizeDeviceScaleFactor(video.deviceScaleFactor);
|
|
15
24
|
return {
|
|
16
25
|
...DEFAULTS,
|
|
17
26
|
...userConfig,
|
|
18
27
|
tts: { ...DEFAULTS.tts, ...userConfig.tts },
|
|
19
|
-
video
|
|
28
|
+
video,
|
|
20
29
|
export: { ...DEFAULTS.export, ...userConfig.export },
|
|
21
30
|
overlays: { ...DEFAULTS.overlays, ...userConfig.overlays },
|
|
22
31
|
};
|
|
23
32
|
}
|
|
24
33
|
export function demosProject(options) {
|
|
34
|
+
const scale = normalizeDeviceScaleFactor(options.deviceScaleFactor);
|
|
35
|
+
const width = options.video?.width ?? 1920;
|
|
36
|
+
const height = options.video?.height ?? 1080;
|
|
25
37
|
return {
|
|
26
38
|
name: 'demos',
|
|
27
39
|
testDir: options.demosDir ?? 'demos',
|
|
28
40
|
testMatch: '**/*.demo.ts',
|
|
29
41
|
use: {
|
|
42
|
+
browserName: options.browser ?? 'chromium',
|
|
30
43
|
baseURL: options.baseURL,
|
|
31
|
-
|
|
44
|
+
viewport: { width, height },
|
|
45
|
+
deviceScaleFactor: scale,
|
|
46
|
+
video: {
|
|
47
|
+
mode: 'on',
|
|
48
|
+
size: { width: width * scale, height: height * scale },
|
|
49
|
+
},
|
|
32
50
|
},
|
|
33
51
|
};
|
|
34
52
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/export.d.ts
CHANGED
|
@@ -6,6 +6,14 @@ export interface ExportOptions {
|
|
|
6
6
|
crf?: number;
|
|
7
7
|
fps?: number;
|
|
8
8
|
tailPadMs?: number;
|
|
9
|
+
/** Logical output width (e.g. 1920). Used with deviceScaleFactor for downscaling. */
|
|
10
|
+
outputWidth?: number;
|
|
11
|
+
/** Logical output height (e.g. 1080). Used with deviceScaleFactor for downscaling. */
|
|
12
|
+
outputHeight?: number;
|
|
13
|
+
/** When > 1, recording was captured at scaled resolution and needs lanczos downscale. */
|
|
14
|
+
deviceScaleFactor?: number;
|
|
15
|
+
/** Optional path to a PNG image to embed as the MP4 thumbnail (cover art). */
|
|
16
|
+
thumbnailPath?: string;
|
|
9
17
|
}
|
|
10
18
|
/**
|
|
11
19
|
* Check whether ffmpeg is available on the system PATH.
|
package/dist/export.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAYrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA+FzE"}
|
package/dist/export.js
CHANGED
|
@@ -24,7 +24,7 @@ export function checkFfmpeg() {
|
|
|
24
24
|
* Export a demo to MP4 by combining the screen recording with aligned narration audio.
|
|
25
25
|
*/
|
|
26
26
|
export async function exportVideo(options) {
|
|
27
|
-
const { demoName, argoDir, outputDir, preset = 'slow', crf = 16, fps, tailPadMs, } = options;
|
|
27
|
+
const { demoName, argoDir, outputDir, preset = 'slow', crf = 16, fps, tailPadMs, outputWidth, outputHeight, deviceScaleFactor = 1, thumbnailPath, } = options;
|
|
28
28
|
checkFfmpeg();
|
|
29
29
|
const demoDir = join(argoDir, demoName);
|
|
30
30
|
const videoPath = join(demoDir, 'video.webm');
|
|
@@ -39,18 +39,41 @@ export async function exportVideo(options) {
|
|
|
39
39
|
mkdirSync(outputDir, { recursive: true });
|
|
40
40
|
}
|
|
41
41
|
const outputPath = join(outputDir, `${demoName}.mp4`);
|
|
42
|
+
const hasThumbnail = thumbnailPath && existsSync(thumbnailPath);
|
|
42
43
|
const args = [
|
|
43
44
|
'-i', videoPath,
|
|
44
45
|
'-i', audioPath,
|
|
45
46
|
];
|
|
47
|
+
if (hasThumbnail) {
|
|
48
|
+
args.push('-i', thumbnailPath);
|
|
49
|
+
}
|
|
50
|
+
// Build video filter chain
|
|
51
|
+
const vFilters = [];
|
|
46
52
|
if (tailPadMs && tailPadMs > 0) {
|
|
47
|
-
|
|
53
|
+
vFilters.push(`tpad=stop_mode=clone:stop_duration=${formatSeconds(tailPadMs)}`);
|
|
54
|
+
}
|
|
55
|
+
if (deviceScaleFactor > 1 && outputWidth && outputHeight) {
|
|
56
|
+
vFilters.push(`scale=${outputWidth}:${outputHeight}:flags=lanczos`);
|
|
57
|
+
}
|
|
58
|
+
if (vFilters.length > 0) {
|
|
59
|
+
args.push('-vf', vFilters.join(','));
|
|
48
60
|
}
|
|
49
61
|
args.push('-c:v', 'libx264', '-preset', preset, '-crf', String(crf), '-c:a', 'aac', '-b:a', '192k');
|
|
50
62
|
if (fps !== undefined) {
|
|
51
63
|
args.push('-r', String(fps));
|
|
52
64
|
}
|
|
53
|
-
|
|
65
|
+
if (hasThumbnail) {
|
|
66
|
+
// Map video, audio, and thumbnail streams explicitly
|
|
67
|
+
args.push('-map', '0:v', '-map', '1:a', '-map', '2:v');
|
|
68
|
+
// Encode thumbnail stream as PNG attached picture
|
|
69
|
+
args.push('-c:v:1', 'png', '-disposition:v:1', 'attached_pic');
|
|
70
|
+
// Skip -shortest: the PNG has 0 duration and would truncate the whole output.
|
|
71
|
+
// Audio and video are already aligned by the pipeline.
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
args.push('-shortest');
|
|
75
|
+
}
|
|
76
|
+
args.push('-y', outputPath);
|
|
54
77
|
const result = spawnSync('ffmpeg', args, { stdio: 'inherit' });
|
|
55
78
|
if (result.error) {
|
|
56
79
|
throw new Error(`Failed to launch ffmpeg: ${result.error.message}`);
|
package/dist/export.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AA0GA,wBAAsB,IAAI,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE"}
|
package/dist/init.js
CHANGED
|
@@ -58,11 +58,16 @@ const ARGO_CONFIG = `export default {
|
|
|
58
58
|
demosDir: 'demos/',
|
|
59
59
|
outputDir: 'videos/',
|
|
60
60
|
tts: { defaultVoice: 'af_heart', defaultSpeed: 1.0 },
|
|
61
|
-
video: { width: 1920, height: 1080, fps: 30 },
|
|
62
|
-
export: { preset: 'slow', crf: 16 },
|
|
61
|
+
video: { width: 1920, height: 1080, fps: 30, browser: 'chromium', deviceScaleFactor: 1 },
|
|
62
|
+
export: { preset: 'slow', crf: 16, thumbnailPath: 'assets/logo-thumb.png' },
|
|
63
63
|
};
|
|
64
64
|
`;
|
|
65
65
|
const PLAYWRIGHT_CONFIG = `import { defineConfig } from '@playwright/test';
|
|
66
|
+
import config from './argo.config.js';
|
|
67
|
+
|
|
68
|
+
const scale = Math.max(1, Math.round(config.video?.deviceScaleFactor ?? 1));
|
|
69
|
+
const width = config.video?.width ?? 1920;
|
|
70
|
+
const height = config.video?.height ?? 1080;
|
|
66
71
|
|
|
67
72
|
export default defineConfig({
|
|
68
73
|
preserveOutput: 'always',
|
|
@@ -72,11 +77,13 @@ export default defineConfig({
|
|
|
72
77
|
testDir: 'demos',
|
|
73
78
|
testMatch: '**/*.demo.ts',
|
|
74
79
|
use: {
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
browserName: config.video?.browser ?? 'chromium',
|
|
81
|
+
baseURL: process.env.BASE_URL || config.baseURL || 'http://localhost:3000',
|
|
82
|
+
viewport: { width, height },
|
|
83
|
+
deviceScaleFactor: scale,
|
|
77
84
|
video: {
|
|
78
85
|
mode: 'on',
|
|
79
|
-
size: { width:
|
|
86
|
+
size: { width: width * scale, height: height * scale },
|
|
80
87
|
},
|
|
81
88
|
},
|
|
82
89
|
},
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,mBAAmB,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CACtC;IACE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,8CAA8C,EAAE;IAC1E,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yCAAyC,EAAE;IACpE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,UAAU,EAAE;CAC7E,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CAAC;AAET,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CACrC;IACE;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,oBAAoB;KAC3B;IACD;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,uCAAuC;QAC7C,MAAM,EAAE,UAAU;KACnB;CACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CAAC;AAET,MAAM,WAAW,GAAG;;;;;;;;CAQnB,CAAC;AAEF,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0B9C,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GACvG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0B9C,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GACvG,OAAO,CAAC,MAAM,CAAC,CA2GjB"}
|
package/dist/pipeline.js
CHANGED
|
@@ -57,6 +57,8 @@ export async function runPipeline(demoName, config) {
|
|
|
57
57
|
demosDir: config.demosDir,
|
|
58
58
|
baseURL: config.baseURL,
|
|
59
59
|
video: { width: config.video.width, height: config.video.height },
|
|
60
|
+
browser: config.video.browser,
|
|
61
|
+
deviceScaleFactor: config.video.deviceScaleFactor,
|
|
60
62
|
autoBackground: config.overlays.autoBackground,
|
|
61
63
|
});
|
|
62
64
|
// Step 3: Align clips with timing
|
|
@@ -99,6 +101,10 @@ export async function runPipeline(demoName, config) {
|
|
|
99
101
|
preset: config.export.preset,
|
|
100
102
|
crf: config.export.crf,
|
|
101
103
|
fps: config.video.fps,
|
|
104
|
+
outputWidth: config.video.width,
|
|
105
|
+
outputHeight: config.video.height,
|
|
106
|
+
deviceScaleFactor: config.video.deviceScaleFactor,
|
|
107
|
+
thumbnailPath: config.export.thumbnailPath,
|
|
102
108
|
};
|
|
103
109
|
if (tailPadMs !== undefined)
|
|
104
110
|
exportOptions.tailPadMs = tailPadMs;
|
package/dist/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAmC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGvD,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAChB,SAAS,EACT,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAChF,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,qCAAqC,SAAS,IAAI;YAClD,8DAA8D;YAC9D,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAC5C,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,SAAS,SAAS,kCAAkC,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,MAAwG;IAExG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAExC,6BAA6B;IAC7B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;QACtC,YAAY,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,iBAAiB;QAC7D,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM;QACzB,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;KAC7E,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,oCAAoC,MAAM,CAAC,QAAQ,IAAI,QAAQ,mBAAmB;YAClF,kDAAkD,CACnD,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,MAAM,cAAc,GAA2B,EAAE,CAAC;IAClD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;IAC3C,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAClE,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAEpF,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE;QAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QACjE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;QAC7B,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACjD,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc;KAC/C,CAAC,CAAC;IAEH,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1E,6BAA6B;IAC7B,MAAM,KAAK,GAAe,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,8CAA8C;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAClE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtF,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAC3D,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CACV,0BAA0B,OAAO,CAAC,UAAU,yBAAyB;YACrE,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,MAAM,aAAa,GAAsC;QACvD,QAAQ;QACR,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;QACtB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;QACrB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;QAC/B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QACjC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACjD,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;KAC3C,CAAC;IACF,IAAI,SAAS,KAAK,SAAS;QAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/record.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type BrowserEngine } from './config.js';
|
|
1
2
|
export interface RecordOptions {
|
|
2
3
|
demosDir: string;
|
|
3
4
|
baseURL: string;
|
|
@@ -5,6 +6,8 @@ export interface RecordOptions {
|
|
|
5
6
|
width: number;
|
|
6
7
|
height: number;
|
|
7
8
|
};
|
|
9
|
+
browser?: BrowserEngine;
|
|
10
|
+
deviceScaleFactor?: number;
|
|
8
11
|
autoBackground?: boolean;
|
|
9
12
|
}
|
|
10
13
|
export interface RecordResult {
|
package/dist/record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAKA,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAmDD,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2E5F"}
|
package/dist/record.js
CHANGED
|
@@ -3,6 +3,7 @@ import { mkdirSync, readdirSync, copyFileSync, existsSync, rmSync, writeFileSync
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { startAssetServer } from './asset-server.js';
|
|
5
5
|
import { loadOverlayManifest, hasImageAssets } from './overlays/manifest.js';
|
|
6
|
+
import { normalizeDeviceScaleFactor } from './config.js';
|
|
6
7
|
function findVideoInResults(testResultsDir) {
|
|
7
8
|
if (!existsSync(testResultsDir))
|
|
8
9
|
return undefined;
|
|
@@ -17,6 +18,13 @@ function findVideoInResults(testResultsDir) {
|
|
|
17
18
|
function createPlaywrightConfig(options, outputDir) {
|
|
18
19
|
const demosDir = path.resolve(options.demosDir);
|
|
19
20
|
const { width, height } = options.video;
|
|
21
|
+
const browser = options.browser ?? 'chromium';
|
|
22
|
+
const deviceScaleFactor = normalizeDeviceScaleFactor(options.deviceScaleFactor);
|
|
23
|
+
// When using a non-default scale factor, record at the scaled resolution
|
|
24
|
+
// so Playwright captures every physical pixel. The export step will
|
|
25
|
+
// downscale back to the logical resolution with a high-quality filter.
|
|
26
|
+
const captureWidth = width * deviceScaleFactor;
|
|
27
|
+
const captureHeight = height * deviceScaleFactor;
|
|
20
28
|
return `import { defineConfig } from '@playwright/test';
|
|
21
29
|
|
|
22
30
|
export default defineConfig({
|
|
@@ -28,11 +36,13 @@ export default defineConfig({
|
|
|
28
36
|
testDir: ${JSON.stringify(demosDir)},
|
|
29
37
|
testMatch: '**/*.demo.ts',
|
|
30
38
|
use: {
|
|
39
|
+
browserName: ${JSON.stringify(browser)},
|
|
31
40
|
baseURL: ${JSON.stringify(options.baseURL)},
|
|
32
41
|
viewport: { width: ${width}, height: ${height} },
|
|
42
|
+
deviceScaleFactor: ${deviceScaleFactor},
|
|
33
43
|
video: {
|
|
34
44
|
mode: 'on',
|
|
35
|
-
size: { width: ${
|
|
45
|
+
size: { width: ${captureWidth}, height: ${captureHeight} },
|
|
36
46
|
},
|
|
37
47
|
},
|
|
38
48
|
},
|
package/dist/record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAsB,MAAM,aAAa,CAAC;AAgB7E,SAAS,kBAAkB,CAAC,cAAsB;IAChD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAsB,EAAE,SAAiB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC;IAC9C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEhF,yEAAyE;IACzE,oEAAoE;IACpE,uEAAuE;IACvE,MAAM,YAAY,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,GAAG,iBAAiB,CAAC;IAEjD,OAAO;;;;eAIM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;iBAIvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;uBAGlB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;mBAC3B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;6BACrB,KAAK,aAAa,MAAM;6BACxB,iBAAiB;;;2BAGnB,YAAY,aAAa,aAAa;;;;;;CAMhE,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,OAAsB;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAE5E,aAAa,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IAE1F,sDAAsD;IACtD,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,0DAA0D;IAC1D,IAAI,WAAoC,CAAC;IACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,QAAQ,gBAAgB,CAAC,CAAC;IACrF,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACtE,IAAI,cAAc,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvD,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4DAA4D;QAC5D,0FAA0F;QAC1F,oCAAoC;QACpC,OAAO,CAAC,IAAI,CAAC,8CAA+C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;gBAC9G,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,cAAc,EAAE,QAAQ;oBACxB,eAAe,EAAE,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,OAAO;oBACzB,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE;oBACtC,oBAAoB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACvD,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;iBAC/F;aACF,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC3B,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC7D,OAAO;gBACT,CAAC;gBAED,+DAA+D;gBAC/D,MAAM,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACjD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,KAAK,CACd,6CAA6C;wBAC7C,uEAAuE,CACxE,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAE/B,0DAA0D;gBAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,KAAK,CACd,2BAA2B,UAAU,IAAI;wBACzC,yEAAyE,CAC1E,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,WAAW;YAAE,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC"}
|