@argo-video/cli 0.7.1 → 0.9.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 +28 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +12 -3
- package/dist/cli.js.map +1 -1
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +55 -2
- package/dist/init.js.map +1 -1
- package/dist/parse-playwright.d.ts +49 -0
- package/dist/parse-playwright.d.ts.map +1 -0
- package/dist/parse-playwright.js +265 -0
- package/dist/parse-playwright.js.map +1 -0
- package/dist/tts/engines/mlx-audio.d.ts +31 -0
- package/dist/tts/engines/mlx-audio.d.ts.map +1 -1
- package/dist/tts/engines/mlx-audio.js +47 -5
- package/dist/tts/engines/mlx-audio.js.map +1 -1
- package/dist/tts/engines/sarvam.d.ts.map +1 -1
- package/dist/tts/engines/sarvam.js +20 -23
- package/dist/tts/engines/sarvam.js.map +1 -1
- package/package.json +9 -2
- package/scripts/generate_logo_thumbnail.py +174 -0
- package/scripts/record-voice-ref.sh +87 -0
- package/scripts/setup-mlx-audio.sh +66 -0
- package/scripts/voice-clone-preview.sh +193 -0
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Write a demo script with Playwright. Add a voiceover manifest. Run one command.
|
|
|
20
20
|
## Showcase
|
|
21
21
|
|
|
22
22
|
[Watch the demo video](
|
|
23
|
-
https://gist.github.com/user-attachments/assets/
|
|
23
|
+
https://gist.github.com/user-attachments/assets/ba009e90-0310-454b-833e-e0d71d4dd72f)
|
|
24
24
|
|
|
25
25
|
> *This demo was recorded by Argo, using Argo. Yes, really.*
|
|
26
26
|
|
|
@@ -47,8 +47,9 @@ npm i -D @argo-video/cli
|
|
|
47
47
|
# Initialize project
|
|
48
48
|
npx argo init
|
|
49
49
|
|
|
50
|
-
# Edit your demo script
|
|
50
|
+
# Edit your demo script (or convert an existing Playwright test)
|
|
51
51
|
vim demos/example.demo.ts
|
|
52
|
+
npx argo init --from tests/checkout.spec.ts # auto-convert
|
|
52
53
|
|
|
53
54
|
# Run the full pipeline
|
|
54
55
|
npx argo pipeline example
|
|
@@ -174,6 +175,7 @@ export default defineConfig({
|
|
|
174
175
|
|
|
175
176
|
```
|
|
176
177
|
argo init Scaffold demo files + config
|
|
178
|
+
argo init --from <test> Convert Playwright test to Argo demo
|
|
177
179
|
argo record <demo> Record browser session
|
|
178
180
|
argo tts generate <manifest> Generate TTS clips from manifest
|
|
179
181
|
argo export <demo> Merge video + audio to MP4
|
|
@@ -254,7 +256,30 @@ choco install ffmpeg # Windows
|
|
|
254
256
|
| `engines.openai()` | cloud | `npm i openai` | `OPENAI_API_KEY` |
|
|
255
257
|
| `engines.elevenlabs()` | cloud | `npm i elevenlabs` | `ELEVENLABS_API_KEY` |
|
|
256
258
|
| `engines.gemini()` | cloud | `npm i @google/genai` | `GEMINI_API_KEY` |
|
|
257
|
-
| `engines.sarvam()` | cloud |
|
|
259
|
+
| `engines.sarvam()` | cloud | `npm i sarvamai` | `SARVAM_API_KEY` |
|
|
260
|
+
|
|
261
|
+
**Voice cloning** — Clone your own voice locally with mlx-audio. Record a 15-second clip, and every demo sounds like you — privately, no data leaves your machine:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
# Record a reference clip (macOS)
|
|
265
|
+
bash $(npm root)/@argo-video/cli/scripts/record-voice-ref.sh assets/ref-voice.wav
|
|
266
|
+
|
|
267
|
+
# Preview cloned voice against your manifest
|
|
268
|
+
bash $(npm root)/@argo-video/cli/scripts/voice-clone-preview.sh \
|
|
269
|
+
--ref-audio assets/ref-voice.wav \
|
|
270
|
+
--ref-text "Transcript of what I said." \
|
|
271
|
+
--voiceover demos/showcase.voiceover.json --play
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
```js
|
|
275
|
+
tts: {
|
|
276
|
+
engine: engines.mlxAudio({
|
|
277
|
+
model: 'mlx-community/Qwen3-TTS-12Hz-0.6B-Base-bf16',
|
|
278
|
+
refAudio: './assets/ref-voice.wav',
|
|
279
|
+
refText: 'Transcript of what I said in the clip.',
|
|
280
|
+
}),
|
|
281
|
+
}
|
|
282
|
+
```
|
|
258
283
|
|
|
259
284
|
2. **Record** — Playwright runs the demo script in a real browser. The `narration` fixture records timestamps for each `mark()` call. Video is captured at native resolution.
|
|
260
285
|
|
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,EAAU,MAAM,WAAW,CAAC;AA4B5C,wBAAgB,aAAa,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA4B5C,wBAAgB,aAAa,IAAI,OAAO,CAiJvC"}
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ import { record } from './record.js';
|
|
|
5
5
|
import { generateClips } from './tts/generate.js';
|
|
6
6
|
import { exportVideo } from './export.js';
|
|
7
7
|
import { runPipeline } from './pipeline.js';
|
|
8
|
-
import { init } from './init.js';
|
|
8
|
+
import { init, initFrom } from './init.js';
|
|
9
9
|
import { validateDemo } from './validate.js';
|
|
10
10
|
import { runDoctor, formatDoctorResults } from './doctor.js';
|
|
11
11
|
function validateDemoName(name) {
|
|
@@ -146,8 +146,17 @@ export function createProgram() {
|
|
|
146
146
|
program
|
|
147
147
|
.command('init')
|
|
148
148
|
.description('Initialize a new Argo project')
|
|
149
|
-
.
|
|
150
|
-
|
|
149
|
+
.option('--from <path>', 'convert an existing Playwright test into an Argo demo')
|
|
150
|
+
.option('--demo <name>', 'demo name (defaults to filename without extension)')
|
|
151
|
+
.action(async (cmdOpts) => {
|
|
152
|
+
if (cmdOpts.from) {
|
|
153
|
+
if (cmdOpts.demo)
|
|
154
|
+
validateDemoName(cmdOpts.demo);
|
|
155
|
+
await initFrom({ from: cmdOpts.from, demo: cmdOpts.demo });
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
await init();
|
|
159
|
+
}
|
|
151
160
|
});
|
|
152
161
|
return program;
|
|
153
162
|
}
|
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,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAuC,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
1
|
export declare function init(cwd?: string): Promise<void>;
|
|
2
|
+
export interface InitFromOptions {
|
|
3
|
+
/** Path to the Playwright test file to convert. */
|
|
4
|
+
from: string;
|
|
5
|
+
/** Demo name override. Defaults to filename without extension. */
|
|
6
|
+
demo?: string;
|
|
7
|
+
/** Working directory. Defaults to process.cwd(). */
|
|
8
|
+
cwd?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Convert an existing Playwright test into an Argo demo project.
|
|
12
|
+
* Generates demo script (with fixture swap + mark() calls),
|
|
13
|
+
* skeleton voiceover.json (with _hint fields for LLM),
|
|
14
|
+
* and skeleton overlays.json.
|
|
15
|
+
*/
|
|
16
|
+
export declare function initFrom(options: InitFromOptions): Promise<void>;
|
|
2
17
|
//# sourceMappingURL=init.d.ts.map
|
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":"AAmJA,wBAAsB,IAAI,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAED,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DtE"}
|
package/dist/init.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { mkdir, writeFile, access } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
1
|
+
import { mkdir, writeFile, readFile, access } from 'node:fs/promises';
|
|
2
|
+
import { join, basename } from 'node:path';
|
|
3
|
+
import { parsePlaywrightTest, generateDemoScript, generateVoiceoverSkeleton, generateOverlaysSkeleton, } from './parse-playwright.js';
|
|
3
4
|
async function writeIfMissing(filePath, content) {
|
|
4
5
|
try {
|
|
5
6
|
await access(filePath);
|
|
@@ -138,4 +139,56 @@ export async function init(cwd = process.cwd()) {
|
|
|
138
139
|
console.log(' 2. Run: npx argo record example');
|
|
139
140
|
console.log(' 3. Run: npx argo pipeline example');
|
|
140
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Convert an existing Playwright test into an Argo demo project.
|
|
144
|
+
* Generates demo script (with fixture swap + mark() calls),
|
|
145
|
+
* skeleton voiceover.json (with _hint fields for LLM),
|
|
146
|
+
* and skeleton overlays.json.
|
|
147
|
+
*/
|
|
148
|
+
export async function initFrom(options) {
|
|
149
|
+
const cwd = options.cwd ?? process.cwd();
|
|
150
|
+
const source = await readFile(options.from, 'utf-8');
|
|
151
|
+
// Derive demo name from filename: checkout.spec.ts → checkout
|
|
152
|
+
// Sanitize to match CLI's demo name validation: [a-zA-Z0-9][a-zA-Z0-9_-]*
|
|
153
|
+
const rawName = options.demo ??
|
|
154
|
+
basename(options.from)
|
|
155
|
+
.replace(/\.(spec|test|demo)\.(ts|js|mjs)$/, '')
|
|
156
|
+
.replace(/\.(ts|js|mjs)$/, '');
|
|
157
|
+
const demoName = rawName
|
|
158
|
+
.replace(/[^a-zA-Z0-9_-]/g, '-') // replace invalid chars with hyphens
|
|
159
|
+
.replace(/^-+/, '') // strip leading hyphens
|
|
160
|
+
.replace(/-+/g, '-'); // collapse consecutive hyphens
|
|
161
|
+
if (!demoName || !/^[a-zA-Z0-9]/.test(demoName)) {
|
|
162
|
+
throw new Error(`Cannot derive a valid demo name from "${rawName}". ` +
|
|
163
|
+
`Use --demo <name> to specify one (letters, numbers, hyphens, underscores).`);
|
|
164
|
+
}
|
|
165
|
+
const parsed = parsePlaywrightTest(source);
|
|
166
|
+
if (parsed.scenes.length === 0) {
|
|
167
|
+
throw new Error(`No scenes detected in ${options.from}. The file should contain Playwright actions like page.goto(), page.click(), etc.`);
|
|
168
|
+
}
|
|
169
|
+
const demosDir = join(cwd, 'demos');
|
|
170
|
+
await mkdir(demosDir, { recursive: true });
|
|
171
|
+
// Generate demo script
|
|
172
|
+
const demoScript = generateDemoScript(parsed);
|
|
173
|
+
await writeIfMissing(join(demosDir, `${demoName}.demo.ts`), demoScript);
|
|
174
|
+
// Generate voiceover skeleton with hints
|
|
175
|
+
const voiceover = generateVoiceoverSkeleton(parsed);
|
|
176
|
+
const voiceoverJson = JSON.stringify(voiceover, null, 2) + '\n';
|
|
177
|
+
await writeIfMissing(join(demosDir, `${demoName}.voiceover.json`), voiceoverJson);
|
|
178
|
+
// Generate overlays skeleton
|
|
179
|
+
const overlays = generateOverlaysSkeleton(parsed);
|
|
180
|
+
const overlaysJson = JSON.stringify(overlays, null, 2) + '\n';
|
|
181
|
+
await writeIfMissing(join(demosDir, `${demoName}.overlays.json`), overlaysJson);
|
|
182
|
+
// Scaffold config files if they don't exist
|
|
183
|
+
await writeIfMissing(join(cwd, 'argo.config.mjs'), ARGO_CONFIG);
|
|
184
|
+
await writeIfMissing(join(cwd, 'playwright.config.ts'), PLAYWRIGHT_CONFIG);
|
|
185
|
+
console.log(`\nConverted ${options.from} → ${demoName} (${parsed.scenes.length} scenes)`);
|
|
186
|
+
console.log('\nNext steps:');
|
|
187
|
+
console.log(` 1. Fill in voiceover text: demos/${demoName}.voiceover.json`);
|
|
188
|
+
console.log(` (use _hint fields as context, then remove them)`);
|
|
189
|
+
console.log(` 2. Refine overlays: demos/${demoName}.overlays.json`);
|
|
190
|
+
console.log(` 3. Run: npx argo pipeline ${demoName}`);
|
|
191
|
+
console.log(`\nTip: Ask your LLM to "flesh out the voiceover for ${demoName}" — it can`);
|
|
192
|
+
console.log('read the _hint fields and write natural narration text for each scene.');
|
|
193
|
+
}
|
|
141
194
|
//# sourceMappingURL=init.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a Playwright test/script and extracts logical scene boundaries
|
|
3
|
+
* for converting into an Argo demo.
|
|
4
|
+
*/
|
|
5
|
+
export interface ParsedScene {
|
|
6
|
+
/** Auto-generated scene name (kebab-case). */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Lines of source code belonging to this scene. */
|
|
9
|
+
lines: string[];
|
|
10
|
+
/** Hint describing what happens in this scene (for LLM voiceover generation). */
|
|
11
|
+
hint: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ParsedPlaywrightTest {
|
|
14
|
+
/** The test/function name found in the source. */
|
|
15
|
+
testName: string;
|
|
16
|
+
/** Detected scenes with their source lines and hints. */
|
|
17
|
+
scenes: ParsedScene[];
|
|
18
|
+
/** Original source lines (for reference). */
|
|
19
|
+
sourceLines: string[];
|
|
20
|
+
/** Imports found in the original file. */
|
|
21
|
+
imports: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse a Playwright test file and extract scene boundaries.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parsePlaywrightTest(source: string): ParsedPlaywrightTest;
|
|
27
|
+
/**
|
|
28
|
+
* Generate an Argo demo script from a parsed Playwright test.
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateDemoScript(parsed: ParsedPlaywrightTest): string;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a skeleton voiceover manifest from parsed scenes.
|
|
33
|
+
* Includes _hint fields for LLM-assisted text generation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateVoiceoverSkeleton(parsed: ParsedPlaywrightTest): Array<{
|
|
36
|
+
scene: string;
|
|
37
|
+
text: string;
|
|
38
|
+
_hint: string;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Generate a skeleton overlays manifest from parsed scenes.
|
|
42
|
+
* Creates a lower-third for each scene as a starting point.
|
|
43
|
+
*/
|
|
44
|
+
export declare function generateOverlaysSkeleton(parsed: ParsedPlaywrightTest): Array<{
|
|
45
|
+
scene: string;
|
|
46
|
+
type: string;
|
|
47
|
+
text: string;
|
|
48
|
+
}>;
|
|
49
|
+
//# sourceMappingURL=parse-playwright.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-playwright.d.ts","sourceRoot":"","sources":["../src/parse-playwright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA8FD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA2ExE;AAmDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAqCvE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,oBAAoB,GAC3B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAMvD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,GAC3B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAMtD"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a Playwright test/script and extracts logical scene boundaries
|
|
3
|
+
* for converting into an Argo demo.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Pattern matchers for scene boundary detection.
|
|
7
|
+
* Each returns a scene name suggestion and hint text if the line matches.
|
|
8
|
+
*/
|
|
9
|
+
const BOUNDARY_PATTERNS = [
|
|
10
|
+
// test.step('name', ...) — explicit steps are the strongest signal
|
|
11
|
+
{
|
|
12
|
+
regex: /test\.step\(\s*(['"`])(.+?)\1/,
|
|
13
|
+
sceneName: (m) => slugify(m[2]),
|
|
14
|
+
hint: (m) => `test.step: ${m[2]}`,
|
|
15
|
+
alwaysBoundary: true,
|
|
16
|
+
},
|
|
17
|
+
// page.goto(url)
|
|
18
|
+
{
|
|
19
|
+
regex: /page\.goto\(\s*(['"`])(.+?)\1/,
|
|
20
|
+
sceneName: (m) => slugifyUrl(m[2]),
|
|
21
|
+
hint: (_m, line) => line.trim(),
|
|
22
|
+
alwaysBoundary: true,
|
|
23
|
+
},
|
|
24
|
+
// page.goto(variable/expression)
|
|
25
|
+
{
|
|
26
|
+
regex: /page\.goto\((.+?)\)/,
|
|
27
|
+
sceneName: () => 'navigate',
|
|
28
|
+
hint: (_m, line) => line.trim(),
|
|
29
|
+
alwaysBoundary: true,
|
|
30
|
+
},
|
|
31
|
+
// // Comment lines — strong candidate for scene label
|
|
32
|
+
{
|
|
33
|
+
regex: /^\s*\/\/\s*(.+)/,
|
|
34
|
+
sceneName: (m) => slugify(m[1]),
|
|
35
|
+
hint: (m) => `comment: ${m[1].trim()}`,
|
|
36
|
+
alwaysBoundary: true,
|
|
37
|
+
},
|
|
38
|
+
// page.click / locator.click
|
|
39
|
+
{
|
|
40
|
+
regex: /\.click\(/,
|
|
41
|
+
sceneName: () => 'click-action',
|
|
42
|
+
hint: (_m, line) => line.trim(),
|
|
43
|
+
alwaysBoundary: false,
|
|
44
|
+
},
|
|
45
|
+
// page.fill / locator.fill
|
|
46
|
+
{
|
|
47
|
+
regex: /\.fill\(/,
|
|
48
|
+
sceneName: () => 'form-input',
|
|
49
|
+
hint: (_m, line) => line.trim(),
|
|
50
|
+
alwaysBoundary: false,
|
|
51
|
+
},
|
|
52
|
+
// expect(...).toBeVisible / toHaveText / etc.
|
|
53
|
+
{
|
|
54
|
+
regex: /expect\(.+?\)\.\w+/,
|
|
55
|
+
sceneName: () => 'verify',
|
|
56
|
+
hint: (_m, line) => line.trim(),
|
|
57
|
+
alwaysBoundary: false,
|
|
58
|
+
},
|
|
59
|
+
// page.waitForSelector / page.waitForURL / locator.waitFor
|
|
60
|
+
{
|
|
61
|
+
regex: /\.waitFor(?:Selector|URL|Navigation)?\(/,
|
|
62
|
+
sceneName: () => 'wait',
|
|
63
|
+
hint: (_m, line) => line.trim(),
|
|
64
|
+
alwaysBoundary: false,
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
/** Lines that are structural and should not form their own scenes. */
|
|
68
|
+
const SKIP_PATTERNS = [
|
|
69
|
+
/^\s*$/, // blank lines
|
|
70
|
+
/^\s*import\s/, // imports
|
|
71
|
+
/^\s*(?:const|let|var)\s/, // variable declarations (unless they contain actions)
|
|
72
|
+
/^\s*[{})\]];?\s*$/, // lone braces/brackets
|
|
73
|
+
/^\s*(?:test|describe)\s*\(/, // test/describe wrappers
|
|
74
|
+
/^\s*(?:test|describe)\.(?!step)\w+\(/, // test.only, describe.skip, etc. (but NOT test.step)
|
|
75
|
+
/^\s*async\s/, // async arrow functions
|
|
76
|
+
/^\s*\}\s*\)\s*;?\s*$/, // closing }) patterns
|
|
77
|
+
];
|
|
78
|
+
function shouldSkipLine(line) {
|
|
79
|
+
// Don't skip if line contains a Playwright action
|
|
80
|
+
if (/page\.|locator|expect\(/.test(line))
|
|
81
|
+
return false;
|
|
82
|
+
return SKIP_PATTERNS.some((p) => p.test(line));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse a Playwright test file and extract scene boundaries.
|
|
86
|
+
*/
|
|
87
|
+
export function parsePlaywrightTest(source) {
|
|
88
|
+
const sourceLines = source.split('\n');
|
|
89
|
+
// Extract imports
|
|
90
|
+
const imports = sourceLines.filter((l) => /^\s*import\s/.test(l));
|
|
91
|
+
// Find the test name
|
|
92
|
+
const testNameMatch = source.match(/test\(\s*(['"`])(.+?)\1/);
|
|
93
|
+
const testName = testNameMatch?.[2] ?? 'demo';
|
|
94
|
+
// Collect actions grouped into scenes
|
|
95
|
+
const scenes = [];
|
|
96
|
+
let currentActions = [];
|
|
97
|
+
let currentSceneName = '';
|
|
98
|
+
/** True when the current scene was named by test.step — suppresses other boundary flushes. */
|
|
99
|
+
let namedByStep = false;
|
|
100
|
+
let sceneNameCounts = new Map();
|
|
101
|
+
function flushScene() {
|
|
102
|
+
if (currentActions.length === 0)
|
|
103
|
+
return;
|
|
104
|
+
// Determine scene name
|
|
105
|
+
let name = currentSceneName || inferSceneName(currentActions);
|
|
106
|
+
name = deduplicateName(name, sceneNameCounts);
|
|
107
|
+
scenes.push({
|
|
108
|
+
name,
|
|
109
|
+
lines: currentActions.map((a) => a.line),
|
|
110
|
+
hint: currentActions.map((a) => a.hint).join(', '),
|
|
111
|
+
});
|
|
112
|
+
currentActions = [];
|
|
113
|
+
currentSceneName = '';
|
|
114
|
+
namedByStep = false;
|
|
115
|
+
}
|
|
116
|
+
for (const line of sourceLines) {
|
|
117
|
+
if (shouldSkipLine(line))
|
|
118
|
+
continue;
|
|
119
|
+
// Check if this line matches a boundary pattern
|
|
120
|
+
let matched = false;
|
|
121
|
+
for (const pattern of BOUNDARY_PATTERNS) {
|
|
122
|
+
const m = line.match(pattern.regex);
|
|
123
|
+
if (!m)
|
|
124
|
+
continue;
|
|
125
|
+
const isStep = pattern.regex.source.startsWith('test\\.step');
|
|
126
|
+
if (isStep) {
|
|
127
|
+
// test.step always starts a new scene
|
|
128
|
+
if (currentActions.length > 0)
|
|
129
|
+
flushScene();
|
|
130
|
+
currentSceneName = pattern.sceneName(m);
|
|
131
|
+
namedByStep = true;
|
|
132
|
+
}
|
|
133
|
+
else if (pattern.alwaysBoundary && !namedByStep && currentActions.length > 0) {
|
|
134
|
+
// Other boundaries (goto, comments) flush only if not inside a test.step scene
|
|
135
|
+
flushScene();
|
|
136
|
+
currentSceneName = pattern.sceneName(m);
|
|
137
|
+
}
|
|
138
|
+
else if (!currentSceneName) {
|
|
139
|
+
currentSceneName = pattern.sceneName(m);
|
|
140
|
+
}
|
|
141
|
+
currentActions.push({ line, hint: pattern.hint(m, line) });
|
|
142
|
+
matched = true;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
if (!matched && /page\.|locator|expect\(/.test(line)) {
|
|
146
|
+
// It's a Playwright action but not a recognized pattern — still include it
|
|
147
|
+
currentActions.push({ line, hint: line.trim() });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Flush remaining actions
|
|
151
|
+
flushScene();
|
|
152
|
+
return { testName, scenes, sourceLines, imports };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Infer a scene name from the actions it contains.
|
|
156
|
+
*/
|
|
157
|
+
function inferSceneName(actions) {
|
|
158
|
+
for (const a of actions) {
|
|
159
|
+
// Try to extract a meaningful name from selectors
|
|
160
|
+
const selectorMatch = a.line.match(/['"`]([#.][a-zA-Z0-9_-]+)['"`]/);
|
|
161
|
+
if (selectorMatch) {
|
|
162
|
+
return slugify(selectorMatch[1].replace(/^[#.]/, ''));
|
|
163
|
+
}
|
|
164
|
+
// Try aria labels
|
|
165
|
+
const ariaMatch = a.line.match(/getByRole\(.+?,\s*\{\s*name:\s*['"`](.+?)['"`]/);
|
|
166
|
+
if (ariaMatch) {
|
|
167
|
+
return slugify(ariaMatch[1]);
|
|
168
|
+
}
|
|
169
|
+
// Try getByText
|
|
170
|
+
const textMatch = a.line.match(/getByText\(\s*['"`](.+?)['"`]/);
|
|
171
|
+
if (textMatch) {
|
|
172
|
+
return slugify(textMatch[1]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return 'step';
|
|
176
|
+
}
|
|
177
|
+
function slugify(text) {
|
|
178
|
+
return text
|
|
179
|
+
.toLowerCase()
|
|
180
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
181
|
+
.replace(/^-+|-+$/g, '')
|
|
182
|
+
.slice(0, 30) || 'step';
|
|
183
|
+
}
|
|
184
|
+
function slugifyUrl(url) {
|
|
185
|
+
// Extract the meaningful path segment
|
|
186
|
+
try {
|
|
187
|
+
const pathname = new URL(url, 'http://localhost').pathname;
|
|
188
|
+
const segment = pathname.split('/').filter(Boolean).pop() ?? 'home';
|
|
189
|
+
return slugify(segment);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return slugify(url);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function deduplicateName(name, counts) {
|
|
196
|
+
const count = counts.get(name) ?? 0;
|
|
197
|
+
counts.set(name, count + 1);
|
|
198
|
+
return count === 0 ? name : `${name}-${count + 1}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Generate an Argo demo script from a parsed Playwright test.
|
|
202
|
+
*/
|
|
203
|
+
export function generateDemoScript(parsed) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
// Check if any scene lines contain expect() to decide on imports
|
|
206
|
+
const hasExpect = parsed.scenes.some(s => s.lines.some(l => /\bexpect\s*\(/.test(l)));
|
|
207
|
+
if (hasExpect) {
|
|
208
|
+
lines.push("import { test, expect } from '@argo-video/cli';");
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
lines.push("import { test } from '@argo-video/cli';");
|
|
212
|
+
}
|
|
213
|
+
lines.push("import { showOverlay, withOverlay } from '@argo-video/cli';");
|
|
214
|
+
lines.push('');
|
|
215
|
+
lines.push(`test('${parsed.testName}', async ({ page, narration }) => {`);
|
|
216
|
+
for (const scene of parsed.scenes) {
|
|
217
|
+
lines.push('');
|
|
218
|
+
lines.push(` narration.mark('${scene.name}');`);
|
|
219
|
+
for (const sourceLine of scene.lines) {
|
|
220
|
+
// Strip test.step() wrappers — we flatten steps into narration.mark() scenes
|
|
221
|
+
const stripped = sourceLine
|
|
222
|
+
.replace(/^\s*test\.step\s*\(\s*(['"`]).*?\1\s*,\s*async\s*\(\s*\)\s*=>\s*\{\s*$/, '')
|
|
223
|
+
.replace(/^\s*\}\s*\)\s*;?\s*$/, '');
|
|
224
|
+
if (stripped === '')
|
|
225
|
+
continue;
|
|
226
|
+
// Normalize indentation to 2-space inside the test block
|
|
227
|
+
const trimmed = stripped.replace(/^\s+/, '');
|
|
228
|
+
lines.push(` ${trimmed}`);
|
|
229
|
+
}
|
|
230
|
+
lines.push(` await page.waitForTimeout(narration.durationFor('${scene.name}'));`);
|
|
231
|
+
}
|
|
232
|
+
lines.push('});');
|
|
233
|
+
lines.push('');
|
|
234
|
+
return lines.join('\n');
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Generate a skeleton voiceover manifest from parsed scenes.
|
|
238
|
+
* Includes _hint fields for LLM-assisted text generation.
|
|
239
|
+
*/
|
|
240
|
+
export function generateVoiceoverSkeleton(parsed) {
|
|
241
|
+
return parsed.scenes.map((s) => ({
|
|
242
|
+
scene: s.name,
|
|
243
|
+
text: '',
|
|
244
|
+
_hint: s.hint,
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Generate a skeleton overlays manifest from parsed scenes.
|
|
249
|
+
* Creates a lower-third for each scene as a starting point.
|
|
250
|
+
*/
|
|
251
|
+
export function generateOverlaysSkeleton(parsed) {
|
|
252
|
+
return parsed.scenes.map((s) => ({
|
|
253
|
+
scene: s.name,
|
|
254
|
+
type: 'lower-third',
|
|
255
|
+
text: humanize(s.name),
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
/** Convert kebab-case scene name to Title Case display text. */
|
|
259
|
+
function humanize(name) {
|
|
260
|
+
return name
|
|
261
|
+
.split('-')
|
|
262
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
263
|
+
.join(' ');
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=parse-playwright.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-playwright.js","sourceRoot":"","sources":["../src/parse-playwright.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,41 @@ export interface MlxAudioEngineOptions {
|
|
|
4
4
|
baseUrl?: string;
|
|
5
5
|
/** Model ID passed to the server. Default: mlx-community/Spark-TTS-0.5B-bf16 */
|
|
6
6
|
model?: string;
|
|
7
|
+
/** Path to a reference audio WAV file for voice cloning (requires a cloning-capable model). */
|
|
8
|
+
refAudio?: string;
|
|
9
|
+
/** Transcript of the reference audio (required when refAudio is set). */
|
|
10
|
+
refText?: string;
|
|
11
|
+
/** Instruction text for models that support instruct mode (e.g. emotion/style control). */
|
|
12
|
+
instruct?: string;
|
|
13
|
+
/** Gender hint. Default: "male". */
|
|
14
|
+
gender?: string;
|
|
15
|
+
/** Pitch multiplier. Default: 1.0. */
|
|
16
|
+
pitch?: number;
|
|
17
|
+
/** Language code. Default: "a". */
|
|
18
|
+
langCode?: string;
|
|
19
|
+
/** Sampling temperature. Default: 0.7. */
|
|
20
|
+
temperature?: number;
|
|
21
|
+
/** Top-p sampling. Default: 0.95. */
|
|
22
|
+
topP?: number;
|
|
23
|
+
/** Top-k sampling. Default: 40. */
|
|
24
|
+
topK?: number;
|
|
25
|
+
/** Repetition penalty. Default: 1.0. */
|
|
26
|
+
repetitionPenalty?: number;
|
|
27
|
+
/** Response audio format. Default: "mp3". */
|
|
28
|
+
responseFormat?: string;
|
|
29
|
+
/** Enable streaming response. Default: false. */
|
|
30
|
+
stream?: boolean;
|
|
31
|
+
/** Streaming chunk interval in seconds. Default: 2.0. */
|
|
32
|
+
streamingInterval?: number;
|
|
33
|
+
/** Max generation tokens. Default: 1200. */
|
|
34
|
+
maxTokens?: number;
|
|
35
|
+
/** Enable verbose server logging. Default: false. */
|
|
36
|
+
verbose?: boolean;
|
|
7
37
|
}
|
|
8
38
|
export declare class MlxAudioEngine implements TTSEngine {
|
|
9
39
|
private baseUrl;
|
|
10
40
|
private model;
|
|
41
|
+
private serverOptions;
|
|
11
42
|
constructor(options?: MlxAudioEngineOptions);
|
|
12
43
|
generate(text: string, options: TTSEngineOptions): Promise<Buffer>;
|
|
13
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mlx-audio.d.ts","sourceRoot":"","sources":["../../../src/tts/engines/mlx-audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mlx-audio.d.ts","sourceRoot":"","sources":["../../../src/tts/engines/mlx-audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAA0B;gBAEnC,OAAO,CAAC,EAAE,qBAAqB;IA2BrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;CA4CzE"}
|