@camera.ui/server 2.0.11 → 2.0.12
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/interface/assets/{404-COkoHYdK.js → 404-Dfyzm8bF.js} +1 -1
- package/dist/interface/assets/{About-qJICwbGH.js → About-B4Y3WP7T.js} +1 -1
- package/dist/interface/assets/{Adminpanel-D58GDcYK.js → Adminpanel-DSk1uh2x.js} +1 -1
- package/dist/interface/assets/Automation-CTSfLcmF.js +2 -0
- package/dist/interface/assets/{AutomationImport-jG2DzCAw.js → AutomationImport-B1P0T0Pe.js} +2 -2
- package/dist/interface/assets/AutomationStore-ZaaXPPbd.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-B2vc7mTZ.js +2 -0
- package/dist/interface/assets/Automations-Bvw-jTKi.js +2 -0
- package/dist/interface/assets/Camera-BxmJXk11.js +2 -0
- package/dist/interface/assets/{CameraConsole-BjtK8-Jv.js → CameraConsole-CVqgED5u.js} +1 -1
- package/dist/interface/assets/Cameras-DT62fcZK.js +652 -0
- package/dist/interface/assets/Camview-CqSckgLr.js +1 -0
- package/dist/interface/assets/Config-p9t9zgly.js +2 -0
- package/dist/interface/assets/{ConfigActionCameraControl-DjD6pSYf.js → ConfigActionCameraControl-BLROOU0q.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-DGZlBe84.js → ConfigActionDelay-q0pOTOzh.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-h5zpYYny.js → ConfigActionHttp-DiMXKRGz.js} +1 -1
- package/dist/interface/assets/ConfigActionImageInput-u5xX9t3-.js +1 -0
- package/dist/interface/assets/{ConfigActionMqtt-BnNmQUNe.js → ConfigActionMqtt-BkZl3uYq.js} +1 -1
- package/dist/interface/assets/ConfigActionNotification-DIkFNlKe.js +1 -0
- package/dist/interface/assets/{ConfigActionOutput-h2IebNMX.js → ConfigActionOutput-CJF0F4cT.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-B6pIqGWe.js → ConfigActionPlugin-rQeJ4umG.js} +1 -1
- package/dist/interface/assets/ConfigActionSensor-BWHpkoMs.js +1 -0
- package/dist/interface/assets/{ConfigActionSnapshot-Cs2TG5fZ.js → ConfigActionSnapshot-BlvQZl1R.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-BPK-FHZ-.js → ConfigActionVariable-BMV-BDAk.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-BNfUIXNh.js → ConfigConditionIfElse-C5geCT1S.js} +1 -1
- package/dist/interface/assets/ConfigConditionSensorState-8bIGEhQd.js +1 -0
- package/dist/interface/assets/{ConfigConditionSwitch-C7_-2l4Z.js → ConfigConditionSwitch-PwrCSnTQ.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-DCTdB9RZ.js → ConfigConditionTime-DUt_dsr9.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-Dt09C19b.js → ConfigSensorValueInput-CgZWxOMu.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-CVTb6TEu.js → ConfigTriggerDetection-D4UitpXI.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-Cb62v6rf.js → ConfigTriggerGeofence-Ci-gkmjS.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerManual-agJhIaCy.js → ConfigTriggerManual-_PAVLJxz.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-DWZ79tPv.js → ConfigTriggerMqtt-BtfXQ_Bh.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-C38lrm2R.js → ConfigTriggerSchedule-CHyW4YQ1.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-BKXoFFFT.js → ConfigTriggerSensor-CZMplCYs.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-DqoMfULb.js → ConfigTriggerSystem-OOffe8rK.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-DunygdEo.js → ConfigTriggerWebhook-Baul6M1Y.js} +1 -1
- package/dist/interface/assets/Console-MXiL0z_X.js +1 -0
- package/dist/interface/assets/{CuiActionButton-iaZkXylf.js → CuiActionButton-WFz5I80P.js} +1 -1
- package/dist/interface/assets/{CuiAvatar--d4yBFev.js → CuiAvatar-BUwQnIaI.js} +1 -1
- package/dist/interface/assets/{CuiBBoxPlayground-BuDfU2lQ.js → CuiBBoxPlayground-J7_8dCvo.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-BA-u9UtN.js +1 -0
- package/dist/interface/assets/{CuiBottomSheet-o1iNIub8.js → CuiBottomSheet-CzG0n4Oa.js} +1 -1
- package/dist/interface/assets/CuiCameraCard-GH-DR5_s.js +1 -0
- package/dist/interface/assets/{CuiCameraPipCard-NA4CctaN.js → CuiCameraPipCard-CL_wj05b.js} +1 -1
- package/dist/interface/assets/CuiCameraRecordings-BjErk9Gl.js +1 -0
- package/dist/interface/assets/CuiCameraShares-qrJhZMEt.js +1 -0
- package/dist/interface/assets/{CuiCameraSnapshot-Dp6cLkMa.js → CuiCameraSnapshot-Dn1QSGrr.js} +1 -1
- package/dist/interface/assets/CuiCameraTable-or8VpE34.js +2 -0
- package/dist/interface/assets/{CuiDataTable-BDb1Qvzm.js → CuiDataTable-CjXiUFiJ.js} +1 -1
- package/dist/interface/assets/CuiFloatingButton-BjpU1EHv.js +1 -0
- package/dist/interface/assets/CuiImage-BM4g6edi.css +1 -0
- package/dist/interface/assets/CuiImage-Bq3bxOOL.js +1 -0
- package/dist/interface/assets/CuiMenu-DtnIPhcr.js +1 -0
- package/dist/interface/assets/CuiPluginCard-DKNWUFpR.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-R5WUBAUw.js → CuiPluginCategoryChip-cmfKx-dU.js} +1 -1
- package/dist/interface/assets/CuiPluginOAuthButton-C6FQiVkt.js +2 -0
- package/dist/interface/assets/CuiPluginTrustBadge-PVZMP1rI.js +1 -0
- package/dist/interface/assets/{CuiQRCode-CsxVDVaU.js → CuiQRCode-uQygC1dP.js} +1 -1
- package/dist/interface/assets/CuiRecordingsGrid-Cuwd4L67.js +1 -0
- package/dist/interface/assets/CuiSchema-CH0GXMWV.js +1 -0
- package/dist/interface/assets/{CuiTopNavbarItem-CIO_h1T0.js → CuiTopNavbarItem-nGcC2em4.js} +1 -1
- package/dist/interface/assets/{CuiTopbarSlot-C6t4NmW-.js → CuiTopbarSlot-B6UMqYZl.js} +1 -1
- package/dist/interface/assets/Faces-cpO5vJbp.js +1 -0
- package/dist/interface/assets/{FirstSteps-CP26tE1m.js → FirstSteps-BHTcbs9O.js} +1 -1
- package/dist/interface/assets/{Instances-Bdy0n3fB.js → Instances-BXiVG2Dm.js} +1 -1
- package/dist/interface/assets/Logs-hMg2QOGj.js +6 -0
- package/dist/interface/assets/{Menu-DX0KhBBs.js → Menu-BiPBCi8Z.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-Cci9ex4G.js → OAuthDeviceFlow-Bia9UA3I.js} +1 -1
- package/dist/interface/assets/Plugin-DfRaHAsi.js +1 -0
- package/dist/interface/assets/{PluginConsole-Fffl7Yh_.js → PluginConsole-CRw4zTRM.js} +1 -1
- package/dist/interface/assets/PluginDetail-BYqji8yN.css +1 -0
- package/dist/interface/assets/PluginDetail-BqRoLZc7.js +2 -0
- package/dist/interface/assets/{PluginSchema-BNEfEDJU.js → PluginSchema-TtBJPR_R.js} +1 -1
- package/dist/interface/assets/PluginSearch-B_NYpJi3.js +2 -0
- package/dist/interface/assets/{PluginSearch-NuKgD1r3.css → PluginSearch-Bbp8D7BJ.css} +1 -1
- package/dist/interface/assets/PluginSearch-DnJgg6-6.js +1 -0
- package/dist/interface/assets/Plugins-DVFEGtj3.js +1 -0
- package/dist/interface/assets/Recordings-dwm6lAoJ.js +1 -0
- package/dist/interface/assets/{Settings-TkiQG2I9.js → Settings-BpBmrGpS.js} +1 -1
- package/dist/interface/assets/SettingsAccount-8Kh1uQqn.js +1 -0
- package/dist/interface/assets/SettingsAccount-CjgYe5mF.js +1 -0
- package/dist/interface/assets/SettingsAppearance-3i3Ix7j-.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-CWWSQkIY.js → SettingsAppearance-EoBxclgt.js} +1 -1
- package/dist/interface/assets/SettingsBackup-Bpsbg6Pm.js +1 -0
- package/dist/interface/assets/{SettingsMqtt-CeurNe8m.js → SettingsMqtt-ZQolc9lR.js} +1 -1
- package/dist/interface/assets/SettingsNotifications-BOoMt1Er.js +2 -0
- package/dist/interface/assets/SettingsRecordings-BQhxLCgM.js +1 -0
- package/dist/interface/assets/SettingsRemote-Cvcmpdgb.js +1 -0
- package/dist/interface/assets/SettingsSystem-B-yhq40t.js +2 -0
- package/dist/interface/assets/SettingsUsers-CezygBk8.js +1 -0
- package/dist/interface/assets/Terminal-CDQJGwb_.js +4 -0
- package/dist/interface/assets/{VariableInput-BuXTKXXC.js → VariableInput-CnmqCHf7.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-BIPtw8GW.js → VariableSuggestions-D6IlwBqV.js} +1 -1
- package/dist/interface/assets/VersionsHandler-BHR1k9zz.js +7 -0
- package/dist/interface/assets/Workers-Bv-bWBC-.js +2 -0
- package/dist/interface/assets/{api-DudQz5TK.js → api-BhOwzvxK.js} +1 -1
- package/dist/interface/assets/api-Cea16mc8.js +2 -0
- package/dist/interface/assets/api-GMfqGYqQ.css +2 -0
- package/dist/interface/assets/{auth-BKlPnLfY.js → auth-CNPkdTXX.js} +1 -1
- package/dist/interface/assets/{automations-eQnuQOEs.js → automations-CHengR-B.js} +1 -1
- package/dist/interface/assets/{automations-Dtp3-KSy.js → automations-DhLADBhd.js} +1 -1
- package/dist/interface/assets/{cameras-BySMxwdP.js → cameras-DyF2T0be.js} +1 -1
- package/dist/interface/assets/{cameras.schema-DVnsQl9j.js → cameras.schema-DBzgU4m6.js} +1 -1
- package/dist/interface/assets/cloudHandoff-LxdvSi1a.js +1 -0
- package/dist/interface/assets/{config-CDCKrp2V.js → config-c7o4sJrQ.js} +1 -1
- package/dist/interface/assets/{circular-connection-Fq-Vqe3X.js → delete-outline-CbGU9XWz.js} +1 -1
- package/dist/interface/assets/{deviceId-O-kfs3nO.js → deviceId-BYu9Q8Ay.js} +1 -1
- package/dist/interface/assets/{hasPermission-DADXQ_dj.js → hasPermission-CgyWyOhQ.js} +1 -1
- package/dist/interface/assets/{instances-DVk8sRuN.js → instances-CRYtaTQS.js} +1 -1
- package/dist/interface/assets/main-CgXkx5UO.js +3 -0
- package/dist/interface/assets/{notifications-Dnh_ylVF.js → notifications-sejZCb0L.js} +1 -1
- package/dist/interface/assets/{plugins-CHRZiPTq.js → plugins-CCLFcD4c.js} +1 -1
- package/dist/interface/assets/round-restart-alt-PDSZur-0.js +1 -0
- package/dist/interface/assets/{router-M08TaIji.css → router-C7b6u3Zu.css} +1 -1
- package/dist/interface/assets/router-DkMUvvnP.js +2 -0
- package/dist/interface/assets/{routerState-CencmCOo.js → routerState-BR88YV1H.js} +1 -1
- package/dist/interface/assets/{server-zkNDKqjz.js → server-C7SETTy9.js} +1 -1
- package/dist/interface/assets/{shares-DooKpXt5.js → shares-Cy1SLL98.js} +1 -1
- package/dist/interface/assets/{theme-Dlx1uc6I.js → theme-DqbhRu7y.js} +1 -1
- package/dist/interface/assets/{types-DwLgLlNL.js → types-v8L66UlA.js} +1 -1
- package/dist/interface/assets/{ui-BajsbwJJ.js → ui-g5rCwxUE.js} +1 -1
- package/dist/interface/assets/{useAppVersion-Vx2rWjdR.js → useAppVersion-WfdoG9Ji.js} +1 -1
- package/dist/interface/assets/{useBackupRestore-CtDDTNYM.js → useBackupRestore-ootsFhdF.js} +1 -1
- package/dist/interface/assets/{useBiometricCredentials-DnEuKj2Y.js → useBiometricCredentials-Ca75xEru.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-CurEfrEs.js → useCameraOptions-BpL2zbfV.js} +1 -1
- package/dist/interface/assets/{useCuiCameraDrawer-eH0m75Mk.js → useCuiCameraDrawer-BHUHw6W6.js} +1 -1
- package/dist/interface/assets/useCuiDialog-yVh5UWKF.js +2 -0
- package/dist/interface/assets/{useFileDownload-CaB5Myfa.js → useFileDownload-BcaNWndS.js} +1 -1
- package/dist/interface/assets/useLogsSocket-BRSsUNqv.js +5 -0
- package/dist/interface/assets/{useServerRestart-COGxcO4B.js → useServerRestart-PZhND5H_.js} +1 -1
- package/dist/interface/assets/{useSharedComposables-DC7dAxBt.js → useSharedComposables-USqd05AG.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-Cr_bBYAe.js → useStreamStatus-nCx5ux1-.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-D_SN9IPN.js → useUpdateChannel-3eHk3KXZ.js} +1 -1
- package/dist/interface/assets/{useUserOptions-CtgFdv3y.js → useUserOptions-DVC4k8Zs.js} +1 -1
- package/dist/interface/assets/{users.schema-vs5FAhpT.js → users.schema-B4fEuoKZ.js} +1 -1
- package/dist/interface/assets/{vendor-cameraui-D5fd9Ars.js → vendor-cameraui-QuTJKoXE.js} +84 -23
- package/dist/interface/assets/vendor-core-CCcu_nmz.js +1 -0
- package/dist/interface/assets/{vendor-primevue-Ba4LruKV.js → vendor-primevue-BdB7McKg.js} +84 -145
- package/dist/interface/assets/view-grid-BWJS0bBD.js +1 -0
- package/dist/interface/index.html +47 -47
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +6 -6
- package/dist/server/requirements.txt +1 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +3 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +45 -2
- package/dist/server/src/api/database/backfill.d.ts +5 -0
- package/dist/server/src/api/database/backfill.js +89 -0
- package/dist/server/src/api/database/backfill.js.map +1 -0
- package/dist/server/src/api/database/index.d.ts +1 -0
- package/dist/server/src/api/database/index.js +29 -43
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/record-schemas.d.ts +231 -0
- package/dist/server/src/api/database/record-schemas.js +194 -0
- package/dist/server/src/api/database/record-schemas.js.map +1 -0
- package/dist/server/src/api/schemas/cameras.schema.d.ts +265 -1
- package/dist/server/src/api/schemas/cameras.schema.js +10 -0
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/remote.schema.d.ts +1 -1
- package/dist/server/src/api/services/cameras.service.d.ts +1 -0
- package/dist/server/src/api/services/cameras.service.js +18 -1
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.js +15 -4
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/main.js +3 -0
- package/dist/server/src/api/websocket/nsp/main.js.map +1 -1
- package/dist/server/src/camera/controller.js +1 -12
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/decoder/audio-loop.d.ts +25 -0
- package/dist/server/src/camera/decoder/audio-loop.js +163 -0
- package/dist/server/src/camera/decoder/audio-loop.js.map +1 -0
- package/dist/server/src/camera/decoder/cascade-manager.js +1 -4
- package/dist/server/src/camera/decoder/cascade-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +36 -97
- package/dist/server/src/camera/decoder/detection-coordinator.js +479 -1387
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-pipeline.d.ts +4 -0
- package/dist/server/src/camera/decoder/detection-pipeline.js +14 -24
- package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
- package/dist/server/src/camera/decoder/dwell-manager.js +1 -1
- package/dist/server/src/camera/decoder/dwell-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.js +15 -28
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +38 -0
- package/dist/server/src/camera/decoder/event-thumbnailer.js +192 -0
- package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -0
- package/dist/server/src/camera/decoder/plugin-registry.d.ts +31 -0
- package/dist/server/src/camera/decoder/plugin-registry.js +114 -0
- package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -0
- package/dist/server/src/camera/decoder/{ptz-autotracker.d.ts → ptz/autotracker.d.ts} +19 -0
- package/dist/server/src/camera/decoder/ptz/autotracker.js +537 -0
- package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -0
- package/dist/server/src/camera/decoder/reconnect-backoff.d.ts +6 -0
- package/dist/server/src/camera/decoder/reconnect-backoff.js +17 -0
- package/dist/server/src/camera/decoder/reconnect-backoff.js.map +1 -0
- package/dist/server/src/camera/decoder/secondary-stage.d.ts +37 -0
- package/dist/server/src/camera/decoder/secondary-stage.js +445 -0
- package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -0
- package/dist/server/src/camera/decoder/{audio-source.js → sources/audio-source.js} +2 -2
- package/dist/server/src/camera/decoder/sources/audio-source.js.map +1 -0
- package/dist/server/src/camera/decoder/{frame-source.js → sources/frame-source.js} +8 -11
- package/dist/server/src/camera/decoder/sources/frame-source.js.map +1 -0
- package/dist/server/src/camera/decoder/{snapshot-source.d.ts → sources/snapshot-source.d.ts} +2 -5
- package/dist/server/src/camera/decoder/{snapshot-source.js → sources/snapshot-source.js} +11 -15
- package/dist/server/src/camera/decoder/sources/snapshot-source.js.map +1 -0
- package/dist/server/src/camera/decoder/stationary-suppressor.d.ts +21 -0
- package/dist/server/src/camera/decoder/stationary-suppressor.js +141 -0
- package/dist/server/src/camera/decoder/stationary-suppressor.js.map +1 -0
- package/dist/server/src/camera/decoder/types.d.ts +6 -1
- package/dist/server/src/camera/decoder/types.js +1 -0
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/camera/decoder/worker.js +4 -7
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/go2rtc/api/routes/discover.js +2 -1
- package/dist/server/src/go2rtc/api/routes/discover.js.map +1 -1
- package/dist/server/src/main.js +26 -3
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/manager/downloadManager.js +0 -2
- package/dist/server/src/manager/downloadManager.js.map +1 -1
- package/dist/server/src/utils/npm/index.d.ts +10 -1
- package/dist/server/src/utils/npm/index.js +11 -1
- package/dist/server/src/utils/npm/index.js.map +1 -1
- package/dist/server/src/workers/capabilities/plugin-host.js +4 -1
- package/dist/server/src/workers/capabilities/plugin-host.js.map +1 -1
- package/package.json +6 -6
- package/dist/interface/assets/Automation-Dp_xaEqJ.js +0 -2
- package/dist/interface/assets/AutomationStore-4JFCinMU.js +0 -2
- package/dist/interface/assets/AutomationStoreDetail-yBtpTcZc.js +0 -2
- package/dist/interface/assets/Automations-BGsRPCnO.js +0 -2
- package/dist/interface/assets/Camera-C1_jdI_c.js +0 -2
- package/dist/interface/assets/Cameras-BmjWXAZ8.js +0 -652
- package/dist/interface/assets/Camview-wGaYaDmi.js +0 -1
- package/dist/interface/assets/Config-CuF6eGTD.js +0 -2
- package/dist/interface/assets/ConfigActionImageInput-xab5Mae-.js +0 -1
- package/dist/interface/assets/ConfigActionNotification-DGwL1eKM.js +0 -1
- package/dist/interface/assets/ConfigActionSensor-DBf7_RrD.js +0 -1
- package/dist/interface/assets/ConfigConditionSensorState-D1IWa7jK.js +0 -1
- package/dist/interface/assets/Console-DL4o8TCN.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DluJK839.js +0 -1
- package/dist/interface/assets/CuiCameraCard-CNkJcJNk.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-Dg_xNATQ.js +0 -1
- package/dist/interface/assets/CuiCameraShares-BSdoTLlP.js +0 -1
- package/dist/interface/assets/CuiCameraTable-16e0lAA5.js +0 -2
- package/dist/interface/assets/CuiFloatingButton-B64PYWE2.js +0 -1
- package/dist/interface/assets/CuiImage-Bxf7z2N4.css +0 -1
- package/dist/interface/assets/CuiImage-D_DDxN1t.js +0 -1
- package/dist/interface/assets/CuiMenu-BmgnEZun.js +0 -1
- package/dist/interface/assets/CuiPluginCard-C0GXkGJ3.js +0 -2
- package/dist/interface/assets/CuiPluginOAuthButton-CY3c3HRs.js +0 -2
- package/dist/interface/assets/CuiPluginTrustBadge-QRsixP01.js +0 -1
- package/dist/interface/assets/CuiRecordingsGrid-DycYYi7W.js +0 -1
- package/dist/interface/assets/CuiSchema-D1-Z2sTy.js +0 -1
- package/dist/interface/assets/Faces-QSA5E6EG.js +0 -1
- package/dist/interface/assets/Logs-Bs0C7Yu1.js +0 -6
- package/dist/interface/assets/Plugin-CG02A29i.js +0 -1
- package/dist/interface/assets/PluginDetail-BsIkPUY8.css +0 -1
- package/dist/interface/assets/PluginDetail-CRCMotvN.js +0 -2
- package/dist/interface/assets/PluginSearch-CwNCQedL.js +0 -2
- package/dist/interface/assets/PluginSearch-GD7qtALl.js +0 -1
- package/dist/interface/assets/Plugins-BNiQus_y.js +0 -1
- package/dist/interface/assets/Recordings-dY0k4i3E.js +0 -1
- package/dist/interface/assets/SettingsAccount-Cln0bZPI.js +0 -1
- package/dist/interface/assets/SettingsAccount-DvrdANbI.js +0 -1
- package/dist/interface/assets/SettingsAppearance-CVMAyxFr.js +0 -1
- package/dist/interface/assets/SettingsBackup-CZEKi84z.js +0 -1
- package/dist/interface/assets/SettingsNotifications-BBYcFlOe.js +0 -2
- package/dist/interface/assets/SettingsRecordings-8JRnUwvv.js +0 -1
- package/dist/interface/assets/SettingsRemote-BXLy9grM.js +0 -1
- package/dist/interface/assets/SettingsSystem-BwVJ2-Ws.js +0 -2
- package/dist/interface/assets/SettingsUsers-CMsX8YO6.js +0 -1
- package/dist/interface/assets/Terminal-CNAaV5h5.js +0 -4
- package/dist/interface/assets/VersionsHandler-0Ol7oxfg.js +0 -7
- package/dist/interface/assets/Workers-BYGXvih8.js +0 -2
- package/dist/interface/assets/api-BEwr0GLC.css +0 -2
- package/dist/interface/assets/api-CeJqvqFj.js +0 -2
- package/dist/interface/assets/cloudHandoff-DOYq2IS2.js +0 -1
- package/dist/interface/assets/main-DHUUsPUM.js +0 -3
- package/dist/interface/assets/round-restart-alt-BRh54UpI.js +0 -1
- package/dist/interface/assets/router-B6AZz5fb.js +0 -2
- package/dist/interface/assets/useCuiDialog-CGak2kyV.js +0 -2
- package/dist/interface/assets/useLogsSocket-B47qvN41.js +0 -5
- package/dist/interface/assets/vendor-core-D9amXF-u.js +0 -1
- package/dist/interface/assets/view-grid-jcP3VugM.js +0 -1
- package/dist/server/src/camera/decoder/audio-source.js.map +0 -1
- package/dist/server/src/camera/decoder/frame-source.js.map +0 -1
- package/dist/server/src/camera/decoder/ptz-autotracker.js +0 -342
- package/dist/server/src/camera/decoder/ptz-autotracker.js.map +0 -1
- package/dist/server/src/camera/decoder/snapshot-source.js.map +0 -1
- /package/dist/server/src/camera/decoder/{audio-source.d.ts → sources/audio-source.d.ts} +0 -0
- /package/dist/server/src/camera/decoder/{frame-source.d.ts → sources/frame-source.d.ts} +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { sleep } from '@camera.ui/common/utils';
|
|
2
|
+
import { isAudioModelSpec } from './plugin-registry.js';
|
|
3
|
+
import { ReconnectBackoff } from './reconnect-backoff.js';
|
|
4
|
+
import { AudioSource } from './sources/audio-source.js';
|
|
5
|
+
function calculateDBFS(data, format) {
|
|
6
|
+
let sumSquares = 0;
|
|
7
|
+
let sampleCount = 0;
|
|
8
|
+
if (format === 'float32') {
|
|
9
|
+
const floatView = new Float32Array(data.buffer, data.byteOffset, data.byteLength / 4);
|
|
10
|
+
sampleCount = floatView.length;
|
|
11
|
+
for (let i = 0; i < sampleCount; i++)
|
|
12
|
+
sumSquares += floatView[i] * floatView[i];
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// PCM16: normalize [-32768, 32767] → [-1.0, 1.0]
|
|
16
|
+
const int16View = new Int16Array(data.buffer, data.byteOffset, data.byteLength / 2);
|
|
17
|
+
sampleCount = int16View.length;
|
|
18
|
+
for (let i = 0; i < sampleCount; i++) {
|
|
19
|
+
const normalized = int16View[i] / 32768;
|
|
20
|
+
sumSquares += normalized * normalized;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (sampleCount === 0)
|
|
24
|
+
return -100;
|
|
25
|
+
const rms = Math.sqrt(sumSquares / sampleCount);
|
|
26
|
+
return rms > 0 ? 20 * Math.log10(Math.max(rms, 1e-10)) : -100;
|
|
27
|
+
}
|
|
28
|
+
export class AudioDetectionLoop {
|
|
29
|
+
hooks;
|
|
30
|
+
logger;
|
|
31
|
+
running = false;
|
|
32
|
+
loopPromise;
|
|
33
|
+
stopPromise;
|
|
34
|
+
backoff = new ReconnectBackoff();
|
|
35
|
+
source;
|
|
36
|
+
constructor(hooks, logger) {
|
|
37
|
+
this.hooks = hooks;
|
|
38
|
+
this.logger = logger;
|
|
39
|
+
}
|
|
40
|
+
start() {
|
|
41
|
+
if (this.running || this.stopPromise)
|
|
42
|
+
return;
|
|
43
|
+
this.logger.debug('Starting audio detection loop');
|
|
44
|
+
this.running = true;
|
|
45
|
+
this.backoff.reset();
|
|
46
|
+
this.loopPromise = this.run();
|
|
47
|
+
}
|
|
48
|
+
async stop() {
|
|
49
|
+
if (!this.running) {
|
|
50
|
+
if (this.stopPromise)
|
|
51
|
+
await this.stopPromise;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.logger.debug('Stopping audio detection loop');
|
|
55
|
+
this.running = false;
|
|
56
|
+
const doStop = async () => {
|
|
57
|
+
await this.source?.stop();
|
|
58
|
+
await this.loopPromise;
|
|
59
|
+
this.loopPromise = undefined;
|
|
60
|
+
};
|
|
61
|
+
this.stopPromise = doStop();
|
|
62
|
+
try {
|
|
63
|
+
await this.stopPromise;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
this.stopPromise = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async waitForStop() {
|
|
70
|
+
if (this.stopPromise)
|
|
71
|
+
await this.stopPromise;
|
|
72
|
+
}
|
|
73
|
+
async run() {
|
|
74
|
+
const audioPlugin = this.hooks.getPlugin();
|
|
75
|
+
if (!audioPlugin?.requiresFrames)
|
|
76
|
+
return;
|
|
77
|
+
const audioSpec = isAudioModelSpec(audioPlugin.modelSpec) ? audioPlugin.modelSpec : undefined;
|
|
78
|
+
const sampleRate = audioSpec?.input.sampleRate ?? 16000;
|
|
79
|
+
const channels = audioSpec?.input.channels ?? 1;
|
|
80
|
+
const format = audioSpec?.input.format ?? 'float32';
|
|
81
|
+
const samplesPerFrame = audioSpec?.input.samplesPerFrame;
|
|
82
|
+
const audioConfig = {
|
|
83
|
+
streamUrl: this.hooks.getStreamUrl(),
|
|
84
|
+
sampleRate,
|
|
85
|
+
channels,
|
|
86
|
+
format,
|
|
87
|
+
samplesPerFrame,
|
|
88
|
+
};
|
|
89
|
+
while (this.running) {
|
|
90
|
+
try {
|
|
91
|
+
this.source = new AudioSource(audioConfig, this.logger);
|
|
92
|
+
await this.source.start();
|
|
93
|
+
this.logger.debug('Audio stream connected, processing audio frames...');
|
|
94
|
+
this.backoff.reset();
|
|
95
|
+
let frameCount = 0;
|
|
96
|
+
let lastAudioFrameId = -1;
|
|
97
|
+
while (this.running) {
|
|
98
|
+
const snap = await this.source.nextFrame(lastAudioFrameId);
|
|
99
|
+
if (!snap)
|
|
100
|
+
break; // source ended (stop or EOF)
|
|
101
|
+
lastAudioFrameId = snap.id;
|
|
102
|
+
const rawFrame = snap.frame;
|
|
103
|
+
frameCount++;
|
|
104
|
+
try {
|
|
105
|
+
const frameData = rawFrame.data;
|
|
106
|
+
if (!frameData?.[0])
|
|
107
|
+
continue;
|
|
108
|
+
const rawData = frameData[0];
|
|
109
|
+
const dBFS = calculateDBFS(rawData, format);
|
|
110
|
+
if (dBFS < this.hooks.getMinDecibels())
|
|
111
|
+
continue;
|
|
112
|
+
const audioFrame = {
|
|
113
|
+
cameraId: this.hooks.cameraId,
|
|
114
|
+
data: rawData,
|
|
115
|
+
sampleRate,
|
|
116
|
+
channels,
|
|
117
|
+
format,
|
|
118
|
+
timestamp: Date.now(),
|
|
119
|
+
};
|
|
120
|
+
const result = await audioPlugin.proxy.detectAudio(audioFrame);
|
|
121
|
+
if (!result)
|
|
122
|
+
continue;
|
|
123
|
+
this.hooks.onResult(audioPlugin.sensorId, result);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
this.logger.error('Audio detection error:', error);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
try {
|
|
130
|
+
rawFrame[Symbol.dispose]?.();
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// best-effort
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const streamError = this.source.lastError;
|
|
138
|
+
await this.source.stop();
|
|
139
|
+
if (this.running && streamError) {
|
|
140
|
+
const delay = this.backoff.nextDelayMs();
|
|
141
|
+
this.logger.warn(`Audio stream ended with read error, reconnecting in ${delay / 1000}s: ${streamError.message}`);
|
|
142
|
+
await sleep(delay);
|
|
143
|
+
}
|
|
144
|
+
else if (this.running && frameCount === 0) {
|
|
145
|
+
this.logger.debug('Audio stream ended without frames, waiting before reconnect...');
|
|
146
|
+
await sleep(this.backoff.idleDelayMs);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (!this.running)
|
|
151
|
+
break;
|
|
152
|
+
await this.source?.stop();
|
|
153
|
+
const delay = this.backoff.nextDelayMs();
|
|
154
|
+
this.logger.warn(`Audio stream error, reconnecting in ${delay / 1000}s: ${error.message}`);
|
|
155
|
+
await sleep(delay);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await this.source?.stop();
|
|
159
|
+
this.source = undefined;
|
|
160
|
+
this.logger.debug('Audio detection loop ended');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=audio-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-loop.js","sourceRoot":"","sources":["../../../../../src/camera/decoder/audio-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
// Default delay (ms) before cascade is marked inactive after the last trigger ends.
|
|
2
1
|
export const CASCADE_CLEAR_DELAY_MS = 1500;
|
|
3
2
|
export class CascadeManager {
|
|
4
3
|
active = false;
|
|
5
|
-
// Auto-clear timer for `triggerMomentary()`.
|
|
6
4
|
momentaryTimer;
|
|
7
5
|
momentaryFlag = false;
|
|
8
|
-
// Delayed cascade-end timer — gives brief trigger gaps a grace period.
|
|
9
6
|
deactivateTimer;
|
|
10
7
|
listeners = new Set();
|
|
11
8
|
get isActive() {
|
|
@@ -74,7 +71,7 @@ export class CascadeManager {
|
|
|
74
71
|
listener(event);
|
|
75
72
|
}
|
|
76
73
|
catch {
|
|
77
|
-
//
|
|
74
|
+
// ignore
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascade-manager.js","sourceRoot":"","sources":["../../../../../src/camera/decoder/cascade-manager.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"cascade-manager.js","sourceRoot":"","sources":["../../../../../src/camera/decoder/cascade-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
import { SensorType } from '@camera.ui/sdk';
|
|
2
2
|
import type { Logger } from '@camera.ui/common/logger';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type { CoordinatorSensorInfo
|
|
6
|
-
type
|
|
7
|
-
interface RegisteredPlugin {
|
|
8
|
-
pluginId: string;
|
|
9
|
-
sensorId: string;
|
|
10
|
-
sensorType: SensorType;
|
|
11
|
-
requiresFrames: boolean;
|
|
12
|
-
modelSpec?: AnyModelSpec;
|
|
13
|
-
proxy: Promisify<DetectionPluginInterface>;
|
|
14
|
-
}
|
|
15
|
-
export interface CoordinatorSourceUrl {
|
|
16
|
-
role: StreamingRole;
|
|
17
|
-
url: string;
|
|
18
|
-
}
|
|
3
|
+
import type { RPCClient } from '@camera.ui/rpc';
|
|
4
|
+
import type { CameraDetectionSettings, CameraFrameWorkerSettings, CameraUiSettings, DetectionLine, DetectionZone, PtzAutotrackSettings } from '@camera.ui/sdk';
|
|
5
|
+
import type { CoordinatorSensorInfo } from '../../rpc/interfaces/detection.js';
|
|
6
|
+
import type { CoordinatorSourceUrl } from './types.js';
|
|
19
7
|
export interface DetectionCoordinatorConfig {
|
|
20
8
|
cameraId: string;
|
|
21
9
|
streamUrl: string;
|
|
@@ -30,60 +18,34 @@ export interface DetectionCoordinatorConfig {
|
|
|
30
18
|
frameWorkerSettings: CameraFrameWorkerSettings;
|
|
31
19
|
interfaceSettings: CameraUiSettings;
|
|
32
20
|
}
|
|
33
|
-
export declare const DEFAULT_CASCADE_TIMEOUT = 10;
|
|
34
|
-
export declare const STATIONARY_SPEED_THRESHOLD = 0.002;
|
|
35
21
|
export declare class DetectionCoordinator {
|
|
36
22
|
private config;
|
|
37
23
|
private readonly proxy;
|
|
38
24
|
private readonly logger;
|
|
39
25
|
private frameSource;
|
|
40
26
|
private frameScaler;
|
|
41
|
-
private
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
private
|
|
45
|
-
private
|
|
46
|
-
private
|
|
47
|
-
private audioLoopRunning;
|
|
48
|
-
private audioLoopPromise?;
|
|
49
|
-
private audioStopPromise?;
|
|
50
|
-
private audioReconnectCount;
|
|
51
|
-
private reconnectCount;
|
|
52
|
-
private readonly maxReconnectCount;
|
|
53
|
-
private readonly normalReconnectDelay;
|
|
54
|
-
private readonly maxReconnectDelay;
|
|
27
|
+
private readonly plugins;
|
|
28
|
+
private readonly pipeline;
|
|
29
|
+
private readonly stationary;
|
|
30
|
+
private readonly secondaries;
|
|
31
|
+
private readonly thumbnailer;
|
|
32
|
+
private readonly audioLoop;
|
|
55
33
|
private readonly ptzAutotracker;
|
|
56
34
|
private readonly eventManager;
|
|
57
35
|
private readonly cascade;
|
|
58
36
|
private readonly dwell;
|
|
59
|
-
private
|
|
37
|
+
private readonly videoBackoff;
|
|
38
|
+
private loopRunning;
|
|
39
|
+
private loopPromise?;
|
|
40
|
+
private videoStopPromise?;
|
|
60
41
|
private adHocVideoLoop;
|
|
61
42
|
private processingExternalSecondary;
|
|
62
|
-
private hqSnapshotSource?;
|
|
63
|
-
private hqUpgradeInflight;
|
|
64
|
-
private hqAspectWarned;
|
|
65
43
|
private cascadeUnsubscribe?;
|
|
66
44
|
private dwellUnsubscribe?;
|
|
67
|
-
private seenStationaryTracks;
|
|
68
45
|
private readonly activeSensorTriggerTypes;
|
|
46
|
+
private readonly secondaryBboxSeen;
|
|
69
47
|
private currentDetectionState;
|
|
70
|
-
private get cascadeEnabled();
|
|
71
|
-
private get cascadeTimeoutSeconds();
|
|
72
|
-
private get audioMinDecibels();
|
|
73
|
-
private get motionResolution();
|
|
74
|
-
private get targetFps();
|
|
75
|
-
private get videoAspectRatio();
|
|
76
|
-
private nvrProxy?;
|
|
77
|
-
private nvrProxyPromise?;
|
|
78
48
|
constructor(config: DetectionCoordinatorConfig, proxy: RPCClient, logger: Logger);
|
|
79
|
-
private handleCascadeDeactivated;
|
|
80
|
-
private handleEventEnded;
|
|
81
|
-
private writeSensorProperties;
|
|
82
|
-
private buildSnapshot;
|
|
83
|
-
private getNormalizedDetectionZones;
|
|
84
|
-
private applyExternalDetectionFilters;
|
|
85
|
-
private ingestDetectionResult;
|
|
86
|
-
private updateBufferForType;
|
|
87
49
|
updateZones(zones: DetectionZone[]): void;
|
|
88
50
|
updateLines(lines: DetectionLine[]): void;
|
|
89
51
|
updateDetectionSettings(settings: CameraDetectionSettings): void;
|
|
@@ -94,62 +56,39 @@ export declare class DetectionCoordinator {
|
|
|
94
56
|
onSensorAdded(sensor: CoordinatorSensorInfo): Promise<void>;
|
|
95
57
|
onSensorRemoved(sensorId: string): Promise<void>;
|
|
96
58
|
onSensorCapabilitiesChanged(sensorId: string, capabilities: string[]): void;
|
|
97
|
-
private registerDetectionPluginInternal;
|
|
98
|
-
private removeDetectionPluginBySensor;
|
|
99
59
|
reportSensorWrite(sensorId: string, sensorType: SensorType, properties: Record<string, unknown>): Promise<void>;
|
|
100
60
|
reportSensorTrigger(sensorId: string, triggerType: string, action: 'activate' | 'deactivate', _sustained: boolean, timeoutSeconds: number): void;
|
|
101
61
|
reconcileSensorTriggers(activeSensorIds: readonly string[]): void;
|
|
102
|
-
private clearMotionStateForSuppression;
|
|
103
62
|
hasPlugin(sensorType: SensorType): boolean;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
private
|
|
111
|
-
private
|
|
112
|
-
private
|
|
113
|
-
private
|
|
114
|
-
private
|
|
115
|
-
private
|
|
116
|
-
private
|
|
63
|
+
private get cascadeEnabled();
|
|
64
|
+
private get cascadeTimeoutSeconds();
|
|
65
|
+
private get motionResolution();
|
|
66
|
+
private get targetFps();
|
|
67
|
+
private get videoAspectRatio();
|
|
68
|
+
private handleCascadeDeactivated;
|
|
69
|
+
private handleEventEnded;
|
|
70
|
+
private handleAudioLoopResult;
|
|
71
|
+
private writeSensorProperties;
|
|
72
|
+
private buildSnapshot;
|
|
73
|
+
private getNormalizedDetectionZones;
|
|
74
|
+
private applyExternalDetectionFilters;
|
|
75
|
+
private ingestDetectionResult;
|
|
76
|
+
private updateBufferForType;
|
|
77
|
+
private registerDetectionPluginInternal;
|
|
78
|
+
private removeDetectionPluginBySensor;
|
|
79
|
+
private handleSuppressionActivated;
|
|
80
|
+
private clearSecondaryBboxes;
|
|
81
|
+
private clearStaleSecondaryBboxes;
|
|
117
82
|
private startVideoLoop;
|
|
118
83
|
private stopVideoLoop;
|
|
119
|
-
private startAudioLoop;
|
|
120
|
-
private stopAudioLoop;
|
|
121
|
-
private hasFrameBasedSecondary;
|
|
122
|
-
private needsAdHocLoop;
|
|
123
84
|
private startAdHocVideoLoopIfNeeded;
|
|
124
85
|
private stopAdHocVideoLoopIfIdle;
|
|
125
|
-
private fetchEventThumbnailAsync;
|
|
126
|
-
private upgradeEventThumbnailAsync;
|
|
127
|
-
private acquireHqFrame;
|
|
128
|
-
private resolveHqSourceUrl;
|
|
129
|
-
private syncHqSnapshotSource;
|
|
130
|
-
private calculateDBFS;
|
|
131
|
-
private runAudioDetectionLoop;
|
|
132
86
|
private runDetectionLoop;
|
|
133
87
|
private processRawFrame;
|
|
134
88
|
private processDetection;
|
|
89
|
+
private runSecondariesAndThumbnails;
|
|
90
|
+
private ingestResultsForAllSecondaries;
|
|
135
91
|
private snapshotWillStartEvent;
|
|
136
|
-
private resolveFaceIdentities;
|
|
137
92
|
private scaleForMotion;
|
|
138
93
|
private scaleForObject;
|
|
139
|
-
private prepareSecondaryRegions;
|
|
140
|
-
private runSecondaryDetection;
|
|
141
|
-
private ingestResultsForAllSecondaries;
|
|
142
|
-
private runSecondariesAndThumbnails;
|
|
143
|
-
private runSecondariesFullFrame;
|
|
144
|
-
private prepareFullFrameRegions;
|
|
145
|
-
private prepareSecondaryFrames;
|
|
146
|
-
private runFaceDetection;
|
|
147
|
-
private runLicensePlateDetection;
|
|
148
|
-
private runClassifierDetections;
|
|
149
|
-
private runClipDetection;
|
|
150
|
-
private generateThumbnails;
|
|
151
|
-
private transformBoxToOriginal;
|
|
152
|
-
private getNvrProxy;
|
|
153
|
-
private resolveNvrProxy;
|
|
154
94
|
}
|
|
155
|
-
export {};
|