demofly 0.2.1 → 0.2.3

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 (86) hide show
  1. package/dist/commands/auth/login.js +1 -1
  2. package/dist/commands/auth/login.js.map +1 -1
  3. package/dist/commands/demos/list.d.ts.map +1 -1
  4. package/dist/commands/demos/list.js +9 -6
  5. package/dist/commands/demos/list.js.map +1 -1
  6. package/dist/commands/generate.d.ts.map +1 -1
  7. package/dist/commands/generate.js +346 -35
  8. package/dist/commands/generate.js.map +1 -1
  9. package/dist/commands/init.d.ts +1 -1
  10. package/dist/commands/init.d.ts.map +1 -1
  11. package/dist/commands/init.js +349 -187
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/push.d.ts.map +1 -1
  14. package/dist/commands/push.js +12 -1
  15. package/dist/commands/push.js.map +1 -1
  16. package/dist/commands/render.d.ts.map +1 -1
  17. package/dist/commands/render.js +32 -4
  18. package/dist/commands/render.js.map +1 -1
  19. package/dist/commands/update.d.ts +3 -0
  20. package/dist/commands/update.d.ts.map +1 -0
  21. package/dist/commands/update.js +54 -0
  22. package/dist/commands/update.js.map +1 -0
  23. package/dist/commands/version.d.ts.map +1 -1
  24. package/dist/commands/version.js +9 -0
  25. package/dist/commands/version.js.map +1 -1
  26. package/dist/commands/voices/index.d.ts +3 -0
  27. package/dist/commands/voices/index.d.ts.map +1 -0
  28. package/dist/commands/voices/index.js +11 -0
  29. package/dist/commands/voices/index.js.map +1 -0
  30. package/dist/commands/voices/list.d.ts +3 -0
  31. package/dist/commands/voices/list.d.ts.map +1 -0
  32. package/dist/commands/voices/list.js +72 -0
  33. package/dist/commands/voices/list.js.map +1 -0
  34. package/dist/commands/voices/select.d.ts +3 -0
  35. package/dist/commands/voices/select.d.ts.map +1 -0
  36. package/dist/commands/voices/select.js +79 -0
  37. package/dist/commands/voices/select.js.map +1 -0
  38. package/dist/index.js +12 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/lib/alignment.d.ts +47 -0
  41. package/dist/lib/alignment.d.ts.map +1 -0
  42. package/dist/lib/alignment.js +122 -0
  43. package/dist/lib/alignment.js.map +1 -0
  44. package/dist/lib/api-client.d.ts +2 -0
  45. package/dist/lib/api-client.d.ts.map +1 -1
  46. package/dist/lib/api-client.js +6 -2
  47. package/dist/lib/api-client.js.map +1 -1
  48. package/dist/lib/api-types.d.ts +15 -0
  49. package/dist/lib/api-types.d.ts.map +1 -0
  50. package/dist/lib/api-types.js +2 -0
  51. package/dist/lib/api-types.js.map +1 -0
  52. package/dist/lib/cloud-tts.d.ts +21 -0
  53. package/dist/lib/cloud-tts.d.ts.map +1 -0
  54. package/dist/lib/cloud-tts.js +42 -0
  55. package/dist/lib/cloud-tts.js.map +1 -0
  56. package/dist/lib/credentials.js +1 -1
  57. package/dist/lib/credentials.js.map +1 -1
  58. package/dist/lib/demo-config.d.ts +8 -0
  59. package/dist/lib/demo-config.d.ts.map +1 -0
  60. package/dist/lib/demo-config.js +29 -0
  61. package/dist/lib/demo-config.js.map +1 -0
  62. package/dist/lib/edit-proposals.d.ts +46 -0
  63. package/dist/lib/edit-proposals.d.ts.map +1 -0
  64. package/dist/lib/edit-proposals.js +159 -0
  65. package/dist/lib/edit-proposals.js.map +1 -0
  66. package/dist/lib/retiming.d.ts +19 -0
  67. package/dist/lib/retiming.d.ts.map +1 -0
  68. package/dist/lib/retiming.js +215 -0
  69. package/dist/lib/retiming.js.map +1 -0
  70. package/dist/lib/timestamps.d.ts +43 -0
  71. package/dist/lib/timestamps.d.ts.map +1 -0
  72. package/dist/lib/timestamps.js +199 -0
  73. package/dist/lib/timestamps.js.map +1 -0
  74. package/dist/lib/tts.d.ts +7 -4
  75. package/dist/lib/tts.d.ts.map +1 -1
  76. package/dist/lib/tts.js +15 -8
  77. package/dist/lib/tts.js.map +1 -1
  78. package/dist/lib/voice-config.d.ts +7 -0
  79. package/dist/lib/voice-config.d.ts.map +1 -0
  80. package/dist/lib/voice-config.js +29 -0
  81. package/dist/lib/voice-config.js.map +1 -0
  82. package/dist/lib/voice-resolver.d.ts +82 -0
  83. package/dist/lib/voice-resolver.d.ts.map +1 -0
  84. package/dist/lib/voice-resolver.js +108 -0
  85. package/dist/lib/voice-resolver.js.map +1 -0
  86. package/package.json +5 -2
@@ -4,7 +4,7 @@ import { createServer } from "node:http";
4
4
  import { randomBytes, createHash } from "node:crypto";
5
5
  import { execSync } from "node:child_process";
6
6
  import { setToken, setCredentials } from "../../lib/credentials.js";
7
- const API_BASE = process.env.DEMOFLY_URL || "https://demofly.ai";
7
+ const API_BASE = process.env.DEMOFLY_URL || "https://app.demofly.ai";
8
8
  const CLI_CLIENT_ID = "demofly-cli";
9
9
  const CALLBACK_PORTS = [19823, 19824, 19825];
10
10
  const DEVICE_POLL_INTERVAL_MS = 5000;
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHzC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA6BxD"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAgIzC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA6BxD"}
@@ -14,7 +14,7 @@ function formatDuration(ms) {
14
14
  async function fetchCloudDemos(token) {
15
15
  try {
16
16
  const client = createApiClient(token);
17
- return await client.get("/demos");
17
+ return (await client.get("/demos")) ?? [];
18
18
  }
19
19
  catch {
20
20
  return [];
@@ -31,16 +31,19 @@ function mergeResults(local, cloud) {
31
31
  });
32
32
  }
33
33
  if (cloud) {
34
- const cloudNames = new Set(cloud.map((c) => c.name));
34
+ // Match cloud demos to local demos by projectSlug
35
+ const cloudSlugs = new Set(cloud.filter((c) => c.projectSlug).map((c) => c.projectSlug));
35
36
  for (const demo of local) {
36
- if (cloudNames.has(demo.name)) {
37
+ if (cloudSlugs.has(demo.name)) {
37
38
  merged.get(demo.name).cloud = "synced";
38
39
  }
39
40
  }
41
+ // Add cloud-only demos (no matching local folder)
40
42
  for (const c of cloud) {
41
- if (!merged.has(c.name)) {
42
- merged.set(c.name, {
43
- name: c.name,
43
+ const displayName = c.projectSlug ?? c.title;
44
+ if (!merged.has(displayName)) {
45
+ merged.set(displayName, {
46
+ name: displayName,
44
47
  phase: "\u2014",
45
48
  cloud: "cloud",
46
49
  duration: "\u2014",
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+NnD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA4BV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0CV;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA6BV;AA0ED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0L9D"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+QnD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA4BV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0CV;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA6BV;AAoQD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+W9D"}
@@ -4,6 +4,16 @@ import { resolve, basename, extname } from "node:path";
4
4
  import * as readline from "node:readline";
5
5
  import { parseTimingMarkers, normalizeTimingData } from "../lib/timing.js";
6
6
  import { debug } from "../lib/logger.js";
7
+ import { generateAllAudio, parseTranscript } from "../lib/tts.js";
8
+ import { extractTimestamps } from "../lib/timestamps.js";
9
+ import { buildAndWriteAlignment } from "../lib/alignment.js";
10
+ import { generateAndWriteEditProposals } from "../lib/edit-proposals.js";
11
+ import { retimeAndAssemble } from "../lib/retiming.js";
12
+ import { getToken } from "../lib/credentials.js";
13
+ import { createApiClient, getAppUrl } from "../lib/api-client.js";
14
+ import { getDefaultVoice } from "../lib/voice-config.js";
15
+ import { isCloudVoice, KOKORO_VOICES, KOKORO_DEFAULT_VOICE, resolveVoiceFromFlags, } from "../lib/voice-resolver.js";
16
+ import { generateCloudAudio, getSubscriptionStatus } from "../lib/cloud-tts.js";
7
17
  function validateDemoArtifacts(demoDir, demo) {
8
18
  const specPath = resolve(demoDir, "demo.spec.ts");
9
19
  const configPath = resolve(demoDir, "playwright.config.ts");
@@ -109,10 +119,19 @@ function findAudioFiles(demoDir, timingData) {
109
119
  }
110
120
  return { matched, missing };
111
121
  }
112
- function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
122
+ function getWatermarkPath() {
123
+ return resolve(import.meta.dirname ?? __dirname, "../../assets/watermark.png");
124
+ }
125
+ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath, applyWatermark = false) {
113
126
  const sceneMap = new Map(timingData.scenes.map((s) => [s.sceneId, s]));
114
127
  const inputArgs = ["-i", videoPath];
115
128
  const filterParts = [];
129
+ // If watermarking, add the watermark PNG as an input
130
+ const watermarkPath = applyWatermark ? getWatermarkPath() : null;
131
+ let watermarkInputIndex = -1;
132
+ if (watermarkPath && existsSync(watermarkPath)) {
133
+ watermarkInputIndex = 1; // will be shifted after audio inputs are added
134
+ }
116
135
  for (let i = 0; i < audioMatches.length; i++) {
117
136
  const match = audioMatches[i];
118
137
  const scene = sceneMap.get(match.sceneId);
@@ -123,11 +142,27 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
123
142
  const delayMs = scene.startMs;
124
143
  filterParts.push(`[${audioIndex}:a]adelay=${delayMs}|${delayMs}[a${audioIndex}]`);
125
144
  }
145
+ // Add watermark input after all audio inputs
146
+ if (watermarkPath && existsSync(watermarkPath)) {
147
+ inputArgs.push("-i", watermarkPath);
148
+ watermarkInputIndex = inputArgs.filter((a) => a === "-i").length - 1;
149
+ }
126
150
  const mixInputs = filterParts
127
151
  .map((_, i) => `[a${i + 1}]`)
128
152
  .join("");
129
- const filterComplex = filterParts.join("; ") +
153
+ let filterComplex = filterParts.join("; ") +
130
154
  `; ${mixInputs}amix=inputs=${audioMatches.length}:normalize=0[aout]`;
155
+ // Build video filter chain with optional watermark overlay
156
+ let videoMap = "0:v";
157
+ if (applyWatermark && watermarkInputIndex >= 0) {
158
+ // Scale watermark to ~8% of video width, position bottom-right with padding
159
+ // Use scale2ref so dimensions reference the main video, not the watermark PNG
160
+ filterComplex +=
161
+ `; [${watermarkInputIndex}:v][0:v]scale2ref=w=main_w*0.08:h=-1[wm_scaled][vmain]` +
162
+ `; [wm_scaled]format=rgba,colorchannelmixer=aa=0.6[wm]` +
163
+ `; [vmain][wm]overlay=W-w-24:H-h-16[vout]`;
164
+ videoMap = "[vout]";
165
+ }
131
166
  const args = [
132
167
  "ffmpeg",
133
168
  "-y",
@@ -135,7 +170,7 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
135
170
  "-filter_complex",
136
171
  `"${filterComplex}"`,
137
172
  "-map",
138
- "0:v",
173
+ videoMap,
139
174
  "-map",
140
175
  "[aout]",
141
176
  "-c:v",
@@ -151,9 +186,9 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
151
186
  ];
152
187
  return args.join(" ");
153
188
  }
154
- function stitchAudio(videoPath, audioMatches, timingData, recordingsDir) {
189
+ function stitchAudio(videoPath, audioMatches, timingData, recordingsDir, applyWatermark = false) {
155
190
  const outputPath = resolve(recordingsDir, "final.mp4");
156
- const cmd = buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath);
191
+ const cmd = buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath, applyWatermark);
157
192
  console.log(`Stitching audio with ffmpeg...\n`);
158
193
  try {
159
194
  execSync(cmd, {
@@ -272,12 +307,15 @@ function formatDuration(ms) {
272
307
  }
273
308
  return `${seconds}s`;
274
309
  }
275
- function printSummary(videoPath, timingPath, finalPath, timingData) {
310
+ function printSummary(videoPath, timingPath, finalPath, timingData, voice) {
276
311
  console.log("\n--- demofly generate summary ---\n");
277
312
  if (videoPath) {
278
313
  console.log(` Video: ${videoPath}`);
279
314
  }
280
315
  console.log(` Timing: ${timingPath}`);
316
+ if (voice) {
317
+ console.log(` Voice: ${voice.name} (${voice.provider})`);
318
+ }
281
319
  if (finalPath) {
282
320
  console.log(` Final: ${finalPath}`);
283
321
  console.log(` Stitched: yes`);
@@ -322,32 +360,233 @@ function hasFfmpeg() {
322
360
  return false;
323
361
  }
324
362
  }
363
+ function readVoiceMetadata(projectDir) {
364
+ const metaPath = resolve(projectDir, "audio", ".voice.json");
365
+ try {
366
+ if (!existsSync(metaPath))
367
+ return null;
368
+ return JSON.parse(readFileSync(metaPath, "utf-8"));
369
+ }
370
+ catch {
371
+ return null;
372
+ }
373
+ }
374
+ function writeVoiceMetadata(projectDir, voice) {
375
+ const audioDir = resolve(projectDir, "audio");
376
+ if (!existsSync(audioDir))
377
+ mkdirSync(audioDir, { recursive: true });
378
+ writeFileSync(resolve(audioDir, ".voice.json"), JSON.stringify({ name: voice.name, provider: voice.provider, providerId: voice.providerId }, null, 2) + "\n");
379
+ }
380
+ function shouldRegenerateAudio(projectDir, resolvedVoice, explicitVoiceFlag, timingData) {
381
+ if (explicitVoiceFlag)
382
+ return true;
383
+ const audioDir = resolve(projectDir, "audio");
384
+ if (!existsSync(audioDir))
385
+ return true;
386
+ // Check if any scene has audio
387
+ const hasAny = timingData.scenes.some((s) => {
388
+ const wav = resolve(audioDir, `${s.sceneId}.wav`);
389
+ const mp3 = resolve(audioDir, `${s.sceneId}.mp3`);
390
+ return existsSync(wav) || existsSync(mp3);
391
+ });
392
+ if (!hasAny)
393
+ return true;
394
+ const meta = readVoiceMetadata(projectDir);
395
+ if (!meta)
396
+ return true;
397
+ return meta.name !== resolvedVoice.name || meta.provider !== resolvedVoice.provider;
398
+ }
399
+ function resolveVoiceForGenerate(voiceName, providerName) {
400
+ return resolveVoiceFromFlags(voiceName, providerName, {
401
+ getDefaultVoice,
402
+ getToken,
403
+ createApiClient,
404
+ });
405
+ }
406
+ async function generateAudioForProject(narrationPath, projectDir, voice, speed, sceneFilter) {
407
+ console.log(`Generating TTS audio...`);
408
+ console.log(` Voice: ${voice.name} (${voice.provider})\n`);
409
+ let results;
410
+ let actualVoice = voice;
411
+ if (isCloudVoice(voice)) {
412
+ const cloudResult = await generateCloudTtsInline(narrationPath, projectDir, voice, speed, sceneFilter);
413
+ results = cloudResult.ttsResults;
414
+ actualVoice = cloudResult.actualVoice;
415
+ }
416
+ else {
417
+ const ttsOpts = { voice: voice.providerId, speed, sceneFilter };
418
+ results = generateAllAudio(narrationPath, projectDir, ttsOpts);
419
+ }
420
+ if (results.length > 0) {
421
+ writeVoiceMetadata(projectDir, actualVoice);
422
+ }
423
+ return { ttsResults: results, actualVoice };
424
+ }
425
+ async function generateCloudTtsInline(narrationPath, projectDir, voice, speed, sceneFilter) {
426
+ const token = await getToken();
427
+ if (!token) {
428
+ return fallbackToKokoro(narrationPath, projectDir, speed, "Not authenticated.", sceneFilter);
429
+ }
430
+ const api = createApiClient(token);
431
+ try {
432
+ const sub = await getSubscriptionStatus(api);
433
+ if (sub.plan !== "pro") {
434
+ return fallbackToKokoro(narrationPath, projectDir, speed, `Premium voices require a Pro subscription. Upgrade at ${getAppUrl()}/upgrade`, sceneFilter);
435
+ }
436
+ }
437
+ catch {
438
+ return fallbackToKokoro(narrationPath, projectDir, speed, "Cloud TTS unavailable.", sceneFilter);
439
+ }
440
+ const content = readFileSync(narrationPath, "utf-8");
441
+ let scenes = parseTranscript(content);
442
+ if (sceneFilter) {
443
+ scenes = scenes.filter(s => s.sceneId === sceneFilter);
444
+ }
445
+ if (scenes.length === 0)
446
+ return { ttsResults: [], actualVoice: voice };
447
+ const audioDir = resolve(projectDir, "audio");
448
+ if (!existsSync(audioDir))
449
+ mkdirSync(audioDir, { recursive: true });
450
+ const results = [];
451
+ for (const scene of scenes) {
452
+ console.log(` TTS: ${scene.sceneId} (${scene.text.length} chars)`);
453
+ try {
454
+ const start = performance.now();
455
+ const { audio, durationS } = await generateCloudAudio(scene.text, voice.providerId, voice.provider, api, { speed });
456
+ const elapsedS = (performance.now() - start) / 1000;
457
+ const outputPath = resolve(audioDir, `${scene.sceneId}.mp3`);
458
+ writeFileSync(outputPath, Buffer.from(audio));
459
+ results.push({ sceneId: scene.sceneId, filePath: outputPath, durationS, peakMemoryMb: 0, elapsedS });
460
+ console.log(` -> ${durationS.toFixed(1)}s audio, ${elapsedS.toFixed(1)}s elapsed`);
461
+ }
462
+ catch (err) {
463
+ if (err.status === 403) {
464
+ return fallbackToKokoro(narrationPath, projectDir, speed, `Premium voices require a Pro subscription. Upgrade at ${getAppUrl()}/upgrade`, sceneFilter);
465
+ }
466
+ console.warn(` Cloud TTS failed for ${scene.sceneId}: ${err.message}`);
467
+ return fallbackToKokoro(narrationPath, projectDir, speed, "Cloud TTS unavailable, falling back to local voice.", sceneFilter);
468
+ }
469
+ }
470
+ return { ttsResults: results, actualVoice: voice };
471
+ }
472
+ function fallbackToKokoro(narrationPath, projectDir, speed, reason, sceneFilter) {
473
+ console.warn(`${reason} Falling back to Kokoro.\n`);
474
+ const ttsResults = generateAllAudio(narrationPath, projectDir, {
475
+ voice: KOKORO_VOICES[0].kokoroId,
476
+ speed,
477
+ sceneFilter,
478
+ });
479
+ return { ttsResults, actualVoice: KOKORO_DEFAULT_VOICE };
480
+ }
325
481
  export function registerGenerateCommand(program) {
326
482
  program
327
- .command("generate <project>")
328
- .description("Assemble a demo video from existing artifacts")
483
+ .command("generate <demo>")
484
+ .description("Record, narrate, and assemble a demo video")
329
485
  .option("--record", "Run Playwright recording before assembly")
330
- .option("--narrate", "REMOVED: use `demofly tts` instead")
331
- .action(async (project, opts) => {
332
- // Migration check for removed --narrate flag
333
- if (opts.narrate) {
334
- console.error("--narrate has been removed. Use `demofly tts` to generate narration, then `demofly generate` to assemble.");
335
- process.exit(1);
336
- }
337
- const projectDir = resolve(process.cwd(), "demofly", project);
486
+ .option("--audio", "Generate audio only (skip recording and assembly)")
487
+ .option("--timestamps", "Run Whisper on audio files, produce timestamps.json")
488
+ .option("--align", "Produce alignment.json from timestamps + timing data")
489
+ .option("--assemble", "Full intelligent assembly (align + edit proposals + retiming)")
490
+ .option("--video", "Record video only (skip audio generation)")
491
+ .option("--scene <id>", "Generate audio for a specific scene only")
492
+ .option("--voice <name>", "TTS voice name")
493
+ .option("--provider <provider>", "TTS provider (e.g., elevenlabs, openai, kokoro)")
494
+ .option("--speed <multiplier>", "TTS speed multiplier", "1.0")
495
+ .option("--no-audio", "Skip TTS generation entirely")
496
+ .action(async (demo, opts) => {
497
+ const projectDir = resolve(process.cwd(), "demofly", demo);
338
498
  debug(`Resolved demo directory: ${projectDir}`);
339
499
  // Step 1: Validate artifacts exist
340
- if (!validateDemoArtifacts(projectDir, project)) {
500
+ if (!validateDemoArtifacts(projectDir, demo)) {
341
501
  process.exit(1);
342
502
  }
343
503
  const recordingsDir = ensureRecordingsDir(projectDir);
504
+ // Flag validation
505
+ if (opts.audio === true && opts.video) {
506
+ console.error("--audio and --video cannot be used together. Use one or run without either for the full pipeline.");
507
+ process.exit(1);
508
+ }
509
+ if (opts.video && opts.scene) {
510
+ console.warn("Warning: --scene has no effect with --video. Scene filtering only applies to audio generation.\n");
511
+ }
512
+ // Audio-only mode: generate TTS and exit
513
+ if (opts.audio === true) {
514
+ // Resolve narration source: prefer narration.md, fall back to transcript.md
515
+ const narrationPath = resolve(projectDir, "narration.md");
516
+ const legacyTranscriptPath = resolve(projectDir, "transcript.md");
517
+ const sourcePath = existsSync(narrationPath) ? narrationPath : legacyTranscriptPath;
518
+ if (!existsSync(sourcePath)) {
519
+ console.error("No narration.md found. Create a narration script to generate audio.");
520
+ process.exit(1);
521
+ }
522
+ const speed = parseFloat(opts.speed);
523
+ const voice = await resolveVoiceForGenerate(opts.voice, opts.provider);
524
+ const { ttsResults, actualVoice } = await generateAudioForProject(sourcePath, projectDir, voice, speed, opts.scene);
525
+ console.log("\n--- demofly generate --audio summary ---\n");
526
+ console.log(` Voice: ${actualVoice.name} (${actualVoice.provider})`);
527
+ console.log(` Generated: ${ttsResults.length} scene(s)`);
528
+ if (opts.scene) {
529
+ console.log(` Scene: ${opts.scene}`);
530
+ }
531
+ console.log();
532
+ return;
533
+ }
534
+ // Timestamps-only mode: run Whisper on existing audio and exit
535
+ if (opts.timestamps) {
536
+ const audioDir = resolve(projectDir, "audio");
537
+ if (!existsSync(audioDir)) {
538
+ console.error(`No audio directory found. Run \`demofly generate ${demo} --audio\` first to generate audio.`);
539
+ process.exit(1);
540
+ }
541
+ console.log("Extracting timestamps from audio files...\n");
542
+ const tsData = extractTimestamps(projectDir);
543
+ console.log("\n--- demofly generate --timestamps summary ---\n");
544
+ console.log(` Scenes: ${tsData.scenes.length}`);
545
+ for (const s of tsData.scenes) {
546
+ console.log(` ${s.sceneId}: ${s.durationMs}ms, ${s.words.length} words, ${s.phrases.length} phrases`);
547
+ }
548
+ console.log();
549
+ return;
550
+ }
551
+ // Align-only mode: produce alignment.json and exit
552
+ if (opts.align && !opts.assemble) {
553
+ console.log("Building alignment from timestamps + timing data...\n");
554
+ const alignment = buildAndWriteAlignment(projectDir);
555
+ if (!alignment) {
556
+ process.exit(1);
557
+ }
558
+ console.log("\n--- demofly generate --align summary ---\n");
559
+ console.log(` Beats: ${alignment.summary.totalBeats}`);
560
+ console.log(` Aligned: ${alignment.summary.aligned}`);
561
+ console.log(` Adjustments: ${alignment.summary.needsAdjustment}`);
562
+ console.log(` Critical: ${alignment.summary.critical}`);
563
+ console.log(` Max drift: ${alignment.summary.maxDriftMs}ms`);
564
+ console.log();
565
+ return;
566
+ }
567
+ // Video-only mode: record and exit
568
+ if (opts.video) {
569
+ debug("Video-only mode: running Playwright test");
570
+ const result = recordDemo(projectDir, demo);
571
+ const videoPath = result.videoPath
572
+ ? resolve(recordingsDir, "video.webm")
573
+ : null;
574
+ const timingData = parseTimingMarkers(result.stdout);
575
+ const timingPath = resolve(recordingsDir, "timing.json");
576
+ if (timingData.scenes.length === 0) {
577
+ console.warn("Warning: No DEMOFLY timing markers found in test output. Video was still recorded.");
578
+ }
579
+ printSummary(videoPath, timingPath, null, timingData, null);
580
+ return;
581
+ }
582
+ // Full pipeline
344
583
  let videoPath = null;
345
584
  let timingData;
346
585
  let timingPath;
347
586
  // Step 2: Record or use existing artifacts
348
587
  if (opts.record) {
349
588
  debug("Recording mode: running Playwright test");
350
- const result = recordDemo(projectDir, project);
589
+ const result = recordDemo(projectDir, demo);
351
590
  videoPath = result.videoPath
352
591
  ? resolve(recordingsDir, "video.webm")
353
592
  : null;
@@ -375,7 +614,7 @@ export function registerGenerateCommand(program) {
375
614
  console.warn(missingMsg);
376
615
  const shouldRecord = await promptYesNo("No existing artifacts found. Run Playwright recording now?");
377
616
  if (shouldRecord) {
378
- const result = recordDemo(projectDir, project);
617
+ const result = recordDemo(projectDir, demo);
379
618
  videoPath = result.videoPath
380
619
  ? resolve(recordingsDir, "video.webm")
381
620
  : null;
@@ -391,7 +630,7 @@ export function registerGenerateCommand(program) {
391
630
  }
392
631
  }
393
632
  else {
394
- console.error(`${missingMsg}\nRun \`demofly generate ${project} --record\` to record artifacts first.`);
633
+ console.error(`${missingMsg}\nRun \`demofly generate ${demo} --record\` to record artifacts first.`);
395
634
  process.exit(1);
396
635
  }
397
636
  // If we fell through from the prompt path, videoPath/timingData are set above.
@@ -411,7 +650,54 @@ export function registerGenerateCommand(program) {
411
650
  timingPath = timingPath;
412
651
  }
413
652
  }
414
- // Step 3: Find audio files and check ffmpeg
653
+ // Validate --scene if provided
654
+ if (opts.scene) {
655
+ const validIds = timingData.scenes.map(s => s.sceneId);
656
+ if (!validIds.includes(opts.scene)) {
657
+ console.error(`Scene "${opts.scene}" not found. Available scenes: ${validIds.join(", ")}`);
658
+ process.exit(1);
659
+ }
660
+ }
661
+ // Step 3: Generate TTS audio if needed
662
+ let voiceUsed = null;
663
+ const narrationPath = resolve(projectDir, "narration.md");
664
+ const legacyTranscriptPath = resolve(projectDir, "transcript.md");
665
+ const narrationSourcePath = existsSync(narrationPath) ? narrationPath : legacyTranscriptPath;
666
+ if (opts.audio !== false && existsSync(narrationSourcePath)) {
667
+ const speed = parseFloat(opts.speed);
668
+ const voice = await resolveVoiceForGenerate(opts.voice, opts.provider);
669
+ const explicitVoiceFlag = !!(opts.voice || opts.provider);
670
+ if (opts.scene || shouldRegenerateAudio(projectDir, voice, explicitVoiceFlag, timingData)) {
671
+ const { ttsResults, actualVoice } = await generateAudioForProject(narrationSourcePath, projectDir, voice, speed, opts.scene);
672
+ if (ttsResults.length > 0) {
673
+ voiceUsed = actualVoice;
674
+ }
675
+ }
676
+ else {
677
+ debug("Audio in sync with voice selection, skipping TTS");
678
+ voiceUsed = voice;
679
+ }
680
+ }
681
+ else if (opts.audio === false) {
682
+ debug("--no-audio: skipping TTS generation");
683
+ }
684
+ // Step 4: Determine if watermark should be applied (free-tier users)
685
+ let applyWatermark = true; // default to watermark for safety
686
+ try {
687
+ const token = await getToken();
688
+ if (token) {
689
+ const api = createApiClient(token);
690
+ const sub = await getSubscriptionStatus(api);
691
+ applyWatermark = sub.plan !== "pro";
692
+ }
693
+ }
694
+ catch {
695
+ debug("Could not check subscription for watermark — defaulting to watermark");
696
+ }
697
+ if (applyWatermark) {
698
+ debug("Applying DemoFly watermark (free tier)");
699
+ }
700
+ // Step 5: Find audio files and check ffmpeg
415
701
  const { matched, missing } = findAudioFiles(projectDir, timingData);
416
702
  debug(`Audio files: ${matched.length} matched, ${missing.length} missing`);
417
703
  let finalPath = null;
@@ -423,16 +709,49 @@ export function registerGenerateCommand(program) {
423
709
  if (missing.length > 0) {
424
710
  console.warn(`Warning: No audio files found for scenes: ${missing.join(", ")}`);
425
711
  }
426
- finalPath = stitchAudio(videoPath, matched, timingData, recordingsDir);
712
+ if (opts.assemble) {
713
+ // Intelligent assembly: align → edit proposals → retiming
714
+ console.log("Running intelligent assembly pipeline...\n");
715
+ // Step 4a: Build alignment
716
+ console.log(" Step 1: Building alignment...");
717
+ const alignment = buildAndWriteAlignment(projectDir);
718
+ if (alignment) {
719
+ // Step 4b: Generate edit proposals
720
+ console.log(" Step 2: Generating edit proposals...");
721
+ const proposals = generateAndWriteEditProposals(projectDir);
722
+ if (proposals && proposals.decisions.length > 0) {
723
+ // Step 4c: Retiming + assembly
724
+ console.log(" Step 3: Retiming and assembling...\n");
725
+ const audioDir = resolve(projectDir, "audio");
726
+ finalPath = retimeAndAssemble(videoPath, audioDir, timingData, proposals, recordingsDir);
727
+ }
728
+ }
729
+ // Fall back to simple stitch if intelligent assembly failed
730
+ if (!finalPath) {
731
+ console.log(" Intelligent assembly incomplete, falling back to simple stitch.\n");
732
+ finalPath = stitchAudio(videoPath, matched, timingData, recordingsDir, applyWatermark);
733
+ }
734
+ }
735
+ else {
736
+ // Simple stitch (default)
737
+ finalPath = stitchAudio(videoPath, matched, timingData, recordingsDir, applyWatermark);
738
+ }
427
739
  }
428
740
  else if (videoPath) {
429
741
  // No audio — copy or convert video as final output
430
742
  if (hasFfmpeg()) {
431
- // Convert webm to mp4 for compatibility
432
743
  const outputPath = resolve(recordingsDir, "final.mp4");
433
744
  console.log("No audio files found. Converting video to mp4...\n");
434
745
  try {
435
- execSync(`ffmpeg -y -i "${videoPath}" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p "${outputPath}"`, { encoding: "utf-8", timeout: 600_000, stdio: ["pipe", "pipe", "pipe"] });
746
+ const watermarkPath = getWatermarkPath();
747
+ if (applyWatermark && existsSync(watermarkPath)) {
748
+ execSync(`ffmpeg -y -i "${videoPath}" -i "${watermarkPath}" ` +
749
+ `-filter_complex "[1:v][0:v]scale2ref=w=main_w*0.08:h=-1[wm_scaled][vmain];[wm_scaled]format=rgba,colorchannelmixer=aa=0.6[wm];[vmain][wm]overlay=W-w-24:H-h-16[vout]" ` +
750
+ `-map "[vout]" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p "${outputPath}"`, { encoding: "utf-8", timeout: 600_000, stdio: ["pipe", "pipe", "pipe"] });
751
+ }
752
+ else {
753
+ execSync(`ffmpeg -y -i "${videoPath}" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p "${outputPath}"`, { encoding: "utf-8", timeout: 600_000, stdio: ["pipe", "pipe", "pipe"] });
754
+ }
436
755
  finalPath = outputPath;
437
756
  }
438
757
  catch (error) {
@@ -454,7 +773,7 @@ export function registerGenerateCommand(program) {
454
773
  else if (!videoPath) {
455
774
  console.warn("Warning: No recorded video found. Skipping assembly.");
456
775
  }
457
- // Step 4: Split scenes and extract thumbnails
776
+ // Step 5: Split scenes and extract thumbnails
458
777
  if (videoPath && timingData.scenes.length > 0 && hasFfmpeg()) {
459
778
  console.log("Splitting video into per-scene clips...\n");
460
779
  const sceneClips = splitScenes(videoPath, timingData, recordingsDir);
@@ -466,16 +785,8 @@ export function registerGenerateCommand(program) {
466
785
  else if (videoPath && timingData.scenes.length > 0 && !hasFfmpeg()) {
467
786
  console.warn("Warning: ffmpeg not available. Skipping scene splitting and thumbnail extraction.");
468
787
  }
469
- // Step 5: Print summary
470
- printSummary(videoPath, timingPath, finalPath, timingData);
788
+ // Step 6: Print summary
789
+ printSummary(videoPath, timingPath, finalPath, timingData, voiceUsed);
471
790
  });
472
- // Hide the --narrate option from help output
473
- const generateCmd = program.commands.find((c) => c.name() === "generate");
474
- if (generateCmd) {
475
- const narrateOpt = generateCmd.options.find((o) => o.long === "--narrate");
476
- if (narrateOpt) {
477
- narrateOpt.hidden = true;
478
- }
479
- }
480
791
  }
481
792
  //# sourceMappingURL=generate.js.map