@camstack/addon-pipeline 1.2.206 → 1.2.208
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-C_v4levg.mjs → default-detection-model-DfmcDBIm.mjs} +24 -17
- package/dist/{default-detection-model-CcDkPxU8.js → default-detection-model-ek75H1Yj.js} +24 -17
- package/dist/detection-pipeline/index.js +5 -5
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-CNPNWUoG.js → dist-CUUP49yp.js} +36 -6
- package/dist/{dist-DrKpb33H.mjs → dist-CYompTw6.mjs} +36 -6
- package/dist/{lazy-sharp-BW3zCwk0.js → lazy-sharp-DAqWm2BA.js} +1 -1
- package/dist/motion-wasm/index.js +2 -2
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-C6B8HJW_.mjs → node-CsUM83SY.mjs} +1 -1
- package/dist/{node-h-nvNfmU.js → node-GSkYMYiq.js} +1 -1
- package/dist/pipeline-runner/index.js +508 -239
- package/dist/pipeline-runner/index.mjs +507 -238
- package/dist/{process-memory-DL51Hzcr.js → process-memory-BhS8bHn-.js} +1 -1
- package/dist/{process-memory-C1F0SJcc.mjs → process-memory-C1WYLWdb.mjs} +1 -1
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +2 -2
- package/dist/{segment-demux-js-BidvAwag.js → segment-demux-js-BhSnJr8p.js} +1 -1
- package/dist/{segment-demux-js-BgaS1a5g.mjs → segment-demux-js-DSFT4Ql3.mjs} +1 -1
- package/dist/session-decode/decode-worker-child.js +2 -2
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BjZ2kba0.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-jaoXYGoM.mjs} +3 -3
- 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-C8APD5CI.mjs → hostInit-CvqJdfBZ.mjs} +3 -3
- 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/dist/{worker-protocol-C3cr5_6w.js → worker-protocol-CwZ5iG35.js} +1 -1
- package/dist/{worker-protocol-D3HMNvw_.mjs → worker-protocol-qfppS7pb.mjs} +1 -1
- package/package.json +1 -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-
|
|
6
|
-
const require_process_memory = require("../process-memory-
|
|
5
|
+
const require_dist = require("../dist-CUUP49yp.js");
|
|
6
|
+
const require_process_memory = require("../process-memory-BhS8bHn-.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 { Dt as resolvePoolMemoryPolicy, It as errMsg, Jt as hydrateSchema, M as audioAnalyzerCapability, S as PoolMemoryWatchdog, Ut as BaseAddon, j as audioAnalysisCapability, n as AUDIO_BACKEND_CHOICES, ot as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL } from "../dist-
|
|
3
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
2
|
+
import { Dt as resolvePoolMemoryPolicy, It as errMsg, Jt as hydrateSchema, M as audioAnalyzerCapability, S as PoolMemoryWatchdog, Ut as BaseAddon, j as audioAnalysisCapability, n as AUDIO_BACKEND_CHOICES, ot as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL } from "../dist-CYompTw6.mjs";
|
|
3
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-C1WYLWdb.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,21 @@
|
|
|
1
|
-
import { N as audioKindId, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS, tt as hfModelUrl } from "./dist-
|
|
1
|
+
import { N as audioKindId, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS, tt as hfModelUrl } from "./dist-CYompTw6.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
+
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
4
|
+
/**
|
|
5
|
+
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
6
|
+
* name them in a log. Pure.
|
|
7
|
+
*/
|
|
8
|
+
function landmarkPrecisionVerdict(input) {
|
|
9
|
+
const { detectionShortSidePx, floorPx } = input;
|
|
10
|
+
if (!(floorPx > 0)) return null;
|
|
11
|
+
if (!Number.isFinite(detectionShortSidePx)) return null;
|
|
12
|
+
if (detectionShortSidePx >= floorPx) return null;
|
|
13
|
+
return {
|
|
14
|
+
detectionShortSidePx,
|
|
15
|
+
floorPx
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
3
19
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
4
20
|
var HF_REPO = "camstack/camstack-models";
|
|
5
21
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -1219,22 +1235,6 @@ var AUDIO_CLASSIFIER_MODELS = [{
|
|
|
1219
1235
|
} }
|
|
1220
1236
|
}];
|
|
1221
1237
|
//#endregion
|
|
1222
|
-
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
1223
|
-
/**
|
|
1224
|
-
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
1225
|
-
* name them in a log. Pure.
|
|
1226
|
-
*/
|
|
1227
|
-
function landmarkPrecisionVerdict(input) {
|
|
1228
|
-
const { detectionShortSidePx, floorPx } = input;
|
|
1229
|
-
if (!(floorPx > 0)) return null;
|
|
1230
|
-
if (!Number.isFinite(detectionShortSidePx)) return null;
|
|
1231
|
-
if (detectionShortSidePx >= floorPx) return null;
|
|
1232
|
-
return {
|
|
1233
|
-
detectionShortSidePx,
|
|
1234
|
-
floorPx
|
|
1235
|
-
};
|
|
1236
|
-
}
|
|
1237
|
-
//#endregion
|
|
1238
1238
|
//#region src/detection-pipeline/registry/step-definitions.ts
|
|
1239
1239
|
var ANIMAL_10_LABELS = [
|
|
1240
1240
|
"cat",
|
|
@@ -1380,6 +1380,13 @@ var ObjectDetectionStep = class {
|
|
|
1380
1380
|
default: .5,
|
|
1381
1381
|
showValue: true
|
|
1382
1382
|
},
|
|
1383
|
+
{
|
|
1384
|
+
type: "boolean",
|
|
1385
|
+
key: "motionCropDispatch",
|
|
1386
|
+
label: "Detect on motion-derived crops",
|
|
1387
|
+
description: "Run the second detector pass on EVERY moving region instead of only on regions no full-frame box accounts for. Additive: the full-frame pass still runs, and it stays the only arm that can see a stationary subject. Costs about one extra detector invocation every four frames while something is moving.",
|
|
1388
|
+
default: false
|
|
1389
|
+
},
|
|
1383
1390
|
{
|
|
1384
1391
|
type: "slider",
|
|
1385
1392
|
key: "nmsIouThreshold",
|
|
@@ -1,5 +1,21 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
1
|
+
const require_dist = require("./dist-CUUP49yp.js");
|
|
2
2
|
let node_crypto = require("node:crypto");
|
|
3
|
+
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
4
|
+
/**
|
|
5
|
+
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
6
|
+
* name them in a log. Pure.
|
|
7
|
+
*/
|
|
8
|
+
function landmarkPrecisionVerdict(input) {
|
|
9
|
+
const { detectionShortSidePx, floorPx } = input;
|
|
10
|
+
if (!(floorPx > 0)) return null;
|
|
11
|
+
if (!Number.isFinite(detectionShortSidePx)) return null;
|
|
12
|
+
if (detectionShortSidePx >= floorPx) return null;
|
|
13
|
+
return {
|
|
14
|
+
detectionShortSidePx,
|
|
15
|
+
floorPx
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
3
19
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
4
20
|
var HF_REPO = "camstack/camstack-models";
|
|
5
21
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -1219,22 +1235,6 @@ var AUDIO_CLASSIFIER_MODELS = [{
|
|
|
1219
1235
|
} }
|
|
1220
1236
|
}];
|
|
1221
1237
|
//#endregion
|
|
1222
|
-
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
1223
|
-
/**
|
|
1224
|
-
* `null` = admit. A verdict = refuse, carrying both numbers so the caller can
|
|
1225
|
-
* name them in a log. Pure.
|
|
1226
|
-
*/
|
|
1227
|
-
function landmarkPrecisionVerdict(input) {
|
|
1228
|
-
const { detectionShortSidePx, floorPx } = input;
|
|
1229
|
-
if (!(floorPx > 0)) return null;
|
|
1230
|
-
if (!Number.isFinite(detectionShortSidePx)) return null;
|
|
1231
|
-
if (detectionShortSidePx >= floorPx) return null;
|
|
1232
|
-
return {
|
|
1233
|
-
detectionShortSidePx,
|
|
1234
|
-
floorPx
|
|
1235
|
-
};
|
|
1236
|
-
}
|
|
1237
|
-
//#endregion
|
|
1238
1238
|
//#region src/detection-pipeline/registry/step-definitions.ts
|
|
1239
1239
|
var ANIMAL_10_LABELS = [
|
|
1240
1240
|
"cat",
|
|
@@ -1380,6 +1380,13 @@ var ObjectDetectionStep = class {
|
|
|
1380
1380
|
default: .5,
|
|
1381
1381
|
showValue: true
|
|
1382
1382
|
},
|
|
1383
|
+
{
|
|
1384
|
+
type: "boolean",
|
|
1385
|
+
key: "motionCropDispatch",
|
|
1386
|
+
label: "Detect on motion-derived crops",
|
|
1387
|
+
description: "Run the second detector pass on EVERY moving region instead of only on regions no full-frame box accounts for. Additive: the full-frame pass still runs, and it stays the only arm that can see a stationary subject. Costs about one extra detector invocation every four frames while something is moving.",
|
|
1388
|
+
default: false
|
|
1389
|
+
},
|
|
1383
1390
|
{
|
|
1384
1391
|
type: "slider",
|
|
1385
1392
|
key: "nmsIouThreshold",
|
|
@@ -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-
|
|
6
|
-
const require_node = require("../node-
|
|
7
|
-
const require_default_detection_model = require("../default-detection-model-
|
|
8
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
5
|
+
const require_dist = require("../dist-CUUP49yp.js");
|
|
6
|
+
const require_node = require("../node-GSkYMYiq.js");
|
|
7
|
+
const require_default_detection_model = require("../default-detection-model-ek75H1Yj.js");
|
|
8
|
+
const require_lazy_sharp = require("../lazy-sharp-DAqWm2BA.js");
|
|
9
9
|
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
|
|
10
|
-
const require_process_memory = require("../process-memory-
|
|
10
|
+
const require_process_memory = require("../process-memory-BhS8bHn-.js");
|
|
11
11
|
let node_os = require("node:os");
|
|
12
12
|
node_os = require_dist.__toESM(node_os);
|
|
13
13
|
let node_fs = require("node:fs");
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $t as parseJsonUnknown, B as defaultDeviceFor$1, Dt as resolvePoolMemoryPolicy, G as detectionPipelineCapability, It as errMsg, J as enumerateInferenceDevices, Jt as hydrateSchema, Pt as supportedRuntimes$1, Qt as nodePin, S as PoolMemoryWatchdog, Ut as BaseAddon, X as evaluateZoneRules, c as DEFAULT_CLUSTER_STEP_MODELS, gt as pickClusterStepSettings, hn as EventCategory, ht as pickClusterStepModels, in as array, it as loadContributionCapability, k as YAMNET_TO_MACRO, kt as runtimeDevices$1, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, mn as union, nn as sleep, nt as inferModelProvider, pn as string, pt as overlayClusterStepSettings, qt as createEvent, t as APPLE_SA_TO_MACRO, un as object, wt as resolveClusterStepModelId, yt as pipelineExecutorCapability } from "../dist-
|
|
3
|
-
import { o as readProcessCost } from "../node-
|
|
4
|
-
import { a as ALL_PIPELINE_STEPS, c as getStep, d as landmarkPrecisionVerdict, l as getStepDefinition, n as resolveDefaultDetectionModel, o as ALL_STEPS, r as localFrameRegistry, s as getDefaultModelForFormat, u as resolveModelForFormat } from "../default-detection-model-
|
|
2
|
+
import { $t as parseJsonUnknown, B as defaultDeviceFor$1, Dt as resolvePoolMemoryPolicy, G as detectionPipelineCapability, It as errMsg, J as enumerateInferenceDevices, Jt as hydrateSchema, Pt as supportedRuntimes$1, Qt as nodePin, S as PoolMemoryWatchdog, Ut as BaseAddon, X as evaluateZoneRules, c as DEFAULT_CLUSTER_STEP_MODELS, gt as pickClusterStepSettings, hn as EventCategory, ht as pickClusterStepModels, in as array, it as loadContributionCapability, k as YAMNET_TO_MACRO, kt as runtimeDevices$1, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, mn as union, nn as sleep, nt as inferModelProvider, pn as string, pt as overlayClusterStepSettings, qt as createEvent, t as APPLE_SA_TO_MACRO, un as object, wt as resolveClusterStepModelId, yt as pipelineExecutorCapability } from "../dist-CYompTw6.mjs";
|
|
3
|
+
import { o as readProcessCost } from "../node-CsUM83SY.mjs";
|
|
4
|
+
import { a as ALL_PIPELINE_STEPS, c as getStep, d as landmarkPrecisionVerdict, l as getStepDefinition, n as resolveDefaultDetectionModel, o as ALL_STEPS, r as localFrameRegistry, s as getDefaultModelForFormat, u as resolveModelForFormat } from "../default-detection-model-DfmcDBIm.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-
|
|
7
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-C1WYLWdb.mjs";
|
|
8
8
|
import * as os from "node:os";
|
|
9
9
|
import * as fs from "node:fs";
|
|
10
10
|
import * as path$1 from "node:path";
|
|
@@ -21115,11 +21115,30 @@ var SensorEventSchema = object({
|
|
|
21115
21115
|
value: record(string(), unknown()).nullable(),
|
|
21116
21116
|
timestamp: number()
|
|
21117
21117
|
});
|
|
21118
|
+
/**
|
|
21119
|
+
* One stored sighting on a track's trajectory.
|
|
21120
|
+
*
|
|
21121
|
+
* The array these live in is returned in TIME order (D399) — it is APPENDED in
|
|
21122
|
+
* arrival order, and the two detector passes interleave, so a consumer must not
|
|
21123
|
+
* assume the two are the same on a row written by an older build.
|
|
21124
|
+
*/
|
|
21118
21125
|
var TrackPositionSchema = object({
|
|
21119
21126
|
x: number(),
|
|
21120
21127
|
y: number(),
|
|
21121
21128
|
timestamp: number(),
|
|
21122
|
-
bbox: BoundingBoxSchema
|
|
21129
|
+
bbox: BoundingBoxSchema,
|
|
21130
|
+
/**
|
|
21131
|
+
* Which detector pass measured this box (D399): `frame` is the full-frame
|
|
21132
|
+
* pass on the analysis raster, `recovery` is the native-resolution
|
|
21133
|
+
* small-subject second pass (D377/D378). Both write into one array, and until
|
|
21134
|
+
* this field existed the only way to tell them apart was that full-frame boxes
|
|
21135
|
+
* are exact multiples of 1.2 while recovery boxes are full-precision floats.
|
|
21136
|
+
* Absent on rows written before D399.
|
|
21137
|
+
*/
|
|
21138
|
+
source: _enum(["frame", "recovery"]).optional(),
|
|
21139
|
+
/** Detection score of this box, so a position can be weighed and not only
|
|
21140
|
+
* plotted. Absent on rows written before D399. */
|
|
21141
|
+
score: number().optional()
|
|
21123
21142
|
});
|
|
21124
21143
|
var TrackSnapshotSchema = object({
|
|
21125
21144
|
timestamp: number(),
|
|
@@ -21519,14 +21538,25 @@ var TrackSchema = object({
|
|
|
21519
21538
|
*/
|
|
21520
21539
|
hasRider: boolean().optional(),
|
|
21521
21540
|
/**
|
|
21522
|
-
* WHY this track ended without a NATIVE best-shot
|
|
21523
|
-
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)
|
|
21541
|
+
* WHY this track ended without a NATIVE best-shot FRAME
|
|
21542
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md),
|
|
21543
|
+
* widened by [D400](../decisions/adr-0400-the-picture-is-judged-on-what-is-delivered.md)) —
|
|
21524
21544
|
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
21525
|
-
* `derive-returned-null tile=standin`,
|
|
21526
|
-
*
|
|
21527
|
-
*
|
|
21545
|
+
* `derive-returned-null tile=standin`,
|
|
21546
|
+
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
21547
|
+
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
21548
|
+
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
21528
21549
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
21529
21550
|
*
|
|
21551
|
+
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
21552
|
+
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
21553
|
+
* while its key frame missed carried no reason at all — three of the four
|
|
21554
|
+
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
21555
|
+
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
21556
|
+
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
21557
|
+
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
21558
|
+
* tile ended up being.
|
|
21559
|
+
*
|
|
21530
21560
|
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
21531
21561
|
* that predates the field, and every track whose tile landed native all
|
|
21532
21562
|
* omit it. Render nothing when absent.
|
|
@@ -21092,11 +21092,30 @@ var SensorEventSchema = object({
|
|
|
21092
21092
|
value: record(string(), unknown()).nullable(),
|
|
21093
21093
|
timestamp: number()
|
|
21094
21094
|
});
|
|
21095
|
+
/**
|
|
21096
|
+
* One stored sighting on a track's trajectory.
|
|
21097
|
+
*
|
|
21098
|
+
* The array these live in is returned in TIME order (D399) — it is APPENDED in
|
|
21099
|
+
* arrival order, and the two detector passes interleave, so a consumer must not
|
|
21100
|
+
* assume the two are the same on a row written by an older build.
|
|
21101
|
+
*/
|
|
21095
21102
|
var TrackPositionSchema = object({
|
|
21096
21103
|
x: number(),
|
|
21097
21104
|
y: number(),
|
|
21098
21105
|
timestamp: number(),
|
|
21099
|
-
bbox: BoundingBoxSchema
|
|
21106
|
+
bbox: BoundingBoxSchema,
|
|
21107
|
+
/**
|
|
21108
|
+
* Which detector pass measured this box (D399): `frame` is the full-frame
|
|
21109
|
+
* pass on the analysis raster, `recovery` is the native-resolution
|
|
21110
|
+
* small-subject second pass (D377/D378). Both write into one array, and until
|
|
21111
|
+
* this field existed the only way to tell them apart was that full-frame boxes
|
|
21112
|
+
* are exact multiples of 1.2 while recovery boxes are full-precision floats.
|
|
21113
|
+
* Absent on rows written before D399.
|
|
21114
|
+
*/
|
|
21115
|
+
source: _enum(["frame", "recovery"]).optional(),
|
|
21116
|
+
/** Detection score of this box, so a position can be weighed and not only
|
|
21117
|
+
* plotted. Absent on rows written before D399. */
|
|
21118
|
+
score: number().optional()
|
|
21100
21119
|
});
|
|
21101
21120
|
var TrackSnapshotSchema = object({
|
|
21102
21121
|
timestamp: number(),
|
|
@@ -21496,14 +21515,25 @@ var TrackSchema = object({
|
|
|
21496
21515
|
*/
|
|
21497
21516
|
hasRider: boolean().optional(),
|
|
21498
21517
|
/**
|
|
21499
|
-
* WHY this track ended without a NATIVE best-shot
|
|
21500
|
-
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)
|
|
21518
|
+
* WHY this track ended without a NATIVE best-shot FRAME
|
|
21519
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md),
|
|
21520
|
+
* widened by [D400](../decisions/adr-0400-the-picture-is-judged-on-what-is-delivered.md)) —
|
|
21501
21521
|
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
21502
|
-
* `derive-returned-null tile=standin`,
|
|
21503
|
-
*
|
|
21504
|
-
*
|
|
21522
|
+
* `derive-returned-null tile=standin`,
|
|
21523
|
+
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
21524
|
+
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
21525
|
+
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
21505
21526
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
21506
21527
|
*
|
|
21528
|
+
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
21529
|
+
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
21530
|
+
* while its key frame missed carried no reason at all — three of the four
|
|
21531
|
+
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
21532
|
+
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
21533
|
+
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
21534
|
+
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
21535
|
+
* tile ended up being.
|
|
21536
|
+
*
|
|
21507
21537
|
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
21508
21538
|
* that predates the field, and every track whose tile landed native all
|
|
21509
21539
|
* omit it. Render nothing when absent.
|
|
@@ -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-
|
|
6
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
5
|
+
const require_dist = require("../dist-CUUP49yp.js");
|
|
6
|
+
const require_lazy_sharp = require("../lazy-sharp-DAqWm2BA.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
//#region src/motion-wasm/region-grouping.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Jt as hydrateSchema, Kt as DeviceType, Ut as BaseAddon, X as evaluateZoneRules, ft as motionDetectionCapability } from "../dist-
|
|
1
|
+
import { Jt as hydrateSchema, Kt as DeviceType, Ut as BaseAddon, X as evaluateZoneRules, ft as motionDetectionCapability } from "../dist-CYompTw6.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 { It as errMsg, Rt as Fmp4BoxSplitter, Vt as isSoftwareDecode, zt as buildFfmpegArgs } from "./dist-
|
|
1
|
+
import { It as errMsg, Rt as Fmp4BoxSplitter, Vt as isSoftwareDecode, zt as buildFfmpegArgs } from "./dist-CYompTw6.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|