@camstack/addon-pipeline 1.1.39 → 1.1.41
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 +168 -61
- package/dist/audio-analyzer/index.mjs +168 -61
- package/dist/detection-pipeline/index.js +2 -2
- package/dist/detection-pipeline/index.mjs +2 -2
- package/dist/{dist-DbGdZ8Nr.js → dist-BJTPkJFw.js} +247 -3
- package/dist/{dist-DvvYzO58.mjs → dist-v6cKLmU3.mjs} +247 -3
- package/dist/{frame-handle-plane-B7jMIZc2.js → frame-handle-plane-BP8YV4sF.js} +54 -5
- package/dist/{frame-handle-plane-BFzoIfkd.mjs → frame-handle-plane-DKAXTtfn.mjs} +54 -5
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +893 -12
- package/dist/pipeline-runner/index.mjs +892 -13
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +2 -2
- package/dist/session-decode/decode-worker-child.js +544 -0
- package/dist/session-decode/decode-worker-child.mjs +543 -0
- package/dist/stream-broker/_stub.js +44 -44
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DezFy4Fu.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-C2l0kmD4.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DqJvWBKS.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-dGka8yZY.mjs +26 -0
- package/dist/stream-broker/{hostInit-BOf0hg9q.mjs → hostInit-DHaCRMjM.mjs} +3 -3
- package/dist/stream-broker/index.js +268 -38
- package/dist/stream-broker/index.mjs +268 -38
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/worker-protocol-BCfO8gUF.js +67 -0
- package/dist/worker-protocol-pk7qdYXt.mjs +56 -0
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-Br2fqwe7.js → MaskShapeCanvas-DI4BY7W2-B6fza7ic.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-DYXRf30g.js → MotionZonesSettings-NcxxQN8r-Cy-4iTog.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-DLpqLgPo.js → PrivacyMaskSettings-APgPLF7p-CYX33lJb.js} +1 -1
- package/embed-dist/assets/index-BPkayx9u.js +81 -0
- package/embed-dist/assets/index-CSFtK41z.css +2 -0
- package/embed-dist/index.html +2 -2
- package/package.json +6 -3
- package/python/inference_pool.py +3 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DhY3MZ2C.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BsrrdOBU.mjs +0 -26
- package/embed-dist/assets/index-C5UpuPr8.css +0 -2
- package/embed-dist/assets/index-CR367rYR.js +0 -81
|
@@ -4627,7 +4627,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4627
4627
|
return inst;
|
|
4628
4628
|
}
|
|
4629
4629
|
//#endregion
|
|
4630
|
-
//#region ../types/dist/sleep-
|
|
4630
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4631
4631
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4632
4632
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4633
4633
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7418,7 +7418,16 @@ var DecoderStatsSchema = object({
|
|
|
7418
7418
|
inputFps: number(),
|
|
7419
7419
|
outputFps: number(),
|
|
7420
7420
|
avgDecodeTimeMs: number(),
|
|
7421
|
-
droppedFrames: number()
|
|
7421
|
+
droppedFrames: number(),
|
|
7422
|
+
/**
|
|
7423
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7424
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7425
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7426
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7427
|
+
*/
|
|
7428
|
+
lagMs: number().optional(),
|
|
7429
|
+
effectiveFps: number().optional(),
|
|
7430
|
+
adaptiveFps: number().optional()
|
|
7422
7431
|
});
|
|
7423
7432
|
var DecoderSessionConfigSchema = object({
|
|
7424
7433
|
codec: string(),
|
|
@@ -7459,7 +7468,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7459
7468
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7460
7469
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7461
7470
|
*/
|
|
7462
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7471
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7472
|
+
/**
|
|
7473
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7474
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7475
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7476
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7477
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7478
|
+
*/
|
|
7479
|
+
debug: boolean().optional()
|
|
7463
7480
|
});
|
|
7464
7481
|
var EncodeProfileSchema = object({
|
|
7465
7482
|
video: object({
|
|
@@ -10331,6 +10348,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
10331
10348
|
auth: "admin"
|
|
10332
10349
|
});
|
|
10333
10350
|
/**
|
|
10351
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
10352
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
10353
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
10354
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
10355
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
10356
|
+
* the shape so ONE derived-form renders every camera.
|
|
10357
|
+
*
|
|
10358
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10359
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10360
|
+
* injected from `status`) reports the live values, and a single
|
|
10361
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10362
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10363
|
+
* routing from this surface.
|
|
10364
|
+
*/
|
|
10365
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
10366
|
+
var DayNightModeSchema = _enum([
|
|
10367
|
+
"auto",
|
|
10368
|
+
"day",
|
|
10369
|
+
"night",
|
|
10370
|
+
"schedule"
|
|
10371
|
+
]);
|
|
10372
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10373
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
10374
|
+
var NormalizedRangeSchema$1 = object({
|
|
10375
|
+
min: number(),
|
|
10376
|
+
max: number(),
|
|
10377
|
+
step: number()
|
|
10378
|
+
});
|
|
10379
|
+
object({
|
|
10380
|
+
mode: DayNightModeSchema,
|
|
10381
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
10382
|
+
sensitivity: number().optional(),
|
|
10383
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
10384
|
+
switchDelaySec: number().optional(),
|
|
10385
|
+
lastFetchedAt: number()
|
|
10386
|
+
});
|
|
10387
|
+
/**
|
|
10388
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10389
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10390
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
10391
|
+
* honest, camera-probed values — never hardcoded.
|
|
10392
|
+
*/
|
|
10393
|
+
var DayNightOptionsSchema = object({
|
|
10394
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
10395
|
+
modes: array(DayNightModeSchema),
|
|
10396
|
+
supportsSensitivity: boolean(),
|
|
10397
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
10398
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
10399
|
+
supportsSwitchDelay: boolean(),
|
|
10400
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
10401
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
10402
|
+
});
|
|
10403
|
+
/**
|
|
10404
|
+
* Partial change to the day/night config — every field optional. A
|
|
10405
|
+
* provider ignores fields it does not support.
|
|
10406
|
+
*/
|
|
10407
|
+
var DayNightSettingsPatchSchema = object({
|
|
10408
|
+
mode: DayNightModeSchema.optional(),
|
|
10409
|
+
sensitivity: number().optional(),
|
|
10410
|
+
switchDelaySec: number().optional()
|
|
10411
|
+
});
|
|
10412
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
10413
|
+
deviceId: number(),
|
|
10414
|
+
settings: DayNightSettingsPatchSchema
|
|
10415
|
+
}), _void(), {
|
|
10416
|
+
kind: "mutation",
|
|
10417
|
+
auth: "admin"
|
|
10418
|
+
});
|
|
10419
|
+
/**
|
|
10334
10420
|
* Identity envelope for a device's upstream-system metadata.
|
|
10335
10421
|
*
|
|
10336
10422
|
* Two jobs:
|
|
@@ -10686,6 +10772,130 @@ object({
|
|
|
10686
10772
|
});
|
|
10687
10773
|
DeviceType.Image;
|
|
10688
10774
|
/**
|
|
10775
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
10776
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
10777
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
10778
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
10779
|
+
* exposure and backlight-compensation modes.
|
|
10780
|
+
*
|
|
10781
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
10782
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
10783
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
10784
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
10785
|
+
* white-balance) is likewise normalized 0–100.
|
|
10786
|
+
*
|
|
10787
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10788
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10789
|
+
* injected from `status`) reports the live values, and a single
|
|
10790
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10791
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10792
|
+
* routing from this surface.
|
|
10793
|
+
*/
|
|
10794
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10795
|
+
var ImageRotateSchema = _enum([
|
|
10796
|
+
"0",
|
|
10797
|
+
"90",
|
|
10798
|
+
"180",
|
|
10799
|
+
"270"
|
|
10800
|
+
]);
|
|
10801
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10802
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10803
|
+
/** Exposure mode. */
|
|
10804
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10805
|
+
/**
|
|
10806
|
+
* Backlight-compensation mode:
|
|
10807
|
+
* - `off` — disabled
|
|
10808
|
+
* - `blc` — backlight compensation
|
|
10809
|
+
* - `wdr` — wide dynamic range
|
|
10810
|
+
* - `hlc` — highlight compensation
|
|
10811
|
+
*/
|
|
10812
|
+
var BacklightModeSchema = _enum([
|
|
10813
|
+
"off",
|
|
10814
|
+
"blc",
|
|
10815
|
+
"wdr",
|
|
10816
|
+
"hlc"
|
|
10817
|
+
]);
|
|
10818
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10819
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10820
|
+
var NormalizedRangeSchema = object({
|
|
10821
|
+
min: number(),
|
|
10822
|
+
max: number(),
|
|
10823
|
+
step: number()
|
|
10824
|
+
});
|
|
10825
|
+
object({
|
|
10826
|
+
/** Normalized 0–100. */
|
|
10827
|
+
brightness: number().optional(),
|
|
10828
|
+
/** Normalized 0–100. */
|
|
10829
|
+
contrast: number().optional(),
|
|
10830
|
+
/** Normalized 0–100. */
|
|
10831
|
+
saturation: number().optional(),
|
|
10832
|
+
/** Normalized 0–100. */
|
|
10833
|
+
sharpness: number().optional(),
|
|
10834
|
+
mirror: boolean().optional(),
|
|
10835
|
+
flip: boolean().optional(),
|
|
10836
|
+
rotate: ImageRotateSchema.optional(),
|
|
10837
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10838
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10839
|
+
warmth: number().optional(),
|
|
10840
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10841
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10842
|
+
lastFetchedAt: number()
|
|
10843
|
+
});
|
|
10844
|
+
/**
|
|
10845
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10846
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10847
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10848
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10849
|
+
* — never hardcoded.
|
|
10850
|
+
*/
|
|
10851
|
+
var ImageSettingsOptionsSchema = object({
|
|
10852
|
+
supportsBrightness: boolean(),
|
|
10853
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10854
|
+
supportsContrast: boolean(),
|
|
10855
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10856
|
+
supportsSaturation: boolean(),
|
|
10857
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10858
|
+
supportsSharpness: boolean(),
|
|
10859
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10860
|
+
supportsMirror: boolean(),
|
|
10861
|
+
supportsFlip: boolean(),
|
|
10862
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10863
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10864
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10865
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10866
|
+
supportsWarmth: boolean(),
|
|
10867
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10868
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10869
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10870
|
+
exposureModes: array(ExposureModeSchema),
|
|
10871
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10872
|
+
backlightModes: array(BacklightModeSchema)
|
|
10873
|
+
});
|
|
10874
|
+
/**
|
|
10875
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10876
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10877
|
+
*/
|
|
10878
|
+
var ImageSettingsPatchSchema = object({
|
|
10879
|
+
brightness: number().optional(),
|
|
10880
|
+
contrast: number().optional(),
|
|
10881
|
+
saturation: number().optional(),
|
|
10882
|
+
sharpness: number().optional(),
|
|
10883
|
+
mirror: boolean().optional(),
|
|
10884
|
+
flip: boolean().optional(),
|
|
10885
|
+
rotate: ImageRotateSchema.optional(),
|
|
10886
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10887
|
+
warmth: number().optional(),
|
|
10888
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10889
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10890
|
+
});
|
|
10891
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10892
|
+
deviceId: number(),
|
|
10893
|
+
settings: ImageSettingsPatchSchema
|
|
10894
|
+
}), _void(), {
|
|
10895
|
+
kind: "mutation",
|
|
10896
|
+
auth: "admin"
|
|
10897
|
+
});
|
|
10898
|
+
/**
|
|
10689
10899
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
10690
10900
|
* with a mowing lifecycle plus a dock action.
|
|
10691
10901
|
*
|
|
@@ -11728,6 +11938,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
11728
11938
|
* this gate is bypassed.
|
|
11729
11939
|
*/
|
|
11730
11940
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11941
|
+
/**
|
|
11942
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11943
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11944
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11945
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11946
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11947
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11948
|
+
* (and only render) when this is enabled.
|
|
11949
|
+
*/
|
|
11950
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
11731
11951
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
11732
11952
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
11733
11953
|
/**
|
|
@@ -20406,6 +20626,18 @@ Object.freeze({
|
|
|
20406
20626
|
addonId: null,
|
|
20407
20627
|
access: "view"
|
|
20408
20628
|
},
|
|
20629
|
+
"dayNight.getOptions": {
|
|
20630
|
+
capName: "day-night",
|
|
20631
|
+
capScope: "device",
|
|
20632
|
+
addonId: null,
|
|
20633
|
+
access: "view"
|
|
20634
|
+
},
|
|
20635
|
+
"dayNight.setSettings": {
|
|
20636
|
+
capName: "day-night",
|
|
20637
|
+
capScope: "device",
|
|
20638
|
+
addonId: null,
|
|
20639
|
+
access: "create"
|
|
20640
|
+
},
|
|
20409
20641
|
"decoder.createSession": {
|
|
20410
20642
|
capName: "decoder",
|
|
20411
20643
|
capScope: "system",
|
|
@@ -21336,6 +21568,18 @@ Object.freeze({
|
|
|
21336
21568
|
addonId: null,
|
|
21337
21569
|
access: "create"
|
|
21338
21570
|
},
|
|
21571
|
+
"imageSettings.getOptions": {
|
|
21572
|
+
capName: "image-settings",
|
|
21573
|
+
capScope: "device",
|
|
21574
|
+
addonId: null,
|
|
21575
|
+
access: "view"
|
|
21576
|
+
},
|
|
21577
|
+
"imageSettings.setSettings": {
|
|
21578
|
+
capName: "image-settings",
|
|
21579
|
+
capScope: "device",
|
|
21580
|
+
addonId: null,
|
|
21581
|
+
access: "create"
|
|
21582
|
+
},
|
|
21339
21583
|
"integrations.create": {
|
|
21340
21584
|
capName: "integrations",
|
|
21341
21585
|
capScope: "system",
|
|
@@ -4627,7 +4627,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4627
4627
|
return inst;
|
|
4628
4628
|
}
|
|
4629
4629
|
//#endregion
|
|
4630
|
-
//#region ../types/dist/sleep-
|
|
4630
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4631
4631
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4632
4632
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4633
4633
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7418,7 +7418,16 @@ var DecoderStatsSchema = object({
|
|
|
7418
7418
|
inputFps: number(),
|
|
7419
7419
|
outputFps: number(),
|
|
7420
7420
|
avgDecodeTimeMs: number(),
|
|
7421
|
-
droppedFrames: number()
|
|
7421
|
+
droppedFrames: number(),
|
|
7422
|
+
/**
|
|
7423
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7424
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7425
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7426
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7427
|
+
*/
|
|
7428
|
+
lagMs: number().optional(),
|
|
7429
|
+
effectiveFps: number().optional(),
|
|
7430
|
+
adaptiveFps: number().optional()
|
|
7422
7431
|
});
|
|
7423
7432
|
var DecoderSessionConfigSchema = object({
|
|
7424
7433
|
codec: string(),
|
|
@@ -7459,7 +7468,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7459
7468
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7460
7469
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7461
7470
|
*/
|
|
7462
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7471
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7472
|
+
/**
|
|
7473
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7474
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7475
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7476
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7477
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7478
|
+
*/
|
|
7479
|
+
debug: boolean().optional()
|
|
7463
7480
|
});
|
|
7464
7481
|
var EncodeProfileSchema = object({
|
|
7465
7482
|
video: object({
|
|
@@ -10331,6 +10348,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
10331
10348
|
auth: "admin"
|
|
10332
10349
|
});
|
|
10333
10350
|
/**
|
|
10351
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
10352
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
10353
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
10354
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
10355
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
10356
|
+
* the shape so ONE derived-form renders every camera.
|
|
10357
|
+
*
|
|
10358
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10359
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10360
|
+
* injected from `status`) reports the live values, and a single
|
|
10361
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10362
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10363
|
+
* routing from this surface.
|
|
10364
|
+
*/
|
|
10365
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
10366
|
+
var DayNightModeSchema = _enum([
|
|
10367
|
+
"auto",
|
|
10368
|
+
"day",
|
|
10369
|
+
"night",
|
|
10370
|
+
"schedule"
|
|
10371
|
+
]);
|
|
10372
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10373
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
10374
|
+
var NormalizedRangeSchema$1 = object({
|
|
10375
|
+
min: number(),
|
|
10376
|
+
max: number(),
|
|
10377
|
+
step: number()
|
|
10378
|
+
});
|
|
10379
|
+
object({
|
|
10380
|
+
mode: DayNightModeSchema,
|
|
10381
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
10382
|
+
sensitivity: number().optional(),
|
|
10383
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
10384
|
+
switchDelaySec: number().optional(),
|
|
10385
|
+
lastFetchedAt: number()
|
|
10386
|
+
});
|
|
10387
|
+
/**
|
|
10388
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10389
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10390
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
10391
|
+
* honest, camera-probed values — never hardcoded.
|
|
10392
|
+
*/
|
|
10393
|
+
var DayNightOptionsSchema = object({
|
|
10394
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
10395
|
+
modes: array(DayNightModeSchema),
|
|
10396
|
+
supportsSensitivity: boolean(),
|
|
10397
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
10398
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
10399
|
+
supportsSwitchDelay: boolean(),
|
|
10400
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
10401
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
10402
|
+
});
|
|
10403
|
+
/**
|
|
10404
|
+
* Partial change to the day/night config — every field optional. A
|
|
10405
|
+
* provider ignores fields it does not support.
|
|
10406
|
+
*/
|
|
10407
|
+
var DayNightSettingsPatchSchema = object({
|
|
10408
|
+
mode: DayNightModeSchema.optional(),
|
|
10409
|
+
sensitivity: number().optional(),
|
|
10410
|
+
switchDelaySec: number().optional()
|
|
10411
|
+
});
|
|
10412
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
10413
|
+
deviceId: number(),
|
|
10414
|
+
settings: DayNightSettingsPatchSchema
|
|
10415
|
+
}), _void(), {
|
|
10416
|
+
kind: "mutation",
|
|
10417
|
+
auth: "admin"
|
|
10418
|
+
});
|
|
10419
|
+
/**
|
|
10334
10420
|
* Identity envelope for a device's upstream-system metadata.
|
|
10335
10421
|
*
|
|
10336
10422
|
* Two jobs:
|
|
@@ -10686,6 +10772,130 @@ object({
|
|
|
10686
10772
|
});
|
|
10687
10773
|
DeviceType.Image;
|
|
10688
10774
|
/**
|
|
10775
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
10776
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
10777
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
10778
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
10779
|
+
* exposure and backlight-compensation modes.
|
|
10780
|
+
*
|
|
10781
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
10782
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
10783
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
10784
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
10785
|
+
* white-balance) is likewise normalized 0–100.
|
|
10786
|
+
*
|
|
10787
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10788
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10789
|
+
* injected from `status`) reports the live values, and a single
|
|
10790
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10791
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10792
|
+
* routing from this surface.
|
|
10793
|
+
*/
|
|
10794
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10795
|
+
var ImageRotateSchema = _enum([
|
|
10796
|
+
"0",
|
|
10797
|
+
"90",
|
|
10798
|
+
"180",
|
|
10799
|
+
"270"
|
|
10800
|
+
]);
|
|
10801
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10802
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10803
|
+
/** Exposure mode. */
|
|
10804
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10805
|
+
/**
|
|
10806
|
+
* Backlight-compensation mode:
|
|
10807
|
+
* - `off` — disabled
|
|
10808
|
+
* - `blc` — backlight compensation
|
|
10809
|
+
* - `wdr` — wide dynamic range
|
|
10810
|
+
* - `hlc` — highlight compensation
|
|
10811
|
+
*/
|
|
10812
|
+
var BacklightModeSchema = _enum([
|
|
10813
|
+
"off",
|
|
10814
|
+
"blc",
|
|
10815
|
+
"wdr",
|
|
10816
|
+
"hlc"
|
|
10817
|
+
]);
|
|
10818
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10819
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10820
|
+
var NormalizedRangeSchema = object({
|
|
10821
|
+
min: number(),
|
|
10822
|
+
max: number(),
|
|
10823
|
+
step: number()
|
|
10824
|
+
});
|
|
10825
|
+
object({
|
|
10826
|
+
/** Normalized 0–100. */
|
|
10827
|
+
brightness: number().optional(),
|
|
10828
|
+
/** Normalized 0–100. */
|
|
10829
|
+
contrast: number().optional(),
|
|
10830
|
+
/** Normalized 0–100. */
|
|
10831
|
+
saturation: number().optional(),
|
|
10832
|
+
/** Normalized 0–100. */
|
|
10833
|
+
sharpness: number().optional(),
|
|
10834
|
+
mirror: boolean().optional(),
|
|
10835
|
+
flip: boolean().optional(),
|
|
10836
|
+
rotate: ImageRotateSchema.optional(),
|
|
10837
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10838
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10839
|
+
warmth: number().optional(),
|
|
10840
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10841
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10842
|
+
lastFetchedAt: number()
|
|
10843
|
+
});
|
|
10844
|
+
/**
|
|
10845
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10846
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10847
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10848
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10849
|
+
* — never hardcoded.
|
|
10850
|
+
*/
|
|
10851
|
+
var ImageSettingsOptionsSchema = object({
|
|
10852
|
+
supportsBrightness: boolean(),
|
|
10853
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10854
|
+
supportsContrast: boolean(),
|
|
10855
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10856
|
+
supportsSaturation: boolean(),
|
|
10857
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10858
|
+
supportsSharpness: boolean(),
|
|
10859
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10860
|
+
supportsMirror: boolean(),
|
|
10861
|
+
supportsFlip: boolean(),
|
|
10862
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10863
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10864
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10865
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10866
|
+
supportsWarmth: boolean(),
|
|
10867
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10868
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10869
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10870
|
+
exposureModes: array(ExposureModeSchema),
|
|
10871
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10872
|
+
backlightModes: array(BacklightModeSchema)
|
|
10873
|
+
});
|
|
10874
|
+
/**
|
|
10875
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10876
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10877
|
+
*/
|
|
10878
|
+
var ImageSettingsPatchSchema = object({
|
|
10879
|
+
brightness: number().optional(),
|
|
10880
|
+
contrast: number().optional(),
|
|
10881
|
+
saturation: number().optional(),
|
|
10882
|
+
sharpness: number().optional(),
|
|
10883
|
+
mirror: boolean().optional(),
|
|
10884
|
+
flip: boolean().optional(),
|
|
10885
|
+
rotate: ImageRotateSchema.optional(),
|
|
10886
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10887
|
+
warmth: number().optional(),
|
|
10888
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10889
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10890
|
+
});
|
|
10891
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10892
|
+
deviceId: number(),
|
|
10893
|
+
settings: ImageSettingsPatchSchema
|
|
10894
|
+
}), _void(), {
|
|
10895
|
+
kind: "mutation",
|
|
10896
|
+
auth: "admin"
|
|
10897
|
+
});
|
|
10898
|
+
/**
|
|
10689
10899
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
10690
10900
|
* with a mowing lifecycle plus a dock action.
|
|
10691
10901
|
*
|
|
@@ -11728,6 +11938,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
11728
11938
|
* this gate is bypassed.
|
|
11729
11939
|
*/
|
|
11730
11940
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11941
|
+
/**
|
|
11942
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11943
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11944
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11945
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11946
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11947
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11948
|
+
* (and only render) when this is enabled.
|
|
11949
|
+
*/
|
|
11950
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
11731
11951
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
11732
11952
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
11733
11953
|
/**
|
|
@@ -20406,6 +20626,18 @@ Object.freeze({
|
|
|
20406
20626
|
addonId: null,
|
|
20407
20627
|
access: "view"
|
|
20408
20628
|
},
|
|
20629
|
+
"dayNight.getOptions": {
|
|
20630
|
+
capName: "day-night",
|
|
20631
|
+
capScope: "device",
|
|
20632
|
+
addonId: null,
|
|
20633
|
+
access: "view"
|
|
20634
|
+
},
|
|
20635
|
+
"dayNight.setSettings": {
|
|
20636
|
+
capName: "day-night",
|
|
20637
|
+
capScope: "device",
|
|
20638
|
+
addonId: null,
|
|
20639
|
+
access: "create"
|
|
20640
|
+
},
|
|
20409
20641
|
"decoder.createSession": {
|
|
20410
20642
|
capName: "decoder",
|
|
20411
20643
|
capScope: "system",
|
|
@@ -21336,6 +21568,18 @@ Object.freeze({
|
|
|
21336
21568
|
addonId: null,
|
|
21337
21569
|
access: "create"
|
|
21338
21570
|
},
|
|
21571
|
+
"imageSettings.getOptions": {
|
|
21572
|
+
capName: "image-settings",
|
|
21573
|
+
capScope: "device",
|
|
21574
|
+
addonId: null,
|
|
21575
|
+
access: "view"
|
|
21576
|
+
},
|
|
21577
|
+
"imageSettings.setSettings": {
|
|
21578
|
+
capName: "image-settings",
|
|
21579
|
+
capScope: "device",
|
|
21580
|
+
addonId: null,
|
|
21581
|
+
access: "create"
|
|
21582
|
+
},
|
|
21339
21583
|
"integrations.create": {
|
|
21340
21584
|
capName: "integrations",
|
|
21341
21585
|
capScope: "system",
|