@camstack/addon-pipeline 1.1.33 → 1.1.34

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 (35) hide show
  1. package/dist/decoder-ffmpeg/index.js +5 -5
  2. package/dist/decoder-ffmpeg/index.mjs +5 -5
  3. package/dist/decoder-nodeav/index.js +1 -1
  4. package/dist/decoder-nodeav/index.mjs +1 -1
  5. package/dist/{frame-ring-sink-B_WjDX0x.mjs → frame-ring-sink-1aLGcNNf.mjs} +20 -13
  6. package/dist/{frame-ring-sink-B-DxHelU.js → frame-ring-sink-CvlcAUOu.js} +20 -13
  7. package/package.json +1 -1
  8. package/python/__pycache__/inference_pool.cpython-313.pyc +0 -0
  9. package/python/__pycache__/inference_pool.cpython-314.pyc +0 -0
  10. package/python/__pycache__/test_inference_pool_backpressure.cpython-314.pyc +0 -0
  11. package/python/__pycache__/test_inference_pool_coreml_cache.cpython-314.pyc +0 -0
  12. package/python/__pycache__/test_inference_pool_device_selection.cpython-314.pyc +0 -0
  13. package/python/__pycache__/yamnet_audio.cpython-314.pyc +0 -0
  14. package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
  15. package/python/postprocessors/__pycache__/__init__.cpython-313.pyc +0 -0
  16. package/python/postprocessors/__pycache__/_safety.cpython-313.pyc +0 -0
  17. package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
  18. package/python/postprocessors/__pycache__/arcface.cpython-313.pyc +0 -0
  19. package/python/postprocessors/__pycache__/clip.cpython-313.pyc +0 -0
  20. package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
  21. package/python/postprocessors/__pycache__/ctc.cpython-313.pyc +0 -0
  22. package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
  23. package/python/postprocessors/__pycache__/saliency.cpython-313.pyc +0 -0
  24. package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
  25. package/python/postprocessors/__pycache__/scrfd.cpython-313.pyc +0 -0
  26. package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
  27. package/python/postprocessors/__pycache__/softmax.cpython-313.pyc +0 -0
  28. package/python/postprocessors/__pycache__/test_clip.cpython-313-pytest-9.1.1.pyc +0 -0
  29. package/python/postprocessors/__pycache__/test_saliency.cpython-313-pytest-9.1.1.pyc +0 -0
  30. package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
  31. package/python/postprocessors/__pycache__/yamnet.cpython-313.pyc +0 -0
  32. package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
  33. package/python/postprocessors/__pycache__/yolo.cpython-313.pyc +0 -0
  34. package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
  35. package/python/postprocessors/__pycache__/yolo_seg.cpython-313.pyc +0 -0
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_dist = require("../dist-BrIE85BG.js");
6
- const require_frame_ring_sink = require("../frame-ring-sink-B-DxHelU.js");
6
+ const require_frame_ring_sink = require("../frame-ring-sink-CvlcAUOu.js");
7
7
  const require_ffmpeg_args = require("../ffmpeg-args-Dl9mLcOC.js");
8
8
  const require_frame_dropper = require("../frame-dropper-DKLM6pMz.js");
9
9
  let _camstack_shm_ring = require("@camstack/shm-ring");
@@ -667,11 +667,11 @@ var DEFAULT_DECODER_FFMPEG_ADDON_CONFIG = {
667
667
  };
668
668
  /** The two selectable decoder backends, in default-first order. */
669
669
  var DECODER_BACKEND_OPTIONS = [{
670
- value: "ffmpeg",
671
- label: "ffmpeg (subprocess — crash-isolated, default)"
672
- }, {
673
670
  value: "nodeav",
674
- label: "node-av (in-process FFmpeg bindings)"
671
+ label: "node-av (in-process FFmpeg bindings — default)"
672
+ }, {
673
+ value: "ffmpeg",
674
+ label: "ffmpeg (subprocess — crash-isolated fallback)"
675
675
  }];
676
676
  var DecoderFfmpegAddon = class extends require_dist.BaseAddon {
677
677
  sessions = /* @__PURE__ */ new Map();
@@ -1,5 +1,5 @@
1
1
  import { B as errMsg, V as BaseAddon, d as HWACCEL_OPTIONS, s as DEFAULT_DECODER_HWACCEL_CONFIG, x as decoderCapability } from "../dist-CfSORkv2.mjs";
2
- import { c as DEFAULT_DECODER_BACKEND, i as NotifyingRingBuffer, n as RING_BUDGET_MB, s as resolveOwnDecoderBackend, t as DecoderFrameRingSink } from "../frame-ring-sink-B_WjDX0x.mjs";
2
+ import { c as DEFAULT_DECODER_BACKEND, i as NotifyingRingBuffer, n as RING_BUDGET_MB, s as resolveOwnDecoderBackend, t as DecoderFrameRingSink } from "../frame-ring-sink-1aLGcNNf.mjs";
3
3
  import { a as codecToInputFormat, c as maxDecodeWidth, d as pickDecodeHwAccel, f as rankDecodeHwAccels, i as channelsForPixel, l as parseAvailableGpuScaleFilters, m as resolveGpuScaleFilter, n as DEFAULT_VAAPI_RENDER_DEVICE, o as computeOutputGeometry, p as rawPixelForFormat, r as buildFfmpegDecodeArgs, s as isSoftwareHwAccel, t as DECODE_HWACCEL_RANK, u as parseFfmpegOutputDims } from "../ffmpeg-args-CpeRWwL4.mjs";
4
4
  import { t as FrameDropper } from "../frame-dropper-AjheBGMG.mjs";
5
5
  import { FrameRingReaderCache } from "@camstack/shm-ring";
@@ -663,11 +663,11 @@ var DEFAULT_DECODER_FFMPEG_ADDON_CONFIG = {
663
663
  };
664
664
  /** The two selectable decoder backends, in default-first order. */
665
665
  var DECODER_BACKEND_OPTIONS = [{
666
- value: "ffmpeg",
667
- label: "ffmpeg (subprocess — crash-isolated, default)"
668
- }, {
669
666
  value: "nodeav",
670
- label: "node-av (in-process FFmpeg bindings)"
667
+ label: "node-av (in-process FFmpeg bindings — default)"
668
+ }, {
669
+ value: "ffmpeg",
670
+ label: "ffmpeg (subprocess — crash-isolated fallback)"
671
671
  }];
672
672
  var DecoderFfmpegAddon = class extends BaseAddon {
673
673
  sessions = /* @__PURE__ */ new Map();
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_dist = require("../dist-BrIE85BG.js");
6
- const require_frame_ring_sink = require("../frame-ring-sink-B-DxHelU.js");
6
+ const require_frame_ring_sink = require("../frame-ring-sink-CvlcAUOu.js");
7
7
  const require_ffmpeg_args = require("../ffmpeg-args-Dl9mLcOC.js");
8
8
  let _camstack_shm_ring = require("@camstack/shm-ring");
9
9
  let node_crypto = require("node:crypto");
@@ -1,5 +1,5 @@
1
1
  import { B as errMsg, V as BaseAddon, d as HWACCEL_OPTIONS, s as DEFAULT_DECODER_HWACCEL_CONFIG, x as decoderCapability } from "../dist-CfSORkv2.mjs";
2
- import { a as resolveDecoderBackend, i as NotifyingRingBuffer, n as RING_BUDGET_MB, o as resolveDecoderHwAccel, r as makeSegmentName, t as DecoderFrameRingSink } from "../frame-ring-sink-B_WjDX0x.mjs";
2
+ import { a as resolveDecoderBackend, i as NotifyingRingBuffer, n as RING_BUDGET_MB, o as resolveDecoderHwAccel, r as makeSegmentName, t as DecoderFrameRingSink } from "../frame-ring-sink-1aLGcNNf.mjs";
3
3
  import { f as rankDecodeHwAccels } from "../ffmpeg-args-CpeRWwL4.mjs";
4
4
  import { FrameRingReaderCache } from "@camstack/shm-ring";
5
5
  import { randomUUID } from "node:crypto";
@@ -1,8 +1,11 @@
1
1
  import { d as HWACCEL_OPTIONS, p as RingBuffer } from "./dist-CfSORkv2.mjs";
2
2
  import { FrameRingWriter, MIN_RING_SLOTS, computeSegmentSize, computeSlotByteLength, createSegment, deriveSlotCount } from "@camstack/shm-ring";
3
3
  //#region src/shared/decoder-backend-keys.ts
4
- /** Built-in default when a node has no selection — the subprocess decoder. */
5
- var DEFAULT_DECODER_BACKEND = "ffmpeg";
4
+ /** Built-in default when a node has no selection — the in-process node-av
5
+ * decoder. node-av is the standing default everywhere; the ffmpeg subprocess
6
+ * decoder is an explicit opt-in fallback only. A stale/failed settings read at
7
+ * boot therefore resolves to node-av (never leaves the node with no decoder). */
8
+ var DEFAULT_DECODER_BACKEND = "nodeav";
6
9
  /** Narrow an unknown settings value to a {@link DecoderBackend}, else `null`. */
7
10
  function parseDecoderBackend(value) {
8
11
  return value === "ffmpeg" || value === "nodeav" ? value : null;
@@ -65,9 +68,13 @@ function normalizeDecoderNodeId(rawNodeId) {
65
68
  * original bug), the raw settings-store cap, or any custom side channel.
66
69
  *
67
70
  * Resolution: the node's scoped value → the built-in default
68
- * {@link DEFAULT_DECODER_BACKEND} (`'ffmpeg'`). There is deliberately NO
71
+ * {@link DEFAULT_DECODER_BACKEND} (`'nodeav'` node-av is primary everywhere;
72
+ * ffmpeg is an explicit opt-in fallback only). There is deliberately NO
69
73
  * bare-key fallback (see `decoder-backend-keys.ts`), and any read failure
70
- * resolves to the default so the safe backend still comes up.
74
+ * resolves to the default so a decoder still comes up — and, because the
75
+ * default IS the primary backend, a stale/failed read can never leave the node
76
+ * with NO decoder (the old `'ffmpeg'` default made node-av stand down on a
77
+ * missed read → both addons down).
71
78
  *
72
79
  * ## Switching backends
73
80
  *
@@ -100,7 +107,7 @@ function pickDecoderBackendFromSettings(view) {
100
107
  if (view === null) return DEFAULT_DECODER_BACKEND;
101
108
  for (const section of view.sections) for (const entry of section.fields) {
102
109
  if (!isHydratedField(entry) || entry.key !== "backend") continue;
103
- return parseDecoderBackend(entry.value) ?? "ffmpeg";
110
+ return parseDecoderBackend(entry.value) ?? "nodeav";
104
111
  }
105
112
  return DEFAULT_DECODER_BACKEND;
106
113
  }
@@ -112,13 +119,13 @@ function pickDecoderBackendFromSettings(view) {
112
119
  * routing `addonSettings.getGlobalSettings({addonId:'decoder-ffmpeg'})` back to
113
120
  * itself during its OWN `onInitialize` DEADLOCKS (the addon is not "loaded" on
114
121
  * the node until init completes, but init is blocked on the read) → the read
115
- * throws `transport-failed (addon not loaded)` → it silently defaults to
116
- * `ffmpeg` and REGISTERS even when the node selected `nodeav`, producing a
117
- * two-provider decode storm. Reading its own store is local, race-free, and
118
- * has no deadlock.
122
+ * throws `transport-failed (addon not loaded)` → it silently defaults to the
123
+ * built-in default and mis-decides its own registration (e.g. an explicitly
124
+ * selected `ffmpeg` fallback would never come up). Reading its own store is
125
+ * local, race-free, and has no deadlock.
119
126
  */
120
127
  function resolveOwnDecoderBackend(projectedGlobalStore) {
121
- return parseDecoderBackend(projectedGlobalStore["backend"]) ?? "ffmpeg";
128
+ return parseDecoderBackend(projectedGlobalStore["backend"]) ?? "nodeav";
122
129
  }
123
130
  /** Transient transport/settings-store fingerprints worth retrying on. */
124
131
  function isTransientSettingsError(message) {
@@ -130,9 +137,9 @@ function isTransientSettingsError(message) {
130
137
  *
131
138
  * The read routes to the owner addon's child runner; during a simultaneous
132
139
  * (re)start the owner may not be up yet → a transient `transport-failed (addon
133
- * not loaded)`. Immediately defaulting to `ffmpeg` here makes `decoder-nodeav`
134
- * stand down even though the node selected `nodeav` NO decoder registers at
135
- * all. So retry on the transient fingerprints with a bounded budget (mirrors
140
+ * not loaded)`. Immediately defaulting here would ignore an explicit `ffmpeg`
141
+ * selection (the node would silently run the node-av default instead). So retry
142
+ * on the transient fingerprints with a bounded budget (mirrors
136
143
  * `BaseAddon.readAddonStoreWithRetry`) until the owner answers; only a
137
144
  * persistent failure falls back to {@link DEFAULT_DECODER_BACKEND}.
138
145
  *
@@ -1,8 +1,11 @@
1
1
  const require_dist = require("./dist-BrIE85BG.js");
2
2
  let _camstack_shm_ring = require("@camstack/shm-ring");
3
3
  //#region src/shared/decoder-backend-keys.ts
4
- /** Built-in default when a node has no selection — the subprocess decoder. */
5
- var DEFAULT_DECODER_BACKEND = "ffmpeg";
4
+ /** Built-in default when a node has no selection — the in-process node-av
5
+ * decoder. node-av is the standing default everywhere; the ffmpeg subprocess
6
+ * decoder is an explicit opt-in fallback only. A stale/failed settings read at
7
+ * boot therefore resolves to node-av (never leaves the node with no decoder). */
8
+ var DEFAULT_DECODER_BACKEND = "nodeav";
6
9
  /** Narrow an unknown settings value to a {@link DecoderBackend}, else `null`. */
7
10
  function parseDecoderBackend(value) {
8
11
  return value === "ffmpeg" || value === "nodeav" ? value : null;
@@ -65,9 +68,13 @@ function normalizeDecoderNodeId(rawNodeId) {
65
68
  * original bug), the raw settings-store cap, or any custom side channel.
66
69
  *
67
70
  * Resolution: the node's scoped value → the built-in default
68
- * {@link DEFAULT_DECODER_BACKEND} (`'ffmpeg'`). There is deliberately NO
71
+ * {@link DEFAULT_DECODER_BACKEND} (`'nodeav'` node-av is primary everywhere;
72
+ * ffmpeg is an explicit opt-in fallback only). There is deliberately NO
69
73
  * bare-key fallback (see `decoder-backend-keys.ts`), and any read failure
70
- * resolves to the default so the safe backend still comes up.
74
+ * resolves to the default so a decoder still comes up — and, because the
75
+ * default IS the primary backend, a stale/failed read can never leave the node
76
+ * with NO decoder (the old `'ffmpeg'` default made node-av stand down on a
77
+ * missed read → both addons down).
71
78
  *
72
79
  * ## Switching backends
73
80
  *
@@ -100,7 +107,7 @@ function pickDecoderBackendFromSettings(view) {
100
107
  if (view === null) return DEFAULT_DECODER_BACKEND;
101
108
  for (const section of view.sections) for (const entry of section.fields) {
102
109
  if (!isHydratedField(entry) || entry.key !== "backend") continue;
103
- return parseDecoderBackend(entry.value) ?? "ffmpeg";
110
+ return parseDecoderBackend(entry.value) ?? "nodeav";
104
111
  }
105
112
  return DEFAULT_DECODER_BACKEND;
106
113
  }
@@ -112,13 +119,13 @@ function pickDecoderBackendFromSettings(view) {
112
119
  * routing `addonSettings.getGlobalSettings({addonId:'decoder-ffmpeg'})` back to
113
120
  * itself during its OWN `onInitialize` DEADLOCKS (the addon is not "loaded" on
114
121
  * the node until init completes, but init is blocked on the read) → the read
115
- * throws `transport-failed (addon not loaded)` → it silently defaults to
116
- * `ffmpeg` and REGISTERS even when the node selected `nodeav`, producing a
117
- * two-provider decode storm. Reading its own store is local, race-free, and
118
- * has no deadlock.
122
+ * throws `transport-failed (addon not loaded)` → it silently defaults to the
123
+ * built-in default and mis-decides its own registration (e.g. an explicitly
124
+ * selected `ffmpeg` fallback would never come up). Reading its own store is
125
+ * local, race-free, and has no deadlock.
119
126
  */
120
127
  function resolveOwnDecoderBackend(projectedGlobalStore) {
121
- return parseDecoderBackend(projectedGlobalStore["backend"]) ?? "ffmpeg";
128
+ return parseDecoderBackend(projectedGlobalStore["backend"]) ?? "nodeav";
122
129
  }
123
130
  /** Transient transport/settings-store fingerprints worth retrying on. */
124
131
  function isTransientSettingsError(message) {
@@ -130,9 +137,9 @@ function isTransientSettingsError(message) {
130
137
  *
131
138
  * The read routes to the owner addon's child runner; during a simultaneous
132
139
  * (re)start the owner may not be up yet → a transient `transport-failed (addon
133
- * not loaded)`. Immediately defaulting to `ffmpeg` here makes `decoder-nodeav`
134
- * stand down even though the node selected `nodeav` NO decoder registers at
135
- * all. So retry on the transient fingerprints with a bounded budget (mirrors
140
+ * not loaded)`. Immediately defaulting here would ignore an explicit `ffmpeg`
141
+ * selection (the node would silently run the node-av default instead). So retry
142
+ * on the transient fingerprints with a bounded budget (mirrors
136
143
  * `BaseAddon.readAddonStoreWithRetry`) until the owner answers; only a
137
144
  * persistent failure falls back to {@link DEFAULT_DECODER_BACKEND}.
138
145
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.1.33",
3
+ "version": "1.1.34",
4
4
  "description": "CamStack Pipeline bundle — runner, detection, motion, decoders, audio + stream broker. Multi-entry npm package shipping 7 addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",