@argo-video/cli 0.5.0 → 0.7.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.
Files changed (87) hide show
  1. package/README.md +38 -4
  2. package/dist/camera.d.ts +30 -0
  3. package/dist/camera.d.ts.map +1 -0
  4. package/dist/camera.js +299 -0
  5. package/dist/camera.js.map +1 -0
  6. package/dist/chapters.d.ts +7 -0
  7. package/dist/chapters.d.ts.map +1 -0
  8. package/dist/chapters.js +22 -0
  9. package/dist/chapters.js.map +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +15 -1
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.d.ts +1 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js.map +1 -1
  16. package/dist/doctor.d.ts +9 -0
  17. package/dist/doctor.d.ts.map +1 -0
  18. package/dist/doctor.js +119 -0
  19. package/dist/doctor.js.map +1 -0
  20. package/dist/export.d.ts +4 -0
  21. package/dist/export.d.ts.map +1 -1
  22. package/dist/export.js +51 -5
  23. package/dist/export.js.map +1 -1
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +11 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/pipeline.d.ts +4 -1
  29. package/dist/pipeline.d.ts.map +1 -1
  30. package/dist/pipeline.js +37 -3
  31. package/dist/pipeline.js.map +1 -1
  32. package/dist/record.d.ts +1 -0
  33. package/dist/record.d.ts.map +1 -1
  34. package/dist/record.js +1 -0
  35. package/dist/record.js.map +1 -1
  36. package/dist/report.d.ts +16 -0
  37. package/dist/report.d.ts.map +1 -0
  38. package/dist/report.js +33 -0
  39. package/dist/report.js.map +1 -0
  40. package/dist/subtitles.d.ts +4 -0
  41. package/dist/subtitles.d.ts.map +1 -0
  42. package/dist/subtitles.js +34 -0
  43. package/dist/subtitles.js.map +1 -0
  44. package/dist/tts/cache.d.ts +1 -0
  45. package/dist/tts/cache.d.ts.map +1 -1
  46. package/dist/tts/cache.js +2 -2
  47. package/dist/tts/cache.js.map +1 -1
  48. package/dist/tts/engine.d.ts +5 -0
  49. package/dist/tts/engine.d.ts.map +1 -1
  50. package/dist/tts/engine.js +22 -0
  51. package/dist/tts/engine.js.map +1 -1
  52. package/dist/tts/engines/elevenlabs.d.ts +17 -0
  53. package/dist/tts/engines/elevenlabs.d.ts.map +1 -0
  54. package/dist/tts/engines/elevenlabs.js +52 -0
  55. package/dist/tts/engines/elevenlabs.js.map +1 -0
  56. package/dist/tts/engines/gemini.d.ts +13 -0
  57. package/dist/tts/engines/gemini.d.ts.map +1 -0
  58. package/dist/tts/engines/gemini.js +53 -0
  59. package/dist/tts/engines/gemini.js.map +1 -0
  60. package/dist/tts/engines/index.d.ts +28 -0
  61. package/dist/tts/engines/index.d.ts.map +1 -0
  62. package/dist/tts/engines/index.js +21 -0
  63. package/dist/tts/engines/index.js.map +1 -0
  64. package/dist/tts/engines/kokoro.d.ts +27 -0
  65. package/dist/tts/engines/kokoro.d.ts.map +1 -0
  66. package/dist/tts/engines/kokoro.js +76 -0
  67. package/dist/tts/engines/kokoro.js.map +1 -0
  68. package/dist/tts/engines/mlx-audio.d.ts +14 -0
  69. package/dist/tts/engines/mlx-audio.d.ts.map +1 -0
  70. package/dist/tts/engines/mlx-audio.js +40 -0
  71. package/dist/tts/engines/mlx-audio.js.map +1 -0
  72. package/dist/tts/engines/openai.d.ts +13 -0
  73. package/dist/tts/engines/openai.d.ts.map +1 -0
  74. package/dist/tts/engines/openai.js +50 -0
  75. package/dist/tts/engines/openai.js.map +1 -0
  76. package/dist/tts/engines/sarvam.d.ts +13 -0
  77. package/dist/tts/engines/sarvam.d.ts.map +1 -0
  78. package/dist/tts/engines/sarvam.js +51 -0
  79. package/dist/tts/engines/sarvam.js.map +1 -0
  80. package/dist/tts/generate.d.ts.map +1 -1
  81. package/dist/tts/generate.js +22 -16
  82. package/dist/tts/generate.js.map +1 -1
  83. package/dist/tts/kokoro.d.ts +1 -29
  84. package/dist/tts/kokoro.d.ts.map +1 -1
  85. package/dist/tts/kokoro.js +2 -72
  86. package/dist/tts/kokoro.js.map +1 -1
  87. package/package.json +1 -1
@@ -0,0 +1,51 @@
1
+ export class SarvamEngine {
2
+ apiKey;
3
+ model;
4
+ constructor(options) {
5
+ this.apiKey = options?.apiKey ?? '';
6
+ this.model = options?.model ?? 'bulbul:v2';
7
+ }
8
+ resolveApiKey() {
9
+ const key = this.apiKey || process.env.SARVAM_API_KEY || '';
10
+ if (!key) {
11
+ throw new Error('Sarvam TTS engine requires an API key. ' +
12
+ 'Set SARVAM_API_KEY environment variable or pass apiKey option.');
13
+ }
14
+ return key;
15
+ }
16
+ async generate(text, options) {
17
+ if (!text?.trim())
18
+ throw new Error('TTS text must not be empty');
19
+ const response = await fetch('https://api.sarvam.ai/text-to-speech', {
20
+ method: 'POST',
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ 'API-Subscription-Key': this.resolveApiKey(),
24
+ },
25
+ body: JSON.stringify({
26
+ inputs: [text],
27
+ target_language_code: options.lang ?? 'hi-IN',
28
+ speaker: options.voice ?? 'meera',
29
+ model: this.model,
30
+ pitch: 0,
31
+ pace: options.speed ?? 1.0,
32
+ loudness: 1.5,
33
+ enable_preprocessing: true,
34
+ }),
35
+ });
36
+ if (!response.ok) {
37
+ const body = await response.text();
38
+ throw new Error(`Sarvam TTS API error ${response.status}: ${body}`);
39
+ }
40
+ const json = await response.json();
41
+ if (!json.audios?.[0]) {
42
+ throw new Error('Sarvam TTS returned no audio data');
43
+ }
44
+ // Sarvam returns base64-encoded WAV
45
+ const audioBuffer = Buffer.from(json.audios[0], 'base64');
46
+ // Convert to Argo WAV format (mono Float32 24kHz)
47
+ const { convertToWav } = await import('../engine.js');
48
+ return convertToWav(audioBuffer);
49
+ }
50
+ }
51
+ //# sourceMappingURL=sarvam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarvam.js","sourceRoot":"","sources":["../../../src/tts/engines/sarvam.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,YAAY;IACf,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,WAAW,CAAC;IAC7C,CAAC;IAEO,aAAa;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,yCAAyC;gBACzC,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACpD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE;aAC7C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,CAAC,IAAI,CAAC;gBACd,oBAAoB,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;gBAC7C,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;gBAC1B,QAAQ,EAAE,GAAG;gBACb,oBAAoB,EAAE,IAAI;aAC3B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2B,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,oCAAoC;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE1D,kDAAkD;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA+DxF"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAkExF"}
@@ -33,29 +33,35 @@ export async function generateClips(options) {
33
33
  }
34
34
  }
35
35
  const cache = new ClipCache(projectRoot);
36
- const results = [];
37
- for (const raw of rawEntries) {
36
+ // Build manifest entries with defaults
37
+ const entries = rawEntries.map((raw) => {
38
38
  const r = raw;
39
- // 4. Build ManifestEntry with defaults
40
- const manifestEntry = {
39
+ const entry = {
41
40
  scene: r.scene,
42
41
  text: r.text,
43
42
  voice: r.voice ?? defaults?.voice,
44
43
  speed: r.speed ?? defaults?.speed,
44
+ lang: r.lang,
45
45
  };
46
- const clipPath = cache.getClipPath(demoName, manifestEntry);
47
- // 5/6. Check cache or generate
48
- if (!cache.isCached(demoName, manifestEntry)) {
49
- const wavBuffer = await engine.generate(manifestEntry.text, {
50
- voice: manifestEntry.voice,
51
- speed: manifestEntry.speed,
52
- });
53
- cache.cacheClip(demoName, manifestEntry, wavBuffer);
54
- }
46
+ return { entry, clipPath: cache.getClipPath(demoName, entry) };
47
+ });
48
+ // Generate uncached clips sequentially — Kokoro's ONNX runtime is not
49
+ // safe for concurrent generate() calls (mutex errors). The shared init
50
+ // promise prevents duplicate model downloads, but generation must serialize.
51
+ const uncached = entries.filter(({ entry }) => !cache.isCached(demoName, entry));
52
+ for (const { entry } of uncached) {
53
+ const wavBuffer = await engine.generate(entry.text, {
54
+ voice: entry.voice,
55
+ speed: entry.speed,
56
+ lang: entry.lang,
57
+ });
58
+ cache.cacheClip(demoName, entry, wavBuffer);
59
+ }
60
+ // Read results (all clips now cached)
61
+ return entries.map(({ entry, clipPath }) => {
55
62
  const wavBuf = fs.readFileSync(clipPath);
56
63
  const { durationMs } = parseWavHeader(wavBuf);
57
- results.push({ scene: manifestEntry.scene, clipPath, durationMs });
58
- }
59
- return results;
64
+ return { scene: entry.scene, clipPath, durationMs };
65
+ });
60
66
  }
61
67
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,2 @@
1
- import type { TTSEngine, TTSEngineOptions } from './engine.js';
2
- export interface KokoroEngineOptions {
3
- modelId?: string;
4
- dtype?: 'fp32' | 'fp16' | 'q8' | 'q4' | 'q4f16';
5
- device?: 'wasm' | 'webgpu' | 'cpu' | null;
6
- onProgress?: (progress: {
7
- status: string;
8
- progress?: number;
9
- file?: string;
10
- }) => void;
11
- }
12
- export declare class KokoroEngine implements TTSEngine {
13
- private tts;
14
- private modelId;
15
- private dtype;
16
- private device;
17
- private onProgress?;
18
- constructor(options?: KokoroEngineOptions);
19
- private getTTS;
20
- generate(text: string, options: TTSEngineOptions): Promise<Buffer>;
21
- /**
22
- * Stream audio generation sentence-by-sentence.
23
- * Yields WAV buffers for each sentence as they're generated.
24
- */
25
- stream(text: string, options: TTSEngineOptions): AsyncGenerator<{
26
- text: string;
27
- audio: Buffer;
28
- }>;
29
- }
1
+ export { KokoroEngine, type KokoroEngineOptions } from './engines/kokoro.js';
30
2
  //# sourceMappingURL=kokoro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kokoro.d.ts","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACvF;AAED,qBAAa,YAAa,YAAW,SAAS;IAC5C,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,UAAU,CAAC,CAAoC;gBAE3C,OAAO,CAAC,EAAE,mBAAmB;YAO3B,MAAM;IAmBd,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBxE;;;OAGG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,cAAc,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAaxG"}
1
+ {"version":3,"file":"kokoro.d.ts","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,73 +1,3 @@
1
- export class KokoroEngine {
2
- tts = null;
3
- modelId;
4
- dtype;
5
- device;
6
- onProgress;
7
- constructor(options) {
8
- this.modelId = options?.modelId ?? 'onnx-community/Kokoro-82M-v1.0-ONNX';
9
- this.dtype = options?.dtype ?? 'q8';
10
- this.device = options?.device ?? null;
11
- this.onProgress = options?.onProgress;
12
- }
13
- async getTTS() {
14
- if (this.tts)
15
- return this.tts;
16
- try {
17
- const { KokoroTTS } = await import('kokoro-js');
18
- this.tts = await KokoroTTS.from_pretrained(this.modelId, {
19
- dtype: this.dtype,
20
- device: this.device,
21
- progress_callback: this.onProgress ?? undefined,
22
- });
23
- }
24
- catch (err) {
25
- throw new Error(`Failed to initialize Kokoro TTS (model: ${this.modelId}, dtype: ${this.dtype}). ` +
26
- `This may require an internet connection for first-time model download. ` +
27
- `Original error: ${err.message}`);
28
- }
29
- return this.tts;
30
- }
31
- async generate(text, options) {
32
- if (!text?.trim())
33
- throw new Error('TTS text must not be empty');
34
- const tts = await this.getTTS();
35
- let audio;
36
- try {
37
- audio = await tts.generate(text, {
38
- voice: options.voice ?? 'af_heart',
39
- speed: options.speed ?? 1.0,
40
- });
41
- }
42
- catch (err) {
43
- throw new Error(`Kokoro TTS failed to generate audio for text "${text.substring(0, 80)}..." ` +
44
- `(voice: ${options.voice ?? 'af_heart'}). Original error: ${err.message}`);
45
- }
46
- const samples = audio.data ?? audio.audio;
47
- if (!samples || !(samples instanceof Float32Array)) {
48
- throw new Error('kokoro-js returned unexpected audio format. Check kokoro-js version.');
49
- }
50
- const sampleRate = audio.sampling_rate;
51
- const { createWavBuffer } = await import('./engine.js');
52
- return createWavBuffer(samples, sampleRate);
53
- }
54
- /**
55
- * Stream audio generation sentence-by-sentence.
56
- * Yields WAV buffers for each sentence as they're generated.
57
- */
58
- async *stream(text, options) {
59
- if (!text?.trim())
60
- throw new Error('TTS text must not be empty');
61
- const tts = await this.getTTS();
62
- const { createWavBuffer } = await import('./engine.js');
63
- for await (const chunk of tts.stream(text, {
64
- voice: options.voice ?? 'af_heart',
65
- speed: options.speed ?? 1.0,
66
- })) {
67
- const samples = chunk.audio.data ?? chunk.audio.audio;
68
- const sampleRate = chunk.audio.sampling_rate;
69
- yield { text: chunk.text, audio: createWavBuffer(samples, sampleRate) };
70
- }
71
- }
72
- }
1
+ // Re-export from new location for backward compatibility
2
+ export { KokoroEngine } from './engines/kokoro.js';
73
3
  //# sourceMappingURL=kokoro.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kokoro.js","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kokoro.js","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,YAAY,EAA4B,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@argo-video/cli",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Turn Playwright demo scripts into polished product demo videos with AI voiceover",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",