@argo-video/cli 0.19.0 → 0.21.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 (50) hide show
  1. package/README.md +45 -3
  2. package/dist/camera-move.d.ts +53 -0
  3. package/dist/camera-move.d.ts.map +1 -0
  4. package/dist/camera-move.js +107 -0
  5. package/dist/camera-move.js.map +1 -0
  6. package/dist/camera.d.ts +9 -0
  7. package/dist/camera.d.ts.map +1 -1
  8. package/dist/camera.js +38 -0
  9. package/dist/camera.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +45 -0
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.d.ts +16 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js.map +1 -1
  16. package/dist/export.d.ts +13 -1
  17. package/dist/export.d.ts.map +1 -1
  18. package/dist/export.js +113 -11
  19. package/dist/export.js.map +1 -1
  20. package/dist/freeze.d.ts +59 -0
  21. package/dist/freeze.d.ts.map +1 -0
  22. package/dist/freeze.js +113 -0
  23. package/dist/freeze.js.map +1 -0
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +6 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/media.d.ts +1 -0
  29. package/dist/media.d.ts.map +1 -1
  30. package/dist/media.js +20 -0
  31. package/dist/media.js.map +1 -1
  32. package/dist/music/musicgen.d.ts +43 -0
  33. package/dist/music/musicgen.d.ts.map +1 -0
  34. package/dist/music/musicgen.js +120 -0
  35. package/dist/music/musicgen.js.map +1 -0
  36. package/dist/narration.d.ts +10 -0
  37. package/dist/narration.d.ts.map +1 -1
  38. package/dist/narration.js +33 -1
  39. package/dist/narration.js.map +1 -1
  40. package/dist/pipeline.d.ts.map +1 -1
  41. package/dist/pipeline.js +94 -14
  42. package/dist/pipeline.js.map +1 -1
  43. package/dist/preview.d.ts +4 -0
  44. package/dist/preview.d.ts.map +1 -1
  45. package/dist/preview.js +641 -9
  46. package/dist/preview.js.map +1 -1
  47. package/dist/record.d.ts.map +1 -1
  48. package/dist/record.js +26 -1
  49. package/dist/record.js.map +1 -1
  50. package/package.json +1 -1
package/dist/export.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { Placement } from './tts/align.js';
2
- import type { TransitionConfig } from './config.js';
2
+ import type { TransitionConfig, WatermarkConfig } from './config.js';
3
3
  import { type Segment } from './speed-ramp.js';
4
+ import { type CameraMove } from './camera-move.js';
5
+ import { type ResolvedFreeze } from './freeze.js';
4
6
  export interface ExportOptions {
5
7
  demoName: string;
6
8
  argoDir: string;
@@ -33,6 +35,16 @@ export interface ExportOptions {
33
35
  speedRampSegments?: Segment[];
34
36
  /** Apply EBU R128 loudness normalization to audio. */
35
37
  loudnorm?: boolean;
38
+ /** Path to a background music file to mix under narration. */
39
+ musicPath?: string;
40
+ /** Music volume level (0.0 to 1.0). Default: 0.15. Mixed at a constant level. */
41
+ musicVolume?: number;
42
+ /** Post-export camera moves (zoom/pan) recorded during Playwright session. */
43
+ cameraMoves?: CameraMove[];
44
+ /** Resolved freeze-frame holds — applied BEFORE transitions (they change the timeline). */
45
+ freezeSpecs?: ResolvedFreeze[];
46
+ /** Watermark/brand bug overlay config. */
47
+ watermark?: WatermarkConfig;
36
48
  }
37
49
  /**
38
50
  * Check whether ffmpeg is available on the system PATH.
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErE,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,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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;IACvB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;IACxC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iDAAiD;IACjD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAYrC;AAuDD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA6QzE"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGrE,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,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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;IACvB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;IACxC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iDAAiD;IACjD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,2FAA2F;IAC3F,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAMD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAYrC;AAuDD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuYzE"}
package/dist/export.js CHANGED
@@ -4,6 +4,9 @@ import { join } from 'node:path';
4
4
  import { buildTransitionFilters } from './transitions.js';
5
5
  import { runFfmpegWithProgress } from './progress.js';
6
6
  import { buildSpeedRampFilter } from './speed-ramp.js';
7
+ import { buildCameraMoveFilter } from './camera-move.js';
8
+ import { buildFreezeFilter } from './freeze.js';
9
+ import { getVideoFrameRate } from './media.js';
7
10
  function formatSeconds(ms) {
8
11
  return (ms / 1000).toFixed(3).replace(/\.?0+$/, '');
9
12
  }
@@ -112,6 +115,18 @@ export async function exportVideo(options) {
112
115
  thumbInputIdx = nextInput++;
113
116
  args.push('-i', thumbnailPath);
114
117
  }
118
+ // Background music input
119
+ const musicPath = options.musicPath;
120
+ const hasMusic = musicPath && existsSync(musicPath);
121
+ let musicInputIdx = -1;
122
+ if (musicPath && !existsSync(musicPath)) {
123
+ console.warn(`Warning: configured music path "${musicPath}" does not exist. ` +
124
+ `The video will be exported without background music.`);
125
+ }
126
+ if (hasMusic) {
127
+ musicInputIdx = nextInput++;
128
+ args.push('-stream_loop', '-1', '-i', musicPath);
129
+ }
115
130
  // Build video filter chain
116
131
  const filterParts = [];
117
132
  let videoSource = '0:v';
@@ -124,6 +139,15 @@ export async function exportVideo(options) {
124
139
  videoSource = speedRampFilter.outputLabels.video;
125
140
  audioSource = speedRampFilter.outputLabels.audio;
126
141
  }
142
+ // Freeze-frame holds — applied BEFORE transitions (they shift the timeline)
143
+ const freezeSpecs = options.freezeSpecs;
144
+ if (freezeSpecs && freezeSpecs.length > 0) {
145
+ const freezeResult = buildFreezeFilter(freezeSpecs, options.totalDurationMs ?? 0, videoSource);
146
+ if (freezeResult) {
147
+ filterParts.push(freezeResult.filter);
148
+ videoSource = freezeResult.outputLabel;
149
+ }
150
+ }
127
151
  const vFilters = [];
128
152
  if (tailPadMs && tailPadMs > 0) {
129
153
  vFilters.push(`tpad=stop_mode=clone:stop_duration=${formatSeconds(tailPadMs)}`);
@@ -148,15 +172,18 @@ export async function exportVideo(options) {
148
172
  // Fade transitions use filter_complex with split+concat.
149
173
  // Apply any vFilters (scale, tpad) before the transition.
150
174
  let fc = transitionComplex.filterComplex;
151
- if (speedRampFilter) {
175
+ // Replace default stream refs when upstream filters (speed ramp, camera moves) change the labels
176
+ const hasUpstreamVideo = videoSource !== '0:v';
177
+ const hasUpstreamAudio = audioSource !== '1:a';
178
+ if (hasUpstreamVideo) {
152
179
  fc = fc.replace('[0:v]', `[${videoSource}]`);
153
- if (audioSource && transitionComplex.audioOutput) {
154
- fc = fc.replace('[1:a]', `[${audioSource}]`);
155
- }
180
+ }
181
+ if (hasUpstreamAudio && transitionComplex.audioOutput) {
182
+ fc = fc.replace('[1:a]', `[${audioSource}]`);
156
183
  }
157
184
  if (vFilters.length > 0) {
158
185
  // Prepend vFilters to the video input before split
159
- const inputRef = speedRampFilter ? `[${videoSource}]` : '[0:v]';
186
+ const inputRef = hasUpstreamVideo ? `[${videoSource}]` : '[0:v]';
160
187
  fc = fc.replace(inputRef + 'split=', `${inputRef}${vFilters.join(',')},split=`);
161
188
  }
162
189
  filterParts.push(fc);
@@ -174,9 +201,79 @@ export async function exportVideo(options) {
174
201
  args.push('-vf', vFilters.join(','));
175
202
  }
176
203
  }
204
+ // Post-export camera moves (zoom/pan) — applied AFTER transitions so that
205
+ // the time variable `t` is continuous across the concatenated output.
206
+ const cameraMoves = options.cameraMoves;
207
+ if (cameraMoves && cameraMoves.length > 0) {
208
+ const frameW = (outputWidth ?? 1920) * deviceScaleFactor;
209
+ const frameH = (outputHeight ?? 1080) * deviceScaleFactor;
210
+ const sourceFps = getVideoFrameRate(videoPath);
211
+ const camFilter = buildCameraMoveFilter(cameraMoves, frameW, frameH, `[${videoSource}]`, sourceFps);
212
+ if (camFilter) {
213
+ filterParts.push(camFilter.filter);
214
+ videoSource = camFilter.outputLabel;
215
+ }
216
+ }
217
+ // Watermark overlay — applied AFTER all other video filters (last in chain)
218
+ const watermark = options.watermark;
219
+ if (watermark && watermark.src) {
220
+ if (!existsSync(watermark.src)) {
221
+ console.warn(`Warning: watermark image "${watermark.src}" does not exist. ` +
222
+ `The video will be exported without a watermark.`);
223
+ }
224
+ else {
225
+ const wmInputIdx = nextInput++;
226
+ args.push('-i', watermark.src);
227
+ const wmPosition = watermark.position ?? 'bottom-right';
228
+ const wmMargin = watermark.margin ?? 20;
229
+ const wmOpacity = watermark.opacity ?? 0.7;
230
+ // Position expressions for ffmpeg overlay filter
231
+ const positionMap = {
232
+ 'top-left': `x=${wmMargin}:y=${wmMargin}`,
233
+ 'top-right': `x=W-w-${wmMargin}:y=${wmMargin}`,
234
+ 'bottom-left': `x=${wmMargin}:y=H-h-${wmMargin}`,
235
+ 'bottom-right': `x=W-w-${wmMargin}:y=H-h-${wmMargin}`,
236
+ };
237
+ const posExpr = positionMap[wmPosition];
238
+ // Build watermark filter chain
239
+ const wmRef = `${wmInputIdx}:v`;
240
+ const needsOpacity = wmOpacity < 1.0;
241
+ if (needsOpacity) {
242
+ filterParts.push(`[${wmRef}]colorchannelmixer=aa=${wmOpacity}[wm]`);
243
+ }
244
+ const wmLabel = needsOpacity ? 'wm' : wmRef;
245
+ filterParts.push(`[${videoSource}][${wmLabel}]overlay=${posExpr}:format=auto[outwm]`);
246
+ videoSource = 'outwm';
247
+ }
248
+ }
249
+ // Background music mixing — applied before loudnorm so normalization covers the mix
250
+ if (hasMusic) {
251
+ const musicVol = options.musicVolume ?? 0.15;
252
+ const musicRef = `${musicInputIdx}:a`;
253
+ if (hasAudio && audioSource) {
254
+ // Mix music under narration: lower music volume, combine with amix
255
+ // afade on the music gives a 2s fade-out at the end (duration estimated from total)
256
+ const fadeFilter = totalDurationMs && totalDurationMs > 2000
257
+ ? `,afade=t=out:st=${formatSeconds(totalDurationMs - 2000)}:d=2`
258
+ : '';
259
+ filterParts.push(`[${musicRef}]volume=${musicVol}${fadeFilter}[bgm]`);
260
+ filterParts.push(`[${audioSource}][bgm]amix=inputs=2:duration=first:dropout_transition=2[amixed]`);
261
+ audioSource = 'amixed';
262
+ }
263
+ else {
264
+ // No narration — use music as sole audio track
265
+ const fadeFilter = totalDurationMs && totalDurationMs > 2000
266
+ ? `,afade=t=out:st=${formatSeconds(totalDurationMs - 2000)}:d=2`
267
+ : '';
268
+ filterParts.push(`[${musicRef}]volume=${musicVol}${fadeFilter}[bgm]`);
269
+ audioSource = 'bgm';
270
+ }
271
+ }
272
+ // Track whether we have any audio output (narration, music, or both)
273
+ const hasAnyAudio = hasAudio || hasMusic;
177
274
  // Audio loudnorm — must be added before filter_complex is finalized
178
275
  let useLoudnormSimple = false;
179
- if (hasAudio && options.loudnorm) {
276
+ if (hasAnyAudio && audioSource && options.loudnorm) {
180
277
  if (filterParts.length > 0) {
181
278
  // Append loudnorm inside the filter_complex audio chain
182
279
  filterParts.push(`[${audioSource}]loudnorm=I=-16:TP=-1.5:LRA=11[anorm]`);
@@ -190,7 +287,7 @@ export async function exportVideo(options) {
190
287
  args.push('-filter_complex', filterParts.join(';\n'));
191
288
  }
192
289
  args.push('-c:v', 'libx264', '-preset', preset, '-crf', String(crf));
193
- if (hasAudio) {
290
+ if (hasAnyAudio) {
194
291
  if (useLoudnormSimple) {
195
292
  args.push('-af', 'loudnorm=I=-16:TP=-1.5:LRA=11');
196
293
  }
@@ -206,13 +303,13 @@ export async function exportVideo(options) {
206
303
  const mapRef = (label) => (label.includes(':') ? label : `[${label}]`);
207
304
  if (usesExplicitMaps) {
208
305
  args.push('-map', mapRef(videoSource));
209
- if (hasAudio && audioSource)
306
+ if (hasAnyAudio && audioSource)
210
307
  args.push('-map', mapRef(audioSource));
211
308
  }
212
309
  if (hasThumbnail) {
213
310
  if (!usesExplicitMaps) {
214
311
  args.push('-map', '0:v');
215
- if (hasAudio)
312
+ if (hasAnyAudio)
216
313
  args.push('-map', '1:a');
217
314
  }
218
315
  args.push('-map', `${thumbInputIdx}:v`);
@@ -220,8 +317,13 @@ export async function exportVideo(options) {
220
317
  args.push('-c:v:1', 'png', '-disposition:v:1', 'attached_pic');
221
318
  // Skip -shortest: the PNG has 0 duration and would truncate the whole output.
222
319
  }
223
- else if (hasAudio) {
224
- args.push('-shortest');
320
+ else if (hasAnyAudio) {
321
+ // Skip -shortest when freeze-frame holds extend the video beyond the audio.
322
+ // Freezes intentionally make video longer; -shortest would truncate back.
323
+ const hasFreezes = freezeSpecs && freezeSpecs.length > 0;
324
+ if (!hasFreezes) {
325
+ args.push('-shortest');
326
+ }
225
327
  }
226
328
  args.push('-y', outputPath);
227
329
  // Use progress bar when we know the total duration
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { Placement } from './tts/align.js';
2
+ /**
3
+ * Specification for a freeze-frame hold at a particular point in the timeline.
4
+ */
5
+ export interface FreezeSpec {
6
+ /** Scene name this freeze belongs to. */
7
+ scene: string;
8
+ /** Offset in ms from the scene start where the frame should be frozen. */
9
+ atMs: number;
10
+ /** Duration in ms to hold the frozen frame. */
11
+ durationMs: number;
12
+ }
13
+ /**
14
+ * A freeze resolved to an absolute position on the (post-trim, pre-export) timeline.
15
+ */
16
+ export interface ResolvedFreeze {
17
+ /** Absolute time in ms where the freeze occurs. */
18
+ absoluteMs: number;
19
+ /** Duration in ms to hold the frozen frame. */
20
+ durationMs: number;
21
+ }
22
+ /**
23
+ * Resolve scene-relative freeze specs to absolute timeline positions using placements.
24
+ *
25
+ * Freezes whose scene is not found in placements are silently dropped.
26
+ * The returned array is sorted chronologically.
27
+ */
28
+ export declare function resolveFreezes(freezes: FreezeSpec[], placements: Placement[]): ResolvedFreeze[];
29
+ /**
30
+ * Build an ffmpeg filter_complex expression that freezes specific frames.
31
+ *
32
+ * Strategy: split the video at each freeze point using trim, apply tpad to clone
33
+ * the last frame for the freeze duration, then concatenate all segments.
34
+ *
35
+ * Freezes are processed in chronological order. Each freeze adds `durationMs`
36
+ * to the total video length.
37
+ *
38
+ * @param freezes - Resolved freezes sorted chronologically.
39
+ * @param totalDurationMs - Total video duration before freezes (used for the final trim).
40
+ * @param inputLabel - The ffmpeg stream label for the video input (e.g. '0:v').
41
+ * @returns The filter expression, output label, and total added duration — or null if no freezes.
42
+ */
43
+ export declare function buildFreezeFilter(freezes: ResolvedFreeze[], totalDurationMs: number, inputLabel: string): {
44
+ filter: string;
45
+ outputLabel: string;
46
+ addedDurationMs: number;
47
+ } | null;
48
+ /**
49
+ * Shift placements, chapters, and subtitles forward to account for freeze-inserted duration.
50
+ *
51
+ * Each freeze at `absoluteMs` pushes everything after that point by `durationMs`.
52
+ * Freezes must be sorted chronologically.
53
+ */
54
+ export declare function adjustPlacementsForFreezes(placements: Placement[], freezes: ResolvedFreeze[]): Placement[];
55
+ /**
56
+ * Compute the total duration added by all freezes.
57
+ */
58
+ export declare function totalFreezeDurationMs(freezes: ResolvedFreeze[]): number;
59
+ //# sourceMappingURL=freeze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,SAAS,EAAE,GACtB,cAAc,EAAE,CAkBlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsDzE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,SAAS,EAAE,CAoBb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAEvE"}
package/dist/freeze.js ADDED
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Resolve scene-relative freeze specs to absolute timeline positions using placements.
3
+ *
4
+ * Freezes whose scene is not found in placements are silently dropped.
5
+ * The returned array is sorted chronologically.
6
+ */
7
+ export function resolveFreezes(freezes, placements) {
8
+ const placementMap = new Map();
9
+ for (const p of placements) {
10
+ placementMap.set(p.scene, p);
11
+ }
12
+ const resolved = [];
13
+ for (const f of freezes) {
14
+ const placement = placementMap.get(f.scene);
15
+ if (!placement)
16
+ continue;
17
+ resolved.push({
18
+ absoluteMs: placement.startMs + f.atMs,
19
+ durationMs: f.durationMs,
20
+ });
21
+ }
22
+ resolved.sort((a, b) => a.absoluteMs - b.absoluteMs);
23
+ return resolved;
24
+ }
25
+ /**
26
+ * Build an ffmpeg filter_complex expression that freezes specific frames.
27
+ *
28
+ * Strategy: split the video at each freeze point using trim, apply tpad to clone
29
+ * the last frame for the freeze duration, then concatenate all segments.
30
+ *
31
+ * Freezes are processed in chronological order. Each freeze adds `durationMs`
32
+ * to the total video length.
33
+ *
34
+ * @param freezes - Resolved freezes sorted chronologically.
35
+ * @param totalDurationMs - Total video duration before freezes (used for the final trim).
36
+ * @param inputLabel - The ffmpeg stream label for the video input (e.g. '0:v').
37
+ * @returns The filter expression, output label, and total added duration — or null if no freezes.
38
+ */
39
+ export function buildFreezeFilter(freezes, totalDurationMs, inputLabel) {
40
+ if (freezes.length === 0)
41
+ return null;
42
+ const parts = [];
43
+ const concatLabels = [];
44
+ let segIndex = 0;
45
+ let cursor = 0; // current position in the source timeline (ms)
46
+ let addedDurationMs = 0;
47
+ for (const freeze of freezes) {
48
+ const freezeTimeSec = (freeze.absoluteMs / 1000).toFixed(3);
49
+ const freezeDurSec = (freeze.durationMs / 1000).toFixed(3);
50
+ // Segment before the freeze point (may be zero-length if two freezes are at the same point)
51
+ if (freeze.absoluteMs > cursor) {
52
+ const startSec = (cursor / 1000).toFixed(3);
53
+ const label = `frzseg${segIndex}`;
54
+ parts.push(`[${inputLabel}]trim=start=${startSec}:end=${freezeTimeSec},setpts=PTS-STARTPTS[${label}]`);
55
+ concatLabels.push(`[${label}]`);
56
+ segIndex++;
57
+ }
58
+ // The frozen frame: trim a tiny slice at the freeze point, then tpad to clone it
59
+ const frozenLabel = `frzhold${segIndex}`;
60
+ // Trim a 1-frame slice (use a very short duration; tpad clones the last frame)
61
+ const sliceEndSec = ((freeze.absoluteMs + 1) / 1000).toFixed(3);
62
+ parts.push(`[${inputLabel}]trim=start=${freezeTimeSec}:end=${sliceEndSec},setpts=PTS-STARTPTS,tpad=stop_mode=clone:stop_duration=${freezeDurSec}[${frozenLabel}]`);
63
+ concatLabels.push(`[${frozenLabel}]`);
64
+ segIndex++;
65
+ addedDurationMs += freeze.durationMs;
66
+ cursor = freeze.absoluteMs;
67
+ }
68
+ // Remaining segment after the last freeze
69
+ if (cursor < totalDurationMs) {
70
+ const startSec = (cursor / 1000).toFixed(3);
71
+ const endSec = (totalDurationMs / 1000).toFixed(3);
72
+ const label = `frzseg${segIndex}`;
73
+ parts.push(`[${inputLabel}]trim=start=${startSec}:end=${endSec},setpts=PTS-STARTPTS[${label}]`);
74
+ concatLabels.push(`[${label}]`);
75
+ }
76
+ const outputLabel = 'frzout';
77
+ parts.push(`${concatLabels.join('')}concat=n=${concatLabels.length}:v=1:a=0[${outputLabel}]`);
78
+ return { filter: parts.join(';\n'), outputLabel, addedDurationMs };
79
+ }
80
+ /**
81
+ * Shift placements, chapters, and subtitles forward to account for freeze-inserted duration.
82
+ *
83
+ * Each freeze at `absoluteMs` pushes everything after that point by `durationMs`.
84
+ * Freezes must be sorted chronologically.
85
+ */
86
+ export function adjustPlacementsForFreezes(placements, freezes) {
87
+ if (freezes.length === 0)
88
+ return placements;
89
+ return placements.map((p) => {
90
+ let startShift = 0;
91
+ let endShift = 0;
92
+ for (const f of freezes) {
93
+ if (f.absoluteMs <= p.startMs) {
94
+ startShift += f.durationMs;
95
+ }
96
+ if (f.absoluteMs <= p.endMs) {
97
+ endShift += f.durationMs;
98
+ }
99
+ }
100
+ return {
101
+ scene: p.scene,
102
+ startMs: p.startMs + startShift,
103
+ endMs: p.endMs + endShift,
104
+ };
105
+ });
106
+ }
107
+ /**
108
+ * Compute the total duration added by all freezes.
109
+ */
110
+ export function totalFreezeDurationMs(freezes) {
111
+ return freezes.reduce((sum, f) => sum + f.durationMs, 0);
112
+ }
113
+ //# sourceMappingURL=freeze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freeze.js","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { defineConfig, loadConfig, demosProject, type ArgoConfig, type UserConfig, type TTSConfig, type TTSEngine, type VideoConfig, type ExportConfig, type TransitionType, type TransitionConfig, type SpeedRampConfig, type VariantConfig, type AudioConfig, } from './config.js';
1
+ export { defineConfig, loadConfig, demosProject, type ArgoConfig, type UserConfig, type TTSConfig, type TTSEngine, type VideoConfig, type ExportConfig, type TransitionType, type TransitionConfig, type SpeedRampConfig, type VariantConfig, type AudioConfig, type WatermarkConfig, } from './config.js';
2
2
  export { test, expect, demoType } from './fixtures.js';
3
3
  export { NarrationTimeline, type SceneDurationOptions } from './narration.js';
4
4
  export { showCaption, hideCaption, withCaption } from './captions.js';
@@ -16,9 +16,12 @@ export { runDoctor, formatDoctorResults } from './doctor.js';
16
16
  export { runPipeline, runBatchPipeline, discoverDemos, type PipelineOptions } from './pipeline.js';
17
17
  export { buildTransitionFilters } from './transitions.js';
18
18
  export { computeSegments, applySpeedRamp } from './speed-ramp.js';
19
+ export { buildFreezeFilter, resolveFreezes, adjustPlacementsForFreezes, totalFreezeDurationMs, type FreezeSpec, type ResolvedFreeze, } from './freeze.js';
20
+ export { buildCameraMoveFilter, shiftCameraMoves, scaleCameraMoves, type CameraMove } from './camera-move.js';
19
21
  export { runFfmpegWithProgress } from './progress.js';
20
22
  export { startDashboardServer } from './dashboard.js';
21
23
  export { extractClip, type ClipOptions } from './clip.js';
22
24
  export { releasePrep, type ReleasePrepOptions } from './release-prep.js';
23
25
  export { init } from './init.js';
26
+ export { generateMusic, generateMusicCached, type MusicGenOptions } from './music/musicgen.js';
24
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,WAAW,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGxF,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAGnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,WAAW,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGxF,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAGnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -32,6 +32,10 @@ export { runPipeline, runBatchPipeline, discoverDemos } from './pipeline.js';
32
32
  export { buildTransitionFilters } from './transitions.js';
33
33
  // Speed Ramp
34
34
  export { computeSegments, applySpeedRamp } from './speed-ramp.js';
35
+ // Freeze
36
+ export { buildFreezeFilter, resolveFreezes, adjustPlacementsForFreezes, totalFreezeDurationMs, } from './freeze.js';
37
+ // Camera Moves
38
+ export { buildCameraMoveFilter, shiftCameraMoves, scaleCameraMoves } from './camera-move.js';
35
39
  // Progress
36
40
  export { runFfmpegWithProgress } from './progress.js';
37
41
  // Dashboard
@@ -42,4 +46,6 @@ export { extractClip } from './clip.js';
42
46
  export { releasePrep } from './release-prep.js';
43
47
  // Init
44
48
  export { init } from './init.js';
49
+ // Music Generation
50
+ export { generateMusic, generateMusicCached } from './music/musicgen.js';
45
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,SAAS;AACT,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,GAYb,MAAM,aAAa,CAAC;AAErB,WAAW;AACX,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAA6B,MAAM,gBAAgB,CAAC;AAE9E,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtE,WAAW;AACX,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,GAMZ,MAAM,qBAAqB,CAAC;AAE7B,UAAU;AACV,OAAO,EAAE,YAAY,EAAwB,MAAM,cAAc,CAAC;AAElE,SAAS;AACT,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,GAKZ,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACL,eAAe,EACf,WAAW,GAEZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1D,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAEpF,WAAW;AACX,OAAO,EAAE,YAAY,EAA6C,MAAM,eAAe,CAAC;AAExF,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7D,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAC;AAEnG,cAAc;AACd,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO;AACP,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAE1D,eAAe;AACf,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAEzE,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,SAAS;AACT,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,GAab,MAAM,aAAa,CAAC;AAErB,WAAW;AACX,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAA6B,MAAM,gBAAgB,CAAC;AAE9E,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtE,WAAW;AACX,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,GAMZ,MAAM,qBAAqB,CAAC;AAE7B,UAAU;AACV,OAAO,EAAE,YAAY,EAAwB,MAAM,cAAc,CAAC;AAElE,SAAS;AACT,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,GAKZ,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACL,eAAe,EACf,WAAW,GAEZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1D,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAEpF,WAAW;AACX,OAAO,EAAE,YAAY,EAA6C,MAAM,eAAe,CAAC;AAExF,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7D,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAC;AAEnG,cAAc;AACd,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AAErB,eAAe;AACf,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AAE9G,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO;AACP,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAE1D,eAAe;AACf,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAEzE,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAwB,MAAM,qBAAqB,CAAC"}
package/dist/media.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare function getVideoDurationMs(videoPath: string): number;
2
+ export declare function getVideoFrameRate(videoPath: string): number;
2
3
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwB5D"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwB5D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B3D"}
package/dist/media.js CHANGED
@@ -15,4 +15,24 @@ export function getVideoDurationMs(videoPath) {
15
15
  }
16
16
  return durationMs;
17
17
  }
18
+ export function getVideoFrameRate(videoPath) {
19
+ let raw;
20
+ try {
21
+ raw = execFileSync('ffprobe', ['-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=avg_frame_rate', '-of', 'csv=p=0', videoPath], { encoding: 'utf-8' }).trim();
22
+ }
23
+ catch (err) {
24
+ throw new Error(`Failed to get video frame rate from ${videoPath}. ` +
25
+ `Ensure ffprobe is installed (it usually comes with ffmpeg). ` +
26
+ `Original error: ${err.message}`);
27
+ }
28
+ if (!raw || raw === '0/0') {
29
+ throw new Error(`ffprobe returned invalid frame rate "${raw}" for ${videoPath}.`);
30
+ }
31
+ const match = raw.match(/^(\d+(?:\.\d+)?)\/(\d+(?:\.\d+)?)$/);
32
+ const fps = match ? Number(match[1]) / Number(match[2]) : Number(raw);
33
+ if (!Number.isFinite(fps) || fps <= 0) {
34
+ throw new Error(`ffprobe returned invalid frame rate "${raw}" for ${videoPath}.`);
35
+ }
36
+ return fps;
37
+ }
18
38
  //# sourceMappingURL=media.js.map
package/dist/media.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,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;IAED,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;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,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;IAED,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;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAChB,SAAS,EACT,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAChH,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,uCAAuC,SAAS,IAAI;YACpD,8DAA8D;YAC9D,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAC5C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,SAAS,SAAS,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,SAAS,SAAS,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * AI-generated background music via MusicGen (Transformers.js).
3
+ * Uses Xenova/musicgen-small (~1.8GB ONNX model, downloaded on first run).
4
+ */
5
+ export interface MusicGenOptions {
6
+ /** Text prompt describing the desired music (e.g., "lofi chill ambient with soft piano"). */
7
+ prompt: string;
8
+ /** Duration in seconds for generated music. Default: 30. */
9
+ durationSec?: number;
10
+ /** Classifier-free guidance scale. Higher = more prompt-adherent. Default: 3. */
11
+ guidanceScale?: number;
12
+ /** Sampling temperature. Default: 1.0. */
13
+ temperature?: number;
14
+ }
15
+ /**
16
+ * Compute a content-addressed cache key from all generation parameters.
17
+ */
18
+ export declare function computeCacheKey(options: MusicGenOptions): string;
19
+ /**
20
+ * Returns the cache file path for a given demo + options.
21
+ */
22
+ export declare function getCachePath(argoDir: string, options: MusicGenOptions): string;
23
+ /**
24
+ * Check if a cached music file exists for the given options.
25
+ */
26
+ export declare function isCached(argoDir: string, options: MusicGenOptions): boolean;
27
+ /**
28
+ * Generate background music from a text prompt using MusicGen.
29
+ *
30
+ * The model (~1.8GB) is downloaded on first run. Generation takes ~30-60s
31
+ * depending on duration and hardware.
32
+ *
33
+ * Returns a WAV buffer (Float32, mono, 32kHz — ffmpeg handles resampling during export).
34
+ */
35
+ export declare function generateMusic(options: MusicGenOptions): Promise<Buffer>;
36
+ /**
37
+ * Generate music with caching. Returns the path to the WAV file.
38
+ *
39
+ * If a cached file exists for the same prompt + parameters, skips generation.
40
+ * On model load or generation failure, warns and returns null (best-effort).
41
+ */
42
+ export declare function generateMusicCached(argoDir: string, options: MusicGenOptions): Promise<string | null>;
43
+ //# sourceMappingURL=musicgen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"musicgen.d.ts","sourceRoot":"","sources":["../../src/music/musicgen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,eAAe;IAC9B,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAahE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAG9E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAwD7E;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxB"}