@camstack/addon-pipeline 1.2.184 → 1.2.185

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 (33) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/detection-pipeline/index.js +5 -5
  4. package/dist/detection-pipeline/index.mjs +4 -4
  5. package/dist/{dist-Bh1w7wfg.js → dist-CiVhPNTB.js} +13 -4
  6. package/dist/{dist-DOJIQ-sh.mjs → dist-yaetDPpW.mjs} +13 -4
  7. package/dist/{lazy-sharp-D8FzOY6L.js → lazy-sharp-D1PX1Psd.js} +1 -1
  8. package/dist/{local-frame-registry-Ct4YmN3z.mjs → local-frame-registry-BOXH34yk.mjs} +1 -1
  9. package/dist/{local-frame-registry-Bz2DRFK7.js → local-frame-registry-Bm_ZCVMl.js} +1 -1
  10. package/dist/motion-wasm/index.js +2 -2
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-C0KMHgpF.mjs → node-CCRb0fqW.mjs} +1 -1
  13. package/dist/{node-Cl2Sjm4s.js → node-DGzZLg-c.js} +1 -1
  14. package/dist/pipeline-runner/index.js +11 -7
  15. package/dist/pipeline-runner/index.mjs +10 -6
  16. package/dist/{process-memory-zLBrzuFc.mjs → process-memory-BIy4e_mZ.mjs} +1 -1
  17. package/dist/{process-memory-DiEghzlW.js → process-memory-C7f66zUT.js} +1 -1
  18. package/dist/recorder/index.js +2 -2
  19. package/dist/recorder/index.mjs +2 -2
  20. package/dist/{segment-demux-js-BtZ8kfA2.mjs → segment-demux-js-CViDx3UC.mjs} +1 -1
  21. package/dist/{segment-demux-js-BI5iWBgx.js → segment-demux-js-CnqYsNPt.js} +1 -1
  22. package/dist/session-decode/decode-worker-child.js +2 -2
  23. package/dist/session-decode/decode-worker-child.mjs +1 -1
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-4NEhUNJS.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Bd2po-GM.mjs} +3 -3
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-BWI_flla.mjs → hostInit-R30YeWmh.mjs} +3 -3
  28. package/dist/stream-broker/index.js +3 -3
  29. package/dist/stream-broker/index.mjs +3 -3
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/dist/{worker-protocol-DGs9jUib.mjs → worker-protocol-BcKW7xgG.mjs} +1 -1
  32. package/dist/{worker-protocol-BGRTG_GT.js → worker-protocol-Db6BWHr-.js} +1 -1
  33. package/package.json +6 -1
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_process_memory = require("../process-memory-DiEghzlW.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_process_memory = require("../process-memory-C7f66zUT.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_dist.__toESM(node_fs);
9
9
  let node_path = require("node:path");
@@ -1,6 +1,6 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-DOJIQ-sh.mjs";
3
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-zLBrzuFc.mjs";
2
+ import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-yaetDPpW.mjs";
3
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-BIy4e_mZ.mjs";
4
4
  import * as fs from "node:fs";
5
5
  import * as path$1 from "node:path";
6
6
  import { downloadFile } from "@camstack/system/addon-utils";
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_node = require("../node-Cl2Sjm4s.js");
7
- const require_local_frame_registry = require("../local-frame-registry-Bz2DRFK7.js");
8
- const require_lazy_sharp = require("../lazy-sharp-D8FzOY6L.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_node = require("../node-DGzZLg-c.js");
7
+ const require_local_frame_registry = require("../local-frame-registry-Bm_ZCVMl.js");
8
+ const require_lazy_sharp = require("../lazy-sharp-D1PX1Psd.js");
9
9
  const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
10
- const require_process_memory = require("../process-memory-DiEghzlW.js");
10
+ const require_process_memory = require("../process-memory-C7f66zUT.js");
11
11
  let node_fs = require("node:fs");
12
12
  node_fs = require_dist.__toESM(node_fs);
13
13
  let node_path = require("node:path");
@@ -1,10 +1,10 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-DOJIQ-sh.mjs";
3
- import { a as readProcessCost } from "../node-C0KMHgpF.mjs";
4
- import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-Ct4YmN3z.mjs";
2
+ import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-yaetDPpW.mjs";
3
+ import { a as readProcessCost } from "../node-CCRb0fqW.mjs";
4
+ import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-BOXH34yk.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
6
  import { n as startEventLoopStallMonitor } from "../event-loop-stall-monitor-DXLNBMkY.mjs";
7
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-zLBrzuFc.mjs";
7
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-BIy4e_mZ.mjs";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
10
10
  import { dirname, join } from "node:path";
@@ -8555,7 +8555,8 @@ var CameraSwitchAuthoritySchema = discriminatedUnion("kind", [
8555
8555
  var CameraSwitchUnavailableReasonSchema = _enum([
8556
8556
  "no-provider",
8557
8557
  "source-unreachable",
8558
- "not-configured"
8558
+ "not-configured",
8559
+ "device-disabled"
8559
8560
  ]);
8560
8561
  /**
8561
8562
  * One switch, resolved for one camera.
@@ -25841,12 +25842,20 @@ var BatteryStatusSchema = object({
25841
25842
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
25842
25843
  * Reolink-specific for the Solar Panel 2 accessory (will become
25843
25844
  * common on other battery cams). `'none'` means running on battery
25844
- * alone.
25845
+ * alone — a NEGATIVE the firmware actually reported.
25846
+ *
25847
+ * `'unknown'` is the absence of an answer: the provider has not read the
25848
+ * power fields yet, or the firmware reported neither. Before it existed,
25849
+ * two unreadable fields produced `'none'`, and a camera nobody had reached
25850
+ * was drawn "on battery alone" — the same D315 defect `percentage` closed
25851
+ * by going nullable. Consumers SKIP it (no charger state published, no
25852
+ * glyph, no HomeKit ChargingState) rather than coerce it either way.
25845
25853
  */
25846
25854
  charging: _enum([
25847
25855
  "dc",
25848
25856
  "solar",
25849
- "none"
25857
+ "none",
25858
+ "unknown"
25850
25859
  ]),
25851
25860
  /**
25852
25861
  * True when the camera firmware has gone into low-power mode. Battery
@@ -25936,7 +25945,7 @@ onStatusChanged: { data: object({
25936
25945
  kind: "push",
25937
25946
  empty: {
25938
25947
  percentage: 0,
25939
- charging: "none",
25948
+ charging: "unknown",
25940
25949
  sleeping: false,
25941
25950
  lastUpdated: 0
25942
25951
  }
@@ -8532,7 +8532,8 @@ var CameraSwitchAuthoritySchema = discriminatedUnion("kind", [
8532
8532
  var CameraSwitchUnavailableReasonSchema = _enum([
8533
8533
  "no-provider",
8534
8534
  "source-unreachable",
8535
- "not-configured"
8535
+ "not-configured",
8536
+ "device-disabled"
8536
8537
  ]);
8537
8538
  /**
8538
8539
  * One switch, resolved for one camera.
@@ -25818,12 +25819,20 @@ var BatteryStatusSchema = object({
25818
25819
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
25819
25820
  * Reolink-specific for the Solar Panel 2 accessory (will become
25820
25821
  * common on other battery cams). `'none'` means running on battery
25821
- * alone.
25822
+ * alone — a NEGATIVE the firmware actually reported.
25823
+ *
25824
+ * `'unknown'` is the absence of an answer: the provider has not read the
25825
+ * power fields yet, or the firmware reported neither. Before it existed,
25826
+ * two unreadable fields produced `'none'`, and a camera nobody had reached
25827
+ * was drawn "on battery alone" — the same D315 defect `percentage` closed
25828
+ * by going nullable. Consumers SKIP it (no charger state published, no
25829
+ * glyph, no HomeKit ChargingState) rather than coerce it either way.
25822
25830
  */
25823
25831
  charging: _enum([
25824
25832
  "dc",
25825
25833
  "solar",
25826
- "none"
25834
+ "none",
25835
+ "unknown"
25827
25836
  ]),
25828
25837
  /**
25829
25838
  * True when the camera firmware has gone into low-power mode. Battery
@@ -25913,7 +25922,7 @@ onStatusChanged: { data: object({
25913
25922
  kind: "push",
25914
25923
  empty: {
25915
25924
  percentage: 0,
25916
- charging: "none",
25925
+ charging: "unknown",
25917
25926
  sleeping: false,
25918
25927
  lastUpdated: 0
25919
25928
  }
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  let node_path = require("node:path");
3
3
  node_path = require_dist.__toESM(node_path);
4
4
  let node_url = require("node:url");
@@ -1,4 +1,4 @@
1
- import { M as audioKindId, Z as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-DOJIQ-sh.mjs";
1
+ import { M as audioKindId, Z as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-yaetDPpW.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_lazy_sharp = require("../lazy-sharp-D8FzOY6L.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-D1PX1Psd.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
9
9
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { It as hydrateSchema, Pt as DeviceType, Y as evaluateZoneRules, it as motionDetectionCapability, jt as BaseAddon } from "../dist-DOJIQ-sh.mjs";
1
+ import { It as hydrateSchema, Pt as DeviceType, Y as evaluateZoneRules, it as motionDetectionCapability, jt as BaseAddon } from "../dist-yaetDPpW.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,4 +1,4 @@
1
- import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-DOJIQ-sh.mjs";
1
+ import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-yaetDPpW.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import "node:fs";
4
4
  import "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs, 1);
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_node = require("../node-Cl2Sjm4s.js");
7
- const require_local_frame_registry = require("../local-frame-registry-Bz2DRFK7.js");
8
- const require_worker_protocol = require("../worker-protocol-BGRTG_GT.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_node = require("../node-DGzZLg-c.js");
7
+ const require_local_frame_registry = require("../local-frame-registry-Bm_ZCVMl.js");
8
+ const require_worker_protocol = require("../worker-protocol-Db6BWHr-.js");
9
9
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
10
- const require_lazy_sharp = require("../lazy-sharp-D8FzOY6L.js");
10
+ const require_lazy_sharp = require("../lazy-sharp-D1PX1Psd.js");
11
11
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
12
12
  const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
13
13
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
@@ -302,7 +302,11 @@ var DEFAULT_NODE_DECODE_BUDGET_MB = 8192;
302
302
  * default); anything absent falls back to what the worker ships with.
303
303
  */
304
304
  function decodeWorkerFootprintMb(override) {
305
- return (override.budgetMb ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb) + (override.tileBudgetMb ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb) + 350;
305
+ const budgetMb = override.budgetMb ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb;
306
+ const holdFrames = override.holdFrames ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.holdFrames;
307
+ const tileBudgetMb = override.tileBudgetMb ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb;
308
+ const sceneBudgetMb = override.sceneBudgetMb ?? require_dist.DEFAULT_NATIVE_LEASE_SETTINGS.sceneBudgetMb;
309
+ return Math.min(budgetMb, holdFrames * 25) + tileBudgetMb + sceneBudgetMb + 350;
306
310
  }
307
311
  /**
308
312
  * The node's live-decode-worker budget.
@@ -8452,7 +8456,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
8452
8456
  type: "slider",
8453
8457
  key: "nodeDecodeBudgetMb",
8454
8458
  label: "Decode worker RAM budget (MB)",
8455
- description: "RAM this node lets live decode workers commit. The number of workers admitted is derived from it: budget divided by one worker's worst case, which is the lease budget + tile budget + ~350 MB of baseline. Measured on this cluster a worker plateaus at 650-860 MB within ten seconds of spawning, so at the shipped lease knobs the default admits 4 — the observed peak. Raising the lease budget per worker therefore LOWERS how many run at once, instead of silently authorising more memory.",
8459
+ description: "RAM this node lets live decode workers commit. The number of workers admitted is derived from it: budget divided by one worker's worst case — what the lease store can hold (the smaller of the lease budget and held frames × 25 MB, one 4K frame), plus the tile and scene budgets, plus ~350 MB of baseline. At the shipped lease knobs (8 held frames) that is ~660 MB and the default admits 8, the count cap. Raising held frames or the lease budget per worker therefore LOWERS how many run at once, instead of silently authorising more memory.",
8456
8460
  min: 1024,
8457
8461
  max: 32768,
8458
8462
  step: 512,
@@ -1,7 +1,7 @@
1
- import { B as defineCustomActions, Bt as nodePin, Ft as createEvent, Gt as _enum, H as deriveDetailCropRect, Kt as array, L as customAction, Qt as object, X as failureContributionCapability, Xt as literal, Yt as lazy, Zt as number, _ as FailureCounters, en as string, et as loadContributionCapability, ft as pipelineRunnerCapability, jt as BaseAddon, lt as pickDetailCropConvention, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, p as DEFAULT_NATIVE_LEASE_SETTINGS, qt as boolean, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as pickNativeLeaseOverride, wt as errMsg } from "../dist-DOJIQ-sh.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C0KMHgpF.mjs";
3
- import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-Ct4YmN3z.mjs";
4
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-DGs9jUib.mjs";
1
+ import { B as defineCustomActions, Bt as nodePin, Ft as createEvent, Gt as _enum, H as deriveDetailCropRect, Kt as array, L as customAction, Qt as object, X as failureContributionCapability, Xt as literal, Yt as lazy, Zt as number, _ as FailureCounters, en as string, et as loadContributionCapability, ft as pipelineRunnerCapability, jt as BaseAddon, lt as pickDetailCropConvention, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, p as DEFAULT_NATIVE_LEASE_SETTINGS, qt as boolean, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as pickNativeLeaseOverride, wt as errMsg } from "../dist-yaetDPpW.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CCRb0fqW.mjs";
3
+ import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-BOXH34yk.mjs";
4
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-BcKW7xgG.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
7
7
  import { n as withDetectionIntent } from "../restream-intent-B4BXZra7.mjs";
@@ -296,7 +296,11 @@ var DEFAULT_NODE_DECODE_BUDGET_MB = 8192;
296
296
  * default); anything absent falls back to what the worker ships with.
297
297
  */
298
298
  function decodeWorkerFootprintMb(override) {
299
- return (override.budgetMb ?? DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb) + (override.tileBudgetMb ?? DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb) + 350;
299
+ const budgetMb = override.budgetMb ?? DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb;
300
+ const holdFrames = override.holdFrames ?? DEFAULT_NATIVE_LEASE_SETTINGS.holdFrames;
301
+ const tileBudgetMb = override.tileBudgetMb ?? DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb;
302
+ const sceneBudgetMb = override.sceneBudgetMb ?? DEFAULT_NATIVE_LEASE_SETTINGS.sceneBudgetMb;
303
+ return Math.min(budgetMb, holdFrames * 25) + tileBudgetMb + sceneBudgetMb + 350;
300
304
  }
301
305
  /**
302
306
  * The node's live-decode-worker budget.
@@ -8445,7 +8449,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
8445
8449
  type: "slider",
8446
8450
  key: "nodeDecodeBudgetMb",
8447
8451
  label: "Decode worker RAM budget (MB)",
8448
- description: "RAM this node lets live decode workers commit. The number of workers admitted is derived from it: budget divided by one worker's worst case, which is the lease budget + tile budget + ~350 MB of baseline. Measured on this cluster a worker plateaus at 650-860 MB within ten seconds of spawning, so at the shipped lease knobs the default admits 4 — the observed peak. Raising the lease budget per worker therefore LOWERS how many run at once, instead of silently authorising more memory.",
8452
+ description: "RAM this node lets live decode workers commit. The number of workers admitted is derived from it: budget divided by one worker's worst case — what the lease store can hold (the smaller of the lease budget and held frames × 25 MB, one 4K frame), plus the tile and scene budgets, plus ~350 MB of baseline. At the shipped lease knobs (8 held frames) that is ~660 MB and the default admits 8, the count cap. Raising held frames or the lease budget per worker therefore LOWERS how many run at once, instead of silently authorising more memory.",
8449
8453
  min: 1024,
8450
8454
  max: 32768,
8451
8455
  step: 512,
@@ -1,4 +1,4 @@
1
- import { ot as parseProcStatus } from "./dist-DOJIQ-sh.mjs";
1
+ import { ot as parseProcStatus } from "./dist-yaetDPpW.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_dist.__toESM(node_fs);
4
4
  let node_child_process = require("node:child_process");
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_node = require("../node-Cl2Sjm4s.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_node = require("../node-DGzZLg-c.js");
7
7
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
8
8
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
9
9
  const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
@@ -1,5 +1,5 @@
1
- import { $ as isFirstLevelMacroClass, $t as record, B as defineCustomActions, Bt as nodePin, E as RecordingConfigSchema, Gt as _enum, It as hydrateSchema, J as evaluateSensorEdge, Kt as array, L as customAction, N as batteryCapability, Nt as DeviceFeature, Pt as DeviceType, Qt as object, T as RECORDING_EXPORT_MAX_READ_BYTES, U as deriveRecordingMode, Ut as selectAssignedProfileSlots, V as deriveBatteryPresence, Wt as sleep$1, Zt as number, bt as storageEvictableCapability, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, en as string, et as loadContributionCapability, g as ExportRecordSchema, i as BatteryStatusSchema, jt as BaseAddon, mt as recordingExportCapability, nn as EventCategory, pt as recordingCapability, qt as boolean, vt as resolveRecordingProfiles, wt as errMsg, x as OpsLogEntrySchema } from "../dist-DOJIQ-sh.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C0KMHgpF.mjs";
1
+ import { $ as isFirstLevelMacroClass, $t as record, B as defineCustomActions, Bt as nodePin, E as RecordingConfigSchema, Gt as _enum, It as hydrateSchema, J as evaluateSensorEdge, Kt as array, L as customAction, N as batteryCapability, Nt as DeviceFeature, Pt as DeviceType, Qt as object, T as RECORDING_EXPORT_MAX_READ_BYTES, U as deriveRecordingMode, Ut as selectAssignedProfileSlots, V as deriveBatteryPresence, Wt as sleep$1, Zt as number, bt as storageEvictableCapability, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, en as string, et as loadContributionCapability, g as ExportRecordSchema, i as BatteryStatusSchema, jt as BaseAddon, mt as recordingExportCapability, nn as EventCategory, pt as recordingCapability, qt as boolean, vt as resolveRecordingProfiles, wt as errMsg, x as OpsLogEntrySchema } from "../dist-yaetDPpW.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CCRb0fqW.mjs";
3
3
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
4
4
  import { r as withRecordingIntent } from "../restream-intent-B4BXZra7.mjs";
5
5
  import { n as startEventLoopStallMonitor } from "../event-loop-stall-monitor-DXLNBMkY.mjs";
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
2
- import { wt as errMsg } from "./dist-DOJIQ-sh.mjs";
2
+ import { wt as errMsg } from "./dist-yaetDPpW.mjs";
3
3
  import { spawn } from "node:child_process";
4
4
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
5
5
  var require_mp4box_all = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  let node_child_process = require("node:child_process");
3
3
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
4
4
  var require_mp4box_all = /* @__PURE__ */ require_dist.__commonJSMin(((exports) => {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_worker_protocol = require("../worker-protocol-BGRTG_GT.js");
3
- const require_lazy_sharp = require("../lazy-sharp-D8FzOY6L.js");
2
+ const require_worker_protocol = require("../worker-protocol-Db6BWHr-.js");
3
+ const require_lazy_sharp = require("../lazy-sharp-D1PX1Psd.js");
4
4
  //#region src/session-decode/color-conversion.ts
5
5
  /**
6
6
  * Explicit YUV→RGB colorspace/range resolution for the session-decode worker.
@@ -1,4 +1,4 @@
1
- import { i as formatNativeLeaseKnobs, n as isWorkerRequest, o as resolveNativeLeaseKnobs, r as logLevelForLine } from "../worker-protocol-DGs9jUib.mjs";
1
+ import { i as formatNativeLeaseKnobs, n as isWorkerRequest, o as resolveNativeLeaseKnobs, r as logLevelForLine } from "../worker-protocol-BcKW7xgG.mjs";
2
2
  import { n as setSharpWarnSink, r as hostExternalEntryUrls, t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  //#region src/session-decode/color-conversion.ts
4
4
  /**
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.68",
6
+ version: "1.2.69",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_stream_broker_widgets",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.148",
21
+ version: "1.2.149",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_stream_broker_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.115",
36
+ version: "1.2.116",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_stream_broker_widgets",
@@ -1,4 +1,4 @@
1
- const require_segment_demux_js = require("../segment-demux-js-BI5iWBgx.js");
1
+ const require_segment_demux_js = require("../segment-demux-js-CnqYsNPt.js");
2
2
  let node_worker_threads = require("node:worker_threads");
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as demuxSegmentFullJs } from "../segment-demux-js-BtZ8kfA2.mjs";
1
+ import { t as demuxSegmentFullJs } from "../segment-demux-js-CViDx3UC.mjs";
2
2
  import { parentPort } from "node:worker_threads";
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.148",
39
+ version: "1.2.149",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.68",
48
+ version: "1.2.69",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.115",
84
+ version: "1.2.116",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bh1w7wfg.js");
6
- const require_node = require("../node-Cl2Sjm4s.js");
5
+ const require_dist = require("../dist-CiVhPNTB.js");
6
+ const require_node = require("../node-DGzZLg-c.js");
7
7
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
8
8
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
9
9
  const require_retire_root_keys = require("../retire-root-keys-KE6D6Xh_.js");
10
- const require_segment_demux_js = require("../segment-demux-js-BI5iWBgx.js");
10
+ const require_segment_demux_js = require("../segment-demux-js-CnqYsNPt.js");
11
11
  let node_crypto = require("node:crypto");
12
12
  node_crypto = require_dist.__toESM(node_crypto);
13
13
  let node_fs = require("node:fs");
@@ -1,10 +1,10 @@
1
1
  import { r as __toESM } from "../chunk-DnnnRqeS.mjs";
2
- import { $t as record, At as BOOT_RECOVERY_BACKOFF_MS, Bt as nodePin, C as RATE_CONTROL_RELAXED, Ct as webrtcSessionCapability, D as RingBuffer, Dt as buildFfmpegArgs$1, F as createHwAccelCache, Ft as createEvent, G as egressTranscodeSharingKey, Gt as _enum, Ht as parseProfileBrokerId, I as createLogChannelsProvider, Jt as discriminatedUnion, K as egressTransportFromRequest, Kt as array, Lt as isEvent, Mt as CAM_PROFILE_ORDER, N as batteryCapability, Nt as DeviceFeature, Ot as invocationFromEncodeProfile, P as cameraStreamsCapability, Pt as DeviceType, Qt as object, R as declareLogChannel, Rt as makeProfileBrokerId, Tt as AUDIO_PRESETS, V as deriveBatteryPresence, Xt as literal, Zt as number, en as string, et as loadContributionCapability, gt as resolveEgressDecodeHwAccel, h as EncodeProfileSchema, i as BatteryStatusSchema, jt as BaseAddon, k as addonWidgetsSourceCapability, kt as isSoftwareDecode, nn as EventCategory, qt as boolean, rt as maskUrlCredentials, tn as union, tt as logChannelsCapability, w as RATE_CONTROL_TIGHT, wt as errMsg, xt as streamBrokerCapability, zt as makeSourceBrokerId } from "../dist-DOJIQ-sh.mjs";
3
- import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-C0KMHgpF.mjs";
2
+ import { $t as record, At as BOOT_RECOVERY_BACKOFF_MS, Bt as nodePin, C as RATE_CONTROL_RELAXED, Ct as webrtcSessionCapability, D as RingBuffer, Dt as buildFfmpegArgs$1, F as createHwAccelCache, Ft as createEvent, G as egressTranscodeSharingKey, Gt as _enum, Ht as parseProfileBrokerId, I as createLogChannelsProvider, Jt as discriminatedUnion, K as egressTransportFromRequest, Kt as array, Lt as isEvent, Mt as CAM_PROFILE_ORDER, N as batteryCapability, Nt as DeviceFeature, Ot as invocationFromEncodeProfile, P as cameraStreamsCapability, Pt as DeviceType, Qt as object, R as declareLogChannel, Rt as makeProfileBrokerId, Tt as AUDIO_PRESETS, V as deriveBatteryPresence, Xt as literal, Zt as number, en as string, et as loadContributionCapability, gt as resolveEgressDecodeHwAccel, h as EncodeProfileSchema, i as BatteryStatusSchema, jt as BaseAddon, k as addonWidgetsSourceCapability, kt as isSoftwareDecode, nn as EventCategory, qt as boolean, rt as maskUrlCredentials, tn as union, tt as logChannelsCapability, w as RATE_CONTROL_TIGHT, wt as errMsg, xt as streamBrokerCapability, zt as makeSourceBrokerId } from "../dist-yaetDPpW.mjs";
3
+ import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-CCRb0fqW.mjs";
4
4
  import { t as parseRestreamPath } from "../restream-intent-B4BXZra7.mjs";
5
5
  import { n as profileForStreamId } from "../remote-restream-BeHi78PZ.mjs";
6
6
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DMolfhsP.mjs";
7
- import { i as require_mp4box_all, n as demuxSegmentPreferJs, r as runFfmpegOnce, t as demuxSegmentFullJs } from "../segment-demux-js-BtZ8kfA2.mjs";
7
+ import { i as require_mp4box_all, n as demuxSegmentPreferJs, r as runFfmpegOnce, t as demuxSegmentFullJs } from "../segment-demux-js-CViDx3UC.mjs";
8
8
  import { createRequire } from "node:module";
9
9
  import * as crypto$1 from "node:crypto";
10
10
  import crypto, { createHash, randomBytes, randomUUID } from "node:crypto";
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-4NEhUNJS.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Bd2po-GM.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
@@ -1,4 +1,4 @@
1
- import { b as NativeLeaseSettingsSchema, p as DEFAULT_NATIVE_LEASE_SETTINGS, y as NativeLeaseAdmissionSchema } from "./dist-DOJIQ-sh.mjs";
1
+ import { b as NativeLeaseSettingsSchema, p as DEFAULT_NATIVE_LEASE_SETTINGS, y as NativeLeaseAdmissionSchema } from "./dist-yaetDPpW.mjs";
2
2
  //#region src/session-decode/native-lease-config.ts
3
3
  /**
4
4
  * Resolution of the native-frame hold / tile knobs for one decode worker.
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bh1w7wfg.js");
1
+ const require_dist = require("./dist-CiVhPNTB.js");
2
2
  //#region src/session-decode/native-lease-config.ts
3
3
  /**
4
4
  * Resolution of the native-frame hold / tile knobs for one decode worker.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.2.184",
3
+ "version": "1.2.185",
4
4
  "description": "Pipeline bundle — runner, detection, motion, audio + stream broker. Multi-entry npm package shipping pipeline addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",
@@ -310,5 +310,10 @@
310
310
  "typescript": "~6.0.3",
311
311
  "vite": "^8.0.11",
312
312
  "vitest": "^3.2.4"
313
+ },
314
+ "nx": {
315
+ "implicitDependencies": [
316
+ "@camstack/shm-ring"
317
+ ]
313
318
  }
314
319
  }