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.
- package/CHANGELOG.md +100 -0
- package/GLOSSARY.md +152 -24
- package/README.md +99 -31
- package/dist/assets/process.js.map +1 -1
- package/dist/assets/provenance.js.map +1 -1
- package/dist/cli.js +326 -40
- package/dist/cli.js.map +1 -1
- package/dist/composition/attributes.d.ts.map +1 -1
- package/dist/composition/diagnostics.js.map +1 -1
- package/dist/contracts.d.ts +12 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +79 -0
- package/dist/doctor.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/html/validate.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/preview/main.js +96 -11
- package/dist/preview/main.js.map +1 -1
- package/dist/preview/timeline-data.d.ts +85 -0
- package/dist/preview/timeline-data.d.ts.map +1 -0
- package/dist/preview/timeline-data.js +2 -0
- package/dist/preview/timeline-data.js.map +1 -0
- package/dist/preview/timeline-host.d.ts +21 -0
- package/dist/preview/timeline-host.d.ts.map +1 -0
- package/dist/preview/timeline-host.js +308 -0
- package/dist/preview/timeline-host.js.map +1 -0
- package/dist/preview/timeline-main.d.ts +17 -0
- package/dist/preview/timeline-main.d.ts.map +1 -0
- package/dist/preview/timeline-main.js +368 -0
- package/dist/preview/timeline-main.js.map +1 -0
- package/dist/project.d.ts +16 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +81 -26
- package/dist/project.js.map +1 -1
- package/dist/renderer/browser.d.ts +2 -0
- package/dist/renderer/browser.d.ts.map +1 -1
- package/dist/renderer/browser.js +6 -1
- package/dist/renderer/browser.js.map +1 -1
- package/dist/renderer/ffmpeg.d.ts +126 -1
- package/dist/renderer/ffmpeg.d.ts.map +1 -1
- package/dist/renderer/ffmpeg.js +450 -6
- package/dist/renderer/ffmpeg.js.map +1 -1
- package/dist/renderer/index.d.ts +28 -3
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +138 -38
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/timeline.d.ts +146 -0
- package/dist/renderer/timeline.d.ts.map +1 -0
- package/dist/renderer/timeline.js +1098 -0
- package/dist/renderer/timeline.js.map +1 -0
- package/dist/runtime/host.js.map +1 -1
- package/dist/runtime/media.d.ts.map +1 -1
- package/dist/runtime/media.js +3 -6
- package/dist/runtime/media.js.map +1 -1
- package/dist/runtime/video.d.ts +13 -0
- package/dist/runtime/video.d.ts.map +1 -0
- package/dist/runtime/video.js +41 -0
- package/dist/runtime/video.js.map +1 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +90 -24
- package/dist/scaffold.js.map +1 -1
- package/dist/server/composition-html.d.ts.map +1 -1
- package/dist/server/preview-html.d.ts.map +1 -1
- package/dist/server/preview-html.js +15 -1
- package/dist/server/preview-html.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +39 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/timeline-preview-data.d.ts +4 -0
- package/dist/server/timeline-preview-data.d.ts.map +1 -0
- package/dist/server/timeline-preview-data.js +97 -0
- package/dist/server/timeline-preview-data.js.map +1 -0
- package/dist/server/timeline-preview-html.d.ts +4 -0
- package/dist/server/timeline-preview-html.d.ts.map +1 -0
- package/dist/server/timeline-preview-html.js +227 -0
- package/dist/server/timeline-preview-html.js.map +1 -0
- package/dist/timeline/plan.d.ts +32 -0
- package/dist/timeline/plan.d.ts.map +1 -0
- package/dist/timeline/plan.js +68 -0
- package/dist/timeline/plan.js.map +1 -0
- package/dist/timeline/resolve.d.ts +60 -0
- package/dist/timeline/resolve.d.ts.map +1 -0
- package/dist/timeline/resolve.js +523 -0
- package/dist/timeline/resolve.js.map +1 -0
- package/dist/timeline/schema.d.ts +71 -0
- package/dist/timeline/schema.d.ts.map +1 -0
- package/dist/timeline/schema.js +425 -0
- package/dist/timeline/schema.js.map +1 -0
- package/dist/transcript.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/adr/0002-make-frame-and-props-the-only-animation-state.md +2 -0
- package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +2 -0
- package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
- package/docs/adr/0009-composite-production-frames-in-software.md +1 -1
- package/docs/adr/0010-make-timelines-the-render-unit.md +24 -0
- package/docs/adr/0011-compose-timeline-frames-in-a-live-browser-host.md +22 -0
- package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +31 -0
- package/docs/adr/0013-capture-bounded-multi-frame-stills-for-inspection.md +33 -0
- package/docs/preview-testing.md +53 -0
- package/docs/v0.1-design.md +138 -87
- package/examples/demo/README.md +10 -3
- package/examples/demo/timelines/demo.timeline.json +12 -0
- package/examples/demo/video.config.js +4 -0
- package/examples/video/README.md +50 -6
- package/examples/video/compositions/video-overlay.html +350 -0
- package/examples/video/props/video-timeline.json +10 -0
- package/examples/video/timelines/video-timeline-mp4.timeline.json +44 -0
- package/examples/video/timelines/video-timeline.timeline.json +44 -0
- package/examples/video/video.config.js +6 -0
- package/package.json +5 -3
- package/skills/frameyard/README.md +7 -5
- package/skills/frameyard/SKILL.md +19 -13
- package/skills/frameyard/references/common-mistakes.md +1 -0
- package/skills/frameyard/references/deterministic-authoring.md +2 -1
- package/skills/frameyard/references/diagnostics.md +1 -1
- package/skills/frameyard/references/failure-recovery.md +3 -2
- package/skills/frameyard/references/json-results.md +15 -6
- package/skills/frameyard/references/subtitles-karaoke.md +2 -2
- package/skills/frameyard/references/timelines.md +143 -0
- package/skills/frameyard/scripts/frameyard.mjs +20 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/assets/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAC;AAEvE,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;AA0B7B,SAAS,UAAU,CAAC,OAAe,EAAE,KAAa;IAChD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAc,EAAE,
|
|
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 {
|
|
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,
|
|
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([
|
|
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"
|
|
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 <
|
|
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 <
|
|
217
|
-
frameyard render <composition-id> [--out <video
|
|
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>
|
|
225
|
-
--out <
|
|
226
|
-
--frame <
|
|
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 <
|
|
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
|
|
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
|
|
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
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
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
|
-
|
|
517
|
-
|
|
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
|
|
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", `${
|
|
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
|
}
|