@nodetool-ai/video-nodes 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +12 -0
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/nodes/easeCurve.d.ts +52 -0
  4. package/dist/nodes/easeCurve.d.ts.map +1 -0
  5. package/dist/nodes/easeCurve.js +108 -0
  6. package/dist/nodes/easeCurve.js.map +1 -0
  7. package/dist/nodes/ffmpeg-helpers.d.ts +4 -0
  8. package/dist/nodes/ffmpeg-helpers.d.ts.map +1 -1
  9. package/dist/nodes/ffmpeg-helpers.js +18 -2
  10. package/dist/nodes/ffmpeg-helpers.js.map +1 -1
  11. package/dist/nodes/script.d.ts.map +1 -1
  12. package/dist/nodes/script.js +42 -16
  13. package/dist/nodes/script.js.map +1 -1
  14. package/dist/nodes/storyboard.d.ts +36 -7
  15. package/dist/nodes/storyboard.d.ts.map +1 -1
  16. package/dist/nodes/storyboard.js +222 -70
  17. package/dist/nodes/storyboard.js.map +1 -1
  18. package/dist/nodes/timeline/compositeRender.d.ts +17 -1
  19. package/dist/nodes/timeline/compositeRender.d.ts.map +1 -1
  20. package/dist/nodes/timeline/compositeRender.js +127 -104
  21. package/dist/nodes/timeline/compositeRender.js.map +1 -1
  22. package/dist/nodes/timeline/rawFrames.d.ts +10 -0
  23. package/dist/nodes/timeline/rawFrames.d.ts.map +1 -1
  24. package/dist/nodes/timeline/rawFrames.js +88 -4
  25. package/dist/nodes/timeline/rawFrames.js.map +1 -1
  26. package/dist/nodes/timeline.d.ts +1 -10
  27. package/dist/nodes/timeline.d.ts.map +1 -1
  28. package/dist/nodes/timeline.js +189 -68
  29. package/dist/nodes/timeline.js.map +1 -1
  30. package/dist/nodes/video.d.ts +22 -5
  31. package/dist/nodes/video.d.ts.map +1 -1
  32. package/dist/nodes/video.js +141 -4
  33. package/dist/nodes/video.js.map +1 -1
  34. package/package.json +10 -10
@@ -9,11 +9,12 @@
9
9
  * clip media into RGBA and encodes the composited frames, in place of
10
10
  * `<video>`/WebCodecs.
11
11
  */
12
- import { hasTimeRemap } from "@nodetool-ai/timeline";
12
+ import { ensureGoogleFonts } from "@nodetool-ai/timeline/fonts/google-node";
13
+ import { computeModel3DBakeHash } from "@nodetool-ai/timeline";
13
14
  import { HeadlessFrameCompositor, clipSourceTimeSec, computeActiveLayersWithHorizon, createAnimationCompileCache, hasActiveAnimation, measureTextWith, motionBlurSampleTimes, layerShutterTime, resolveFrameMotionBlur, shutterWindowIsStatic, resolveAnimatedLayerProps, resolveTextStaggerContext, trackZ } from "@nodetool-ai/timeline/render";
14
15
  import { createCanvas } from "@napi-rs/canvas";
15
16
  import { setImmediate } from "node:timers/promises";
16
- import { decodeImageRgba, fitWithin, openFrameEncoder, openSourceFrameStream, openVideoFrameStream, probeVideoSize } from "./rawFrames.js";
17
+ import { decodeStillRgba, fitWithin, openFrameEncoder, openSourceFrameStream, probeVideoFrameRate, probeVideoSize } from "./rawFrames.js";
17
18
  import { openPngSequenceEncoder } from "./pngSequence.js";
18
19
  import { resolveTimelineOutput } from "./outputFormats.js";
19
20
  import { NodeRasterizer } from "./rasterizers.js";
@@ -90,6 +91,7 @@ export async function renderTimelineComposited(opts) {
90
91
  throw abortError();
91
92
  const compositor = new HeadlessFrameCompositor(device, width, height);
92
93
  compositor.setReferenceSize(referenceWidth, referenceHeight);
94
+ const { unavailable: fontsUnavailable } = await ensureGoogleFonts(sequence);
93
95
  const rasterizer = new NodeRasterizer(referenceWidth, referenceHeight);
94
96
  const frameIndices = opts.frames
95
97
  ? [...new Set(opts.frames)]
@@ -119,6 +121,24 @@ export async function renderTimelineComposited(opts) {
119
121
  const images = new Map();
120
122
  const assetPaths = new Map();
121
123
  const skippedClips = new Set();
124
+ const diagnostics = [];
125
+ const latestDiagnostic = new Map();
126
+ const clipsById = new Map(sequence.clips.map((clip) => [clip.id, clip]));
127
+ const diagnose = (clipId, timeMs, reason, detail) => {
128
+ const startMs = Math.max(0, timeMs);
129
+ const endMs = Math.min(durationMs, startMs + frameMs);
130
+ const key = JSON.stringify([clipId, reason, detail]);
131
+ const previous = latestDiagnostic.get(key);
132
+ if (previous && startMs <= previous.endMs + 0.000001) {
133
+ previous.endMs = Math.max(previous.endMs, endMs);
134
+ }
135
+ else {
136
+ const diagnostic = { clipId, startMs, endMs, reason, detail };
137
+ diagnostics.push(diagnostic);
138
+ latestDiagnostic.set(key, diagnostic);
139
+ }
140
+ skippedClips.add(clipsById.get(clipId)?.name ?? clipId);
141
+ };
122
142
  const closeVideoSources = () => {
123
143
  for (const source of videoSources.values())
124
144
  source.close();
@@ -140,13 +160,8 @@ export async function renderTimelineComposited(opts) {
140
160
  if (signal?.aborted)
141
161
  throw abortError();
142
162
  let decoded = null;
143
- if (file) {
144
- const size = await probeVideoSize(file);
145
- if (signal?.aborted)
146
- throw abortError();
147
- if (size)
148
- decoded = await decodeImageRgba(file, fitWithin(size, frameSize));
149
- }
163
+ if (file)
164
+ decoded = await decodeStillRgba(file, frameSize);
150
165
  if (signal?.aborted)
151
166
  throw abortError();
152
167
  images.set(assetId, decoded);
@@ -177,65 +192,36 @@ export async function renderTimelineComposited(opts) {
177
192
  // shows at the cut.
178
193
  const startSec = clipSourceTimeSec(clip, clip.startMs);
179
194
  const endMs = clip.startMs + clip.durationMs;
180
- let source;
181
- if (hasTimeRemap(clip)) {
182
- // A curve can hold, revisit or reverse through the source, which a
183
- // forward-only stream cannot serve; this one reopens ffmpeg to seek back.
184
- const stream = openSourceFrameStream({
185
- filePath: file,
186
- size: decodeSize,
187
- fps,
188
- startSec
189
- });
190
- const frameVersions = new WeakMap();
191
- let nextFrameVersion = 0;
192
- source = {
193
- width: stream.width,
194
- height: stream.height,
195
- endMs,
196
- async frameAt(timeMs) {
197
- const sourceSec = clipSourceTimeSec(clip, timeMs);
198
- const rgba = await stream.frameAtSourceSec(sourceSec);
199
- if (!rgba)
200
- return null;
201
- // A retained or held frame returns the same array. A newly decoded
202
- // frame needs an upload even when a nearby source time rounds to the
203
- // same timeline-frame index.
204
- let version = frameVersions.get(rgba);
205
- if (version === undefined) {
206
- version = `${key}@${nextFrameVersion++}`;
207
- frameVersions.set(rgba, version);
208
- }
209
- return {
210
- rgba,
211
- version
212
- };
213
- },
214
- close: () => stream.close()
215
- };
216
- }
217
- else {
218
- const stream = openVideoFrameStream({
219
- filePath: file,
220
- size: decodeSize,
221
- fps,
222
- startSec,
223
- speed: clip.speedBaked ? 1 : Math.max(0.0001, clip.speedMultiplier ?? 1)
224
- });
225
- source = {
226
- width: stream.width,
227
- height: stream.height,
228
- endMs,
229
- async frameAt(timeMs) {
230
- const index = Math.max(0, Math.round(((timeMs - clip.startMs) * fps) / 1000));
231
- const rgba = await stream.frameAt(index);
232
- if (!rgba)
233
- return null;
234
- return { rgba, version: `${key}#${index}` };
235
- },
236
- close: () => stream.close()
237
- };
238
- }
195
+ const nativeFps = await probeVideoFrameRate(file);
196
+ const stream = openSourceFrameStream({
197
+ filePath: file,
198
+ size: decodeSize,
199
+ fps: nativeFps,
200
+ startSec,
201
+ nativeSampling: true
202
+ });
203
+ const frameVersions = new WeakMap();
204
+ let nextFrameVersion = 0;
205
+ const source = {
206
+ width: stream.width,
207
+ height: stream.height,
208
+ endMs,
209
+ async frameAt(timeMs) {
210
+ const sourceSec = clip.model3dStyle?.bake?.assetId === assetId
211
+ ? Math.max(0, (timeMs - clip.startMs) / 1000)
212
+ : clipSourceTimeSec(clip, timeMs);
213
+ const rgba = await stream.frameAtSourceSec(sourceSec);
214
+ if (!rgba)
215
+ return null;
216
+ let version = frameVersions.get(rgba);
217
+ if (version === undefined) {
218
+ version = `${key}@${nextFrameVersion++}`;
219
+ frameVersions.set(rgba, version);
220
+ }
221
+ return { rgba, version };
222
+ },
223
+ close: () => stream.close()
224
+ };
239
225
  videoSources.set(key, source);
240
226
  return source;
241
227
  };
@@ -249,14 +235,18 @@ export async function renderTimelineComposited(opts) {
249
235
  */
250
236
  const sampleAt = async (timeMs, frameTimeMs = timeMs, sampleIndex = 0, sampleCount = 1) => {
251
237
  const layers = [];
252
- const { layers: active, adjustments, precomposites } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
238
+ const { layers: active, adjustments, precomposites, droppedLayers } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
253
239
  canvas,
240
+ model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
254
241
  animationCache: animCache,
255
242
  mediaTracks: sequence.mediaTracks,
256
243
  camera2d: sequence.camera2d,
257
244
  tempo: sequence.tempo,
258
245
  layerTimeMs: (clip) => layerShutterTime(clip, frameTimeMs, sampleIndex, sampleCount, frameMs, output.motionBlur)
259
246
  });
247
+ for (const dropped of droppedLayers) {
248
+ diagnose(dropped.clipId, frameTimeMs, "scene_drop", dropped.reason);
249
+ }
260
250
  /**
261
251
  * A resolved layer as something the compositor can upload: its pixels,
262
252
  * its own shape mask rasterized at that size, and — for a matted layer —
@@ -298,7 +288,9 @@ export async function renderTimelineComposited(opts) {
298
288
  const raster = rasterizer.caption(layer.caption);
299
289
  if (!raster)
300
290
  return null;
301
- return finish({
291
+ // No `finish`: the clip's shape mask belongs to its picture, and a
292
+ // caption has no layer space to mask in — the browser leaves it off.
293
+ return {
302
294
  ...common,
303
295
  id: id("c"),
304
296
  source: raster,
@@ -314,7 +306,7 @@ export async function renderTimelineComposited(opts) {
314
306
  // here keeps its geometry — and a dip's one solid — off a layer
315
307
  // that composites untransformed anyway.
316
308
  transition: undefined
317
- });
309
+ };
318
310
  }
319
311
  if (layer.kind === "text" && anim.textStyle) {
320
312
  const stagger = resolveTextStaggerContext(layer.clip, layerTimeMs, canvas, animCache, sequence.tempo);
@@ -334,38 +326,60 @@ export async function renderTimelineComposited(opts) {
334
326
  return null;
335
327
  return finish({ ...common, id: id("s"), source: raster });
336
328
  }
337
- if (!layer.assetId)
329
+ if (layer.kind === "model3d") {
330
+ diagnose(layer.clipId, frameTimeMs, "unsupported_layer", "Live or stale-bake 3D requires a fresh bake before server export");
338
331
  return null;
339
- if (layer.kind === "video") {
340
- const stream = await videoFor(layer.clip, layer.assetId);
341
- if (!stream) {
342
- skippedClips.add(layer.clip.name);
343
- return null;
332
+ }
333
+ if (!layer.assetId) {
334
+ diagnose(layer.clipId, frameTimeMs, "missing_asset", "Active layer has no media asset");
335
+ return null;
336
+ }
337
+ if (!(await pathFor(layer.assetId))) {
338
+ diagnose(layer.clipId, frameTimeMs, "unavailable_media", "Media asset has no readable file");
339
+ return null;
340
+ }
341
+ try {
342
+ if (layer.kind === "video") {
343
+ const stream = await videoFor(layer.clip, layer.assetId);
344
+ if (!stream) {
345
+ diagnose(layer.clipId, frameTimeMs, "decode_failure", "Media has no video stream");
346
+ return null;
347
+ }
348
+ const decoded = await stream.frameAt(layerTimeMs);
349
+ if (!decoded) {
350
+ diagnose(layer.clipId, frameTimeMs, "decode_failure", "Video decoder returned no frame");
351
+ return null;
352
+ }
353
+ return finish({
354
+ ...common,
355
+ id: id("v"),
356
+ source: {
357
+ rgba: decoded.rgba,
358
+ width: stream.width,
359
+ height: stream.height,
360
+ version: decoded.version
361
+ }
362
+ });
344
363
  }
345
- const decoded = await stream.frameAt(layerTimeMs);
346
- if (!decoded)
364
+ const image = await imageFor(layer.assetId);
365
+ if (!image) {
366
+ diagnose(layer.clipId, frameTimeMs, "decode_failure", "Image decoder returned no frame");
347
367
  return null;
368
+ }
348
369
  return finish({
349
370
  ...common,
350
- id: id("v"),
351
- source: {
352
- rgba: decoded.rgba,
353
- width: stream.width,
354
- height: stream.height,
355
- version: decoded.version
356
- }
371
+ id: id("i"),
372
+ source: { ...image, version: layer.assetId }
357
373
  });
358
374
  }
359
- const image = await imageFor(layer.assetId);
360
- if (!image) {
361
- skippedClips.add(layer.clip.name);
375
+ catch (error) {
376
+ if (signal?.aborted ||
377
+ (error instanceof Error && error.name === "MissingBinaryError")) {
378
+ throw error;
379
+ }
380
+ diagnose(layer.clipId, frameTimeMs, "decode_failure", error instanceof Error ? error.message : String(error));
362
381
  return null;
363
382
  }
364
- return finish({
365
- ...common,
366
- id: id("i"),
367
- source: { ...image, version: layer.assetId }
368
- });
369
383
  };
370
384
  for (let index = 0; index < active.length; index++) {
371
385
  if (index > 0 && index % YIELD_EVERY_LAYERS === 0) {
@@ -383,15 +397,17 @@ export async function renderTimelineComposited(opts) {
383
397
  const source = await frameLayerFor(layer.matte.layer, "m:");
384
398
  if (signal?.aborted)
385
399
  throw abortError();
386
- if (source) {
387
- built.matte = {
388
- mode: layer.matte.mode,
389
- invert: layer.matte.invert,
390
- layer: source,
391
- strength: layer.matte.strength,
392
- featherPx: layer.matte.featherPx
393
- };
400
+ if (!source) {
401
+ diagnose(layer.clipId, frameTimeMs, "decode_failure", "Required matte source could not be rendered");
402
+ continue;
394
403
  }
404
+ built.matte = {
405
+ mode: layer.matte.mode,
406
+ invert: layer.matte.invert,
407
+ layer: source,
408
+ strength: layer.matte.strength,
409
+ featherPx: layer.matte.featherPx
410
+ };
395
411
  }
396
412
  layers.push(built);
397
413
  }
@@ -403,7 +419,7 @@ export async function renderTimelineComposited(opts) {
403
419
  opacity: adjustment.opacity,
404
420
  effects: adjustment.effects,
405
421
  shapeMask: adjustment.mask
406
- ? rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined
422
+ ? (rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined)
407
423
  : undefined,
408
424
  wipe: adjustment.wipe,
409
425
  precomposeGroupId: adjustment.precomposeGroupId
@@ -434,6 +450,7 @@ export async function renderTimelineComposited(opts) {
434
450
  return false;
435
451
  const { layers, adjustments } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
436
452
  canvas,
453
+ model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
437
454
  animationCache: animCache,
438
455
  mediaTracks: sequence.mediaTracks,
439
456
  camera2d: sequence.camera2d,
@@ -493,7 +510,13 @@ export async function renderTimelineComposited(opts) {
493
510
  throw abortError();
494
511
  if (encoder)
495
512
  await awaitWithAbort(encoder.finish(), signal);
496
- return { totalFrames: frameIndices.length, skippedClips: [...skippedClips] };
513
+ return {
514
+ complete: diagnostics.length === 0,
515
+ diagnostics,
516
+ totalFrames: frameIndices.length,
517
+ skippedClips: [...skippedClips],
518
+ fontsUnavailable
519
+ };
497
520
  }
498
521
  catch (error) {
499
522
  encoder?.abort();
@@ -1 +1 @@
1
- {"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"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"}
@@ -31,8 +31,15 @@ export interface RawImage extends RawSize {
31
31
  export declare function fitWithin(source: RawSize, canvas: RawSize): RawSize;
32
32
  /** Probe a media file's video dimensions, or `null` when it has no video. */
33
33
  export declare function probeVideoSize(filePath: string): Promise<RawSize | null>;
34
+ /** Native source rate used only for verified frame-grid caching. */
35
+ export declare function probeVideoFrameRate(filePath: string): Promise<number>;
34
36
  /** Decode a still image to straight-alpha RGBA at `size`. */
35
37
  export declare function decodeImageRgba(filePath: string, size: RawSize): Promise<RawImage>;
38
+ /**
39
+ * Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
40
+ * picture in it.
41
+ */
42
+ export declare function decodeStillRgba(filePath: string, canvas: RawSize): Promise<RawImage | null>;
36
43
  /**
37
44
  * A clip's frames, decoded on demand in timeline order.
38
45
  *
@@ -56,6 +63,7 @@ interface VideoFrameStreamOptions {
56
63
  startSec: number;
57
64
  /** Playback rate: >1 consumes the source faster than the timeline. */
58
65
  speed: number;
66
+ nativeSampling?: boolean;
59
67
  }
60
68
  /**
61
69
  * Start decoding `filePath` into RGBA frames at the timeline's frame rate.
@@ -96,6 +104,8 @@ export declare function openSourceFrameStream(opts: {
96
104
  size: RawSize;
97
105
  fps: number;
98
106
  startSec: number;
107
+ /** Preserve native frames instead of resampling onto the requested grid. */
108
+ nativeSampling?: boolean;
99
109
  /** Maximum decoded bytes retained in one reverse window. */
100
110
  maxWindowBytes?: number;
101
111
  /** Maximum source-time span retained in one reverse window. */
@@ -1 +1 @@
1
- {"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,4CAA4C;AAC5C,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAUnE;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAe9E;AAkBD,6DAA6D;AAC7D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,QAAQ,CAAC,CAyCnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,IAAI,CAAC;CACf;AAKD,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,IAAI,EAAE,OAAO,CAAC;IACd,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,uBAAuB,GAC5B,gBAAgB,CA4DlB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,+EAA+E;IAC/E,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1D,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf;AAkDD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAuHpB;AAsGD,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,6DAA6D;IAC7D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAaxE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAiB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,YAAY,CAqFf"}
1
+ {"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@
14
14
  * encoder.
15
15
  */
16
16
  import { spawn } from "node:child_process";
17
+ import { open, readFile } from "node:fs/promises";
18
+ import { createCanvas, loadImage } from "@napi-rs/canvas";
17
19
  import { MissingBinaryError, execFfmpeg, execFfprobe } from "../ffmpeg-helpers.js";
18
20
  /**
19
21
  * Largest size that fits `source` inside `canvas` without upscaling and
@@ -46,6 +48,24 @@ export async function probeVideoSize(filePath) {
46
48
  return null;
47
49
  return { width: Number(match[1]), height: Number(match[2]) };
48
50
  }
51
+ /** Native source rate used only for verified frame-grid caching. */
52
+ export async function probeVideoFrameRate(filePath) {
53
+ const { stdout } = await execFfprobe([
54
+ "-v",
55
+ "error",
56
+ "-select_streams",
57
+ "v:0",
58
+ "-show_entries",
59
+ "stream=avg_frame_rate",
60
+ "-of",
61
+ "default=noprint_wrappers=1:nokey=1",
62
+ filePath
63
+ ]);
64
+ const [numerator, denominator = "1"] = stdout.trim().split("/");
65
+ const rate = Number(numerator) / Number(denominator);
66
+ // An unknown grid disables caching; exact timestamp seeks still work.
67
+ return Number.isFinite(rate) && rate > 0 ? rate : 1;
68
+ }
49
69
  function spawnFfmpeg(args) {
50
70
  return spawn("ffmpeg", args, { stdio: ["pipe", "pipe", "pipe"] });
51
71
  }
@@ -94,6 +114,52 @@ export async function decodeImageRgba(filePath, size) {
94
114
  }
95
115
  return { rgba: rgba.subarray(0, expected), ...size };
96
116
  }
117
+ /** Whether `filePath` holds SVG markup. Stored assets often have no extension. */
118
+ async function isSvgFile(filePath) {
119
+ const handle = await open(filePath, "r");
120
+ try {
121
+ const head = Buffer.alloc(4096);
122
+ const { bytesRead } = await handle.read(head, 0, head.length, 0);
123
+ const text = head.subarray(0, bytesRead).toString("utf8").replace(/^\uFEFF/, "");
124
+ return text.trimStart().startsWith("<") && /<svg[\s>]/i.test(text);
125
+ }
126
+ finally {
127
+ await handle.close();
128
+ }
129
+ }
130
+ /**
131
+ * Rasterize an SVG with Skia. Many ffmpeg builds (Homebrew's default among
132
+ * them) have no SVG decoder, and a logo is the usual SVG on a timeline. The
133
+ * intrinsic size plays the role a raster's pixel size does in {@link fitWithin}.
134
+ */
135
+ async function rasterizeSvg(filePath, canvas) {
136
+ let image;
137
+ try {
138
+ image = await loadImage(await readFile(filePath));
139
+ }
140
+ catch (error) {
141
+ throw new Error(`Could not rasterize SVG ${filePath}: ${error.message}`);
142
+ }
143
+ if (!(image.width > 0 && image.height > 0)) {
144
+ throw new Error(`Could not rasterize SVG ${filePath}: it has no size`);
145
+ }
146
+ const size = fitWithin({ width: image.width, height: image.height }, canvas);
147
+ const surface = createCanvas(size.width, size.height);
148
+ const context = surface.getContext("2d");
149
+ context.drawImage(image, 0, 0, size.width, size.height);
150
+ const { data } = context.getImageData(0, 0, size.width, size.height);
151
+ return { rgba: new Uint8Array(data.buffer, data.byteOffset, data.byteLength), ...size };
152
+ }
153
+ /**
154
+ * Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
155
+ * picture in it.
156
+ */
157
+ export async function decodeStillRgba(filePath, canvas) {
158
+ if (await isSvgFile(filePath))
159
+ return rasterizeSvg(filePath, canvas);
160
+ const size = await probeVideoSize(filePath);
161
+ return size ? decodeImageRgba(filePath, fitWithin(size, canvas)) : null;
162
+ }
97
163
  /** How many decoded frames ffmpeg may run ahead of the consumer. */
98
164
  const READAHEAD_FRAMES = 4;
99
165
  /**
@@ -105,7 +171,7 @@ export function openVideoFrameStream(opts) {
105
171
  const { filePath, size, fps, startSec, speed } = opts;
106
172
  const filters = [
107
173
  speed !== 1 ? `setpts=PTS/${speed}` : null,
108
- `fps=${fps}`,
174
+ opts.nativeSampling ? null : `fps=${fps}`,
109
175
  `scale=${size.width}:${size.height}`,
110
176
  "format=rgba"
111
177
  ].filter((f) => f !== null);
@@ -117,6 +183,7 @@ export function openVideoFrameStream(opts) {
117
183
  filePath,
118
184
  "-vf",
119
185
  filters.join(","),
186
+ ...(opts.nativeSampling ? ["-fps_mode", "passthrough"] : []),
120
187
  "-f",
121
188
  "rawvideo",
122
189
  "-pix_fmt",
@@ -160,6 +227,12 @@ export function openVideoFrameStream(opts) {
160
227
  }
161
228
  };
162
229
  }
230
+ /**
231
+ * How long the grid probe may run. A miss falls back to a fresh seek per
232
+ * frame, so the budget must hold on a loaded machine: a 1s budget expired on
233
+ * CI for a 60-frame clip and turned every reverse read into a reopen.
234
+ */
235
+ const GRID_PROBE_TIMEOUT_MS = 10_000;
163
236
  /** Only a verified regular source grid can be indexed inside a decode window. */
164
237
  async function hasRegularFrameGrid(filePath, fps, signal) {
165
238
  if (signal.aborted)
@@ -184,7 +257,7 @@ async function hasRegularFrameGrid(filePath, fps, signal) {
184
257
  child.kill("SIGKILL");
185
258
  finish(null);
186
259
  };
187
- const deadline = setTimeout(cancel, 1000);
260
+ const deadline = setTimeout(cancel, GRID_PROBE_TIMEOUT_MS);
188
261
  signal.addEventListener("abort", cancel, { once: true });
189
262
  child.stdout.on("data", (chunk) => {
190
263
  bytes += chunk.length;
@@ -243,7 +316,12 @@ export function openSourceFrameStream(opts) {
243
316
  const probeController = new AbortController();
244
317
  const regularGrid = hasRegularFrameGrid(filePath, fps, probeController.signal);
245
318
  const openAt = (sec) => openVideoFrameStream({
246
- filePath, size, fps, startSec: sec, speed: 1
319
+ filePath,
320
+ size,
321
+ fps,
322
+ startSec: sec,
323
+ speed: 1,
324
+ nativeSampling: opts.nativeSampling
247
325
  });
248
326
  const replaceStream = (sec) => {
249
327
  if (stream) {
@@ -283,7 +361,13 @@ export function openSourceFrameStream(opts) {
283
361
  reverseWindow = [];
284
362
  decodedIndex = -1;
285
363
  }
286
- const frame = await active.frameAt(0);
364
+ let frame = await active.frameAt(0);
365
+ if (!frame && target > 0) {
366
+ // A fresh seek beyond EOF has no frame to hold. Decode to the end
367
+ // instead of reusing whichever earlier frame the caller requested.
368
+ active = replaceStream(0);
369
+ frame = await active.frameAt(Number.MAX_SAFE_INTEGER);
370
+ }
287
371
  if (closed)
288
372
  return null;
289
373
  if (frame)