@argo-video/cli 0.9.1 → 0.10.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 +34 -33
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -1
- package/dist/cli.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +29 -47
- package/dist/init.js.map +1 -1
- package/dist/overlays/index.d.ts +7 -2
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/overlays/index.js +49 -4
- package/dist/overlays/index.js.map +1 -1
- package/dist/overlays/manifest-loader.d.ts +4 -0
- package/dist/overlays/manifest-loader.d.ts.map +1 -0
- package/dist/overlays/manifest-loader.js +22 -0
- package/dist/overlays/manifest-loader.js.map +1 -0
- package/dist/overlays/manifest.d.ts.map +1 -1
- package/dist/overlays/manifest.js +4 -19
- package/dist/overlays/manifest.js.map +1 -1
- package/dist/overlays/types.d.ts +10 -0
- package/dist/overlays/types.d.ts.map +1 -1
- package/dist/overlays/types.js.map +1 -1
- package/dist/parse-playwright.d.ts +15 -0
- package/dist/parse-playwright.d.ts.map +1 -1
- package/dist/parse-playwright.js +17 -0
- package/dist/parse-playwright.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +36 -3
- package/dist/pipeline.js.map +1 -1
- package/dist/preview.d.ts +29 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +2137 -0
- package/dist/preview.js.map +1 -0
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +12 -4
- package/dist/record.js.map +1 -1
- package/dist/tts/engine.d.ts +8 -0
- package/dist/tts/engine.d.ts.map +1 -1
- package/dist/tts/engine.js.map +1 -1
- package/dist/tts/engines/elevenlabs.d.ts +2 -1
- package/dist/tts/engines/elevenlabs.d.ts.map +1 -1
- package/dist/tts/engines/elevenlabs.js +3 -0
- package/dist/tts/engines/elevenlabs.js.map +1 -1
- package/dist/tts/engines/gemini.d.ts +2 -1
- package/dist/tts/engines/gemini.d.ts.map +1 -1
- package/dist/tts/engines/gemini.js +3 -0
- package/dist/tts/engines/gemini.js.map +1 -1
- package/dist/tts/engines/kokoro.d.ts +2 -1
- package/dist/tts/engines/kokoro.d.ts.map +1 -1
- package/dist/tts/engines/kokoro.js +3 -0
- package/dist/tts/engines/kokoro.js.map +1 -1
- package/dist/tts/engines/mlx-audio.d.ts +2 -1
- package/dist/tts/engines/mlx-audio.d.ts.map +1 -1
- package/dist/tts/engines/mlx-audio.js +6 -0
- package/dist/tts/engines/mlx-audio.js.map +1 -1
- package/dist/tts/engines/openai.d.ts +7 -2
- package/dist/tts/engines/openai.d.ts.map +1 -1
- package/dist/tts/engines/openai.js +13 -2
- package/dist/tts/engines/openai.js.map +1 -1
- package/dist/tts/engines/sarvam.d.ts +2 -1
- package/dist/tts/engines/sarvam.d.ts.map +1 -1
- package/dist/tts/engines/sarvam.js +3 -0
- package/dist/tts/engines/sarvam.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +36 -54
- package/dist/validate.js.map +1 -1
- package/package.json +1 -1
- package/scripts/setup-mlx-audio.sh +1 -1
- package/scripts/voice-clone-preview.sh +1 -1
package/dist/validate.js
CHANGED
|
@@ -26,77 +26,59 @@ export function validateDemo(options) {
|
|
|
26
26
|
if (scriptScenes.size === 0) {
|
|
27
27
|
warnings.push('No narration.mark() calls found in demo script. The video will have no scene timing.');
|
|
28
28
|
}
|
|
29
|
-
// Check
|
|
30
|
-
const
|
|
31
|
-
if (existsSync(
|
|
29
|
+
// Check unified scenes manifest
|
|
30
|
+
const scenesPath = join(demosDir, `${demoName}.scenes.json`);
|
|
31
|
+
if (existsSync(scenesPath)) {
|
|
32
32
|
try {
|
|
33
|
-
const
|
|
34
|
-
if (!Array.isArray(
|
|
35
|
-
errors.push(`
|
|
33
|
+
const scenes = JSON.parse(readFileSync(scenesPath, 'utf-8'));
|
|
34
|
+
if (!Array.isArray(scenes)) {
|
|
35
|
+
errors.push(`Scenes manifest must be a JSON array`);
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const validTypes = new Set(['lower-third', 'headline-card', 'callout', 'image-card']);
|
|
39
|
+
const validPlacements = new Set(['bottom-center', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'center']);
|
|
40
|
+
const validMotions = new Set(['none', 'fade-in', 'slide-in']);
|
|
41
|
+
// Validate root-level voiceover fields
|
|
42
|
+
for (let i = 0; i < scenes.length; i++) {
|
|
43
|
+
const entry = scenes[i];
|
|
40
44
|
if (!entry.scene)
|
|
41
|
-
errors.push(`
|
|
45
|
+
errors.push(`Scene entry ${i}: missing "scene" field`);
|
|
42
46
|
if (!entry.text)
|
|
43
|
-
errors.push(`
|
|
47
|
+
errors.push(`Scene entry ${i}: missing "text" field`);
|
|
44
48
|
if (entry.scene && !scriptScenes.has(entry.scene)) {
|
|
45
|
-
warnings.push(`
|
|
49
|
+
warnings.push(`Scene "${entry.scene}" has no matching narration.mark() in the demo script`);
|
|
50
|
+
}
|
|
51
|
+
// Validate overlay sub-object if present
|
|
52
|
+
if (entry.overlay) {
|
|
53
|
+
const ov = entry.overlay;
|
|
54
|
+
if (!ov.type)
|
|
55
|
+
errors.push(`Scene "${entry.scene}" overlay: missing "type" field`);
|
|
56
|
+
if (ov.type && !validTypes.has(ov.type)) {
|
|
57
|
+
errors.push(`Scene "${entry.scene}" overlay: unknown type "${ov.type}"`);
|
|
58
|
+
}
|
|
59
|
+
if (ov.placement && !validPlacements.has(ov.placement)) {
|
|
60
|
+
errors.push(`Scene "${entry.scene}" overlay: unknown placement "${ov.placement}"`);
|
|
61
|
+
}
|
|
62
|
+
if (ov.motion && !validMotions.has(ov.motion)) {
|
|
63
|
+
errors.push(`Scene "${entry.scene}" overlay: unknown motion "${ov.motion}"`);
|
|
64
|
+
}
|
|
46
65
|
}
|
|
47
66
|
}
|
|
48
|
-
// Check for script scenes missing
|
|
49
|
-
const
|
|
67
|
+
// Check for script scenes missing from manifest
|
|
68
|
+
const manifestScenes = new Set(scenes.map((e) => e.scene).filter(Boolean));
|
|
50
69
|
for (const scene of scriptScenes) {
|
|
51
|
-
if (!
|
|
52
|
-
warnings.push(`Script scene "${scene}" has no
|
|
70
|
+
if (!manifestScenes.has(scene)) {
|
|
71
|
+
warnings.push(`Script scene "${scene}" has no entry in scenes manifest — it will be silent`);
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
76
|
catch (err) {
|
|
58
|
-
errors.push(`
|
|
77
|
+
errors.push(`Scenes manifest is not valid JSON: ${err.message}`);
|
|
59
78
|
}
|
|
60
79
|
}
|
|
61
80
|
else {
|
|
62
|
-
warnings.push(`No
|
|
63
|
-
}
|
|
64
|
-
// Check overlay manifest (optional)
|
|
65
|
-
const overlayPath = join(demosDir, `${demoName}.overlays.json`);
|
|
66
|
-
if (existsSync(overlayPath)) {
|
|
67
|
-
try {
|
|
68
|
-
const overlays = JSON.parse(readFileSync(overlayPath, 'utf-8'));
|
|
69
|
-
if (!Array.isArray(overlays)) {
|
|
70
|
-
errors.push(`Overlay manifest must be a JSON array, got ${typeof overlays}`);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
const validTypes = new Set(['lower-third', 'headline-card', 'callout', 'image-card']);
|
|
74
|
-
const validPlacements = new Set(['bottom-center', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'center']);
|
|
75
|
-
const validMotions = new Set(['none', 'fade-in', 'slide-in']);
|
|
76
|
-
for (let i = 0; i < overlays.length; i++) {
|
|
77
|
-
const entry = overlays[i];
|
|
78
|
-
if (!entry.scene)
|
|
79
|
-
errors.push(`Overlay entry ${i}: missing "scene" field`);
|
|
80
|
-
if (!entry.type)
|
|
81
|
-
errors.push(`Overlay entry ${i}: missing "type" field`);
|
|
82
|
-
if (entry.type && !validTypes.has(entry.type)) {
|
|
83
|
-
errors.push(`Overlay entry ${i}: unknown type "${entry.type}" (valid: ${[...validTypes].join(', ')})`);
|
|
84
|
-
}
|
|
85
|
-
if (entry.placement && !validPlacements.has(entry.placement)) {
|
|
86
|
-
errors.push(`Overlay entry ${i}: unknown placement "${entry.placement}" (valid: ${[...validPlacements].join(', ')})`);
|
|
87
|
-
}
|
|
88
|
-
if (entry.motion && !validMotions.has(entry.motion)) {
|
|
89
|
-
errors.push(`Overlay entry ${i}: unknown motion "${entry.motion}" (valid: ${[...validMotions].join(', ')})`);
|
|
90
|
-
}
|
|
91
|
-
if (entry.scene && !scriptScenes.has(entry.scene)) {
|
|
92
|
-
warnings.push(`Overlay scene "${entry.scene}" has no matching narration.mark() in the demo script`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
errors.push(`Overlay manifest is not valid JSON: ${err.message}`);
|
|
99
|
-
}
|
|
81
|
+
warnings.push(`No scenes manifest found at ${scenesPath}`);
|
|
100
82
|
}
|
|
101
83
|
return { errors, warnings };
|
|
102
84
|
}
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAYjC,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,2BAA2B;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAExD,yCAAyC;IACzC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CACT,sDAAsD;YACtD,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,+CAA+C,CAAC;IAClE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACxG,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -60,7 +60,7 @@ echo " # Preview cloned voice"
|
|
|
60
60
|
echo " ./scripts/voice-clone-preview.sh \\"
|
|
61
61
|
echo " --ref-audio assets/ref-voice.wav \\"
|
|
62
62
|
echo " --ref-text 'Your transcript here.' \\"
|
|
63
|
-
echo " --voiceover demos/showcase.
|
|
63
|
+
echo " --voiceover demos/showcase.scenes.json --play"
|
|
64
64
|
echo ""
|
|
65
65
|
echo " # Use in argo config"
|
|
66
66
|
echo " engines.mlxAudio({ model: 'mlx-community/Qwen3-TTS-12Hz-0.6B-Base-bf16' })"
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# ./scripts/voice-clone-preview.sh \
|
|
8
8
|
# --ref-audio ./assets/ref-voice.wav \
|
|
9
9
|
# --ref-text "Hi, my name is Shreyas. I build developer tools." \
|
|
10
|
-
# --voiceover demos/showcase.
|
|
10
|
+
# --voiceover demos/showcase.scenes.json
|
|
11
11
|
#
|
|
12
12
|
# # Single line of text (no manifest):
|
|
13
13
|
# ./scripts/voice-clone-preview.sh \
|