@camstack/addon-pipeline 1.2.300 → 1.2.302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/{default-detection-model-DX-p9O91.mjs → default-detection-model-BroB5Jp1.mjs} +15 -8
- package/dist/{default-detection-model-nKzvW7BX.js → default-detection-model-vN686W1U.js} +20 -7
- package/dist/detection-pipeline/index.js +15 -17
- package/dist/detection-pipeline/index.mjs +15 -17
- package/dist/{dist-CqhrlD0m.mjs → dist-CLZmZfHT.mjs} +47 -5
- package/dist/{dist-C2WOjQsy.js → dist-CyWAhtbJ.js} +47 -5
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-CiWM78Ze.js → node-BDrkzYiH.js} +1 -1
- package/dist/{node-CZ1Z3f6z.mjs → node-C5LXX8Qo.mjs} +1 -1
- package/dist/pipeline-runner/index.js +189 -6
- package/dist/pipeline-runner/index.mjs +189 -6
- package/dist/{process-memory-taq9GnsO.mjs → process-memory-CCx6i9av.mjs} +1 -1
- package/dist/{process-memory-C0a37mXF.js → process-memory-DMS-0oRT.js} +1 -1
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +2 -2
- package/dist/{segment-demux-js-Cydmp9fc.mjs → segment-demux-js-BUxZFqkb.mjs} +1 -1
- package/dist/{segment-demux-js-5Xcu3sTI.js → segment-demux-js-CwQuMR0h.js} +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-C7I6DjP3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DFaPx_Ot.mjs} +1 -1
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-DyrGVuyu.mjs → hostInit-CePd6XbV.mjs} +1 -1
- package/dist/stream-broker/index.js +3 -3
- package/dist/stream-broker/index.mjs +3 -3
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_process_memory = require("../process-memory-
|
|
6
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
7
|
+
const require_process_memory = require("../process-memory-DMS-0oRT.js");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
10
10
|
let node_path = require("node:path");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { E as HF_BASE_URL, G as audioAnalyzerCapability, Rn as EventCategory, Ut as resolvePoolMemoryPolicy, W as audioAnalysisCapability, _n as hydrateSchema, bt as mapAudioLabelToMacro, en as errMsg, fn as audioChunkBytesPerSample, gn as expandAudioChunkToF32le, j as PoolMemoryWatchdog, n as AUDIO_BACKEND_CHOICES, p as DEFAULT_AUDIO_ANALYZER_CONFIG, sn as BaseAddon, xn as nodePin } from "../dist-
|
|
3
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
2
|
+
import { E as HF_BASE_URL, G as audioAnalyzerCapability, Rn as EventCategory, Ut as resolvePoolMemoryPolicy, W as audioAnalysisCapability, _n as hydrateSchema, bt as mapAudioLabelToMacro, en as errMsg, fn as audioChunkBytesPerSample, gn as expandAudioChunkToF32le, j as PoolMemoryWatchdog, n as AUDIO_BACKEND_CHOICES, p as DEFAULT_AUDIO_ANALYZER_CONFIG, sn as BaseAddon, xn as nodePin } from "../dist-CLZmZfHT.mjs";
|
|
3
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-CCx6i9av.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";
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import { K as audioKindId, Kt as stepModelRunsOnFormat, d as COCO_80_LABELS, f as COCO_TO_MACRO, gt as inferModelProvider, ht as hfModelUrl, r as AUDIO_MACRO_LABELS, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-
|
|
1
|
+
import { K as audioKindId, Kt as stepModelRunsOnFormat, d as COCO_80_LABELS, f as COCO_TO_MACRO, gt as inferModelProvider, ht as hfModelUrl, r as AUDIO_MACRO_LABELS, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-CLZmZfHT.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
+
//#region src/detection-pipeline/registry/effective-confidence.ts
|
|
4
|
+
/** The default in force: the model's own floor, else the step's. */
|
|
5
|
+
function resolveModelDefaultConfidence(def, model) {
|
|
6
|
+
return model?.defaultConfidence ?? def.defaultConfidence;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
3
9
|
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
4
10
|
/**
|
|
5
11
|
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
@@ -862,6 +868,7 @@ var FACE_DETECTION_MODELS = [
|
|
|
862
868
|
}],
|
|
863
869
|
preprocessMode: "letterbox",
|
|
864
870
|
postprocessor: "yunet",
|
|
871
|
+
defaultConfidence: .85,
|
|
865
872
|
formats: {
|
|
866
873
|
onnx: {
|
|
867
874
|
url: hf("faceDetection/yunet/onnx/camstack-yunet-2023mar.onnx"),
|
|
@@ -1753,7 +1760,7 @@ var AnimalClassifierStep = class {
|
|
|
1753
1760
|
stickyOnConfidence: .7
|
|
1754
1761
|
}
|
|
1755
1762
|
};
|
|
1756
|
-
getConfigSchema() {
|
|
1763
|
+
getConfigSchema(model) {
|
|
1757
1764
|
return [{
|
|
1758
1765
|
type: "multiselect",
|
|
1759
1766
|
key: "enabledClasses",
|
|
@@ -1769,7 +1776,7 @@ var AnimalClassifierStep = class {
|
|
|
1769
1776
|
key: "minConfidence",
|
|
1770
1777
|
label: "Min Confidence",
|
|
1771
1778
|
description: "Drop classifications whose score is below this threshold.",
|
|
1772
|
-
default: this.definition
|
|
1779
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1773
1780
|
min: 0,
|
|
1774
1781
|
max: 1,
|
|
1775
1782
|
step: .05,
|
|
@@ -1801,7 +1808,7 @@ var AnimalClassifierStep = class {
|
|
|
1801
1808
|
* bug `packageDropEnabled` already was.
|
|
1802
1809
|
*/
|
|
1803
1810
|
var PackageDetectionStep = class extends PipelineStepBase {
|
|
1804
|
-
getConfigSchema() {
|
|
1811
|
+
getConfigSchema(model) {
|
|
1805
1812
|
return [{
|
|
1806
1813
|
type: "slider",
|
|
1807
1814
|
key: "minConfidencePackage",
|
|
@@ -1810,19 +1817,19 @@ var PackageDetectionStep = class extends PipelineStepBase {
|
|
|
1810
1817
|
min: 0,
|
|
1811
1818
|
max: 1,
|
|
1812
1819
|
step: .05,
|
|
1813
|
-
default: this.definition
|
|
1820
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1814
1821
|
showValue: true
|
|
1815
1822
|
}];
|
|
1816
1823
|
}
|
|
1817
1824
|
};
|
|
1818
1825
|
var ClassifierWithMinConfidence = class extends PipelineStepBase {
|
|
1819
|
-
getConfigSchema() {
|
|
1826
|
+
getConfigSchema(model) {
|
|
1820
1827
|
return [{
|
|
1821
1828
|
type: "slider",
|
|
1822
1829
|
key: "minConfidence",
|
|
1823
1830
|
label: "Min Confidence",
|
|
1824
1831
|
description: "Drop classifications whose score is below this threshold.",
|
|
1825
|
-
default: this.definition
|
|
1832
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1826
1833
|
min: 0,
|
|
1827
1834
|
max: 1,
|
|
1828
1835
|
step: .05,
|
|
@@ -2843,4 +2850,4 @@ function resolveDefaultDetectionModel(backend, device, format, getStepDef = getS
|
|
|
2843
2850
|
return getDefaultModelForFormatFromDef(def, format);
|
|
2844
2851
|
}
|
|
2845
2852
|
//#endregion
|
|
2846
|
-
export { resolveModelForFormat as _, buildSubtreeCanRun as a, macroGateVerdict as c, resolveFrameViewGeometry as d, ALL_PIPELINE_STEPS as f, getStepDefinition as g, getStep as h, mergeCustomModels as i, rootObjectGate as l, getDefaultModelForFormat as m, resolveDefaultDetectionModel as n, placeDetailStep as o, ALL_STEPS as p, CustomModelCatalog as r, stepsForElectedPool as s, OBJECT_DETECTION_STEP_ID as t, localFrameRegistry as u, RETIRED_MODEL_IDS as v, landmarkPrecisionVerdict as y };
|
|
2853
|
+
export { resolveModelForFormat as _, buildSubtreeCanRun as a, resolveModelDefaultConfidence as b, macroGateVerdict as c, resolveFrameViewGeometry as d, ALL_PIPELINE_STEPS as f, getStepDefinition as g, getStep as h, mergeCustomModels as i, rootObjectGate as l, getDefaultModelForFormat as m, resolveDefaultDetectionModel as n, placeDetailStep as o, ALL_STEPS as p, CustomModelCatalog as r, stepsForElectedPool as s, OBJECT_DETECTION_STEP_ID as t, localFrameRegistry as u, RETIRED_MODEL_IDS as v, landmarkPrecisionVerdict as y };
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
1
|
+
const require_dist = require("./dist-CyWAhtbJ.js");
|
|
2
2
|
let node_crypto = require("node:crypto");
|
|
3
|
+
//#region src/detection-pipeline/registry/effective-confidence.ts
|
|
4
|
+
/** The default in force: the model's own floor, else the step's. */
|
|
5
|
+
function resolveModelDefaultConfidence(def, model) {
|
|
6
|
+
return model?.defaultConfidence ?? def.defaultConfidence;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
3
9
|
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
4
10
|
/**
|
|
5
11
|
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
@@ -862,6 +868,7 @@ var FACE_DETECTION_MODELS = [
|
|
|
862
868
|
}],
|
|
863
869
|
preprocessMode: "letterbox",
|
|
864
870
|
postprocessor: "yunet",
|
|
871
|
+
defaultConfidence: .85,
|
|
865
872
|
formats: {
|
|
866
873
|
onnx: {
|
|
867
874
|
url: hf("faceDetection/yunet/onnx/camstack-yunet-2023mar.onnx"),
|
|
@@ -1753,7 +1760,7 @@ var AnimalClassifierStep = class {
|
|
|
1753
1760
|
stickyOnConfidence: .7
|
|
1754
1761
|
}
|
|
1755
1762
|
};
|
|
1756
|
-
getConfigSchema() {
|
|
1763
|
+
getConfigSchema(model) {
|
|
1757
1764
|
return [{
|
|
1758
1765
|
type: "multiselect",
|
|
1759
1766
|
key: "enabledClasses",
|
|
@@ -1769,7 +1776,7 @@ var AnimalClassifierStep = class {
|
|
|
1769
1776
|
key: "minConfidence",
|
|
1770
1777
|
label: "Min Confidence",
|
|
1771
1778
|
description: "Drop classifications whose score is below this threshold.",
|
|
1772
|
-
default: this.definition
|
|
1779
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1773
1780
|
min: 0,
|
|
1774
1781
|
max: 1,
|
|
1775
1782
|
step: .05,
|
|
@@ -1801,7 +1808,7 @@ var AnimalClassifierStep = class {
|
|
|
1801
1808
|
* bug `packageDropEnabled` already was.
|
|
1802
1809
|
*/
|
|
1803
1810
|
var PackageDetectionStep = class extends PipelineStepBase {
|
|
1804
|
-
getConfigSchema() {
|
|
1811
|
+
getConfigSchema(model) {
|
|
1805
1812
|
return [{
|
|
1806
1813
|
type: "slider",
|
|
1807
1814
|
key: "minConfidencePackage",
|
|
@@ -1810,19 +1817,19 @@ var PackageDetectionStep = class extends PipelineStepBase {
|
|
|
1810
1817
|
min: 0,
|
|
1811
1818
|
max: 1,
|
|
1812
1819
|
step: .05,
|
|
1813
|
-
default: this.definition
|
|
1820
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1814
1821
|
showValue: true
|
|
1815
1822
|
}];
|
|
1816
1823
|
}
|
|
1817
1824
|
};
|
|
1818
1825
|
var ClassifierWithMinConfidence = class extends PipelineStepBase {
|
|
1819
|
-
getConfigSchema() {
|
|
1826
|
+
getConfigSchema(model) {
|
|
1820
1827
|
return [{
|
|
1821
1828
|
type: "slider",
|
|
1822
1829
|
key: "minConfidence",
|
|
1823
1830
|
label: "Min Confidence",
|
|
1824
1831
|
description: "Drop classifications whose score is below this threshold.",
|
|
1825
|
-
default: this.definition
|
|
1832
|
+
default: resolveModelDefaultConfidence(this.definition, model),
|
|
1826
1833
|
min: 0,
|
|
1827
1834
|
max: 1,
|
|
1828
1835
|
step: .05,
|
|
@@ -2939,6 +2946,12 @@ Object.defineProperty(exports, "resolveFrameViewGeometry", {
|
|
|
2939
2946
|
return resolveFrameViewGeometry;
|
|
2940
2947
|
}
|
|
2941
2948
|
});
|
|
2949
|
+
Object.defineProperty(exports, "resolveModelDefaultConfidence", {
|
|
2950
|
+
enumerable: true,
|
|
2951
|
+
get: function() {
|
|
2952
|
+
return resolveModelDefaultConfidence;
|
|
2953
|
+
}
|
|
2954
|
+
});
|
|
2942
2955
|
Object.defineProperty(exports, "resolveModelForFormat", {
|
|
2943
2956
|
enumerable: true,
|
|
2944
2957
|
get: function() {
|
|
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_node = require("../node-
|
|
8
|
-
const require_default_detection_model = require("../default-detection-model-
|
|
6
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
7
|
+
const require_node = require("../node-BDrkzYiH.js");
|
|
8
|
+
const require_default_detection_model = require("../default-detection-model-vN686W1U.js");
|
|
9
9
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
10
|
-
const require_process_memory = require("../process-memory-
|
|
10
|
+
const require_process_memory = require("../process-memory-DMS-0oRT.js");
|
|
11
11
|
let node_os = require("node:os");
|
|
12
12
|
node_os = require_chunk.__toESM(node_os);
|
|
13
13
|
let node_fs = require("node:fs");
|
|
@@ -3394,7 +3394,7 @@ function buildPoolModelConfigForStep(inputs) {
|
|
|
3394
3394
|
inputNormalization: modelEntry.inputNormalization,
|
|
3395
3395
|
outputProbabilities: modelEntry.outputProbabilities,
|
|
3396
3396
|
postprocessor: resolveEffectivePostprocessorForEntry(def, modelEntry),
|
|
3397
|
-
confidence: resolvePoolConfidenceFloor(stepId, def
|
|
3397
|
+
confidence: resolvePoolConfidenceFloor(stepId, require_default_detection_model.resolveModelDefaultConfidence(def, modelEntry)),
|
|
3398
3398
|
nmsIouThreshold: resolvePoolDecodeSettings({
|
|
3399
3399
|
def,
|
|
3400
3400
|
modelEntry,
|
|
@@ -6913,13 +6913,9 @@ function composeCropRoiToFrameNorm(roi, cropFrameSpace, frameWidth, frameHeight)
|
|
|
6913
6913
|
}
|
|
6914
6914
|
//#endregion
|
|
6915
6915
|
//#region src/detection-pipeline/pipeline/tree-builder.ts
|
|
6916
|
-
/**
|
|
6917
|
-
|
|
6918
|
-
|
|
6919
|
-
* resolved through the optional registry callback.
|
|
6920
|
-
*/
|
|
6921
|
-
function resolveEffectiveClassMap(definition, modelId, resolveModel) {
|
|
6922
|
-
return (definition.models.find((model) => model.id === modelId) ?? resolveModel?.(definition.id, modelId))?.classMap ?? definition.classMap;
|
|
6916
|
+
/** The catalog entry for `(definition, modelId)`: the static catalog, else the custom registry. */
|
|
6917
|
+
function resolveModelEntry(definition, modelId, resolveModel) {
|
|
6918
|
+
return definition.models.find((model) => model.id === modelId) ?? resolveModel?.(definition.id, modelId);
|
|
6923
6919
|
}
|
|
6924
6920
|
/**
|
|
6925
6921
|
* Build an executable tree from user config.
|
|
@@ -6956,11 +6952,12 @@ function buildNode(step, getEngine, resolveModel, onMissingVariant, resolved) {
|
|
|
6956
6952
|
const definition = require_default_detection_model.getStepDefinition(step.addonId);
|
|
6957
6953
|
const variant = resolved ?? getEngine(step.addonId, step.modelId);
|
|
6958
6954
|
const children = (step.children ?? []).filter((c) => c.enabled).map((c) => buildChild(c, step.addonId, getEngine, resolveModel, onMissingVariant)).filter((c) => c !== null);
|
|
6955
|
+
const modelEntry = resolveModelEntry(definition, variant.modelId, resolveModel);
|
|
6959
6956
|
const mergedSettings = {
|
|
6960
|
-
...collectSchemaDefaults(step.addonId),
|
|
6957
|
+
...collectSchemaDefaults(step.addonId, modelEntry),
|
|
6961
6958
|
...step.settings
|
|
6962
6959
|
};
|
|
6963
|
-
const effectiveClassMap =
|
|
6960
|
+
const effectiveClassMap = modelEntry?.classMap ?? definition.classMap;
|
|
6964
6961
|
return {
|
|
6965
6962
|
stepId: step.addonId,
|
|
6966
6963
|
definition,
|
|
@@ -6979,8 +6976,8 @@ function buildNode(step, getEngine, resolveModel, onMissingVariant, resolved) {
|
|
|
6979
6976
|
* are flattened — a nested `{ type: 'group', fields: [...] }` is
|
|
6980
6977
|
* entered recursively. Fields without a declared default are skipped.
|
|
6981
6978
|
*/
|
|
6982
|
-
function collectSchemaDefaults(stepId) {
|
|
6983
|
-
const schema = require_default_detection_model.getStep(stepId).getConfigSchema();
|
|
6979
|
+
function collectSchemaDefaults(stepId, model) {
|
|
6980
|
+
const schema = require_default_detection_model.getStep(stepId).getConfigSchema(model);
|
|
6984
6981
|
const out = {};
|
|
6985
6982
|
walkFieldsForDefaults(schema, out);
|
|
6986
6983
|
return out;
|
|
@@ -10605,7 +10602,8 @@ function buildSchemaSlots(formats, modelsDir, customByStep) {
|
|
|
10605
10602
|
}])),
|
|
10606
10603
|
...m.group ? { group: m.group } : {},
|
|
10607
10604
|
...m.legacy !== void 0 ? { legacy: m.legacy } : {},
|
|
10608
|
-
provider: m.provider ?? "camstack"
|
|
10605
|
+
provider: m.provider ?? "camstack",
|
|
10606
|
+
defaultConfidence: require_default_detection_model.resolveModelDefaultConfidence(step, m)
|
|
10609
10607
|
})),
|
|
10610
10608
|
defaultModelId: step.defaultModelId,
|
|
10611
10609
|
...step.defaultModelIdByFormat ? { defaultModelIdByFormat: { ...step.defaultModelIdByFormat } } : {},
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { Dn as array, Dt as overlayClusterStepSettings, Gt as runtimeDevices$1, H as YAMNET_TO_MACRO, In as string, Kt as stepModelRunsOnFormat, Ln as union, Mt as pipelineExecutorCapability, Nn as object, Rn as EventCategory, Sn as parseJsonUnknown, Tn as sleep, Ut as resolvePoolMemoryPolicy, Zt as supportedRuntimes$1, _n as hydrateSchema, en as errMsg, et as defaultDeviceFor$1, it as detectionPipelineCapability, j as PoolMemoryWatchdog, kt as pickClusterStepSettings, lt as evaluateZoneRules, m as DEFAULT_CLUSTER_STEP_SETTINGS, pn as createEvent, sn as BaseAddon, st as enumerateInferenceDevices, t as APPLE_SA_TO_MACRO, u as CLUSTER_MODEL_SCOPED_STEPS, vt as loadContributionCapability, xn as nodePin, y as DEVICE_BACKEND_TO_FORMAT, zt as resolveClusterStepModelId } from "../dist-
|
|
3
|
-
import { s as readProcessCost } from "../node-
|
|
4
|
-
import { _ as resolveModelForFormat, a as buildSubtreeCanRun, c as macroGateVerdict, f as ALL_PIPELINE_STEPS, g as getStepDefinition, h as getStep, i as mergeCustomModels, m as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as ALL_STEPS, r as CustomModelCatalog, u as localFrameRegistry, y as landmarkPrecisionVerdict } from "../default-detection-model-
|
|
2
|
+
import { Dn as array, Dt as overlayClusterStepSettings, Gt as runtimeDevices$1, H as YAMNET_TO_MACRO, In as string, Kt as stepModelRunsOnFormat, Ln as union, Mt as pipelineExecutorCapability, Nn as object, Rn as EventCategory, Sn as parseJsonUnknown, Tn as sleep, Ut as resolvePoolMemoryPolicy, Zt as supportedRuntimes$1, _n as hydrateSchema, en as errMsg, et as defaultDeviceFor$1, it as detectionPipelineCapability, j as PoolMemoryWatchdog, kt as pickClusterStepSettings, lt as evaluateZoneRules, m as DEFAULT_CLUSTER_STEP_SETTINGS, pn as createEvent, sn as BaseAddon, st as enumerateInferenceDevices, t as APPLE_SA_TO_MACRO, u as CLUSTER_MODEL_SCOPED_STEPS, vt as loadContributionCapability, xn as nodePin, y as DEVICE_BACKEND_TO_FORMAT, zt as resolveClusterStepModelId } from "../dist-CLZmZfHT.mjs";
|
|
3
|
+
import { s as readProcessCost } from "../node-C5LXX8Qo.mjs";
|
|
4
|
+
import { _ as resolveModelForFormat, a as buildSubtreeCanRun, b as resolveModelDefaultConfidence, c as macroGateVerdict, f as ALL_PIPELINE_STEPS, g as getStepDefinition, h as getStep, i as mergeCustomModels, m as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as ALL_STEPS, r as CustomModelCatalog, u as localFrameRegistry, y as landmarkPrecisionVerdict } from "../default-detection-model-BroB5Jp1.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
6
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
6
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-CCx6i9av.mjs";
|
|
7
7
|
import * as os from "node:os";
|
|
8
8
|
import * as fs from "node:fs";
|
|
9
9
|
import * as path$1 from "node:path";
|
|
@@ -3387,7 +3387,7 @@ function buildPoolModelConfigForStep(inputs) {
|
|
|
3387
3387
|
inputNormalization: modelEntry.inputNormalization,
|
|
3388
3388
|
outputProbabilities: modelEntry.outputProbabilities,
|
|
3389
3389
|
postprocessor: resolveEffectivePostprocessorForEntry(def, modelEntry),
|
|
3390
|
-
confidence: resolvePoolConfidenceFloor(stepId, def
|
|
3390
|
+
confidence: resolvePoolConfidenceFloor(stepId, resolveModelDefaultConfidence(def, modelEntry)),
|
|
3391
3391
|
nmsIouThreshold: resolvePoolDecodeSettings({
|
|
3392
3392
|
def,
|
|
3393
3393
|
modelEntry,
|
|
@@ -6906,13 +6906,9 @@ function composeCropRoiToFrameNorm(roi, cropFrameSpace, frameWidth, frameHeight)
|
|
|
6906
6906
|
}
|
|
6907
6907
|
//#endregion
|
|
6908
6908
|
//#region src/detection-pipeline/pipeline/tree-builder.ts
|
|
6909
|
-
/**
|
|
6910
|
-
|
|
6911
|
-
|
|
6912
|
-
* resolved through the optional registry callback.
|
|
6913
|
-
*/
|
|
6914
|
-
function resolveEffectiveClassMap(definition, modelId, resolveModel) {
|
|
6915
|
-
return (definition.models.find((model) => model.id === modelId) ?? resolveModel?.(definition.id, modelId))?.classMap ?? definition.classMap;
|
|
6909
|
+
/** The catalog entry for `(definition, modelId)`: the static catalog, else the custom registry. */
|
|
6910
|
+
function resolveModelEntry(definition, modelId, resolveModel) {
|
|
6911
|
+
return definition.models.find((model) => model.id === modelId) ?? resolveModel?.(definition.id, modelId);
|
|
6916
6912
|
}
|
|
6917
6913
|
/**
|
|
6918
6914
|
* Build an executable tree from user config.
|
|
@@ -6949,11 +6945,12 @@ function buildNode(step, getEngine, resolveModel, onMissingVariant, resolved) {
|
|
|
6949
6945
|
const definition = getStepDefinition(step.addonId);
|
|
6950
6946
|
const variant = resolved ?? getEngine(step.addonId, step.modelId);
|
|
6951
6947
|
const children = (step.children ?? []).filter((c) => c.enabled).map((c) => buildChild(c, step.addonId, getEngine, resolveModel, onMissingVariant)).filter((c) => c !== null);
|
|
6948
|
+
const modelEntry = resolveModelEntry(definition, variant.modelId, resolveModel);
|
|
6952
6949
|
const mergedSettings = {
|
|
6953
|
-
...collectSchemaDefaults(step.addonId),
|
|
6950
|
+
...collectSchemaDefaults(step.addonId, modelEntry),
|
|
6954
6951
|
...step.settings
|
|
6955
6952
|
};
|
|
6956
|
-
const effectiveClassMap =
|
|
6953
|
+
const effectiveClassMap = modelEntry?.classMap ?? definition.classMap;
|
|
6957
6954
|
return {
|
|
6958
6955
|
stepId: step.addonId,
|
|
6959
6956
|
definition,
|
|
@@ -6972,8 +6969,8 @@ function buildNode(step, getEngine, resolveModel, onMissingVariant, resolved) {
|
|
|
6972
6969
|
* are flattened — a nested `{ type: 'group', fields: [...] }` is
|
|
6973
6970
|
* entered recursively. Fields without a declared default are skipped.
|
|
6974
6971
|
*/
|
|
6975
|
-
function collectSchemaDefaults(stepId) {
|
|
6976
|
-
const schema = getStep(stepId).getConfigSchema();
|
|
6972
|
+
function collectSchemaDefaults(stepId, model) {
|
|
6973
|
+
const schema = getStep(stepId).getConfigSchema(model);
|
|
6977
6974
|
const out = {};
|
|
6978
6975
|
walkFieldsForDefaults(schema, out);
|
|
6979
6976
|
return out;
|
|
@@ -10598,7 +10595,8 @@ function buildSchemaSlots(formats, modelsDir, customByStep) {
|
|
|
10598
10595
|
}])),
|
|
10599
10596
|
...m.group ? { group: m.group } : {},
|
|
10600
10597
|
...m.legacy !== void 0 ? { legacy: m.legacy } : {},
|
|
10601
|
-
provider: m.provider ?? "camstack"
|
|
10598
|
+
provider: m.provider ?? "camstack",
|
|
10599
|
+
defaultConfidence: resolveModelDefaultConfidence(step, m)
|
|
10602
10600
|
})),
|
|
10603
10601
|
defaultModelId: step.defaultModelId,
|
|
10604
10602
|
...step.defaultModelIdByFormat ? { defaultModelIdByFormat: { ...step.defaultModelIdByFormat } } : {},
|
|
@@ -11569,6 +11569,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
11569
11569
|
*/
|
|
11570
11570
|
postprocessor: custom().optional(),
|
|
11571
11571
|
/**
|
|
11572
|
+
* Per-MODEL default confidence floor. Absent ⇒ the step's
|
|
11573
|
+
* `StepDefinition.defaultConfidence` applies. A score is a property of one
|
|
11574
|
+
* model's output scale, not of the step slot it sits in: YuNet's
|
|
11575
|
+
* `sqrt(cls·obj)` is not SCRFD's score, and inheriting SCRFD's 0.5 filled the
|
|
11576
|
+
* face gallery with wheels and hands (D662, amends D645). An operator's
|
|
11577
|
+
* explicit value still wins over it. Resolved in ONE place —
|
|
11578
|
+
* `addon-pipeline/.../registry/effective-confidence.ts`.
|
|
11579
|
+
*/
|
|
11580
|
+
defaultConfidence: number().min(0).max(1).optional(),
|
|
11581
|
+
/**
|
|
11572
11582
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
11573
11583
|
* onto the canonical template) before this step runs, instead of a plain
|
|
11574
11584
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -24218,7 +24228,15 @@ var RebuildObjectEmbeddingsInput = object({
|
|
|
24218
24228
|
* force is logged at start and finish so a deliberately slow pass reads
|
|
24219
24229
|
* differently from a stalled one.
|
|
24220
24230
|
*/
|
|
24221
|
-
pacingMs: number().int().nonnegative().optional()
|
|
24231
|
+
pacingMs: number().int().nonnegative().optional(),
|
|
24232
|
+
/**
|
|
24233
|
+
* Re-embed ONLY the tracks whose vector is ALREADY in the pinned model's
|
|
24234
|
+
* space (D664) — the in-space skip inverted. It exists to redo vectors
|
|
24235
|
+
* written from the wrong box, which a normal pass would skip as done
|
|
24236
|
+
* forever. Requires `maxTracks`: a forced pass without a bound is refused
|
|
24237
|
+
* (`force-requires-max-tracks`).
|
|
24238
|
+
*/
|
|
24239
|
+
force: boolean().optional()
|
|
24222
24240
|
});
|
|
24223
24241
|
/**
|
|
24224
24242
|
* Result of emptying the CLIP index.
|
|
@@ -24254,6 +24272,7 @@ var WipeObjectEmbeddingsResultSchema = object({
|
|
|
24254
24272
|
* - `reads-disagree` — the two reads named different choices.
|
|
24255
24273
|
* - `not-a-clip-model` — the CONFIRMED id has no CLIP metadata, so there is no
|
|
24256
24274
|
* index to fill and no dimension to check against (D649).
|
|
24275
|
+
* - `force-requires-max-tracks` — `force: true` with no `maxTracks` (D664).
|
|
24257
24276
|
*/
|
|
24258
24277
|
var RebuildObjectEmbeddingsRefusalSchema = _enum([
|
|
24259
24278
|
"stores-unavailable",
|
|
@@ -24261,7 +24280,8 @@ var RebuildObjectEmbeddingsRefusalSchema = _enum([
|
|
|
24261
24280
|
"method-unavailable",
|
|
24262
24281
|
"read-failed",
|
|
24263
24282
|
"reads-disagree",
|
|
24264
|
-
"not-a-clip-model"
|
|
24283
|
+
"not-a-clip-model",
|
|
24284
|
+
"force-requires-max-tracks"
|
|
24265
24285
|
]);
|
|
24266
24286
|
/**
|
|
24267
24287
|
* Acknowledgement that a rebuild STARTED.
|
|
@@ -24286,11 +24306,32 @@ var RebuildStatusSchema = object({
|
|
|
24286
24306
|
running: boolean(),
|
|
24287
24307
|
scanned: number(),
|
|
24288
24308
|
rebuilt: number(),
|
|
24289
|
-
/** Tracks whose key frame is gone — nothing to re-embed from.
|
|
24309
|
+
/** Tracks whose key frame is gone — nothing to re-embed from. Pixels ONLY:
|
|
24310
|
+
* `missingEvent` is its own field since D664, never summed in. */
|
|
24290
24311
|
missingKeyFrame: number(),
|
|
24291
|
-
/** Tracks with no
|
|
24312
|
+
/** Tracks with no object event at all (D664). */
|
|
24313
|
+
missingEvent: number(),
|
|
24314
|
+
/** Tracks with no box measured on the pixels to cut — see `boxSource.refused`. */
|
|
24292
24315
|
missingBbox: number(),
|
|
24293
24316
|
/**
|
|
24317
|
+
* Which rule placed each judged track's box (D664): the key frame row's own
|
|
24318
|
+
* `subjectBox`, `track.positions` at exactly its instant (older key frames),
|
|
24319
|
+
* the event box (a key frame recovered from the recording, at the event's
|
|
24320
|
+
* instant), or `refused` by name — the reasons are in the tagged log lines.
|
|
24321
|
+
*/
|
|
24322
|
+
boxSource: object({
|
|
24323
|
+
subjectBox: number(),
|
|
24324
|
+
positions: number(),
|
|
24325
|
+
event: number(),
|
|
24326
|
+
refused: number()
|
|
24327
|
+
}),
|
|
24328
|
+
/** Tracks skipped because their vector is already in the pinned space. */
|
|
24329
|
+
alreadyInSpace: number(),
|
|
24330
|
+
/** Whether the current / last pass was a `force` pass; `null` before any (D664). */
|
|
24331
|
+
force: boolean().nullable(),
|
|
24332
|
+
/** In-space tracks a `force` pass selected for re-embedding. */
|
|
24333
|
+
forcedInSpace: number(),
|
|
24334
|
+
/**
|
|
24294
24335
|
* Tracks an executing node REFUSED rather than broke on — an unreadable key
|
|
24295
24336
|
* frame, a step that threw. Separate from `failed` because the remedy is
|
|
24296
24337
|
* different, and because a whole camera silently contributing zero vectors
|
|
@@ -24795,7 +24836,8 @@ var PipelineModelOptionSchema = object({
|
|
|
24795
24836
|
})),
|
|
24796
24837
|
group: ModelVariantGroupSchema.optional(),
|
|
24797
24838
|
legacy: boolean().optional(),
|
|
24798
|
-
provider: ModelProviderIdSchema.optional()
|
|
24839
|
+
provider: ModelProviderIdSchema.optional(),
|
|
24840
|
+
defaultConfidence: number().optional()
|
|
24799
24841
|
});
|
|
24800
24842
|
var ConfigFieldBridge = custom();
|
|
24801
24843
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -11569,6 +11569,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
11569
11569
|
*/
|
|
11570
11570
|
postprocessor: custom().optional(),
|
|
11571
11571
|
/**
|
|
11572
|
+
* Per-MODEL default confidence floor. Absent ⇒ the step's
|
|
11573
|
+
* `StepDefinition.defaultConfidence` applies. A score is a property of one
|
|
11574
|
+
* model's output scale, not of the step slot it sits in: YuNet's
|
|
11575
|
+
* `sqrt(cls·obj)` is not SCRFD's score, and inheriting SCRFD's 0.5 filled the
|
|
11576
|
+
* face gallery with wheels and hands (D662, amends D645). An operator's
|
|
11577
|
+
* explicit value still wins over it. Resolved in ONE place —
|
|
11578
|
+
* `addon-pipeline/.../registry/effective-confidence.ts`.
|
|
11579
|
+
*/
|
|
11580
|
+
defaultConfidence: number().min(0).max(1).optional(),
|
|
11581
|
+
/**
|
|
11572
11582
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
11573
11583
|
* onto the canonical template) before this step runs, instead of a plain
|
|
11574
11584
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -24218,7 +24228,15 @@ var RebuildObjectEmbeddingsInput = object({
|
|
|
24218
24228
|
* force is logged at start and finish so a deliberately slow pass reads
|
|
24219
24229
|
* differently from a stalled one.
|
|
24220
24230
|
*/
|
|
24221
|
-
pacingMs: number().int().nonnegative().optional()
|
|
24231
|
+
pacingMs: number().int().nonnegative().optional(),
|
|
24232
|
+
/**
|
|
24233
|
+
* Re-embed ONLY the tracks whose vector is ALREADY in the pinned model's
|
|
24234
|
+
* space (D664) — the in-space skip inverted. It exists to redo vectors
|
|
24235
|
+
* written from the wrong box, which a normal pass would skip as done
|
|
24236
|
+
* forever. Requires `maxTracks`: a forced pass without a bound is refused
|
|
24237
|
+
* (`force-requires-max-tracks`).
|
|
24238
|
+
*/
|
|
24239
|
+
force: boolean().optional()
|
|
24222
24240
|
});
|
|
24223
24241
|
/**
|
|
24224
24242
|
* Result of emptying the CLIP index.
|
|
@@ -24254,6 +24272,7 @@ var WipeObjectEmbeddingsResultSchema = object({
|
|
|
24254
24272
|
* - `reads-disagree` — the two reads named different choices.
|
|
24255
24273
|
* - `not-a-clip-model` — the CONFIRMED id has no CLIP metadata, so there is no
|
|
24256
24274
|
* index to fill and no dimension to check against (D649).
|
|
24275
|
+
* - `force-requires-max-tracks` — `force: true` with no `maxTracks` (D664).
|
|
24257
24276
|
*/
|
|
24258
24277
|
var RebuildObjectEmbeddingsRefusalSchema = _enum([
|
|
24259
24278
|
"stores-unavailable",
|
|
@@ -24261,7 +24280,8 @@ var RebuildObjectEmbeddingsRefusalSchema = _enum([
|
|
|
24261
24280
|
"method-unavailable",
|
|
24262
24281
|
"read-failed",
|
|
24263
24282
|
"reads-disagree",
|
|
24264
|
-
"not-a-clip-model"
|
|
24283
|
+
"not-a-clip-model",
|
|
24284
|
+
"force-requires-max-tracks"
|
|
24265
24285
|
]);
|
|
24266
24286
|
/**
|
|
24267
24287
|
* Acknowledgement that a rebuild STARTED.
|
|
@@ -24286,11 +24306,32 @@ var RebuildStatusSchema = object({
|
|
|
24286
24306
|
running: boolean(),
|
|
24287
24307
|
scanned: number(),
|
|
24288
24308
|
rebuilt: number(),
|
|
24289
|
-
/** Tracks whose key frame is gone — nothing to re-embed from.
|
|
24309
|
+
/** Tracks whose key frame is gone — nothing to re-embed from. Pixels ONLY:
|
|
24310
|
+
* `missingEvent` is its own field since D664, never summed in. */
|
|
24290
24311
|
missingKeyFrame: number(),
|
|
24291
|
-
/** Tracks with no
|
|
24312
|
+
/** Tracks with no object event at all (D664). */
|
|
24313
|
+
missingEvent: number(),
|
|
24314
|
+
/** Tracks with no box measured on the pixels to cut — see `boxSource.refused`. */
|
|
24292
24315
|
missingBbox: number(),
|
|
24293
24316
|
/**
|
|
24317
|
+
* Which rule placed each judged track's box (D664): the key frame row's own
|
|
24318
|
+
* `subjectBox`, `track.positions` at exactly its instant (older key frames),
|
|
24319
|
+
* the event box (a key frame recovered from the recording, at the event's
|
|
24320
|
+
* instant), or `refused` by name — the reasons are in the tagged log lines.
|
|
24321
|
+
*/
|
|
24322
|
+
boxSource: object({
|
|
24323
|
+
subjectBox: number(),
|
|
24324
|
+
positions: number(),
|
|
24325
|
+
event: number(),
|
|
24326
|
+
refused: number()
|
|
24327
|
+
}),
|
|
24328
|
+
/** Tracks skipped because their vector is already in the pinned space. */
|
|
24329
|
+
alreadyInSpace: number(),
|
|
24330
|
+
/** Whether the current / last pass was a `force` pass; `null` before any (D664). */
|
|
24331
|
+
force: boolean().nullable(),
|
|
24332
|
+
/** In-space tracks a `force` pass selected for re-embedding. */
|
|
24333
|
+
forcedInSpace: number(),
|
|
24334
|
+
/**
|
|
24294
24335
|
* Tracks an executing node REFUSED rather than broke on — an unreadable key
|
|
24295
24336
|
* frame, a step that threw. Separate from `failed` because the remedy is
|
|
24296
24337
|
* different, and because a whole camera silently contributing zero vectors
|
|
@@ -24795,7 +24836,8 @@ var PipelineModelOptionSchema = object({
|
|
|
24795
24836
|
})),
|
|
24796
24837
|
group: ModelVariantGroupSchema.optional(),
|
|
24797
24838
|
legacy: boolean().optional(),
|
|
24798
|
-
provider: ModelProviderIdSchema.optional()
|
|
24839
|
+
provider: ModelProviderIdSchema.optional(),
|
|
24840
|
+
defaultConfidence: number().optional()
|
|
24799
24841
|
});
|
|
24800
24842
|
var ConfigFieldBridge = custom();
|
|
24801
24843
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
6
6
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Et as motionDetectionCapability, _n as hydrateSchema, dn as DeviceType, lt as evaluateZoneRules, sn as BaseAddon } from "../dist-
|
|
1
|
+
import { Et as motionDetectionCapability, _n as hydrateSchema, dn as DeviceType, lt as evaluateZoneRules, sn as BaseAddon } from "../dist-CLZmZfHT.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,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-CyWAhtbJ.js");
|
|
3
3
|
let node_crypto = require("node:crypto");
|
|
4
4
|
let node_fs = require("node:fs");
|
|
5
5
|
node_fs = require_chunk.__toESM(node_fs, 1);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { an as isSoftwareDecode, en as errMsg, nn as Fmp4BoxSplitter, rn as buildFfmpegArgs } from "./dist-
|
|
1
|
+
import { an as isSoftwareDecode, en as errMsg, nn as Fmp4BoxSplitter, rn as buildFfmpegArgs } from "./dist-CLZmZfHT.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_node = require("../node-
|
|
8
|
-
const require_default_detection_model = require("../default-detection-model-
|
|
6
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
7
|
+
const require_node = require("../node-BDrkzYiH.js");
|
|
8
|
+
const require_default_detection_model = require("../default-detection-model-vN686W1U.js");
|
|
9
9
|
const require_worker_protocol = require("../worker-protocol-C-G8qmye.js");
|
|
10
10
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
11
11
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
@@ -3704,6 +3704,87 @@ function buildDetailNotAttachedError(deviceId) {
|
|
|
3704
3704
|
return /* @__PURE__ */ new Error(`${DETAIL_NOT_ATTACHED_MARKER} — camera ${deviceId} is not attached and no detail state is parked within the grace window`);
|
|
3705
3705
|
}
|
|
3706
3706
|
//#endregion
|
|
3707
|
+
//#region src/pipeline-runner/face-parent-geometry.ts
|
|
3708
|
+
/** Is the centre of `face` inside `parent` (edges inclusive)? */
|
|
3709
|
+
function faceCentreInsideParent(face, parent) {
|
|
3710
|
+
const cx = face.x + face.w / 2;
|
|
3711
|
+
const cy = face.y + face.h / 2;
|
|
3712
|
+
return cx >= parent.x && cx <= parent.x + parent.w && cy >= parent.y && cy <= parent.y + parent.h;
|
|
3713
|
+
}
|
|
3714
|
+
/** The log line, one name for both the throttled and the fallback path. */
|
|
3715
|
+
var FACE_GUARD_UNAVAILABLE_MESSAGE = "face geometry guard cannot run on a caller-cut tile — its padding is unknown, the faces pass unjudged";
|
|
3716
|
+
var FACE_OUTSIDE_PARENT_MESSAGE = "face dropped — its centre is outside the person box (it was found in the crop padding)";
|
|
3717
|
+
/** The fields of a drop the log line carries. */
|
|
3718
|
+
function faceOutsideParentMeta(drop) {
|
|
3719
|
+
const round = (r) => ({
|
|
3720
|
+
x: Math.round(r.x),
|
|
3721
|
+
y: Math.round(r.y),
|
|
3722
|
+
w: Math.round(r.w),
|
|
3723
|
+
h: Math.round(r.h)
|
|
3724
|
+
});
|
|
3725
|
+
return {
|
|
3726
|
+
score: Number(drop.score.toFixed(4)),
|
|
3727
|
+
faceBbox: round(drop.faceBbox),
|
|
3728
|
+
parentBbox: round(drop.parentBbox)
|
|
3729
|
+
};
|
|
3730
|
+
}
|
|
3731
|
+
/** Default window: the dispatcher refreshes a face every second per track. */
|
|
3732
|
+
var FACE_OUTSIDE_PARENT_LOG_INTERVAL_MS = 6e4;
|
|
3733
|
+
/**
|
|
3734
|
+
* Per-camera, rate-limited announcement of dropped faces (D391: a branch that
|
|
3735
|
+
* drops work says so). The first drop on a camera is logged at once; drops
|
|
3736
|
+
* inside the window are held and emitted as ONE line carrying their count —
|
|
3737
|
+
* by the next drop after the window, or by a flush armed when the first one
|
|
3738
|
+
* was held, whichever comes first. Every drop is counted in exactly one line.
|
|
3739
|
+
*/
|
|
3740
|
+
var FaceOutsideParentLog = class {
|
|
3741
|
+
opts;
|
|
3742
|
+
lastLineAt = /* @__PURE__ */ new Map();
|
|
3743
|
+
heldBack = /* @__PURE__ */ new Map();
|
|
3744
|
+
flushArmed = /* @__PURE__ */ new Set();
|
|
3745
|
+
/** The latest held drop per camera — the example a flushed line shows. */
|
|
3746
|
+
lastHeld = /* @__PURE__ */ new Map();
|
|
3747
|
+
constructor(opts) {
|
|
3748
|
+
this.opts = opts;
|
|
3749
|
+
}
|
|
3750
|
+
record(drop) {
|
|
3751
|
+
const now = this.opts.now();
|
|
3752
|
+
const held = (this.heldBack.get(drop.deviceId) ?? 0) + 1;
|
|
3753
|
+
const last = this.lastLineAt.get(drop.deviceId);
|
|
3754
|
+
if (last !== void 0 && now - last < this.opts.intervalMs) {
|
|
3755
|
+
this.heldBack.set(drop.deviceId, held);
|
|
3756
|
+
this.lastHeld.set(drop.deviceId, drop);
|
|
3757
|
+
if (!this.flushArmed.has(drop.deviceId)) {
|
|
3758
|
+
this.flushArmed.add(drop.deviceId);
|
|
3759
|
+
this.opts.schedule(() => this.flush(drop.deviceId), last + this.opts.intervalMs - now);
|
|
3760
|
+
}
|
|
3761
|
+
return;
|
|
3762
|
+
}
|
|
3763
|
+
this.emit(drop, held, now);
|
|
3764
|
+
}
|
|
3765
|
+
/** Emit what a window held back, if anything; a no-op once already said. */
|
|
3766
|
+
flush(deviceId) {
|
|
3767
|
+
this.flushArmed.delete(deviceId);
|
|
3768
|
+
const held = this.heldBack.get(deviceId) ?? 0;
|
|
3769
|
+
const drop = this.lastHeld.get(deviceId);
|
|
3770
|
+
if (held === 0 || drop === void 0) return;
|
|
3771
|
+
this.emit(drop, held, this.opts.now());
|
|
3772
|
+
}
|
|
3773
|
+
emit(drop, count, now) {
|
|
3774
|
+
this.lastLineAt.set(drop.deviceId, now);
|
|
3775
|
+
this.heldBack.set(drop.deviceId, 0);
|
|
3776
|
+
this.flushArmed.delete(drop.deviceId);
|
|
3777
|
+
this.opts.info(FACE_OUTSIDE_PARENT_MESSAGE, {
|
|
3778
|
+
tags: { deviceId: drop.deviceId },
|
|
3779
|
+
meta: {
|
|
3780
|
+
...faceOutsideParentMeta(drop),
|
|
3781
|
+
droppedSinceLastLine: count,
|
|
3782
|
+
windowMs: this.opts.intervalMs
|
|
3783
|
+
}
|
|
3784
|
+
});
|
|
3785
|
+
}
|
|
3786
|
+
};
|
|
3787
|
+
//#endregion
|
|
3707
3788
|
//#region src/pipeline-runner/detail-subtree.ts
|
|
3708
3789
|
/** Did the subtree run refuse because the camera is not attached (park lapsed)? */
|
|
3709
3790
|
function isDetailNotAttachedRefusal(outcome) {
|
|
@@ -3713,6 +3794,8 @@ function isDetailNotAttachedRefusal(outcome) {
|
|
|
3713
3794
|
function isNativeCropMiss(fetch) {
|
|
3714
3795
|
return "miss" in fetch;
|
|
3715
3796
|
}
|
|
3797
|
+
/** The class the geometry guard judges — the face detector's output. */
|
|
3798
|
+
var FACE_CLASS = "face";
|
|
3716
3799
|
/** Normalize a frame-space pixel rect to `[0,1]` by the given frame dims. */
|
|
3717
3800
|
function normalizeRect(rect, frameWidth, frameHeight) {
|
|
3718
3801
|
return {
|
|
@@ -4014,14 +4097,45 @@ async function runDetailSubtree(deps, input) {
|
|
|
4014
4097
|
cropFrameSpace: crop.frameSpace
|
|
4015
4098
|
} : void 0;
|
|
4016
4099
|
const details = [];
|
|
4100
|
+
let unjudgedFaces = 0;
|
|
4017
4101
|
for (const step of steps) {
|
|
4018
4102
|
const placement = deps.placeStep?.(input.deviceId, step);
|
|
4019
4103
|
const result = await deps.runPipeline([placement?.step ?? step], crop.jpeg, input.deviceId, placement?.deviceKey, nativeCropRef);
|
|
4020
4104
|
if (!result) continue;
|
|
4021
|
-
for (const detection of result.detections)
|
|
4105
|
+
for (const detection of result.detections) {
|
|
4106
|
+
const detail = toDetailResult(detection, step.addonId, crop);
|
|
4107
|
+
if (detail.className === FACE_CLASS && crop.source === "fallback") unjudgedFaces += 1;
|
|
4108
|
+
else if (detail.className === FACE_CLASS && detail.bbox !== void 0 && !faceCentreInsideParent(detail.bbox, input.parent.bbox)) {
|
|
4109
|
+
announceFaceOutsideParent(deps, {
|
|
4110
|
+
deviceId: input.deviceId,
|
|
4111
|
+
score: detail.score,
|
|
4112
|
+
faceBbox: detail.bbox,
|
|
4113
|
+
parentBbox: input.parent.bbox
|
|
4114
|
+
});
|
|
4115
|
+
continue;
|
|
4116
|
+
}
|
|
4117
|
+
details.push(detail);
|
|
4118
|
+
}
|
|
4022
4119
|
}
|
|
4120
|
+
if (unjudgedFaces > 0) deps.logger.warn(FACE_GUARD_UNAVAILABLE_MESSAGE, {
|
|
4121
|
+
tags: { deviceId: input.deviceId },
|
|
4122
|
+
meta: {
|
|
4123
|
+
faces: unjudgedFaces,
|
|
4124
|
+
cropSource: crop.source
|
|
4125
|
+
}
|
|
4126
|
+
});
|
|
4023
4127
|
return { details };
|
|
4024
4128
|
}
|
|
4129
|
+
function announceFaceOutsideParent(deps, drop) {
|
|
4130
|
+
if (deps.recordFaceOutsideParent !== void 0) {
|
|
4131
|
+
deps.recordFaceOutsideParent(drop);
|
|
4132
|
+
return;
|
|
4133
|
+
}
|
|
4134
|
+
deps.logger.warn(FACE_OUTSIDE_PARENT_MESSAGE, {
|
|
4135
|
+
tags: { deviceId: drop.deviceId },
|
|
4136
|
+
meta: faceOutsideParentMeta(drop)
|
|
4137
|
+
});
|
|
4138
|
+
}
|
|
4025
4139
|
//#endregion
|
|
4026
4140
|
//#region src/pipeline-runner/device-load.ts
|
|
4027
4141
|
/** The backend prefix of a `<backend>:<device>` key (bare `cpu` → `cpu`). */
|
|
@@ -5846,6 +5960,60 @@ var Semaphore = class {
|
|
|
5846
5960
|
if (next) next();
|
|
5847
5961
|
}
|
|
5848
5962
|
};
|
|
5963
|
+
//#endregion
|
|
5964
|
+
//#region src/pipeline-runner/below-floor-tally.ts
|
|
5965
|
+
var BELOW_FLOOR_BANDS = [
|
|
5966
|
+
"<0.35",
|
|
5967
|
+
"0.35-0.50",
|
|
5968
|
+
"0.50-0.65",
|
|
5969
|
+
">=0.65"
|
|
5970
|
+
];
|
|
5971
|
+
function belowFloorBand(score) {
|
|
5972
|
+
if (score < .35) return "<0.35";
|
|
5973
|
+
if (score < .5) return "0.35-0.50";
|
|
5974
|
+
if (score < .65) return "0.50-0.65";
|
|
5975
|
+
return ">=0.65";
|
|
5976
|
+
}
|
|
5977
|
+
function addInto(into, macroClass, band, n) {
|
|
5978
|
+
const row = into[macroClass] ?? {};
|
|
5979
|
+
row[band] = (row[band] ?? 0) + n;
|
|
5980
|
+
into[macroClass] = row;
|
|
5981
|
+
}
|
|
5982
|
+
/** One frame's `below-threshold` discards, tallied. Other reasons are not the
|
|
5983
|
+
* floor's doing and are not counted here. */
|
|
5984
|
+
function tallyBelowFloor(discarded) {
|
|
5985
|
+
const out = {};
|
|
5986
|
+
if (discarded === void 0) return out;
|
|
5987
|
+
for (const d of discarded) {
|
|
5988
|
+
if (d.reason !== "below-threshold") continue;
|
|
5989
|
+
addInto(out, d.macroClass, belowFloorBand(d.score), 1);
|
|
5990
|
+
}
|
|
5991
|
+
return out;
|
|
5992
|
+
}
|
|
5993
|
+
/** Per-device running sum between two stats reports. */
|
|
5994
|
+
var BelowFloorAccumulator = class {
|
|
5995
|
+
byDevice = /* @__PURE__ */ new Map();
|
|
5996
|
+
add(deviceId, tally) {
|
|
5997
|
+
const classes = Object.keys(tally);
|
|
5998
|
+
if (classes.length === 0) return;
|
|
5999
|
+
const into = this.byDevice.get(deviceId) ?? {};
|
|
6000
|
+
for (const macroClass of classes) {
|
|
6001
|
+
const row = tally[macroClass];
|
|
6002
|
+
if (row === void 0) continue;
|
|
6003
|
+
for (const band of BELOW_FLOOR_BANDS) {
|
|
6004
|
+
const n = row[band];
|
|
6005
|
+
if (n !== void 0 && n > 0) addInto(into, macroClass, band, n);
|
|
6006
|
+
}
|
|
6007
|
+
}
|
|
6008
|
+
this.byDevice.set(deviceId, into);
|
|
6009
|
+
}
|
|
6010
|
+
/** The sum since the last drain, and reset. `{}` is a measured zero. */
|
|
6011
|
+
drain(deviceId) {
|
|
6012
|
+
const out = this.byDevice.get(deviceId) ?? {};
|
|
6013
|
+
this.byDevice.delete(deviceId);
|
|
6014
|
+
return out;
|
|
6015
|
+
}
|
|
6016
|
+
};
|
|
5849
6017
|
var MotionWithoutInferenceDetector = class {
|
|
5850
6018
|
streak = /* @__PURE__ */ new Map();
|
|
5851
6019
|
reported = /* @__PURE__ */ new Set();
|
|
@@ -5910,6 +6078,8 @@ var PipelineTimingSampler = class {
|
|
|
5910
6078
|
droppedSources = /* @__PURE__ */ new Map();
|
|
5911
6079
|
/** Cumulative value seen at the previous report — the delta base. */
|
|
5912
6080
|
lastDroppedCumulative = /* @__PURE__ */ new Map();
|
|
6081
|
+
/** Boxes the operator's class floor dropped since the last report (D665). */
|
|
6082
|
+
belowFloor = new BelowFloorAccumulator();
|
|
5913
6083
|
reportTimer = null;
|
|
5914
6084
|
log = null;
|
|
5915
6085
|
runtimeInfo = {};
|
|
@@ -5929,6 +6099,7 @@ var PipelineTimingSampler = class {
|
|
|
5929
6099
|
addSample(deviceId, s) {
|
|
5930
6100
|
if (!this.detSamples.has(deviceId)) this.detSamples.set(deviceId, []);
|
|
5931
6101
|
this.detSamples.get(deviceId).push(s);
|
|
6102
|
+
if (s.belowFloor !== void 0) this.belowFloor.add(deviceId, s.belowFloor);
|
|
5932
6103
|
}
|
|
5933
6104
|
/**
|
|
5934
6105
|
* Moving average inference time (ms) per camera over the current
|
|
@@ -6030,6 +6201,7 @@ var PipelineTimingSampler = class {
|
|
|
6030
6201
|
p95: p95(inf)
|
|
6031
6202
|
},
|
|
6032
6203
|
detections: totalDet,
|
|
6204
|
+
belowFloor: this.belowFloor.drain(deviceId),
|
|
6033
6205
|
dropped,
|
|
6034
6206
|
pipelineRuntime: rt.pipelineRuntime ?? null,
|
|
6035
6207
|
pipelineModels: rt.pipelineModels ?? null
|
|
@@ -6853,7 +7025,8 @@ var PipelineRunner = class {
|
|
|
6853
7025
|
resultToEmit: emittedAt - inferDoneAt,
|
|
6854
7026
|
frameAge: typeof capturedAt === "number" && capturedAt > 0 ? pickedAt - capturedAt : -1,
|
|
6855
7027
|
endToEnd: emittedAt - enqueuedAt,
|
|
6856
|
-
detections: result.detections?.length ?? 0
|
|
7028
|
+
detections: result.detections?.length ?? 0,
|
|
7029
|
+
belowFloor: tallyBelowFloor(result.discarded)
|
|
6857
7030
|
});
|
|
6858
7031
|
} else frameReleaseReason = "drop";
|
|
6859
7032
|
} catch {
|
|
@@ -9682,7 +9855,8 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
9682
9855
|
runPipeline: (steps, imageJpeg, deviceId, deviceKey, nativeCropRef) => this.runDetailPipeline(steps, imageJpeg, deviceId, deviceKey, nativeCropRef),
|
|
9683
9856
|
placeStep: (deviceId, step) => this.placeDetailStepForCamera(deviceId, step),
|
|
9684
9857
|
resolveCropConvention: () => convention,
|
|
9685
|
-
logger: this.detailSubtreeLogger()
|
|
9858
|
+
logger: this.detailSubtreeLogger(),
|
|
9859
|
+
recordFaceOutsideParent: (drop) => this.faceOutsideParentLog.record(drop)
|
|
9686
9860
|
}, input);
|
|
9687
9861
|
if (outcome !== null && isDetailNotAttachedRefusal(outcome)) throw buildDetailNotAttachedError(input.deviceId);
|
|
9688
9862
|
return outcome;
|
|
@@ -9896,6 +10070,15 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
9896
10070
|
decodeCeilingInForce: this.liveWorkers?.ceiling
|
|
9897
10071
|
} });
|
|
9898
10072
|
}
|
|
10073
|
+
/** D662: faces the detail plane's geometry guard dropped, one line per camera per minute. */
|
|
10074
|
+
faceOutsideParentLog = new FaceOutsideParentLog({
|
|
10075
|
+
info: (message, extras) => this.ctxIfReady?.logger.info(message, extras),
|
|
10076
|
+
now: () => Date.now(),
|
|
10077
|
+
intervalMs: FACE_OUTSIDE_PARENT_LOG_INTERVAL_MS,
|
|
10078
|
+
schedule: (flush, delayMs) => {
|
|
10079
|
+
setTimeout(flush, delayMs).unref();
|
|
10080
|
+
}
|
|
10081
|
+
});
|
|
9899
10082
|
/** A warn sink that survives a not-yet-ready ctx (boot-order dispatches). */
|
|
9900
10083
|
detailSubtreeLogger() {
|
|
9901
10084
|
return { warn: (message, extras) => this.ctxIfReady?.logger.warn(message, extras) };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { An as lazy, At as pickDetailCropConvention, D as MOTION_CLOSE_AFTER_MS, Dn as array, En as _enum, In as string, Mn as number, Nn as object, Nt as pipelineRunnerCapability, O as NativeLeaseAdmissionSchema, On as boolean, Rn as EventCategory, en as errMsg, h as DEFAULT_DETAIL_CROP_CONVENTION, hn as defineCustomActions, i as BackgroundRunRegistry, jn as literal, jt as pickNativeLeaseOverride, k as NativeLeaseSettingsSchema, mn as customAction, nt as deriveDetailCropRect, pn as createEvent, pt as failureContributionCapability, sn as BaseAddon, v as DEFAULT_NATIVE_LEASE_SETTINGS, vt as loadContributionCapability, w as FailureCounters, xn as nodePin } from "../dist-
|
|
2
|
-
import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-
|
|
3
|
-
import { c as macroGateVerdict, d as resolveFrameViewGeometry, g as getStepDefinition, l as rootObjectGate, o as placeDetailStep, r as CustomModelCatalog, s as stepsForElectedPool, u as localFrameRegistry, v as RETIRED_MODEL_IDS } from "../default-detection-model-
|
|
1
|
+
import { An as lazy, At as pickDetailCropConvention, D as MOTION_CLOSE_AFTER_MS, Dn as array, En as _enum, In as string, Mn as number, Nn as object, Nt as pipelineRunnerCapability, O as NativeLeaseAdmissionSchema, On as boolean, Rn as EventCategory, en as errMsg, h as DEFAULT_DETAIL_CROP_CONVENTION, hn as defineCustomActions, i as BackgroundRunRegistry, jn as literal, jt as pickNativeLeaseOverride, k as NativeLeaseSettingsSchema, mn as customAction, nt as deriveDetailCropRect, pn as createEvent, pt as failureContributionCapability, sn as BaseAddon, v as DEFAULT_NATIVE_LEASE_SETTINGS, vt as loadContributionCapability, w as FailureCounters, xn as nodePin } from "../dist-CLZmZfHT.mjs";
|
|
2
|
+
import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
|
|
3
|
+
import { c as macroGateVerdict, d as resolveFrameViewGeometry, g as getStepDefinition, l as rootObjectGate, o as placeDetailStep, r as CustomModelCatalog, s as stepsForElectedPool, u as localFrameRegistry, v as RETIRED_MODEL_IDS } from "../default-detection-model-BroB5Jp1.mjs";
|
|
4
4
|
import { t as isWorkerReply } from "../worker-protocol-D_NzPcnh.mjs";
|
|
5
5
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
6
6
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
@@ -3696,6 +3696,87 @@ function buildDetailNotAttachedError(deviceId) {
|
|
|
3696
3696
|
return /* @__PURE__ */ new Error(`${DETAIL_NOT_ATTACHED_MARKER} — camera ${deviceId} is not attached and no detail state is parked within the grace window`);
|
|
3697
3697
|
}
|
|
3698
3698
|
//#endregion
|
|
3699
|
+
//#region src/pipeline-runner/face-parent-geometry.ts
|
|
3700
|
+
/** Is the centre of `face` inside `parent` (edges inclusive)? */
|
|
3701
|
+
function faceCentreInsideParent(face, parent) {
|
|
3702
|
+
const cx = face.x + face.w / 2;
|
|
3703
|
+
const cy = face.y + face.h / 2;
|
|
3704
|
+
return cx >= parent.x && cx <= parent.x + parent.w && cy >= parent.y && cy <= parent.y + parent.h;
|
|
3705
|
+
}
|
|
3706
|
+
/** The log line, one name for both the throttled and the fallback path. */
|
|
3707
|
+
var FACE_GUARD_UNAVAILABLE_MESSAGE = "face geometry guard cannot run on a caller-cut tile — its padding is unknown, the faces pass unjudged";
|
|
3708
|
+
var FACE_OUTSIDE_PARENT_MESSAGE = "face dropped — its centre is outside the person box (it was found in the crop padding)";
|
|
3709
|
+
/** The fields of a drop the log line carries. */
|
|
3710
|
+
function faceOutsideParentMeta(drop) {
|
|
3711
|
+
const round = (r) => ({
|
|
3712
|
+
x: Math.round(r.x),
|
|
3713
|
+
y: Math.round(r.y),
|
|
3714
|
+
w: Math.round(r.w),
|
|
3715
|
+
h: Math.round(r.h)
|
|
3716
|
+
});
|
|
3717
|
+
return {
|
|
3718
|
+
score: Number(drop.score.toFixed(4)),
|
|
3719
|
+
faceBbox: round(drop.faceBbox),
|
|
3720
|
+
parentBbox: round(drop.parentBbox)
|
|
3721
|
+
};
|
|
3722
|
+
}
|
|
3723
|
+
/** Default window: the dispatcher refreshes a face every second per track. */
|
|
3724
|
+
var FACE_OUTSIDE_PARENT_LOG_INTERVAL_MS = 6e4;
|
|
3725
|
+
/**
|
|
3726
|
+
* Per-camera, rate-limited announcement of dropped faces (D391: a branch that
|
|
3727
|
+
* drops work says so). The first drop on a camera is logged at once; drops
|
|
3728
|
+
* inside the window are held and emitted as ONE line carrying their count —
|
|
3729
|
+
* by the next drop after the window, or by a flush armed when the first one
|
|
3730
|
+
* was held, whichever comes first. Every drop is counted in exactly one line.
|
|
3731
|
+
*/
|
|
3732
|
+
var FaceOutsideParentLog = class {
|
|
3733
|
+
opts;
|
|
3734
|
+
lastLineAt = /* @__PURE__ */ new Map();
|
|
3735
|
+
heldBack = /* @__PURE__ */ new Map();
|
|
3736
|
+
flushArmed = /* @__PURE__ */ new Set();
|
|
3737
|
+
/** The latest held drop per camera — the example a flushed line shows. */
|
|
3738
|
+
lastHeld = /* @__PURE__ */ new Map();
|
|
3739
|
+
constructor(opts) {
|
|
3740
|
+
this.opts = opts;
|
|
3741
|
+
}
|
|
3742
|
+
record(drop) {
|
|
3743
|
+
const now = this.opts.now();
|
|
3744
|
+
const held = (this.heldBack.get(drop.deviceId) ?? 0) + 1;
|
|
3745
|
+
const last = this.lastLineAt.get(drop.deviceId);
|
|
3746
|
+
if (last !== void 0 && now - last < this.opts.intervalMs) {
|
|
3747
|
+
this.heldBack.set(drop.deviceId, held);
|
|
3748
|
+
this.lastHeld.set(drop.deviceId, drop);
|
|
3749
|
+
if (!this.flushArmed.has(drop.deviceId)) {
|
|
3750
|
+
this.flushArmed.add(drop.deviceId);
|
|
3751
|
+
this.opts.schedule(() => this.flush(drop.deviceId), last + this.opts.intervalMs - now);
|
|
3752
|
+
}
|
|
3753
|
+
return;
|
|
3754
|
+
}
|
|
3755
|
+
this.emit(drop, held, now);
|
|
3756
|
+
}
|
|
3757
|
+
/** Emit what a window held back, if anything; a no-op once already said. */
|
|
3758
|
+
flush(deviceId) {
|
|
3759
|
+
this.flushArmed.delete(deviceId);
|
|
3760
|
+
const held = this.heldBack.get(deviceId) ?? 0;
|
|
3761
|
+
const drop = this.lastHeld.get(deviceId);
|
|
3762
|
+
if (held === 0 || drop === void 0) return;
|
|
3763
|
+
this.emit(drop, held, this.opts.now());
|
|
3764
|
+
}
|
|
3765
|
+
emit(drop, count, now) {
|
|
3766
|
+
this.lastLineAt.set(drop.deviceId, now);
|
|
3767
|
+
this.heldBack.set(drop.deviceId, 0);
|
|
3768
|
+
this.flushArmed.delete(drop.deviceId);
|
|
3769
|
+
this.opts.info(FACE_OUTSIDE_PARENT_MESSAGE, {
|
|
3770
|
+
tags: { deviceId: drop.deviceId },
|
|
3771
|
+
meta: {
|
|
3772
|
+
...faceOutsideParentMeta(drop),
|
|
3773
|
+
droppedSinceLastLine: count,
|
|
3774
|
+
windowMs: this.opts.intervalMs
|
|
3775
|
+
}
|
|
3776
|
+
});
|
|
3777
|
+
}
|
|
3778
|
+
};
|
|
3779
|
+
//#endregion
|
|
3699
3780
|
//#region src/pipeline-runner/detail-subtree.ts
|
|
3700
3781
|
/** Did the subtree run refuse because the camera is not attached (park lapsed)? */
|
|
3701
3782
|
function isDetailNotAttachedRefusal(outcome) {
|
|
@@ -3705,6 +3786,8 @@ function isDetailNotAttachedRefusal(outcome) {
|
|
|
3705
3786
|
function isNativeCropMiss(fetch) {
|
|
3706
3787
|
return "miss" in fetch;
|
|
3707
3788
|
}
|
|
3789
|
+
/** The class the geometry guard judges — the face detector's output. */
|
|
3790
|
+
var FACE_CLASS = "face";
|
|
3708
3791
|
/** Normalize a frame-space pixel rect to `[0,1]` by the given frame dims. */
|
|
3709
3792
|
function normalizeRect(rect, frameWidth, frameHeight) {
|
|
3710
3793
|
return {
|
|
@@ -4006,14 +4089,45 @@ async function runDetailSubtree(deps, input) {
|
|
|
4006
4089
|
cropFrameSpace: crop.frameSpace
|
|
4007
4090
|
} : void 0;
|
|
4008
4091
|
const details = [];
|
|
4092
|
+
let unjudgedFaces = 0;
|
|
4009
4093
|
for (const step of steps) {
|
|
4010
4094
|
const placement = deps.placeStep?.(input.deviceId, step);
|
|
4011
4095
|
const result = await deps.runPipeline([placement?.step ?? step], crop.jpeg, input.deviceId, placement?.deviceKey, nativeCropRef);
|
|
4012
4096
|
if (!result) continue;
|
|
4013
|
-
for (const detection of result.detections)
|
|
4097
|
+
for (const detection of result.detections) {
|
|
4098
|
+
const detail = toDetailResult(detection, step.addonId, crop);
|
|
4099
|
+
if (detail.className === FACE_CLASS && crop.source === "fallback") unjudgedFaces += 1;
|
|
4100
|
+
else if (detail.className === FACE_CLASS && detail.bbox !== void 0 && !faceCentreInsideParent(detail.bbox, input.parent.bbox)) {
|
|
4101
|
+
announceFaceOutsideParent(deps, {
|
|
4102
|
+
deviceId: input.deviceId,
|
|
4103
|
+
score: detail.score,
|
|
4104
|
+
faceBbox: detail.bbox,
|
|
4105
|
+
parentBbox: input.parent.bbox
|
|
4106
|
+
});
|
|
4107
|
+
continue;
|
|
4108
|
+
}
|
|
4109
|
+
details.push(detail);
|
|
4110
|
+
}
|
|
4014
4111
|
}
|
|
4112
|
+
if (unjudgedFaces > 0) deps.logger.warn(FACE_GUARD_UNAVAILABLE_MESSAGE, {
|
|
4113
|
+
tags: { deviceId: input.deviceId },
|
|
4114
|
+
meta: {
|
|
4115
|
+
faces: unjudgedFaces,
|
|
4116
|
+
cropSource: crop.source
|
|
4117
|
+
}
|
|
4118
|
+
});
|
|
4015
4119
|
return { details };
|
|
4016
4120
|
}
|
|
4121
|
+
function announceFaceOutsideParent(deps, drop) {
|
|
4122
|
+
if (deps.recordFaceOutsideParent !== void 0) {
|
|
4123
|
+
deps.recordFaceOutsideParent(drop);
|
|
4124
|
+
return;
|
|
4125
|
+
}
|
|
4126
|
+
deps.logger.warn(FACE_OUTSIDE_PARENT_MESSAGE, {
|
|
4127
|
+
tags: { deviceId: drop.deviceId },
|
|
4128
|
+
meta: faceOutsideParentMeta(drop)
|
|
4129
|
+
});
|
|
4130
|
+
}
|
|
4017
4131
|
//#endregion
|
|
4018
4132
|
//#region src/pipeline-runner/device-load.ts
|
|
4019
4133
|
/** The backend prefix of a `<backend>:<device>` key (bare `cpu` → `cpu`). */
|
|
@@ -5838,6 +5952,60 @@ var Semaphore = class {
|
|
|
5838
5952
|
if (next) next();
|
|
5839
5953
|
}
|
|
5840
5954
|
};
|
|
5955
|
+
//#endregion
|
|
5956
|
+
//#region src/pipeline-runner/below-floor-tally.ts
|
|
5957
|
+
var BELOW_FLOOR_BANDS = [
|
|
5958
|
+
"<0.35",
|
|
5959
|
+
"0.35-0.50",
|
|
5960
|
+
"0.50-0.65",
|
|
5961
|
+
">=0.65"
|
|
5962
|
+
];
|
|
5963
|
+
function belowFloorBand(score) {
|
|
5964
|
+
if (score < .35) return "<0.35";
|
|
5965
|
+
if (score < .5) return "0.35-0.50";
|
|
5966
|
+
if (score < .65) return "0.50-0.65";
|
|
5967
|
+
return ">=0.65";
|
|
5968
|
+
}
|
|
5969
|
+
function addInto(into, macroClass, band, n) {
|
|
5970
|
+
const row = into[macroClass] ?? {};
|
|
5971
|
+
row[band] = (row[band] ?? 0) + n;
|
|
5972
|
+
into[macroClass] = row;
|
|
5973
|
+
}
|
|
5974
|
+
/** One frame's `below-threshold` discards, tallied. Other reasons are not the
|
|
5975
|
+
* floor's doing and are not counted here. */
|
|
5976
|
+
function tallyBelowFloor(discarded) {
|
|
5977
|
+
const out = {};
|
|
5978
|
+
if (discarded === void 0) return out;
|
|
5979
|
+
for (const d of discarded) {
|
|
5980
|
+
if (d.reason !== "below-threshold") continue;
|
|
5981
|
+
addInto(out, d.macroClass, belowFloorBand(d.score), 1);
|
|
5982
|
+
}
|
|
5983
|
+
return out;
|
|
5984
|
+
}
|
|
5985
|
+
/** Per-device running sum between two stats reports. */
|
|
5986
|
+
var BelowFloorAccumulator = class {
|
|
5987
|
+
byDevice = /* @__PURE__ */ new Map();
|
|
5988
|
+
add(deviceId, tally) {
|
|
5989
|
+
const classes = Object.keys(tally);
|
|
5990
|
+
if (classes.length === 0) return;
|
|
5991
|
+
const into = this.byDevice.get(deviceId) ?? {};
|
|
5992
|
+
for (const macroClass of classes) {
|
|
5993
|
+
const row = tally[macroClass];
|
|
5994
|
+
if (row === void 0) continue;
|
|
5995
|
+
for (const band of BELOW_FLOOR_BANDS) {
|
|
5996
|
+
const n = row[band];
|
|
5997
|
+
if (n !== void 0 && n > 0) addInto(into, macroClass, band, n);
|
|
5998
|
+
}
|
|
5999
|
+
}
|
|
6000
|
+
this.byDevice.set(deviceId, into);
|
|
6001
|
+
}
|
|
6002
|
+
/** The sum since the last drain, and reset. `{}` is a measured zero. */
|
|
6003
|
+
drain(deviceId) {
|
|
6004
|
+
const out = this.byDevice.get(deviceId) ?? {};
|
|
6005
|
+
this.byDevice.delete(deviceId);
|
|
6006
|
+
return out;
|
|
6007
|
+
}
|
|
6008
|
+
};
|
|
5841
6009
|
var MotionWithoutInferenceDetector = class {
|
|
5842
6010
|
streak = /* @__PURE__ */ new Map();
|
|
5843
6011
|
reported = /* @__PURE__ */ new Set();
|
|
@@ -5902,6 +6070,8 @@ var PipelineTimingSampler = class {
|
|
|
5902
6070
|
droppedSources = /* @__PURE__ */ new Map();
|
|
5903
6071
|
/** Cumulative value seen at the previous report — the delta base. */
|
|
5904
6072
|
lastDroppedCumulative = /* @__PURE__ */ new Map();
|
|
6073
|
+
/** Boxes the operator's class floor dropped since the last report (D665). */
|
|
6074
|
+
belowFloor = new BelowFloorAccumulator();
|
|
5905
6075
|
reportTimer = null;
|
|
5906
6076
|
log = null;
|
|
5907
6077
|
runtimeInfo = {};
|
|
@@ -5921,6 +6091,7 @@ var PipelineTimingSampler = class {
|
|
|
5921
6091
|
addSample(deviceId, s) {
|
|
5922
6092
|
if (!this.detSamples.has(deviceId)) this.detSamples.set(deviceId, []);
|
|
5923
6093
|
this.detSamples.get(deviceId).push(s);
|
|
6094
|
+
if (s.belowFloor !== void 0) this.belowFloor.add(deviceId, s.belowFloor);
|
|
5924
6095
|
}
|
|
5925
6096
|
/**
|
|
5926
6097
|
* Moving average inference time (ms) per camera over the current
|
|
@@ -6022,6 +6193,7 @@ var PipelineTimingSampler = class {
|
|
|
6022
6193
|
p95: p95(inf)
|
|
6023
6194
|
},
|
|
6024
6195
|
detections: totalDet,
|
|
6196
|
+
belowFloor: this.belowFloor.drain(deviceId),
|
|
6025
6197
|
dropped,
|
|
6026
6198
|
pipelineRuntime: rt.pipelineRuntime ?? null,
|
|
6027
6199
|
pipelineModels: rt.pipelineModels ?? null
|
|
@@ -6845,7 +7017,8 @@ var PipelineRunner = class {
|
|
|
6845
7017
|
resultToEmit: emittedAt - inferDoneAt,
|
|
6846
7018
|
frameAge: typeof capturedAt === "number" && capturedAt > 0 ? pickedAt - capturedAt : -1,
|
|
6847
7019
|
endToEnd: emittedAt - enqueuedAt,
|
|
6848
|
-
detections: result.detections?.length ?? 0
|
|
7020
|
+
detections: result.detections?.length ?? 0,
|
|
7021
|
+
belowFloor: tallyBelowFloor(result.discarded)
|
|
6849
7022
|
});
|
|
6850
7023
|
} else frameReleaseReason = "drop";
|
|
6851
7024
|
} catch {
|
|
@@ -9674,7 +9847,8 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
9674
9847
|
runPipeline: (steps, imageJpeg, deviceId, deviceKey, nativeCropRef) => this.runDetailPipeline(steps, imageJpeg, deviceId, deviceKey, nativeCropRef),
|
|
9675
9848
|
placeStep: (deviceId, step) => this.placeDetailStepForCamera(deviceId, step),
|
|
9676
9849
|
resolveCropConvention: () => convention,
|
|
9677
|
-
logger: this.detailSubtreeLogger()
|
|
9850
|
+
logger: this.detailSubtreeLogger(),
|
|
9851
|
+
recordFaceOutsideParent: (drop) => this.faceOutsideParentLog.record(drop)
|
|
9678
9852
|
}, input);
|
|
9679
9853
|
if (outcome !== null && isDetailNotAttachedRefusal(outcome)) throw buildDetailNotAttachedError(input.deviceId);
|
|
9680
9854
|
return outcome;
|
|
@@ -9888,6 +10062,15 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
9888
10062
|
decodeCeilingInForce: this.liveWorkers?.ceiling
|
|
9889
10063
|
} });
|
|
9890
10064
|
}
|
|
10065
|
+
/** D662: faces the detail plane's geometry guard dropped, one line per camera per minute. */
|
|
10066
|
+
faceOutsideParentLog = new FaceOutsideParentLog({
|
|
10067
|
+
info: (message, extras) => this.ctxIfReady?.logger.info(message, extras),
|
|
10068
|
+
now: () => Date.now(),
|
|
10069
|
+
intervalMs: FACE_OUTSIDE_PARENT_LOG_INTERVAL_MS,
|
|
10070
|
+
schedule: (flush, delayMs) => {
|
|
10071
|
+
setTimeout(flush, delayMs).unref();
|
|
10072
|
+
}
|
|
10073
|
+
});
|
|
9891
10074
|
/** A warn sink that survives a not-yet-ready ctx (boot-order dispatches). */
|
|
9892
10075
|
detailSubtreeLogger() {
|
|
9893
10076
|
return { warn: (message, extras) => this.ctxIfReady?.logger.warn(message, extras) };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-CyWAhtbJ.js");
|
|
3
3
|
let node_fs = require("node:fs");
|
|
4
4
|
node_fs = require_chunk.__toESM(node_fs);
|
|
5
5
|
let node_child_process = require("node:child_process");
|
package/dist/recorder/index.js
CHANGED
|
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_node = require("../node-
|
|
6
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
7
|
+
const require_node = require("../node-BDrkzYiH.js");
|
|
8
8
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
9
9
|
const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
|
|
10
10
|
const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
|
package/dist/recorder/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as OpsLogEntrySchema, B as VIDEOCLIPS_MAX_OFFER_BYTES, Bt as resolveCreateExportSubject, C as ExportRecordSchema, Ct as mayWriteToLocation, Dn as array, En as _enum, F as RECORDING_SOURCE_CAMSTACK, Fn as record, Ft as recordingArchiveCapability, Ht as resolveLocationMode, I as RECORDING_SOURCE_CAMSTACK_ADDON, In as string, It as recordingCapability, Jt as storageOccupancyCapability, L as RecordingConfigSchema, Lt as recordingExportCapability, Mn as number, Nn as object, On as boolean, P as RECORDING_EXPORT_MAX_READ_BYTES, Pn as preprocess, Qt as videoclipsCapability, R as RecordingSignalStatusSchema, Rn as EventCategory, Rt as recordingSignalCapability, St as mayReadLocation, Tn as sleep$1, Tt as modeMayWrite, V as VISIT_MERGE_GAP_MS, Wt as resolveRecordingProfiles, X as clipExportFailureOf, Xt as stripRetiredBandPreBufferSec, Y as clipExportFailure, _n as hydrateSchema, _t as isFirstLevelMacroClass, a as BatteryStatusSchema, b as EVENT_OWNER_TYPES, ct as evaluateSensorEdge, dn as DeviceType, dt as evictionPolicyOfLocation, en as errMsg, ft as exportSubjectOf, g as DEFAULT_EVENTS_BAND_BUFFER_SEC, hn as defineCustomActions, mn as customAction, mt as gbToBytes, o as CLIP_BROKER_PACED_RATES, q as batteryCapability, qt as storageEvictableCapability, rt as deriveRecordingMode, sn as BaseAddon, tt as deriveBatteryPresence, un as DeviceFeature, ut as evictionPolicyForMode, vt as loadContributionCapability, wn as selectAssignedProfileSlots, wt as migrateLegacyDeviceSignalConfig, x as EVENT_PAD_MS, xn as nodePin } from "../dist-
|
|
2
|
-
import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-
|
|
1
|
+
import { A as OpsLogEntrySchema, B as VIDEOCLIPS_MAX_OFFER_BYTES, Bt as resolveCreateExportSubject, C as ExportRecordSchema, Ct as mayWriteToLocation, Dn as array, En as _enum, F as RECORDING_SOURCE_CAMSTACK, Fn as record, Ft as recordingArchiveCapability, Ht as resolveLocationMode, I as RECORDING_SOURCE_CAMSTACK_ADDON, In as string, It as recordingCapability, Jt as storageOccupancyCapability, L as RecordingConfigSchema, Lt as recordingExportCapability, Mn as number, Nn as object, On as boolean, P as RECORDING_EXPORT_MAX_READ_BYTES, Pn as preprocess, Qt as videoclipsCapability, R as RecordingSignalStatusSchema, Rn as EventCategory, Rt as recordingSignalCapability, St as mayReadLocation, Tn as sleep$1, Tt as modeMayWrite, V as VISIT_MERGE_GAP_MS, Wt as resolveRecordingProfiles, X as clipExportFailureOf, Xt as stripRetiredBandPreBufferSec, Y as clipExportFailure, _n as hydrateSchema, _t as isFirstLevelMacroClass, a as BatteryStatusSchema, b as EVENT_OWNER_TYPES, ct as evaluateSensorEdge, dn as DeviceType, dt as evictionPolicyOfLocation, en as errMsg, ft as exportSubjectOf, g as DEFAULT_EVENTS_BAND_BUFFER_SEC, hn as defineCustomActions, mn as customAction, mt as gbToBytes, o as CLIP_BROKER_PACED_RATES, q as batteryCapability, qt as storageEvictableCapability, rt as deriveRecordingMode, sn as BaseAddon, tt as deriveBatteryPresence, un as DeviceFeature, ut as evictionPolicyForMode, vt as loadContributionCapability, wn as selectAssignedProfileSlots, wt as migrateLegacyDeviceSignalConfig, x as EVENT_PAD_MS, xn as nodePin } from "../dist-CLZmZfHT.mjs";
|
|
2
|
+
import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
|
|
3
3
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
4
4
|
import { d as PREBUFFER_MAX_MS, l as withRecordingIntent, r as RECORDING_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
|
|
5
5
|
import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { en as errMsg } from "./dist-
|
|
2
|
+
import { en as errMsg } from "./dist-CLZmZfHT.mjs";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
//#region src/stream-broker/recorded/avcc-annexb.ts
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-CyWAhtbJ.js");
|
|
3
3
|
let node_child_process = require("node:child_process");
|
|
4
4
|
//#region src/stream-broker/recorded/avcc-annexb.ts
|
|
5
5
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_segment_demux_js = require("../segment-demux-js-
|
|
1
|
+
const require_segment_demux_js = require("../segment-demux-js-CwQuMR0h.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-
|
|
1
|
+
import { t as demuxSegmentFullJs } from "../segment-demux-js-BUxZFqkb.mjs";
|
|
2
2
|
import { parentPort } from "node:worker_threads";
|
|
3
3
|
//#region src/stream-broker/recorded/demux-worker-child.ts
|
|
4
4
|
/**
|
|
@@ -3,12 +3,12 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_node = require("../node-
|
|
6
|
+
const require_dist = require("../dist-CyWAhtbJ.js");
|
|
7
|
+
const require_node = require("../node-BDrkzYiH.js");
|
|
8
8
|
const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
|
|
9
9
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
10
10
|
const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
|
|
11
|
-
const require_segment_demux_js = require("../segment-demux-js-
|
|
11
|
+
const require_segment_demux_js = require("../segment-demux-js-CwQuMR0h.js");
|
|
12
12
|
let node_os = require("node:os");
|
|
13
13
|
node_os = require_chunk.__toESM(node_os);
|
|
14
14
|
let node_crypto = require("node:crypto");
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { r as __toESM } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $ as declareLogChannel, $t as webrtcSessionCapability, Cn as parseProfileBrokerId, Dn as array, En as _enum, Fn as record, In as string, J as cameraStreamsCapability, Ln as union, M as RATE_CONTROL_RELAXED, Mn as number, N as RATE_CONTROL_TIGHT, Nn as object, On as boolean, Pt as rankStreams, Q as createLogChannelsProvider, Rn as EventCategory, S as EncodeProfileSchema, T as G711_SCALE_CORRECTION_DB, U as addonWidgetsSourceCapability, Vt as resolveEgressDecodeHwAccel, X as clipExportFailureOf, Yt as streamBrokerCapability, Z as createHwAccelCache, a as BatteryStatusSchema, an as isSoftwareDecode, at as egressTranscodeSharingKey, bn as makeSourceBrokerId, cn as CAM_PROFILE_ORDER, dn as DeviceType, en as errMsg, gn as expandAudioChunkToF32le, in as invocationFromEncodeProfile, jn as literal, kn as discriminatedUnion, ln as CamProfileSchema, o as CLIP_BROKER_PACED_RATES, on as BOOT_RECOVERY_BACKOFF_MS, ot as egressTransportFromRequest, pn as createEvent, q as batteryCapability, rn as buildFfmpegArgs$1, s as CLIP_STILL_REASON_CODE_HEADER, sn as BaseAddon, tn as AUDIO_PRESETS, tt as deriveBatteryPresence, un as DeviceFeature, vn as isEvent, vt as loadContributionCapability, xn as nodePin, xt as maskUrlCredentials, yn as makeProfileBrokerId, yt as logChannelsCapability, z as RingBuffer } from "../dist-
|
|
3
|
-
import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-
|
|
2
|
+
import { $ as declareLogChannel, $t as webrtcSessionCapability, Cn as parseProfileBrokerId, Dn as array, En as _enum, Fn as record, In as string, J as cameraStreamsCapability, Ln as union, M as RATE_CONTROL_RELAXED, Mn as number, N as RATE_CONTROL_TIGHT, Nn as object, On as boolean, Pt as rankStreams, Q as createLogChannelsProvider, Rn as EventCategory, S as EncodeProfileSchema, T as G711_SCALE_CORRECTION_DB, U as addonWidgetsSourceCapability, Vt as resolveEgressDecodeHwAccel, X as clipExportFailureOf, Yt as streamBrokerCapability, Z as createHwAccelCache, a as BatteryStatusSchema, an as isSoftwareDecode, at as egressTranscodeSharingKey, bn as makeSourceBrokerId, cn as CAM_PROFILE_ORDER, dn as DeviceType, en as errMsg, gn as expandAudioChunkToF32le, in as invocationFromEncodeProfile, jn as literal, kn as discriminatedUnion, ln as CamProfileSchema, o as CLIP_BROKER_PACED_RATES, on as BOOT_RECOVERY_BACKOFF_MS, ot as egressTransportFromRequest, pn as createEvent, q as batteryCapability, rn as buildFfmpegArgs$1, s as CLIP_STILL_REASON_CODE_HEADER, sn as BaseAddon, tn as AUDIO_PRESETS, tt as deriveBatteryPresence, un as DeviceFeature, vn as isEvent, vt as loadContributionCapability, xn as nodePin, xt as maskUrlCredentials, yn as makeProfileBrokerId, yt as logChannelsCapability, z as RingBuffer } from "../dist-CLZmZfHT.mjs";
|
|
3
|
+
import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
|
|
4
4
|
import { a as parseRestreamPath, d as PREBUFFER_MAX_MS, f as capPreRollRequestMs, i as isLiveEdgeOnlyDial, m as resolvePrebuffer, n as NO_DECLARATION, p as prebufferRetentionMs, s as sdpVariantFor, u as withSentryIntent } from "../restream-intent-DyGmLAU9.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-DZvlso2l.mjs";
|
|
7
|
-
import { a as avccSampleToAnnexB, i as require_mp4box_all, n as demuxSegmentPreferJs, o as buildKeyframeAnnexB, r as runFfmpegOnce, s as parseNalLengthSize, t as demuxSegmentFullJs } from "../segment-demux-js-
|
|
7
|
+
import { a as avccSampleToAnnexB, i as require_mp4box_all, n as demuxSegmentPreferJs, o as buildKeyframeAnnexB, r as runFfmpegOnce, s as parseNalLengthSize, t as demuxSegmentFullJs } from "../segment-demux-js-BUxZFqkb.mjs";
|
|
8
8
|
import { createRequire } from "node:module";
|
|
9
9
|
import * as os from "node:os";
|
|
10
10
|
import { networkInterfaces, tmpdir } from "node:os";
|
|
@@ -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-
|
|
33
|
+
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DFaPx_Ot.mjs")).catch((e) => {
|
|
34
34
|
throw l = void 0, e;
|
|
35
35
|
}), l;
|
|
36
36
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-pipeline",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.302",
|
|
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",
|