frameyard 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 (128) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/GLOSSARY.md +152 -24
  3. package/README.md +99 -31
  4. package/dist/assets/process.js.map +1 -1
  5. package/dist/assets/provenance.js.map +1 -1
  6. package/dist/cli.js +326 -40
  7. package/dist/cli.js.map +1 -1
  8. package/dist/composition/attributes.d.ts.map +1 -1
  9. package/dist/composition/diagnostics.js.map +1 -1
  10. package/dist/contracts.d.ts +12 -0
  11. package/dist/contracts.d.ts.map +1 -1
  12. package/dist/contracts.js.map +1 -1
  13. package/dist/doctor.d.ts.map +1 -1
  14. package/dist/doctor.js +79 -0
  15. package/dist/doctor.js.map +1 -1
  16. package/dist/errors.d.ts +1 -1
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js.map +1 -1
  19. package/dist/html/validate.js.map +1 -1
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/preview/main.js +96 -11
  25. package/dist/preview/main.js.map +1 -1
  26. package/dist/preview/timeline-data.d.ts +85 -0
  27. package/dist/preview/timeline-data.d.ts.map +1 -0
  28. package/dist/preview/timeline-data.js +2 -0
  29. package/dist/preview/timeline-data.js.map +1 -0
  30. package/dist/preview/timeline-host.d.ts +21 -0
  31. package/dist/preview/timeline-host.d.ts.map +1 -0
  32. package/dist/preview/timeline-host.js +308 -0
  33. package/dist/preview/timeline-host.js.map +1 -0
  34. package/dist/preview/timeline-main.d.ts +17 -0
  35. package/dist/preview/timeline-main.d.ts.map +1 -0
  36. package/dist/preview/timeline-main.js +368 -0
  37. package/dist/preview/timeline-main.js.map +1 -0
  38. package/dist/project.d.ts +16 -1
  39. package/dist/project.d.ts.map +1 -1
  40. package/dist/project.js +81 -26
  41. package/dist/project.js.map +1 -1
  42. package/dist/renderer/browser.d.ts +2 -0
  43. package/dist/renderer/browser.d.ts.map +1 -1
  44. package/dist/renderer/browser.js +6 -1
  45. package/dist/renderer/browser.js.map +1 -1
  46. package/dist/renderer/ffmpeg.d.ts +126 -1
  47. package/dist/renderer/ffmpeg.d.ts.map +1 -1
  48. package/dist/renderer/ffmpeg.js +450 -6
  49. package/dist/renderer/ffmpeg.js.map +1 -1
  50. package/dist/renderer/index.d.ts +28 -3
  51. package/dist/renderer/index.d.ts.map +1 -1
  52. package/dist/renderer/index.js +138 -38
  53. package/dist/renderer/index.js.map +1 -1
  54. package/dist/renderer/timeline.d.ts +146 -0
  55. package/dist/renderer/timeline.d.ts.map +1 -0
  56. package/dist/renderer/timeline.js +1098 -0
  57. package/dist/renderer/timeline.js.map +1 -0
  58. package/dist/runtime/host.js.map +1 -1
  59. package/dist/runtime/media.d.ts.map +1 -1
  60. package/dist/runtime/media.js +3 -6
  61. package/dist/runtime/media.js.map +1 -1
  62. package/dist/runtime/video.d.ts +13 -0
  63. package/dist/runtime/video.d.ts.map +1 -0
  64. package/dist/runtime/video.js +41 -0
  65. package/dist/runtime/video.js.map +1 -0
  66. package/dist/scaffold.d.ts.map +1 -1
  67. package/dist/scaffold.js +90 -24
  68. package/dist/scaffold.js.map +1 -1
  69. package/dist/server/composition-html.d.ts.map +1 -1
  70. package/dist/server/preview-html.d.ts.map +1 -1
  71. package/dist/server/preview-html.js +15 -1
  72. package/dist/server/preview-html.js.map +1 -1
  73. package/dist/server/server.d.ts.map +1 -1
  74. package/dist/server/server.js +39 -1
  75. package/dist/server/server.js.map +1 -1
  76. package/dist/server/timeline-preview-data.d.ts +4 -0
  77. package/dist/server/timeline-preview-data.d.ts.map +1 -0
  78. package/dist/server/timeline-preview-data.js +97 -0
  79. package/dist/server/timeline-preview-data.js.map +1 -0
  80. package/dist/server/timeline-preview-html.d.ts +4 -0
  81. package/dist/server/timeline-preview-html.d.ts.map +1 -0
  82. package/dist/server/timeline-preview-html.js +227 -0
  83. package/dist/server/timeline-preview-html.js.map +1 -0
  84. package/dist/timeline/plan.d.ts +32 -0
  85. package/dist/timeline/plan.d.ts.map +1 -0
  86. package/dist/timeline/plan.js +68 -0
  87. package/dist/timeline/plan.js.map +1 -0
  88. package/dist/timeline/resolve.d.ts +60 -0
  89. package/dist/timeline/resolve.d.ts.map +1 -0
  90. package/dist/timeline/resolve.js +523 -0
  91. package/dist/timeline/resolve.js.map +1 -0
  92. package/dist/timeline/schema.d.ts +71 -0
  93. package/dist/timeline/schema.d.ts.map +1 -0
  94. package/dist/timeline/schema.js +425 -0
  95. package/dist/timeline/schema.js.map +1 -0
  96. package/dist/transcript.js.map +1 -1
  97. package/dist/version.d.ts +1 -1
  98. package/dist/version.js +1 -1
  99. package/docs/adr/0002-make-frame-and-props-the-only-animation-state.md +2 -0
  100. package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +2 -0
  101. package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
  102. package/docs/adr/0009-composite-production-frames-in-software.md +1 -1
  103. package/docs/adr/0010-make-timelines-the-render-unit.md +24 -0
  104. package/docs/adr/0011-compose-timeline-frames-in-a-live-browser-host.md +22 -0
  105. package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +31 -0
  106. package/docs/adr/0013-capture-bounded-multi-frame-stills-for-inspection.md +33 -0
  107. package/docs/preview-testing.md +53 -0
  108. package/docs/v0.1-design.md +138 -87
  109. package/examples/demo/README.md +10 -3
  110. package/examples/demo/timelines/demo.timeline.json +12 -0
  111. package/examples/demo/video.config.js +4 -0
  112. package/examples/video/README.md +50 -6
  113. package/examples/video/compositions/video-overlay.html +350 -0
  114. package/examples/video/props/video-timeline.json +10 -0
  115. package/examples/video/timelines/video-timeline-mp4.timeline.json +44 -0
  116. package/examples/video/timelines/video-timeline.timeline.json +44 -0
  117. package/examples/video/video.config.js +6 -0
  118. package/package.json +5 -3
  119. package/skills/frameyard/README.md +7 -5
  120. package/skills/frameyard/SKILL.md +19 -13
  121. package/skills/frameyard/references/common-mistakes.md +1 -0
  122. package/skills/frameyard/references/deterministic-authoring.md +2 -1
  123. package/skills/frameyard/references/diagnostics.md +1 -1
  124. package/skills/frameyard/references/failure-recovery.md +3 -2
  125. package/skills/frameyard/references/json-results.md +15 -6
  126. package/skills/frameyard/references/subtitles-karaoke.md +2 -2
  127. package/skills/frameyard/references/timelines.md +143 -0
  128. package/skills/frameyard/scripts/frameyard.mjs +20 -3
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/assets/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/assets/process.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/assets/provenance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/assets/provenance.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { access, mkdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import { access, mkdir, readFile, rmdir, stat, writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { FrameyardError, isFrameyardError } from "./errors.js";
4
+ import { isPlainObject } from "./contracts.js";
5
+ import { FrameyardError, errorMessage, isFrameyardError } from "./errors.js";
5
6
  import { loadProject, resolveProjectRoot } from "./project.js";
6
- import { checkComposition, captureStill, MAX_RENDER_CONCURRENCY, renderComposition, validateRenderConcurrency, } from "./renderer/index.js";
7
+ import { checkComposition, captureStills, MAX_RENDER_CONCURRENCY, renderComposition, validateRenderConcurrency, } from "./renderer/index.js";
8
+ import { MAX_TIMELINE_WORKERS, captureTimelineStills, checkTimeline, renderTimeline, } from "./renderer/timeline.js";
9
+ import { assertContainerCodec, CONTAINER_EXTENSION, defaultCodecForContainer, encoderNameFor, } from "./renderer/ffmpeg.js";
7
10
  import { startPreviewServer } from "./server/server.js";
8
11
  import { scaffoldFiles, SCAFFOLD_NEXT } from "./scaffold.js";
9
12
  import { VERSION } from "./version.js";
@@ -19,6 +22,11 @@ const VALUE_FLAGS = new Set([
19
22
  "frame",
20
23
  "port",
21
24
  "concurrency",
25
+ "workers",
26
+ "scratch",
27
+ "encoder",
28
+ "codec",
29
+ "container",
22
30
  "text-file",
23
31
  "speaker",
24
32
  "talker-model",
@@ -34,6 +42,7 @@ const VALUE_FLAGS = new Set([
34
42
  "whisper-cli",
35
43
  ]);
36
44
  const BOOLEAN_FLAGS = new Set(["json", "overwrite", "force", "words", "help", "version"]);
45
+ const MAX_STILL_FRAMES = 32;
37
46
  function usage(message = "Invalid command line.") {
38
47
  throw new FrameyardError("USAGE", message);
39
48
  }
@@ -109,7 +118,18 @@ function allowedFlags(command) {
109
118
  case "still":
110
119
  return new Set([...common, "props", "out", "frame", "overwrite"]);
111
120
  case "render":
112
- return new Set([...common, "props", "out", "overwrite", "concurrency"]);
121
+ return new Set([
122
+ ...common,
123
+ "props",
124
+ "out",
125
+ "overwrite",
126
+ "concurrency",
127
+ "workers",
128
+ "scratch",
129
+ "encoder",
130
+ "codec",
131
+ "container",
132
+ ]);
113
133
  case "tts":
114
134
  return new Set([
115
135
  ...common,
@@ -161,10 +181,14 @@ function validateArgs(parsed) {
161
181
  }
162
182
  }
163
183
  else if (parsed.positionals.length !== 1) {
164
- usage(`"${parsed.command}" requires a ${parsed.command === "transcribe" ? "source path" : "composition id"}.`);
184
+ usage(`"${parsed.command}" requires a ${parsed.command === "transcribe"
185
+ ? "source path"
186
+ : parsed.command === "render"
187
+ ? "composition or timeline id"
188
+ : "composition id"}.`);
165
189
  }
166
190
  if (parsed.command === "still" && !parsed.flags.has("frame")) {
167
- usage('"still" requires --frame <n>.');
191
+ usage('"still" requires --frame <spec>.');
168
192
  }
169
193
  if (parsed.command === "render" && parsed.flags.has("concurrency")) {
170
194
  validateRenderConcurrency(Number(parsed.flags.get("concurrency")));
@@ -213,18 +237,23 @@ Usage:
213
237
  frameyard init [directory]
214
238
  frameyard dev [--port <port>] [--project <dir>]
215
239
  frameyard check <composition-id> [--props <file>] [--project <dir>] [--json]
216
- frameyard still <composition-id> --frame <n> [--out <file.png>] [--props <file>] [--project <dir>] [--json]
217
- frameyard render <composition-id> [--out <video.mp4>] [--props <file>] [--project <dir>] [--concurrency <n>] [--overwrite] [--json]
240
+ frameyard still <composition-or-timeline-id> --frame <spec> [--out <file-or-dir>] [--props <file>] [--project <dir>] [--json]
241
+ frameyard render <composition-or-timeline-id> [--out <video>] [--props <file>] [--project <dir>] [--concurrency <n>] [--workers <n>] [--encoder <name>] [--codec <name>] [--container <name>] [--scratch <dir>] [--overwrite] [--json]
218
242
  frameyard tts --speaker <name> --talker-model <gguf> --codec-model <gguf> --out <file.wav> [--text-file <file>] [--style <text>] [--language <lang>] [--device <name>] [--executable <path>] [--manifest <file>] [--force] [--json]
219
243
  frameyard transcribe <source> --model <gguf> --out <file.json> [--words] [--export srt,vtt] [--language <lang>] [--executable <path>] [--manifest <file>] [--force] [--json]
220
244
  frameyard doctor [--qwen-tts <path>] [--whisper-cli <path>] [--talker-model <gguf>] [--codec-model <gguf>] [--model <gguf>] [--manifest <file>] [--project <dir>] [--json]
221
245
 
222
246
  Options:
223
247
  --project <dir> Use a project other than the current directory.
224
- --props <file> JSON props merged over composition defaults.
225
- --out <file> Output path for still, render, tts, or transcribe. Render defaults to out/<composition-id>.mp4 in the project.
226
- --frame <n> Frame to capture for still.
227
- --concurrency <n> Parallel browser sessions for render, 1-${MAX_RENDER_CONCURRENCY} (default: 1).
248
+ --props <file> Composition props, or a { "<clip-id>": {...} } override map for a timeline.
249
+ --out <path> Output path for still, render, tts, or transcribe. For still, one frame uses a .png file and multiple frames use a directory. Render defaults to out/<id>.mp4 in the project.
250
+ --frame <spec> Still frames: n, n-m, or a comma-separated list (maximum 32 unique frames).
251
+ --concurrency <n> Parallel browser sessions for composition render, 1-${MAX_RENDER_CONCURRENCY} (default: 1).
252
+ --workers <n> Parallel segment workers for timeline render, 1-${MAX_TIMELINE_WORKERS} (default: 8).
253
+ --encoder <name> Encoder: auto, software, nvenc, or qsv (default: auto).
254
+ --codec <name> Delivery codec for render: h264, hevc, or vp9 (default: h264; vp9 for webm).
255
+ --container <name> Delivery container: mp4, mov, mkv, or webm (default: mp4).
256
+ --scratch <dir> Scratch directory for timeline intermediates (default: system temp).
228
257
  --overwrite Replace an existing still or render output.
229
258
  --force Replace existing generated assets and manifest entries.
230
259
  --text-file <file> Text to synthesize. Reads stdin when omitted.
@@ -258,10 +287,10 @@ function printCommandHelp(command) {
258
287
  process.stdout.write("Usage: frameyard check <composition-id> [--props <file>] [--project <dir>] [--json]\nValidate props, assets, audio, and every frame without encoding.\n");
259
288
  return;
260
289
  case "still":
261
- process.stdout.write("Usage: frameyard still <composition-id> --frame <n> [--out <file.png>] [--props <file>] [--project <dir>] [--json]\nCapture one frame through the production rendering path.\n");
290
+ process.stdout.write("Usage: frameyard still <composition-or-timeline-id> --frame <spec> [--out <path>] [--props <file>] [--project <dir>] [--overwrite] [--json]\nCapture one or more frames through the production rendering path. <spec> is a frame number, an inclusive range like 2-12, or a comma-separated list, with at most 32 unique frames per invocation. With one frame, --out is a .png file; with multiple frames, --out is a directory.\n");
262
291
  return;
263
292
  case "render":
264
- process.stdout.write(`Usage: frameyard render <composition-id> [--out <video.mp4>] [--props <file>] [--project <dir>] [--concurrency <n>] [--overwrite] [--json]\nRender a complete MP4 with H.264 video and AAC audio. The default output is out/<composition-id>.mp4 in the project. Concurrency is 1-${MAX_RENDER_CONCURRENCY} (default: 1).\n`);
293
+ process.stdout.write(`Usage: frameyard render <composition-or-timeline-id> [--out <video>] [--props <file>] [--project <dir>] [--concurrency <n>] [--workers <n>] [--encoder <name>] [--codec <name>] [--container <name>] [--scratch <dir>] [--overwrite] [--json]\nRender an MP4, MOV, MKV, or WebM with H.264, HEVC, or VP9 video and AAC or Opus audio. The default output is out/<id>.<extension> in the project. Composition concurrency is 1-${MAX_RENDER_CONCURRENCY}; timeline workers are 1-${MAX_TIMELINE_WORKERS}. Encoder choices are auto, software, nvenc, and qsv; the default auto probes NVENC, then Quick Sync, then the codec's software encoder. WebM and VP9 use Opus audio, and HEVC in MP4/MOV keeps the hvc1 sample entry.\n`);
265
294
  return;
266
295
  case "tts":
267
296
  process.stdout.write("Usage: frameyard tts --speaker <name> --talker-model <gguf> --codec-model <gguf> --out <file.wav> [--text-file <file>] [--style <text>] [--language <lang>] [--device <name>] [--executable <path>] [--manifest <file>] [--force] [--json]\nProduce one frozen 24 kHz mono WAV with local qwentts.cpp CustomVoice synthesis.\n");
@@ -319,6 +348,39 @@ function flagString(flags, name) {
319
348
  const value = flags.get(name);
320
349
  return typeof value === "string" ? value : undefined;
321
350
  }
351
+ const ENCODER_CHOICES = new Set(["auto", "software", "nvenc", "qsv"]);
352
+ const CODEC_CHOICES = new Set(["h264", "hevc", "vp9"]);
353
+ const CONTAINER_CHOICES = new Set(["mp4", "mov", "mkv", "webm"]);
354
+ function encoderChoice(flags) {
355
+ const value = flagString(flags, "encoder");
356
+ if (value === undefined) {
357
+ return undefined;
358
+ }
359
+ if (!ENCODER_CHOICES.has(value)) {
360
+ usage(`--encoder must be auto, software, nvenc, or qsv; received "${value}".`);
361
+ }
362
+ return value;
363
+ }
364
+ function codecChoice(flags) {
365
+ const value = flagString(flags, "codec");
366
+ if (value === undefined) {
367
+ return undefined;
368
+ }
369
+ if (!CODEC_CHOICES.has(value)) {
370
+ usage(`--codec must be h264, hevc, or vp9; received "${value}".`);
371
+ }
372
+ return value;
373
+ }
374
+ function containerChoice(flags) {
375
+ const value = flagString(flags, "container");
376
+ if (value === undefined) {
377
+ return undefined;
378
+ }
379
+ if (!CONTAINER_CHOICES.has(value)) {
380
+ usage(`--container must be mp4, mov, mkv, or webm; received "${value}".`);
381
+ }
382
+ return value;
383
+ }
322
384
  function parseSubtitleFormats(value) {
323
385
  if (value === undefined) {
324
386
  return [];
@@ -460,8 +522,33 @@ async function runDev(parsed) {
460
522
  async function runCheck(parsed, signal) {
461
523
  const project = await projectFromFlag(parsed.flags);
462
524
  const props = await readPropsFile(parsed.flags);
463
- const compositionId = parsed.positionals[0];
525
+ const targetId = parsed.positionals[0];
464
526
  const json = parsed.flags.has("json") === true;
527
+ if (project.timelines.has(targetId)) {
528
+ if (props !== undefined && !isPlainObject(props)) {
529
+ usage("Timeline --props must be a JSON object keyed by composition clip id.");
530
+ }
531
+ const result = await checkTimeline({
532
+ project,
533
+ timelineId: targetId,
534
+ ...(props !== undefined ? { propsOverrides: props } : {}),
535
+ signal,
536
+ onProgress: progressPrinter("Checking"),
537
+ });
538
+ printDiagnostics(result.diagnostics);
539
+ if (json) {
540
+ printJson({ ok: true, command: "check", ...result });
541
+ }
542
+ else {
543
+ process.stdout.write(`✓ timeline ${targetId}: ${result.framesChecked} frames, ${result.format.width}×${result.format.height} @ ${result.format.fps} fps (${formatDuration(result.durationInFrames / result.format.fps)}), ${result.tracks} track${result.tracks === 1 ? "" : "s"}, ${result.clips} clip${result.clips === 1 ? "" : "s"}\n`);
544
+ process.stdout.write(` audio: ${result.audio.clips} clip${result.audio.clips === 1 ? "" : "s"}\n`);
545
+ if (result.transcripts.clips > 0) {
546
+ process.stdout.write(` transcripts: ${result.transcripts.clips} asset${result.transcripts.clips === 1 ? "" : "s"}\n`);
547
+ }
548
+ }
549
+ return 0;
550
+ }
551
+ const compositionId = targetId;
465
552
  const result = await checkComposition({
466
553
  project,
467
554
  compositionId,
@@ -489,44 +576,240 @@ async function runCheck(parsed, signal) {
489
576
  printDiagnostics(result.diagnostics);
490
577
  return 0;
491
578
  }
492
- async function runStill(parsed, signal) {
493
- const project = await projectFromFlag(parsed.flags);
494
- const props = await readPropsFile(parsed.flags);
495
- const compositionId = parsed.positionals[0];
496
- const frame = Number(parsed.flags.get("frame"));
497
- if (!Number.isInteger(frame) || frame < 0) {
498
- usage("--frame must be a non-negative integer.");
579
+ function frameSpecUsage(message, details) {
580
+ throw new FrameyardError("USAGE", message, { details });
581
+ }
582
+ /** Expands a still frame spec into unique frames, preserving input order. */
583
+ function parseFrameSpec(value) {
584
+ const frames = [];
585
+ const seen = new Set();
586
+ for (const rawSegment of value.split(",")) {
587
+ const segment = rawSegment.trim();
588
+ if (segment.length === 0) {
589
+ frameSpecUsage(`--frame contains an empty entry: "${value}".`, { requested: value });
590
+ }
591
+ if (/\s/.test(segment)) {
592
+ frameSpecUsage(`--frame entries must not contain spaces; write ranges like 2-12 and separate frames with commas.`, {
593
+ requested: value,
594
+ segment,
595
+ });
596
+ }
597
+ const match = /^(\d+)(?:-(\d+))?$/.exec(segment);
598
+ if (!match) {
599
+ frameSpecUsage(`--frame entries must be a frame number or an inclusive range like 2-12; received "${segment}".`, {
600
+ requested: value,
601
+ segment,
602
+ });
603
+ }
604
+ const start = Number(match[1]);
605
+ const end = match[2] === undefined ? start : Number(match[2]);
606
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 0 || end < 0) {
607
+ frameSpecUsage(`--frame entries must use non-negative safe integers: "${segment}".`, {
608
+ requested: value,
609
+ segment,
610
+ });
611
+ }
612
+ if (end < start) {
613
+ frameSpecUsage(`--frame range "${segment}" is descending; ranges must be ascending.`, {
614
+ requested: value,
615
+ range: segment,
616
+ });
617
+ }
618
+ const count = end - start + 1;
619
+ if (count > MAX_STILL_FRAMES) {
620
+ frameSpecUsage(`--frame range "${segment}" expands to ${count} frames; still captures at most ${MAX_STILL_FRAMES} frames per invocation.`, { requested: value, range: segment, count, cap: MAX_STILL_FRAMES });
621
+ }
622
+ for (let frame = start; frame <= end; frame += 1) {
623
+ if (seen.has(frame)) {
624
+ continue;
625
+ }
626
+ seen.add(frame);
627
+ frames.push(frame);
628
+ }
499
629
  }
500
- const outValue = parsed.flags.get("out");
501
- const outPath = path.resolve(process.cwd(), typeof outValue === "string" ? outValue : `still-${compositionId}-${frame}.png`);
502
- const json = parsed.flags.has("json") === true;
503
- const result = await captureStill({
504
- project,
505
- compositionId,
506
- props,
507
- frame,
508
- outPath,
509
- overwrite: parsed.flags.has("overwrite") === true,
510
- signal,
511
- });
630
+ if (frames.length > MAX_STILL_FRAMES) {
631
+ frameSpecUsage(`still captures at most ${MAX_STILL_FRAMES} unique frames per invocation; the requested spec expands to ${frames.length}.`, { requested: value, count: frames.length, cap: MAX_STILL_FRAMES });
632
+ }
633
+ return frames;
634
+ }
635
+ async function resolveStillOutputs(options) {
636
+ const explicit = typeof options.outValue === "string" ? options.outValue : undefined;
637
+ if (options.frames.length === 1) {
638
+ const frame = options.frames[0];
639
+ const outPath = path.resolve(options.cwd, explicit ?? `still-${options.targetId}-${frame}.png`);
640
+ return { outPaths: [outPath], createdOutDir: false };
641
+ }
642
+ let outDir;
643
+ let createdOutDir = false;
644
+ if (explicit === undefined) {
645
+ outDir = options.cwd;
646
+ }
647
+ else {
648
+ outDir = path.resolve(options.cwd, explicit);
649
+ if (path.extname(outDir).toLowerCase() === ".png") {
650
+ throw new FrameyardError("USAGE", `With multiple frames, --out must be a directory, not a .png file: ${explicit}`);
651
+ }
652
+ let existing;
653
+ try {
654
+ existing = await stat(outDir);
655
+ }
656
+ catch {
657
+ existing = undefined;
658
+ }
659
+ if (existing?.isFile()) {
660
+ throw new FrameyardError("USAGE", `With multiple frames, --out must be a directory: ${outDir}`);
661
+ }
662
+ if (existing === undefined) {
663
+ try {
664
+ await mkdir(outDir, { recursive: true });
665
+ }
666
+ catch (error) {
667
+ throw new FrameyardError("OUTPUT_FAILED", `Could not create output directory ${outDir}: ${errorMessage(error)}`, { cause: error });
668
+ }
669
+ createdOutDir = true;
670
+ }
671
+ }
672
+ const outPaths = options.frames.map((frame) => path.join(outDir, `still-${options.targetId}-${frame}.png`));
673
+ return { outPaths, outDir, createdOutDir };
674
+ }
675
+ async function removeDirIfEmpty(directory) {
676
+ try {
677
+ await rmdir(directory);
678
+ }
679
+ catch {
680
+ // Keep the directory when it is not empty or was already removed.
681
+ }
682
+ }
683
+ function printStillResult(result, targetId, timeline, json) {
512
684
  printDiagnostics(result.diagnostics);
513
685
  if (json) {
514
686
  printJson({ ok: true, command: "still", ...result });
687
+ return;
515
688
  }
516
- else {
517
- process.stdout.write(`Wrote frame ${result.frame} of ${compositionId} to ${result.path} (${result.width}×${result.height})\n`);
689
+ const target = timeline ? `timeline ${targetId}` : targetId;
690
+ for (const frame of result.frames) {
691
+ process.stdout.write(`Wrote frame ${frame.frame} of ${target} to ${frame.path} (${result.width}×${result.height})\n`);
692
+ }
693
+ if (result.frames.length > 1) {
694
+ const directory = path.dirname(result.frames[0]?.path ?? "");
695
+ process.stdout.write(`Wrote ${result.frames.length} frames of ${target} to ${directory} (${result.width}×${result.height})\n`);
696
+ }
697
+ }
698
+ async function runStill(parsed, signal) {
699
+ const project = await projectFromFlag(parsed.flags);
700
+ const props = await readPropsFile(parsed.flags);
701
+ const targetId = parsed.positionals[0];
702
+ const frameValue = parsed.flags.get("frame");
703
+ if (typeof frameValue !== "string") {
704
+ usage('"still" requires --frame <spec>.');
705
+ }
706
+ const frames = parseFrameSpec(frameValue);
707
+ const outputPlan = await resolveStillOutputs({
708
+ targetId,
709
+ frames,
710
+ outValue: parsed.flags.get("out"),
711
+ cwd: process.cwd(),
712
+ });
713
+ const overwrite = parsed.flags.has("overwrite") === true;
714
+ const json = parsed.flags.has("json") === true;
715
+ try {
716
+ if (project.timelines.has(targetId)) {
717
+ if (props !== undefined && !isPlainObject(props)) {
718
+ usage("Timeline --props must be a JSON object keyed by composition clip id.");
719
+ }
720
+ const result = await captureTimelineStills({
721
+ project,
722
+ timelineId: targetId,
723
+ frames,
724
+ outPaths: outputPlan.outPaths,
725
+ ...(props !== undefined ? { propsOverrides: props } : {}),
726
+ overwrite,
727
+ signal,
728
+ });
729
+ printStillResult(result, targetId, true, json);
730
+ return 0;
731
+ }
732
+ const result = await captureStills({
733
+ project,
734
+ compositionId: targetId,
735
+ props,
736
+ frames,
737
+ outPaths: outputPlan.outPaths,
738
+ overwrite,
739
+ signal,
740
+ });
741
+ printStillResult(result, targetId, false, json);
742
+ return 0;
743
+ }
744
+ catch (error) {
745
+ if (outputPlan.createdOutDir && outputPlan.outDir !== undefined) {
746
+ await removeDirIfEmpty(outputPlan.outDir);
747
+ }
748
+ throw error;
518
749
  }
519
- return 0;
520
750
  }
521
751
  async function runRender(parsed, signal) {
522
752
  const project = await projectFromFlag(parsed.flags);
523
753
  const props = await readPropsFile(parsed.flags);
524
- const compositionId = parsed.positionals[0];
754
+ const encoder = encoderChoice(parsed.flags);
755
+ const container = containerChoice(parsed.flags) ?? "mp4";
756
+ // WebM is a VP9/Opus container; every other container defaults to H.264.
757
+ const codec = codecChoice(parsed.flags) ?? defaultCodecForContainer(container);
758
+ assertContainerCodec(container, codec);
759
+ if (encoder !== undefined && encoder !== "auto") {
760
+ // Rejects codec/vendor mismatches such as --codec hevc --encoder libx264.
761
+ encoderNameFor(codec, encoder);
762
+ }
763
+ const targetId = parsed.positionals[0];
525
764
  const outValue = flagString(parsed.flags, "out");
526
765
  const outPath = outValue === undefined
527
- ? path.join(project.root, "out", `${compositionId}.mp4`)
766
+ ? path.join(project.root, "out", `${targetId}.${CONTAINER_EXTENSION[container]}`)
528
767
  : path.resolve(process.cwd(), outValue);
529
768
  const json = parsed.flags.has("json") === true;
769
+ if (project.timelines.has(targetId)) {
770
+ if (parsed.flags.has("concurrency")) {
771
+ usage("--concurrency is only valid for composition renders; use --workers for timelines.");
772
+ }
773
+ const workersValue = flagString(parsed.flags, "workers");
774
+ const workers = workersValue === undefined ? undefined : Number(workersValue);
775
+ if (workers !== undefined && (!Number.isInteger(workers) || workers < 1)) {
776
+ usage("--workers must be a positive integer.");
777
+ }
778
+ if (workers !== undefined && workers > MAX_TIMELINE_WORKERS) {
779
+ usage(`--workers must be at most ${MAX_TIMELINE_WORKERS}.`);
780
+ }
781
+ if (props !== undefined && !isPlainObject(props)) {
782
+ usage("Timeline --props must be a JSON object keyed by composition clip id.");
783
+ }
784
+ const scratchValue = flagString(parsed.flags, "scratch");
785
+ const scratchDir = scratchValue === undefined ? undefined : path.resolve(process.cwd(), scratchValue);
786
+ const result = await renderTimeline({
787
+ project,
788
+ timelineId: targetId,
789
+ outPath,
790
+ ...(workers !== undefined ? { workers } : {}),
791
+ ...(scratchDir !== undefined ? { scratchDir } : {}),
792
+ ...(encoder !== undefined ? { encoder } : {}),
793
+ codec,
794
+ container,
795
+ ...(props !== undefined ? { propsOverrides: props } : {}),
796
+ overwrite: parsed.flags.has("overwrite") === true,
797
+ signal,
798
+ onProgress: progressPrinter("Rendering"),
799
+ });
800
+ printDiagnostics(result.diagnostics);
801
+ if (json) {
802
+ printJson({ ok: true, command: "render", ...result });
803
+ }
804
+ else {
805
+ process.stdout.write(`Rendered timeline ${targetId} to ${result.path} (${result.framesRendered} frames, ${formatDuration(result.durationSeconds)}, ${result.audio.clips} audio clip${result.audio.clips === 1 ? "" : "s"}, ${result.workers} workers, ${result.encoder} encoder)\n`);
806
+ }
807
+ return 0;
808
+ }
809
+ if (parsed.flags.has("workers") || parsed.flags.has("scratch")) {
810
+ usage("--workers and --scratch are only valid for timeline renders.");
811
+ }
812
+ const compositionId = targetId;
530
813
  const concurrencyValue = parsed.flags.get("concurrency");
531
814
  const concurrency = validateRenderConcurrency(typeof concurrencyValue === "string" ? Number(concurrencyValue) : undefined);
532
815
  const result = await renderComposition({
@@ -535,6 +818,9 @@ async function runRender(parsed, signal) {
535
818
  props,
536
819
  outPath,
537
820
  concurrency,
821
+ ...(encoder !== undefined ? { encoder } : {}),
822
+ codec,
823
+ container,
538
824
  overwrite: parsed.flags.has("overwrite") === true,
539
825
  signal,
540
826
  onProgress: progressPrinter("Rendering"),
@@ -544,7 +830,7 @@ async function runRender(parsed, signal) {
544
830
  printJson({ ok: true, command: "render", ...result });
545
831
  }
546
832
  else {
547
- process.stdout.write(`Rendered ${compositionId} to ${result.path} (${result.framesRendered} frames, ${formatDuration(result.durationSeconds)}, ${result.audio.clips} audio clip${result.audio.clips === 1 ? "" : "s"})\n`);
833
+ process.stdout.write(`Rendered ${compositionId} to ${result.path} (${result.framesRendered} frames, ${formatDuration(result.durationSeconds)}, ${result.audio.clips} audio clip${result.audio.clips === 1 ? "" : "s"}, ${result.encoder} encoder)\n`);
548
834
  }
549
835
  return 0;
550
836
  }