@editframe/assets 0.47.2 → 0.48.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 (60) hide show
  1. package/dist/Probe.cjs +5 -8
  2. package/dist/Probe.cjs.map +1 -1
  3. package/dist/Probe.js +1 -2
  4. package/dist/Probe.js.map +1 -1
  5. package/dist/VideoRenderOptions.cjs +2 -4
  6. package/dist/VideoRenderOptions.cjs.map +1 -1
  7. package/dist/VideoRenderOptions.js +1 -2
  8. package/dist/VideoRenderOptions.js.map +1 -1
  9. package/dist/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +2 -4
  10. package/dist/generateFragmentIndex.cjs +4 -12
  11. package/dist/generateFragmentIndex.cjs.map +1 -1
  12. package/dist/generateFragmentIndex.d.cts +1 -2
  13. package/dist/generateFragmentIndex.d.ts +1 -2
  14. package/dist/generateFragmentIndex.js +1 -2
  15. package/dist/generateFragmentIndex.js.map +1 -1
  16. package/dist/generateSingleTrack.cjs +7 -10
  17. package/dist/generateSingleTrack.cjs.map +1 -1
  18. package/dist/generateSingleTrack.js +2 -3
  19. package/dist/generateSingleTrack.js.map +1 -1
  20. package/dist/generateWebmSegmentIndex.cjs +31 -8
  21. package/dist/generateWebmSegmentIndex.cjs.map +1 -1
  22. package/dist/generateWebmSegmentIndex.js +28 -4
  23. package/dist/generateWebmSegmentIndex.js.map +1 -1
  24. package/dist/idempotentTask.cjs +5 -10
  25. package/dist/idempotentTask.cjs.map +1 -1
  26. package/dist/idempotentTask.d.cts +0 -1
  27. package/dist/idempotentTask.d.ts +0 -1
  28. package/dist/idempotentTask.js +1 -2
  29. package/dist/idempotentTask.js.map +1 -1
  30. package/dist/index.cjs +11 -11
  31. package/dist/index.js +1 -2
  32. package/dist/md5.cjs +3 -7
  33. package/dist/md5.cjs.map +1 -1
  34. package/dist/md5.js +1 -2
  35. package/dist/md5.js.map +1 -1
  36. package/dist/tasks/cacheImage.cjs +4 -6
  37. package/dist/tasks/cacheImage.cjs.map +1 -1
  38. package/dist/tasks/cacheImage.js +1 -2
  39. package/dist/tasks/cacheImage.js.map +1 -1
  40. package/dist/tasks/findOrCreateCaptions.cjs +5 -10
  41. package/dist/tasks/findOrCreateCaptions.cjs.map +1 -1
  42. package/dist/tasks/findOrCreateCaptions.js +1 -2
  43. package/dist/tasks/findOrCreateCaptions.js.map +1 -1
  44. package/dist/tasks/generateScrubTrack.cjs +6 -9
  45. package/dist/tasks/generateScrubTrack.cjs.map +1 -1
  46. package/dist/tasks/generateScrubTrack.js +1 -2
  47. package/dist/tasks/generateScrubTrack.js.map +1 -1
  48. package/dist/tasks/generateTrack.cjs +7 -11
  49. package/dist/tasks/generateTrack.cjs.map +1 -1
  50. package/dist/tasks/generateTrack.js +1 -2
  51. package/dist/tasks/generateTrack.js.map +1 -1
  52. package/dist/tasks/generateTrackFragmentIndex.cjs +11 -13
  53. package/dist/tasks/generateTrackFragmentIndex.cjs.map +1 -1
  54. package/dist/tasks/generateTrackFragmentIndex.js +5 -6
  55. package/dist/tasks/generateTrackFragmentIndex.js.map +1 -1
  56. package/dist/truncateDecimal.cjs +1 -2
  57. package/dist/truncateDecimal.cjs.map +1 -1
  58. package/dist/truncateDecimal.js +1 -1
  59. package/dist/truncateDecimal.js.map +1 -1
  60. package/package.json +1 -1
@@ -4,7 +4,6 @@ import { idempotentTask } from "../idempotentTask.js";
4
4
  import { generateWebmSegmentIndex } from "../generateWebmSegmentIndex.js";
5
5
  import debug from "debug";
6
6
  import { basename } from "node:path";
7
-
8
7
  //#region src/tasks/generateTrackFragmentIndex.ts
9
8
  const generateTrackFragmentIndexFromPath = async (absolutePath) => {
10
9
  const log = debug("ef:generateTrackFragment");
@@ -15,7 +14,7 @@ const generateTrackFragmentIndexFromPath = async (absolutePath) => {
15
14
  if (probe.hasAlphaVideo) {
16
15
  log(`VP9 alpha WebM: using EBML cluster index (no transcoding)`);
17
16
  const webmIndex = await generateWebmSegmentIndex(absolutePath, startTimeOffsetMs);
18
- const scrubResult$1 = await (async () => {
17
+ const scrubResult = await (async () => {
19
18
  try {
20
19
  log("Generating scrub track fragment index for alpha WebM");
21
20
  const result = await generateFragmentIndex(probe.createScrubTrackReadstream(), startTimeOffsetMs, { 0: -1 });
@@ -26,9 +25,9 @@ const generateTrackFragmentIndexFromPath = async (absolutePath) => {
26
25
  return null;
27
26
  }
28
27
  })();
29
- const trackFragmentIndexes$1 = { ...webmIndex };
30
- if (scrubResult$1) Object.assign(trackFragmentIndexes$1, scrubResult$1);
31
- return trackFragmentIndexes$1;
28
+ const trackFragmentIndexes = { ...webmIndex };
29
+ if (scrubResult) Object.assign(trackFragmentIndexes, scrubResult);
30
+ return trackFragmentIndexes;
32
31
  }
33
32
  log(`Generating track fragment index for ${absolutePath} using single-track approach`);
34
33
  const trackTasks = probe.streams.map((stream, streamIndex) => {
@@ -70,7 +69,7 @@ const generateTrackFragmentIndex = async (cacheRoot, absolutePath) => {
70
69
  throw error;
71
70
  }
72
71
  };
73
-
74
72
  //#endregion
75
73
  export { generateTrackFragmentIndex, generateTrackFragmentIndexFromPath };
74
+
76
75
  //# sourceMappingURL=generateTrackFragmentIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateTrackFragmentIndex.js","names":["scrubResult","trackFragmentIndexes: Record<number, TrackFragmentIndex>","trackFragmentIndexes","scrubTask: Promise<Record<number, TrackFragmentIndex> | null>"],"sources":["../../src/tasks/generateTrackFragmentIndex.ts"],"sourcesContent":["import { idempotentTask } from \"../idempotentTask.js\";\nimport debug from \"debug\";\nimport { basename } from \"node:path\";\nimport { Probe } from \"../Probe.js\";\nimport { generateFragmentIndex } from \"../generateFragmentIndex.js\";\nimport { generateWebmSegmentIndex } from \"../generateWebmSegmentIndex.js\";\nimport type { TrackFragmentIndex } from \"../Probe.js\";\n\nexport const generateTrackFragmentIndexFromPath = async (absolutePath: string) => {\n const log = debug(\"ef:generateTrackFragment\");\n const probe = await Probe.probePath(absolutePath);\n\n const startTimeOffsetMs = probe.startTimeOffsetMs;\n if (startTimeOffsetMs !== undefined) {\n log(`Extracted start_time offset: ${startTimeOffsetMs}ms`);\n } else {\n log(\"No format/stream timing offset found - will detect from composition time\");\n }\n\n // ── VP9-alpha WebM fast path ─────────────────────────────────────────────\n // For VP9-alpha WebM sources we skip all transcoding and instead build a\n // byte-range index directly from the source file's EBML cluster structure.\n // Alpha BlockAdditions are preserved in every cluster — no H264 matte needed.\n if (probe.hasAlphaVideo) {\n log(`VP9 alpha WebM: using EBML cluster index (no transcoding)`);\n const webmIndex = await generateWebmSegmentIndex(absolutePath, startTimeOffsetMs);\n\n // Scrub track still needs transcoding (low-res H264 thumbnails)\n const scrubTask: Promise<Record<number, TrackFragmentIndex> | null> = (async () => {\n try {\n log(\"Generating scrub track fragment index for alpha WebM\");\n const scrubStream = probe.createScrubTrackReadstream();\n const result = await generateFragmentIndex(scrubStream, startTimeOffsetMs, { 0: -1 });\n log(\"Scrub track fragment index generated successfully\");\n return result;\n } catch (error) {\n log(`Failed to generate scrub track fragment index: ${error}`);\n return null;\n }\n })();\n\n const scrubResult = await scrubTask;\n const trackFragmentIndexes: Record<number, TrackFragmentIndex> = { ...webmIndex };\n if (scrubResult) Object.assign(trackFragmentIndexes, scrubResult);\n return trackFragmentIndexes;\n }\n\n // ── Standard MP4 path ────────────────────────────────────────────────────\n log(`Generating track fragment index for ${absolutePath} using single-track approach`);\n\n const trackTasks = probe.streams\n .map((stream, streamIndex) => {\n if (stream.codec_type !== \"audio\" && stream.codec_type !== \"video\") {\n return null;\n }\n const trackId = streamIndex + 1;\n log(`Processing track ${trackId} (${stream.codec_type})`);\n const trackStream = probe.createTrackReadstream(streamIndex);\n const trackIdMapping = { 0: trackId };\n return generateFragmentIndex(trackStream, startTimeOffsetMs, trackIdMapping);\n })\n .filter((task): task is Promise<Record<number, TrackFragmentIndex>> => task !== null);\n\n const scrubTask: Promise<Record<number, TrackFragmentIndex> | null> =\n probe.videoStreams.length > 0\n ? (async () => {\n try {\n log(\"Generating scrub track fragment index\");\n const scrubStream = probe.createScrubTrackReadstream();\n const result = await generateFragmentIndex(scrubStream, startTimeOffsetMs, { 0: -1 });\n log(\"Scrub track fragment index generated successfully\");\n return result;\n } catch (error) {\n log(`Failed to generate scrub track fragment index: ${error}`);\n return null;\n }\n })()\n : Promise.resolve(null);\n\n const [trackResults, scrubResult] = await Promise.all([Promise.all(trackTasks), scrubTask]);\n\n const trackFragmentIndexes: Record<number, TrackFragmentIndex> = {};\n for (const result of trackResults) {\n Object.assign(trackFragmentIndexes, result);\n }\n if (scrubResult) {\n Object.assign(trackFragmentIndexes, scrubResult);\n }\n\n return trackFragmentIndexes;\n};\n\nconst generateTrackFragmentIndexTask = idempotentTask({\n label: \"trackFragmentIndex\",\n filename: (absolutePath) => `${basename(absolutePath)}.tracks.json`,\n runner: async (absolutePath: string) => {\n const index = await generateTrackFragmentIndexFromPath(absolutePath);\n return JSON.stringify(index, null, 2);\n },\n});\n\nexport const generateTrackFragmentIndex = async (cacheRoot: string, absolutePath: string) => {\n try {\n return await generateTrackFragmentIndexTask(cacheRoot, absolutePath);\n } catch (error) {\n console.trace(\"Error generating track fragment index\", error);\n throw error;\n }\n};\n"],"mappings":";;;;;;;;AAQA,MAAa,qCAAqC,OAAO,iBAAyB;CAChF,MAAM,MAAM,MAAM,2BAA2B;CAC7C,MAAM,QAAQ,MAAM,MAAM,UAAU,aAAa;CAEjD,MAAM,oBAAoB,MAAM;AAChC,KAAI,sBAAsB,OACxB,KAAI,gCAAgC,kBAAkB,IAAI;KAE1D,KAAI,2EAA2E;AAOjF,KAAI,MAAM,eAAe;AACvB,MAAI,4DAA4D;EAChE,MAAM,YAAY,MAAM,yBAAyB,cAAc,kBAAkB;EAgBjF,MAAMA,gBAAc,OAbmD,YAAY;AACjF,OAAI;AACF,QAAI,uDAAuD;IAE3D,MAAM,SAAS,MAAM,sBADD,MAAM,4BAA4B,EACE,mBAAmB,EAAE,GAAG,IAAI,CAAC;AACrF,QAAI,oDAAoD;AACxD,WAAO;YACA,OAAO;AACd,QAAI,kDAAkD,QAAQ;AAC9D,WAAO;;MAEP;EAGJ,MAAMC,yBAA2D,EAAE,GAAG,WAAW;AACjF,MAAID,cAAa,QAAO,OAAOE,wBAAsBF,cAAY;AACjE,SAAOE;;AAIT,KAAI,uCAAuC,aAAa,8BAA8B;CAEtF,MAAM,aAAa,MAAM,QACtB,KAAK,QAAQ,gBAAgB;AAC5B,MAAI,OAAO,eAAe,WAAW,OAAO,eAAe,QACzD,QAAO;EAET,MAAM,UAAU,cAAc;AAC9B,MAAI,oBAAoB,QAAQ,IAAI,OAAO,WAAW,GAAG;AAGzD,SAAO,sBAFa,MAAM,sBAAsB,YAAY,EAElB,mBADnB,EAAE,GAAG,SAAS,CACuC;GAC5E,CACD,QAAQ,SAA8D,SAAS,KAAK;CAEvF,MAAMC,YACJ,MAAM,aAAa,SAAS,KACvB,YAAY;AACX,MAAI;AACF,OAAI,wCAAwC;GAE5C,MAAM,SAAS,MAAM,sBADD,MAAM,4BAA4B,EACE,mBAAmB,EAAE,GAAG,IAAI,CAAC;AACrF,OAAI,oDAAoD;AACxD,UAAO;WACA,OAAO;AACd,OAAI,kDAAkD,QAAQ;AAC9D,UAAO;;KAEP,GACJ,QAAQ,QAAQ,KAAK;CAE3B,MAAM,CAAC,cAAc,eAAe,MAAM,QAAQ,IAAI,CAAC,QAAQ,IAAI,WAAW,EAAE,UAAU,CAAC;CAE3F,MAAMF,uBAA2D,EAAE;AACnE,MAAK,MAAM,UAAU,aACnB,QAAO,OAAO,sBAAsB,OAAO;AAE7C,KAAI,YACF,QAAO,OAAO,sBAAsB,YAAY;AAGlD,QAAO;;AAGT,MAAM,iCAAiC,eAAe;CACpD,OAAO;CACP,WAAW,iBAAiB,GAAG,SAAS,aAAa,CAAC;CACtD,QAAQ,OAAO,iBAAyB;EACtC,MAAM,QAAQ,MAAM,mCAAmC,aAAa;AACpE,SAAO,KAAK,UAAU,OAAO,MAAM,EAAE;;CAExC,CAAC;AAEF,MAAa,6BAA6B,OAAO,WAAmB,iBAAyB;AAC3F,KAAI;AACF,SAAO,MAAM,+BAA+B,WAAW,aAAa;UAC7D,OAAO;AACd,UAAQ,MAAM,yCAAyC,MAAM;AAC7D,QAAM"}
1
+ {"version":3,"file":"generateTrackFragmentIndex.js","names":[],"sources":["../../src/tasks/generateTrackFragmentIndex.ts"],"mappings":";;;;;;;AAQA,MAAa,qCAAqC,OAAO,iBAAyB;CAChF,MAAM,MAAM,MAAM,2BAA2B;CAC7C,MAAM,QAAQ,MAAM,MAAM,UAAU,aAAa;CAEjD,MAAM,oBAAoB,MAAM;AAChC,KAAI,sBAAsB,KAAA,EACxB,KAAI,gCAAgC,kBAAkB,IAAI;KAE1D,KAAI,2EAA2E;AAOjF,KAAI,MAAM,eAAe;AACvB,MAAI,4DAA4D;EAChE,MAAM,YAAY,MAAM,yBAAyB,cAAc,kBAAkB;EAgBjF,MAAM,cAAc,OAbmD,YAAY;AACjF,OAAI;AACF,QAAI,uDAAuD;IAE3D,MAAM,SAAS,MAAM,sBADD,MAAM,4BAA4B,EACE,mBAAmB,EAAE,GAAG,IAAI,CAAC;AACrF,QAAI,oDAAoD;AACxD,WAAO;YACA,OAAO;AACd,QAAI,kDAAkD,QAAQ;AAC9D,WAAO;;MAEP;EAGJ,MAAM,uBAA2D,EAAE,GAAG,WAAW;AACjF,MAAI,YAAa,QAAO,OAAO,sBAAsB,YAAY;AACjE,SAAO;;AAIT,KAAI,uCAAuC,aAAa,8BAA8B;CAEtF,MAAM,aAAa,MAAM,QACtB,KAAK,QAAQ,gBAAgB;AAC5B,MAAI,OAAO,eAAe,WAAW,OAAO,eAAe,QACzD,QAAO;EAET,MAAM,UAAU,cAAc;AAC9B,MAAI,oBAAoB,QAAQ,IAAI,OAAO,WAAW,GAAG;AAGzD,SAAO,sBAFa,MAAM,sBAAsB,YAAY,EAElB,mBADnB,EAAE,GAAG,SAAS,CACuC;GAC5E,CACD,QAAQ,SAA8D,SAAS,KAAK;CAEvF,MAAM,YACJ,MAAM,aAAa,SAAS,KACvB,YAAY;AACX,MAAI;AACF,OAAI,wCAAwC;GAE5C,MAAM,SAAS,MAAM,sBADD,MAAM,4BAA4B,EACE,mBAAmB,EAAE,GAAG,IAAI,CAAC;AACrF,OAAI,oDAAoD;AACxD,UAAO;WACA,OAAO;AACd,OAAI,kDAAkD,QAAQ;AAC9D,UAAO;;KAEP,GACJ,QAAQ,QAAQ,KAAK;CAE3B,MAAM,CAAC,cAAc,eAAe,MAAM,QAAQ,IAAI,CAAC,QAAQ,IAAI,WAAW,EAAE,UAAU,CAAC;CAE3F,MAAM,uBAA2D,EAAE;AACnE,MAAK,MAAM,UAAU,aACnB,QAAO,OAAO,sBAAsB,OAAO;AAE7C,KAAI,YACF,QAAO,OAAO,sBAAsB,YAAY;AAGlD,QAAO;;AAGT,MAAM,iCAAiC,eAAe;CACpD,OAAO;CACP,WAAW,iBAAiB,GAAG,SAAS,aAAa,CAAC;CACtD,QAAQ,OAAO,iBAAyB;EACtC,MAAM,QAAQ,MAAM,mCAAmC,aAAa;AACpE,SAAO,KAAK,UAAU,OAAO,MAAM,EAAE;;CAExC,CAAC;AAEF,MAAa,6BAA6B,OAAO,WAAmB,iBAAyB;AAC3F,KAAI;AACF,SAAO,MAAM,+BAA+B,WAAW,aAAa;UAC7D,OAAO;AACd,UAAQ,MAAM,yCAAyC,MAAM;AAC7D,QAAM"}
@@ -1,10 +1,9 @@
1
-
2
1
  //#region src/truncateDecimal.ts
3
2
  function truncateDecimal(num, decimals) {
4
3
  const factor = 10 ** decimals;
5
4
  return Math.trunc(num * factor) / factor;
6
5
  }
7
-
8
6
  //#endregion
9
7
  exports.truncateDecimal = truncateDecimal;
8
+
10
9
  //# sourceMappingURL=truncateDecimal.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncateDecimal.cjs","names":[],"sources":["../src/truncateDecimal.ts"],"sourcesContent":["// Helper to calculate AAC frame-aligned segment durations for audio\nexport function truncateDecimal(num: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.trunc(num * factor) / factor;\n}\n"],"mappings":";;AACA,SAAgB,gBAAgB,KAAa,UAAkB;CAC7D,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,MAAM,OAAO,GAAG"}
1
+ {"version":3,"file":"truncateDecimal.cjs","names":[],"sources":["../src/truncateDecimal.ts"],"mappings":";AACA,SAAgB,gBAAgB,KAAa,UAAkB;CAC7D,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,MAAM,OAAO,GAAG"}
@@ -3,7 +3,7 @@ function truncateDecimal(num, decimals) {
3
3
  const factor = 10 ** decimals;
4
4
  return Math.trunc(num * factor) / factor;
5
5
  }
6
-
7
6
  //#endregion
8
7
  export { truncateDecimal };
8
+
9
9
  //# sourceMappingURL=truncateDecimal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncateDecimal.js","names":[],"sources":["../src/truncateDecimal.ts"],"sourcesContent":["// Helper to calculate AAC frame-aligned segment durations for audio\nexport function truncateDecimal(num: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.trunc(num * factor) / factor;\n}\n"],"mappings":";AACA,SAAgB,gBAAgB,KAAa,UAAkB;CAC7D,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,MAAM,OAAO,GAAG"}
1
+ {"version":3,"file":"truncateDecimal.js","names":[],"sources":["../src/truncateDecimal.ts"],"mappings":";AACA,SAAgB,gBAAgB,KAAa,UAAkB;CAC7D,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,MAAM,OAAO,GAAG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@editframe/assets",
3
- "version": "0.47.2",
3
+ "version": "0.48.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",