@camera.ui/server 2.2.3 → 2.2.4
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-D0S6IGok.js → 404-Bdbp69ox.js} +1 -1
- package/dist/interface/assets/{About-DAw9u8ZY.js → About-DmtCok-y.js} +1 -1
- package/dist/interface/assets/{Assistant-Gi6_YkEY.js → Assistant-D-Lv6JtY.js} +1 -1
- package/dist/interface/assets/{Automation-6eFKPJPu.js → Automation-LQ3TssrU.js} +3 -3
- package/dist/interface/assets/{AutomationImport-95PfbPvG.js → AutomationImport-B_ra3G3_.js} +2 -2
- package/dist/interface/assets/{AutomationStore-BHxzzx7a.js → AutomationStore-DSXSaQjp.js} +2 -2
- package/dist/interface/assets/{AutomationStoreDetail-DEVlRllt.js → AutomationStoreDetail-B5_Meb6R.js} +2 -2
- package/dist/interface/assets/{Automations-DEivoiS1.js → Automations-DHfPRe8W.js} +2 -2
- package/dist/interface/assets/Camera-B4ojNnKb.css +1 -0
- package/dist/interface/assets/Camera-CDbfvtJv.js +2 -0
- package/dist/interface/assets/{CameraConsole-B8bBYQzk.js → CameraConsole-DX-IRmd_.js} +1 -1
- package/dist/interface/assets/{Cameras-HblWPGCv.js → Cameras-D9m2bxWj.js} +1 -1
- package/dist/interface/assets/{Camview-DEKrbg5R.js → Camview-DKOYY6TI.js} +1 -1
- package/dist/interface/assets/{CertificateUpload-CC6YtX7h.js → CertificateUpload-B8ccb3n-.js} +1 -1
- package/dist/interface/assets/{Config-DQEaOnaN.js → Config-DCIUUWCv.js} +1 -1
- package/dist/interface/assets/{ConfigActionAssistant-C_XRnBzo.js → ConfigActionAssistant-6IUzZeNW.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-oRzM9rjX.js → ConfigActionCameraControl-EXuiNMuG.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-Dc-NZS5L.js → ConfigActionDelay-Cs4sYEk-.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-Nw0wt-JZ.js → ConfigActionHttp-gUM6RQ6Y.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-Do60Upqm.js → ConfigActionImageInput-CPl5kVgO.js} +1 -1
- package/dist/interface/assets/{ConfigActionMqtt-BeQVgaGX.js → ConfigActionMqtt-BeBMCOJ-.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-BA0FjOWs.js → ConfigActionNotification-DJFHdFDN.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotificationControl-Ce3Kd_Xv.js → ConfigActionNotificationControl-BXoztPTs.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-ChiOMWDy.js → ConfigActionOutput-BGrFWqZ1.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-Cn3r0glk.js → ConfigActionPlugin-CdIIMcJZ.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-DkdBCu-6.js → ConfigActionSensor-MRVGJ22A.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-CLlaDFUV.js → ConfigActionSnapshot-CxA4f5ag.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-D4x3Luxl.js → ConfigActionVariable-DmU4seLh.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-BpL8KZ5X.js → ConfigConditionIfElse-Tgdrk7lo.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-CSQexUF_.js → ConfigConditionSensorState-CyyzoL6Q.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-CB2J_5kr.js → ConfigConditionSwitch-DprK5AbR.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-X9fsNsYu.js → ConfigConditionTime-CDruEvBp.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-VPhPxrQl.js → ConfigSensorValueInput-BhlgTOW9.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-Dhzng4X5.js → ConfigTriggerDetection-4vdEST9Y.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-Cm0CLNf5.js → ConfigTriggerGeofence-1B0BdCOw.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerManual-CRi3rsgG.js → ConfigTriggerManual-BQLDqwZh.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-Ck__CWck.js → ConfigTriggerMqtt-B3YNOB6U.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-C1PZrHEu.js → ConfigTriggerSchedule-DhbJGOT7.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-9xVgCtkn.js → ConfigTriggerSensor-iMPg_Pmb.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-Denf1gkO.js → ConfigTriggerSystem-MaNZTO3h.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-im24LkCn.js → ConfigTriggerWebhook-B3WfXjPv.js} +1 -1
- package/dist/interface/assets/{Console-Q1HpmyO_.js → Console-BQLINPCG.js} +1 -1
- package/dist/interface/assets/{CuiAssistantConversation-BxJf9sdu.js → CuiAssistantConversation-yCRlgjtr.js} +1 -1
- package/dist/interface/assets/{CuiAutomationRunsDialog-B3tJ-Cma.js → CuiAutomationRunsDialog-CJ0mzDLL.js} +1 -1
- package/dist/interface/assets/{CuiBottomSheet-kvvLw1MQ.js → CuiBottomSheet-BbP0T2v3.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-BpMMQhmJ.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-1EhYM5kQ.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-CkkHbNyY.css +1 -0
- package/dist/interface/assets/CuiCameraRecordings-D2jG47AV.js +1 -0
- package/dist/interface/assets/{CuiCameraShares-B5ghuJS-.js → CuiCameraShares-IpkomKkl.js} +1 -1
- package/dist/interface/assets/CuiCameraTable-CNclH1KS.js +1 -0
- package/dist/interface/assets/{CuiCameraTable-Y5XUkU7w.js → CuiCameraTable-DlL-z_na.js} +1 -1
- package/dist/interface/assets/{CuiChartTable-CXdupaj5.js → CuiChartTable-B0EPcrgv.js} +1 -1
- package/dist/interface/assets/{CuiConsole-5KgXSOS5.js → CuiConsole-D8Xk2LXY.js} +1 -1
- package/dist/interface/assets/{CuiDataTable-hArZWV9B.js → CuiDataTable-DtRTB560.js} +1 -1
- package/dist/interface/assets/{CuiLightControl-MRpR0XIZ.js → CuiLightControl-CtL3sA8k.js} +1 -1
- package/dist/interface/assets/{CuiList-D-l4HrBP.js → CuiList-Bn7DT_Ao.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-whoQ5YHn.js → CuiPluginCard-B-4x6Mno.js} +2 -2
- package/dist/interface/assets/{CuiPluginCategoryChip-CH53zk2o.js → CuiPluginCategoryChip-Dih4zKtO.js} +1 -1
- package/dist/interface/assets/{CuiPluginOAuthButton-BBA0AzVO.js → CuiPluginOAuthButton-D-Y9KYJz.js} +2 -2
- package/dist/interface/assets/{CuiPluginTrustBadge-C0EX5aCI.js → CuiPluginTrustBadge-_g3Ctrg4.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-BRT0NO5c.js → CuiQRCode-D6hzmPzV.js} +1 -1
- package/dist/interface/assets/{CuiSchema-DBY1x1BT.js → CuiSchema-Dh8Mu4BK.js} +1 -1
- package/dist/interface/assets/{CuiTopNavbarItem-CpMT8_0r.js → CuiTopNavbarItem-CgX21E5K.js} +1 -1
- package/dist/interface/assets/Faces-CgDoKVkp.js +1 -0
- package/dist/interface/assets/{FirstSteps-B8n4fGK3.js → FirstSteps-CZSTX7Ot.js} +1 -1
- package/dist/interface/assets/{Floorplan-ZHXNaZA8.js → Floorplan-CRvmaf45.js} +1 -1
- package/dist/interface/assets/{Instances-DEj3gs6H.js → Instances-DRkhTQKC.js} +1 -1
- package/dist/interface/assets/{Logs-CwHvSKd6.js → Logs-CIDJSpdH.js} +1 -1
- package/dist/interface/assets/{Menu-C4BxUV0P.js → Menu-CM_F1jfd.js} +1 -1
- package/dist/interface/assets/{Metrics-BCOE-rcw.js → Metrics-DgJEg-ZK.js} +3 -3
- package/dist/interface/assets/Metrics-Ebv4qK2a.css +1 -0
- package/dist/interface/assets/{OAuthDeviceFlow-D6bjZOYS.js → OAuthDeviceFlow-BZ9LcgmJ.js} +1 -1
- package/dist/interface/assets/{Plugin-ppCvxkl4.js → Plugin-BBDpg6U_.js} +1 -1
- package/dist/interface/assets/{PluginConsole-BP42Qpee.js → PluginConsole-DxVlTuNy.js} +1 -1
- package/dist/interface/assets/{PluginDetail-BnX5lZGz.js → PluginDetail-fLGD3R-u.js} +2 -2
- package/dist/interface/assets/PluginSchema-CewD2H-K.js +1 -0
- package/dist/interface/assets/{PluginSearch-no79fTuf.js → PluginSearch-5wX7WEcz.js} +2 -2
- package/dist/interface/assets/PluginSearch-rDbuXm2z.js +1 -0
- package/dist/interface/assets/{PluginUpdateProgress-73jprYHA.js → PluginUpdateProgress-B7Lj0ttd.js} +1 -1
- package/dist/interface/assets/{Plugins-DtEqS6_j.js → Plugins-DVQ476iL.js} +1 -1
- package/dist/interface/assets/{RecentEventsFilter-CtyCbt6Z.js → RecentEventsFilter-CWNBI2Ge.js} +1 -1
- package/dist/interface/assets/Recordings-DSRgRVhN.js +1 -0
- package/dist/interface/assets/{SensorEdit-D4-mMg8S.js → SensorEdit-B1mYmxDV.js} +1 -1
- package/dist/interface/assets/{SensorHistory-C-X7VI-f.js → SensorHistory-D1kKroxp.js} +1 -1
- package/dist/interface/assets/{Sensors-BJh8BkCR.js → Sensors-yAc1M-oO.js} +2 -2
- package/dist/interface/assets/{Settings-B9CZvA-d.js → Settings-DBKgECRK.js} +1 -1
- package/dist/interface/assets/{SettingsAccount-D3zF2kLc.js → SettingsAccount-CM3XGNL6.js} +1 -1
- package/dist/interface/assets/SettingsAccount-i2nzGFdV.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-CbG8M38w.js → SettingsAppearance-C-nllv3m.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-DCgu01FJ.js +1 -0
- package/dist/interface/assets/{SettingsAssistant-DxYPnbms.js → SettingsAssistant-ClRO04fv.js} +1 -1
- package/dist/interface/assets/{SettingsBackup-DZBzUyQm.js → SettingsBackup-Cq_eLVCR.js} +1 -1
- package/dist/interface/assets/{SettingsList-DFg8g7IM.js → SettingsList-Bklt3TQO.js} +1 -1
- package/dist/interface/assets/{SettingsMqtt-BeujOZkh.js → SettingsMqtt-BLkP0en6.js} +1 -1
- package/dist/interface/assets/{SettingsNotifications-DtSTE76r.js → SettingsNotifications-CeUKfEnH.js} +1 -1
- package/dist/interface/assets/{SettingsPermissions-CPOAefv0.js → SettingsPermissions-Cpka-k3Q.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-ClAtT4Bh.js → SettingsRecordings-k20qTe7K.js} +1 -1
- package/dist/interface/assets/{SettingsRemote-58S4Thfp.js → SettingsRemote-CdUj0nZ1.js} +1 -1
- package/dist/interface/assets/{SettingsSystem-tTGpuiRW.js → SettingsSystem-6OChvWL7.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-D8b7I5c2.js → SettingsUsers-B57uZ8jn.js} +1 -1
- package/dist/interface/assets/{Terminal-1_Fi0VW-.js → Terminal-WMgVSORW.js} +1 -1
- package/dist/interface/assets/Training-BkWlywj_.js +1 -0
- package/dist/interface/assets/{Training-CQHfQjUP.css → Training-Dwf5rXyC.css} +1 -1
- package/dist/interface/assets/{Updates-BW0p7Wc5.js → Updates-Dwrd6PQl.js} +1 -1
- package/dist/interface/assets/{VariableInput-sqnLuk6S.js → VariableInput-CDJXnzEV.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-3pbnxhyT.js → VariableSuggestions-CNq7O1o-.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-CWmjDygB.js → VersionsHandler-C0A8Ryhn.js} +1 -1
- package/dist/interface/assets/{VirtualSensorCreate-BzmFlvYD.js → VirtualSensorCreate-zEehu8Fg.js} +1 -1
- package/dist/interface/assets/{Workers-Dm9o2wMo.js → Workers-Be7q2vOK.js} +1 -1
- package/dist/interface/assets/{api-CQ-3I3-i.js → api-CSl3-BNZ.js} +1 -1
- package/dist/interface/assets/api-DcaDMCnj.css +2 -0
- package/dist/interface/assets/api-vegsDz6n.js +4 -0
- package/dist/interface/assets/{assistant-0UymvpMy.js → assistant-jARIkvB1.js} +1 -1
- package/dist/interface/assets/{auth-C0jhqNaz.js → auth-Bov4B1jy.js} +1 -1
- package/dist/interface/assets/{automations-Bj30nb8s.js → automations-CJe7TvLk.js} +1 -1
- package/dist/interface/assets/{cameraSources-CiMjIjsh.js → cameraSources-CDiYtBzG.js} +1 -1
- package/dist/interface/assets/cloudHandoff-BoV37fDI.js +1 -0
- package/dist/interface/assets/{config-D-uVfwYp.js → config-iO2vrtak.js} +1 -1
- package/dist/interface/assets/{flowSchema-D3nNJVLL.js → flowSchema-B0vIoy4y.js} +1 -1
- package/dist/interface/assets/{intercomService-BeoNs-09.js → intercomService-IAAXcRPG.js} +1 -1
- package/dist/interface/assets/main-DQgH1fon.js +3 -0
- package/dist/interface/assets/{mqtt-D7jRwifB.js → mqtt-DfpSLxes.js} +1 -1
- package/dist/interface/assets/{notifications-BpRVoerg.js → notifications-jTSwwN1i.js} +1 -1
- package/dist/interface/assets/{plugins-wZ4RDxCb.js → plugins-ChyJXprl.js} +1 -1
- package/dist/interface/assets/{rooms-CFcu2dU1.js → rooms-BMWJpAXC.js} +1 -1
- package/dist/interface/assets/{sensorIcons-B117n8l2.js → sensorIcons-dUp8Tone.js} +1 -1
- package/dist/interface/assets/{sensorSlots-CAr3prFc.js → sensorSlots-CosoVMys.js} +1 -1
- package/dist/interface/assets/{sensors-oriEG3KR.js → sensors-DLdbNuoj.js} +1 -1
- package/dist/interface/assets/{server-Ce6ou2NV.js → server-D-qkU2-U.js} +1 -1
- package/dist/interface/assets/{theme-CBTC6-Lp.js → theme-DhneHMji.js} +1 -1
- package/dist/interface/assets/{types-CzjppLwt.js → types-CngwbyEy.js} +1 -1
- package/dist/interface/assets/{types-C-amdBz6.js → types-DDpq8alD.js} +1 -1
- package/dist/interface/assets/{types-CjU6-JvD.js → types-DdyAGRju.js} +1 -1
- package/dist/interface/assets/{ungrouped-AYNBKz52.css → ungrouped-DBRZ-Ori.css} +1 -1
- package/dist/interface/assets/ungrouped-e2tQIZD2.js +1 -0
- package/dist/interface/assets/{updates-Cohtc6vb.js → updates-DnVisGT3.js} +1 -1
- package/dist/interface/assets/{useAppVersion-xxi6fR7J.js → useAppVersion-gtzMlM4b.js} +1 -1
- package/dist/interface/assets/{useAssistantActions-BkRK1FBg.js → useAssistantActions-BIHVky9T.js} +1 -1
- package/dist/interface/assets/{useBackupRestore-BGvhSqJB.js → useBackupRestore-DfgufKp3.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-ophs2V4p.js → useCameraOptions-B9yEPgGd.js} +1 -1
- package/dist/interface/assets/{useKeyboardInset-Cpz6Hs5c.js → useKeyboardInset-1sUlRSeV.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-CB07yhv4.js → useLogsSocket-C2QUQqkZ.js} +1 -1
- package/dist/interface/assets/{useNavLayout-BYEejBpb.js → useNavLayout-Br4MtSjQ.js} +1 -1
- package/dist/interface/assets/{usePermissions-yWhjYMcr.js → usePermissions-B8pw9jk1.js} +1 -1
- package/dist/interface/assets/{usePluginUpdates-9rvsWfdJ.js → usePluginUpdates-Cx9PwENn.js} +1 -1
- package/dist/interface/assets/{usePushRegistration-b5owOzjH.js → usePushRegistration-CLEyagJM.js} +1 -1
- package/dist/interface/assets/{useServerRestart-yRXDWnH_.js → useServerRestart-BBp4cko_.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-BHyWrAHu.js → useStreamStatus-BrPjpyzs.js} +1 -1
- package/dist/interface/assets/{useTabSwipe-Dr9HYP1J.js → useTabSwipe-B4edrv6o.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-IVj0XKlN.js → useUpdateChannel-DugwYo8J.js} +1 -1
- package/dist/interface/assets/{useUpdatesSocket-CuPHbSF7.js → useUpdatesSocket-CgCXGGVg.js} +1 -1
- package/dist/interface/assets/{useUserOptions-zIfrMDiG.js → useUserOptions-DTlKtp_u.js} +1 -1
- package/dist/interface/assets/vendor-cameraui-D0VXSxSF.js +2326 -0
- package/dist/interface/assets/{vendor-core-CQ2HVu0L.js → vendor-core-Ba81bBNM.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-CeWNZxSE.js → vendor-primevue-LZEE4d1W.js} +1 -1
- package/dist/interface/ha/{404-B70KNhsW.js → 404-CkAIe5nc.js} +1 -1
- package/dist/interface/ha/{About-DLNqqctZ.js → About-C7HxP7hM.js} +3 -3
- package/dist/interface/ha/{Assistant-Duvvoz2B.js → Assistant-DJYxiCOY.js} +278 -278
- package/dist/interface/ha/{Automation-DZ8zvsvo.js → Automation-CfNHCeIm.js} +41 -41
- package/dist/interface/ha/{AutomationImport-DOCdim5O.js → AutomationImport-Dn3C1604.js} +6 -6
- package/dist/interface/ha/{AutomationStore-Bjoubp-m.js → AutomationStore-D63G9w2Y.js} +7 -7
- package/dist/interface/ha/{AutomationStoreDetail-H-RWNpwm.js → AutomationStoreDetail-HoUC8cSY.js} +6 -6
- package/dist/interface/ha/{Automations-GyofQfo7.js → Automations-BOlE1Evb.js} +43 -43
- package/dist/interface/ha/{Camera-Bo5nMQaU.js → Camera-6Vvo7nee.js} +225 -213
- package/dist/interface/ha/{CameraConsole-BmDQ3rcS.js → CameraConsole-DYSNDW4P.js} +3 -3
- package/dist/interface/ha/{Cameras-BfHoFjpC.js → Cameras-CxgwXUaG.js} +306 -306
- package/dist/interface/ha/{Camview-DVoIdM3o.js → Camview-DPjoUMSP.js} +227 -227
- package/dist/interface/ha/{Config-CC8tQiOy.js → Config-BzBFIWVF.js} +7 -7
- package/dist/interface/ha/{ConfigActionAssistant-hfsz38an.js → ConfigActionAssistant-BpHf4Pdi.js} +4 -4
- package/dist/interface/ha/{ConfigActionCameraControl-C0-wxlAS.js → ConfigActionCameraControl-CmbCTwZ8.js} +3 -3
- package/dist/interface/ha/{ConfigActionHttp-CM_3bIUq.js → ConfigActionHttp-BxN2KOA6.js} +2 -2
- package/dist/interface/ha/{ConfigActionImageInput-B5306Z_7.js → ConfigActionImageInput-CrXUZ-cM.js} +1 -1
- package/dist/interface/ha/{ConfigActionMqtt-DLiM83Kz.js → ConfigActionMqtt-DYq-6_S6.js} +4 -4
- package/dist/interface/ha/{ConfigActionNotification-36VBlfim.js → ConfigActionNotification-DPUSAVLI.js} +3 -3
- package/dist/interface/ha/{ConfigActionNotificationControl-DRjDvA1H.js → ConfigActionNotificationControl-h4zta4Db.js} +2 -2
- package/dist/interface/ha/{ConfigActionOutput-BkGHERoJ.js → ConfigActionOutput-Dwa0-7cq.js} +1 -1
- package/dist/interface/ha/{ConfigActionPlugin-Ds1_Pow7.js → ConfigActionPlugin-DXx1a-Hr.js} +5 -5
- package/dist/interface/ha/{ConfigActionSensor-22uKE0d0.js → ConfigActionSensor-CfLIHqS8.js} +5 -5
- package/dist/interface/ha/{ConfigActionSnapshot-uTTsTfo2.js → ConfigActionSnapshot-O0OBVq-R.js} +2 -2
- package/dist/interface/ha/{ConfigActionVariable-DNMJBiQV.js → ConfigActionVariable-CbaIxRRe.js} +1 -1
- package/dist/interface/ha/{ConfigConditionIfElse-BVzmIDKK.js → ConfigConditionIfElse-B7ax92bG.js} +3 -3
- package/dist/interface/ha/{ConfigConditionSensorState-Di7Ic1xI.js → ConfigConditionSensorState-B5XIrEGU.js} +4 -4
- package/dist/interface/ha/{ConfigConditionSwitch-D8CcTHJ1.js → ConfigConditionSwitch-DJSz6bI5.js} +5 -5
- package/dist/interface/ha/{ConfigSensorValueInput-DthsOthT.js → ConfigSensorValueInput-fE2SBn1B.js} +4 -4
- package/dist/interface/ha/{ConfigTriggerDetection-BDYanDEV.js → ConfigTriggerDetection-BuShu78G.js} +2 -2
- package/dist/interface/ha/{ConfigTriggerGeofence-Binp0lYx.js → ConfigTriggerGeofence-pBgXBkb6.js} +6 -6
- package/dist/interface/ha/{ConfigTriggerMqtt-BaPzSHbK.js → ConfigTriggerMqtt-Dyf_TLfU.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSensor-DiTaTZXm.js → ConfigTriggerSensor-C5YUm9ff.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSystem-CsdWiz-S.js → ConfigTriggerSystem-CylHWw4i.js} +2 -2
- package/dist/interface/ha/{ConfigTriggerWebhook-Ca0PsUmU.js → ConfigTriggerWebhook-ZlHsaLu4.js} +1 -1
- package/dist/interface/ha/{Console-0amlIoZR.js → Console-PNAQjW_1.js} +98 -98
- package/dist/interface/ha/{CuiAutomationRunsDialog-DNBuwkgL.js → CuiAutomationRunsDialog-D_q8K7QO.js} +2 -2
- package/dist/interface/ha/{CuiBottomSheet-CdXBYz4P.js → CuiBottomSheet-BbJG-998.js} +1 -1
- package/dist/interface/ha/{CuiCameraRecordings-D4ZB56nd.js → CuiCameraRecordings-BSI8Yn3v.js} +11 -11
- package/dist/interface/ha/{CuiCameraShares-YmzZusZR.js → CuiCameraShares-DKHZJT-z.js} +4 -4
- package/dist/interface/ha/{CuiCameraTable-DFzhCO3J.js → CuiCameraTable-BTdP1pEP.js} +2 -2
- package/dist/interface/ha/{CuiChartTable-BvfJbFNS.js → CuiChartTable-aFRfsewt.js} +4 -4
- package/dist/interface/ha/{CuiConsole-DtxyD6Sd.js → CuiConsole-BD9jYvrD.js} +4 -4
- package/dist/interface/ha/{CuiDataTable-CHvx6ALQ.js → CuiDataTable-C2lOduPV.js} +2 -2
- package/dist/interface/ha/{CuiPluginCard-B3vU57eD.js → CuiPluginCard-C-gpcLCH.js} +18 -18
- package/dist/interface/ha/{CuiPluginOAuthButton-DgOFfP5e.js → CuiPluginOAuthButton-B763Rz1n.js} +3 -3
- package/dist/interface/ha/{CuiPluginTrustBadge-udmtgGHt.js → CuiPluginTrustBadge-j5PKYI-V.js} +1 -1
- package/dist/interface/ha/{CuiQRCode-8yDZMC3o.js → CuiQRCode-D7WV4czh.js} +2 -2
- package/dist/interface/ha/{CuiSchema-0Hikg2mm.js → CuiSchema-BfsT0mAh.js} +96 -96
- package/dist/interface/ha/{CuiTopNavbarItem-B139fVxP.js → CuiTopNavbarItem-BwpXgGJ-.js} +1 -1
- package/dist/interface/ha/{Faces-YdAf9USr.js → Faces-C0e-m9EY.js} +48 -48
- package/dist/interface/ha/{FirstSteps-Dts6TJ6O.js → FirstSteps-DsDmM44G.js} +7 -7
- package/dist/interface/ha/{Floorplan-D6XXe8ni.js → Floorplan-Bei9kIhS.js} +206 -206
- package/dist/interface/ha/{Instances-DsIsonqp.js → Instances-BY5G1zFD.js} +66 -66
- package/dist/interface/ha/{Logs-Cyo3LC94.js → Logs-DDycObDv.js} +9 -9
- package/dist/interface/ha/{Menu-yh_sI9d9.js → Menu-9r_oFG_-.js} +3 -3
- package/dist/interface/ha/{Metrics-VehQmsmN.js → Metrics-BMTIXqn6.js} +283 -279
- package/dist/interface/ha/{OAuthDeviceFlow-CXp9NvbY.js → OAuthDeviceFlow-Dee5fynX.js} +3 -3
- package/dist/interface/ha/{Plugin-BqvlXx43.js → Plugin-B5o4pLyu.js} +41 -41
- package/dist/interface/ha/{PluginConsole-Dx84BNoO.js → PluginConsole-REtxP1Wi.js} +4 -4
- package/dist/interface/ha/{PluginDetail-DUpDS2nD.js → PluginDetail-BHrKifvP.js} +5 -5
- package/dist/interface/ha/{PluginSearch-Cvh0P9VB.js → PluginSearch-oNHMMeJD.js} +124 -124
- package/dist/interface/ha/{PluginUpdateProgress-CfyI2Qdp.js → PluginUpdateProgress-CqllA4eR.js} +3 -3
- package/dist/interface/ha/{Plugins-DXreIUwr.js → Plugins-B6y7z5yD.js} +173 -173
- package/dist/interface/ha/{Recordings-Cb8ifRcB.js → Recordings-CyhOVNoM.js} +168 -191
- package/dist/interface/ha/{SensorEdit-CsNXxcdj.js → SensorEdit-CnUU2PEv.js} +3 -3
- package/dist/interface/ha/{SensorHistory-DToDalOm.js → SensorHistory-z5hDuybW.js} +2 -2
- package/dist/interface/ha/{Sensors-B6giaowJ.js → Sensors-wpoB-X4r.js} +372 -372
- package/dist/interface/ha/{Settings-CVed7MM_.js → Settings-C6wTksxb.js} +3 -3
- package/dist/interface/ha/{SettingsAccount-CvvsLPoT.js → SettingsAccount-DByg5uzj.js} +178 -178
- package/dist/interface/ha/{SettingsAppearance-BDJeNGTd.js → SettingsAppearance-QgPo4M8O.js} +4 -4
- package/dist/interface/ha/{SettingsAssistant-B168p5HB.js → SettingsAssistant-Bg4BhUgb.js} +78 -78
- package/dist/interface/ha/{SettingsBackup-Bz_9xJ61.js → SettingsBackup-BgtZSRub.js} +39 -39
- package/dist/interface/ha/{SettingsList-B42rajJc.js → SettingsList-DB3j7buh.js} +1 -1
- package/dist/interface/ha/{SettingsMqtt-B5Qy6bxD.js → SettingsMqtt-DVx0z8vf.js} +14 -14
- package/dist/interface/ha/SettingsNotifications-osO2kMMO.js +529 -0
- package/dist/interface/ha/{SettingsRecordings-CkJGOiyQ.js → SettingsRecordings-BFEp160g.js} +7 -7
- package/dist/interface/ha/{SettingsRemote-Cc-qt3si.js → SettingsRemote-DQW4FhFn.js} +403 -403
- package/dist/interface/ha/{SettingsSystem-Cco2XXsS.js → SettingsSystem-Cs1MHOTi.js} +9 -9
- package/dist/interface/ha/{SettingsUsers-BDh-3saR.js → SettingsUsers-BtbuHlRZ.js} +23 -23
- package/dist/interface/ha/{Terminal-D2U-kFPW.js → Terminal-BuXCoMle.js} +4 -4
- package/dist/interface/ha/Training-CnsWyeaJ.js +1505 -0
- package/dist/interface/ha/{Updates-DGHNcvO9.js → Updates-BxU1Jpru.js} +5 -5
- package/dist/interface/ha/{VariableInput-Bujz1T1I.js → VariableInput-DgENnHvk.js} +1 -1
- package/dist/interface/ha/{VersionsHandler-CXvbeKbl.js → VersionsHandler-DQTSSqti.js} +10 -10
- package/dist/interface/ha/{VirtualSensorCreate-DOYONbgu.js → VirtualSensorCreate-Bsr6zTQp.js} +2 -2
- package/dist/interface/ha/{Workers-tQbC3WS6.js → Workers-0jZDuLbP.js} +14 -14
- package/dist/interface/ha/{api-DfJZj7ht.js → api-B8xb-N_g.js} +1 -1
- package/dist/interface/ha/{api-BI6_Fcag.js → api-VnpXqKYj.js} +7769 -7443
- package/dist/interface/ha/{assistant-BqSg4N8v.js → assistant-DDwonneA.js} +25 -25
- package/dist/interface/ha/{auth-BFoSqfzS.js → auth-CXX7ago-.js} +22 -22
- package/dist/interface/ha/{automationBlueprint-Q0yt2MdH.js → automationBlueprint-BUkXOKb1.js} +3 -3
- package/dist/interface/ha/cameraui-cards.js +1 -1
- package/dist/interface/ha/{cards-BW9I5B5Z.js → cards-CMel6uVq.js} +639 -637
- package/dist/interface/ha/{config-CeNHEP9A.js → config-9vwosYC8.js} +9 -9
- package/dist/interface/ha/{dist-BV3OfApt.js → dist-jxJIsKjm.js} +306 -282
- package/dist/interface/ha/{mqtt-BkYa2CXH.js → mqtt-Fm_GzbBi.js} +7 -7
- package/dist/interface/ha/{notifications-E3WSCGpc.js → notifications-CwSeoLx0.js} +12 -12
- package/dist/interface/ha/{pinia-DoDLbPZ3.js → pinia-D2fpp6nV.js} +150 -143
- package/dist/interface/ha/{plugins-2jjU7TfW.js → plugins-CgqO91Hg.js} +30 -30
- package/dist/interface/ha/{rooms-BkEw1ev-.js → rooms-DGnhPCGr.js} +1 -1
- package/dist/interface/ha/{server-CuK4o2fS.js → server-BqNJbXKJ.js} +15 -15
- package/dist/interface/ha/{types-BRHWeX0a.js → types-Ca-1kOA9.js} +18 -18
- package/dist/interface/ha/{ungrouped-BDwep3kg.js → ungrouped-B1RIFH36.js} +192 -192
- package/dist/interface/ha/{updates-R4xTxour.js → updates-Dn9WR43I.js} +26 -26
- package/dist/interface/ha/{useAppVersion-uaFjqUpx.js → useAppVersion-FMZfQhEd.js} +1 -1
- package/dist/interface/ha/{useLogsSocket-BZq9GXfy.js → useLogsSocket-Ch8C8inE.js} +1 -1
- package/dist/interface/ha/{useNavLayout-BJdDE__R.js → useNavLayout-DPjjtXVR.js} +2 -2
- package/dist/interface/ha/{useServerRestart-DDCKnE6c.js → useServerRestart-DoozgL8o.js} +1 -1
- package/dist/interface/ha/{useTabSwipe-CEH6ltIZ.js → useTabSwipe-CxXAmZNc.js} +1 -1
- package/dist/interface/ha/{useUpdateChannel-CHt1il2V.js → useUpdateChannel-CBwS4cI2.js} +2 -2
- package/dist/interface/ha/{useUpdatesSocket-BnVaNioY.js → useUpdatesSocket-GrlBqyU4.js} +1 -1
- package/dist/interface/ha/{useUserOptions-C7cQ1P3Q.js → useUserOptions-54hnf6hX.js} +1 -1
- package/dist/interface/index.html +31 -31
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +5 -5
- package/dist/server/src/api/database/record-schemas.d.ts +10 -10
- package/dist/server/src/api/schemas/cameras.schema.d.ts +22 -22
- package/dist/server/src/api/schemas/users.schema.d.ts +70 -70
- package/dist/server/src/api/websocket/nsp/metrics.d.ts +0 -1
- package/dist/server/src/api/websocket/nsp/metrics.js +2 -48
- package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/worker-perf.d.ts +3 -0
- package/dist/server/src/api/websocket/nsp/worker-perf.js +58 -0
- package/dist/server/src/api/websocket/nsp/worker-perf.js.map +1 -0
- package/dist/server/src/api/websocket/types.d.ts +1 -0
- package/dist/server/src/assistant/search.d.ts +11 -11
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +6 -0
- package/dist/server/src/camera/decoder/detection-coordinator.js +117 -20
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-pipeline.d.ts +3 -1
- package/dist/server/src/camera/decoder/detection-pipeline.js +4 -0
- package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +1 -0
- package/dist/server/src/camera/decoder/event-manager.js +5 -2
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +4 -0
- package/dist/server/src/camera/decoder/event-thumbnailer.js +3 -0
- package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
- package/dist/server/src/camera/decoder/event-trace.d.ts +2 -0
- package/dist/server/src/camera/decoder/event-trace.js +9 -5
- package/dist/server/src/camera/decoder/event-trace.js.map +1 -1
- package/dist/server/src/camera/decoder/perf-tracker.d.ts +5 -1
- package/dist/server/src/camera/decoder/perf-tracker.js +10 -2
- package/dist/server/src/camera/decoder/perf-tracker.js.map +1 -1
- package/dist/server/src/camera/decoder/types.d.ts +5 -1
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/rpc/interfaces/detection.d.ts +1 -0
- package/dist/server/src/sensors/registry.d.ts +1 -0
- package/dist/server/src/sensors/registry.js +9 -3
- package/dist/server/src/sensors/registry.js.map +1 -1
- package/dist/server/src/sensors/sensor.js +2 -3
- package/dist/server/src/sensors/sensor.js.map +1 -1
- package/dist/server/src/sensors/types.d.ts +2 -1
- package/dist/server/src/sensors/types.js +7 -1
- package/dist/server/src/sensors/types.js.map +1 -1
- package/package.json +5 -5
- package/dist/interface/assets/Camera-B5l_gv7t.js +0 -2
- package/dist/interface/assets/Camera-gYRy6ECP.css +0 -1
- package/dist/interface/assets/CuiBottomSheet-C37blNu-.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-TVAf5ZYQ.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-C26rX8dh.css +0 -1
- package/dist/interface/assets/CuiCameraRecordings-IHg1dNf4.js +0 -1
- package/dist/interface/assets/CuiCameraTable-xDZz7Wpe.js +0 -1
- package/dist/interface/assets/Faces-Dqi30qs9.js +0 -1
- package/dist/interface/assets/Metrics-DX59XXDc.css +0 -1
- package/dist/interface/assets/PluginSchema-uVKXzfo6.js +0 -1
- package/dist/interface/assets/PluginSearch-C4MvWyLb.js +0 -1
- package/dist/interface/assets/Recordings-DrcOsRLn.js +0 -1
- package/dist/interface/assets/SettingsAccount-CkvScQmF.js +0 -1
- package/dist/interface/assets/SettingsAppearance-ZHqNXXIL.js +0 -1
- package/dist/interface/assets/Training-DfOqDTHJ.js +0 -1
- package/dist/interface/assets/api-B6TtU9Ew.css +0 -2
- package/dist/interface/assets/api-DPgKdIQZ.js +0 -4
- package/dist/interface/assets/cloudHandoff-Cxljjl7N.js +0 -1
- package/dist/interface/assets/main-BrNGfemk.js +0 -3
- package/dist/interface/assets/ungrouped-BQzKp2PT.js +0 -1
- package/dist/interface/assets/vendor-cameraui-Dhg7MEnt.js +0 -2326
- package/dist/interface/ha/SettingsNotifications-C59UxYic.js +0 -529
- package/dist/interface/ha/Training-DWcaCI-3.js +0 -1499
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
function round(value) {
|
|
2
|
+
return Math.round(value * 10) / 10;
|
|
3
|
+
}
|
|
4
|
+
function per(total, count) {
|
|
5
|
+
return count > 0 ? round(total / count) : 0;
|
|
6
|
+
}
|
|
7
|
+
function percent(part, whole) {
|
|
8
|
+
return whole > 0 ? Math.min(100, Math.round((part / whole) * 100)) : 0;
|
|
9
|
+
}
|
|
10
|
+
export function deriveWorkerPerf(snapshot, pluginName) {
|
|
11
|
+
const objectFrames = snapshot.objectCount;
|
|
12
|
+
const judgedFrames = snapshot.objectCount + snapshot.assistCount;
|
|
13
|
+
const fallback = {
|
|
14
|
+
motion: per(snapshot.motionMs, snapshot.motionCount),
|
|
15
|
+
object: per(snapshot.objectMs, snapshot.objectCount),
|
|
16
|
+
face: per(snapshot.faceMs, snapshot.faceCount),
|
|
17
|
+
licensePlate: per(snapshot.plateMs, snapshot.plateCount),
|
|
18
|
+
classifier: per(snapshot.classifierMs, snapshot.classifierCount),
|
|
19
|
+
clip: per(snapshot.clipMs, snapshot.clipCount),
|
|
20
|
+
};
|
|
21
|
+
const detectors = {};
|
|
22
|
+
for (const [type, info] of Object.entries(snapshot.detectors)) {
|
|
23
|
+
detectors[type] = {
|
|
24
|
+
plugin: pluginName(info.plugin) ?? info.plugin,
|
|
25
|
+
input: info.input,
|
|
26
|
+
runtime: info.runtime,
|
|
27
|
+
models: info.models,
|
|
28
|
+
inferenceMs: info.calls ? per(info.handlerMs ?? 0, info.calls) : (fallback[type] ?? 0),
|
|
29
|
+
transportMs: info.calls ? per(info.transportMs ?? 0, info.calls) : 0,
|
|
30
|
+
stamped: Boolean(info.calls),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const scaleMs = per(snapshot.scaleMs, objectFrames);
|
|
34
|
+
const postMs = per(snapshot.postMs, objectFrames);
|
|
35
|
+
const motionScaleMs = per(snapshot.motionScaleMs, snapshot.motionScaleCount);
|
|
36
|
+
return {
|
|
37
|
+
detectors,
|
|
38
|
+
processingMs: objectFrames > 0 ? round(scaleMs + postMs) : motionScaleMs,
|
|
39
|
+
decodeMs: per(snapshot.decodeMs, snapshot.decodedFrames),
|
|
40
|
+
mainDecodeMs: per(snapshot.mainDecodeMs, snapshot.mainDecodedFrames),
|
|
41
|
+
scaleMs,
|
|
42
|
+
postMs,
|
|
43
|
+
motionScaleMs,
|
|
44
|
+
transportMs: detectors.object?.transportMs ?? 0,
|
|
45
|
+
analysedFps: snapshot.loopMs > 0 ? round(snapshot.ticks / (snapshot.loopMs / 1000)) : 0,
|
|
46
|
+
mainFps: snapshot.mainLoopMs > 0 ? round(snapshot.mainTicks / (snapshot.mainLoopMs / 1000)) : 0,
|
|
47
|
+
mainStreamEnabled: snapshot.mainStreamEnabled,
|
|
48
|
+
frameAnalysis: snapshot.frameAnalysis,
|
|
49
|
+
activePercent: percent(snapshot.loopMs, snapshot.uptimeMs),
|
|
50
|
+
zoomPercent: percent(snapshot.zoomTicks, objectFrames),
|
|
51
|
+
zoomWindows: per(snapshot.zoomWindows, snapshot.zoomTicks),
|
|
52
|
+
objectsPerFrame: per(snapshot.objects, judgedFrames),
|
|
53
|
+
hitPercent: percent(snapshot.framesWithObjects, judgedFrames),
|
|
54
|
+
switches: snapshot.switches,
|
|
55
|
+
minutes: Math.round(snapshot.uptimeMs / 60_000),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=worker-perf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-perf.js","sourceRoot":"","sources":["../../../../../../src/api/websocket/nsp/worker-perf.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,37 +32,37 @@ export declare const SEARCH_SCHEMA: zod.ZodObject<{
|
|
|
32
32
|
license_plate: "license_plate";
|
|
33
33
|
}>>;
|
|
34
34
|
sensorEvents: zod.ZodArray<zod.ZodEnum<{
|
|
35
|
-
audio: "audio";
|
|
36
35
|
motion: "motion";
|
|
37
|
-
|
|
38
|
-
doorbell: "doorbell";
|
|
36
|
+
audio: "audio";
|
|
39
37
|
contact: "contact";
|
|
38
|
+
doorbell: "doorbell";
|
|
39
|
+
switch: "switch";
|
|
40
|
+
light: "light";
|
|
41
|
+
siren: "siren";
|
|
40
42
|
security_system: "security_system";
|
|
43
|
+
"line-crossing": "line-crossing";
|
|
44
|
+
occupancy: "occupancy";
|
|
41
45
|
smoke: "smoke";
|
|
46
|
+
leak: "leak";
|
|
42
47
|
gas: "gas";
|
|
43
48
|
carbonMonoxide: "carbonMonoxide";
|
|
44
49
|
heat: "heat";
|
|
45
|
-
leak: "leak";
|
|
46
50
|
cold: "cold";
|
|
47
51
|
vibration: "vibration";
|
|
48
52
|
tamper: "tamper";
|
|
49
53
|
problem: "problem";
|
|
50
|
-
|
|
51
|
-
switch: "switch";
|
|
54
|
+
power: "power";
|
|
52
55
|
lock: "lock";
|
|
53
|
-
occupancy: "occupancy";
|
|
54
56
|
garage: "garage";
|
|
55
|
-
power: "power";
|
|
56
|
-
"line-crossing": "line-crossing";
|
|
57
57
|
}>>;
|
|
58
58
|
audioLabels: zod.ZodArray<zod.ZodEnum<{
|
|
59
|
+
doorbell: "doorbell";
|
|
60
|
+
siren: "siren";
|
|
59
61
|
glass_break: "glass_break";
|
|
60
62
|
scream: "scream";
|
|
61
63
|
gunshot: "gunshot";
|
|
62
64
|
alarm: "alarm";
|
|
63
|
-
siren: "siren";
|
|
64
65
|
smoke_alarm: "smoke_alarm";
|
|
65
|
-
doorbell: "doorbell";
|
|
66
66
|
speaking: "speaking";
|
|
67
67
|
dog_bark: "dog_bark";
|
|
68
68
|
baby_cry: "baby_cry";
|
|
@@ -42,6 +42,9 @@ export declare class DetectionCoordinator {
|
|
|
42
42
|
private readonly platesSeen;
|
|
43
43
|
private readonly classifierLabels;
|
|
44
44
|
private readonly feedingSensors;
|
|
45
|
+
private readonly witnessSensors;
|
|
46
|
+
private readonly witnessSeen;
|
|
47
|
+
private readonly heldMoments;
|
|
45
48
|
private readonly dwell;
|
|
46
49
|
private readonly privacy;
|
|
47
50
|
private readonly perf;
|
|
@@ -74,6 +77,7 @@ export declare class DetectionCoordinator {
|
|
|
74
77
|
get detectionSettings(): CameraDetectionSettings;
|
|
75
78
|
getPerfSnapshot(): FrameWorkerPerfSnapshot;
|
|
76
79
|
resetPerf(): void;
|
|
80
|
+
private collectDecodeStats;
|
|
77
81
|
pauseForBenchmark(paused: boolean): void;
|
|
78
82
|
runObjectBenchmark(iterations: number, concurrency: number): Promise<ObjectBenchmarkResult | null>;
|
|
79
83
|
updateZoneConfig(zones: CameraZones): void;
|
|
@@ -105,6 +109,7 @@ export declare class DetectionCoordinator {
|
|
|
105
109
|
private handleCascadeDeactivated;
|
|
106
110
|
private handleEventEnded;
|
|
107
111
|
private handleAudioLoopResult;
|
|
112
|
+
private recordWitness;
|
|
108
113
|
private writeSensorProperties;
|
|
109
114
|
private buildSnapshot;
|
|
110
115
|
private pipelineZones;
|
|
@@ -135,6 +140,7 @@ export declare class DetectionCoordinator {
|
|
|
135
140
|
private snapshotWillStartEvent;
|
|
136
141
|
private attachTrainingFrame;
|
|
137
142
|
private updateWorldSpans;
|
|
143
|
+
private holdSightingMoments;
|
|
138
144
|
private captureMoments;
|
|
139
145
|
private anchorMomentDetections;
|
|
140
146
|
private captureExternalMoment;
|
|
@@ -40,6 +40,8 @@ const TRAINING_FRAME_MAX_WIDTH = 1280;
|
|
|
40
40
|
const TRAINING_ATTRIBUTE_BONUS = 0.2;
|
|
41
41
|
const TRAINING_FRAME_QUALITY = 80;
|
|
42
42
|
const MOMENT_EVENTS = new Set(['objectEntered', 'objectWoke', 'objectRecovered', 'bestShotUpdated']);
|
|
43
|
+
const WITNESS_WINDOW_MS = 3000;
|
|
44
|
+
const HELD_MOMENT_MS = 4000;
|
|
43
45
|
const MOMENT_MOVING_SPEED = 0.05;
|
|
44
46
|
const MOMENT_ATTRIBUTE_MIN_AREA = 600;
|
|
45
47
|
const DEFAULT_CASCADE_TIMEOUT = 10;
|
|
@@ -77,6 +79,10 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
77
79
|
platesSeen = new Set();
|
|
78
80
|
classifierLabels = new Map();
|
|
79
81
|
feedingSensors = new Map();
|
|
82
|
+
witnessSensors = new Set();
|
|
83
|
+
// label -> when a witness last reported it, for the trace
|
|
84
|
+
witnessSeen = new Map();
|
|
85
|
+
heldMoments = new Map();
|
|
80
86
|
dwell = new DwellManager();
|
|
81
87
|
privacy;
|
|
82
88
|
// debugging
|
|
@@ -223,6 +229,8 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
223
229
|
return this.config.detectionSettings;
|
|
224
230
|
}
|
|
225
231
|
getPerfSnapshot() {
|
|
232
|
+
// decodes outside the loop (external reports, pictures) count as well
|
|
233
|
+
this.collectDecodeStats();
|
|
226
234
|
const { timings, ...counters } = this.perf.snapshot();
|
|
227
235
|
const detectors = {};
|
|
228
236
|
for (const type of DETECTOR_METRIC_TYPES) {
|
|
@@ -247,8 +255,19 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
247
255
|
};
|
|
248
256
|
}
|
|
249
257
|
resetPerf() {
|
|
258
|
+
// what was decoded before the reset must not land in the new period
|
|
259
|
+
this.frameSource.takeDecodeStats();
|
|
260
|
+
this.thumbnailer.takeHqDecodeStats();
|
|
250
261
|
this.perf.reset();
|
|
251
262
|
}
|
|
263
|
+
collectDecodeStats() {
|
|
264
|
+
const decode = this.frameSource.takeDecodeStats();
|
|
265
|
+
this.perf.decodeMs += decode.ms;
|
|
266
|
+
this.perf.decodedFrames += decode.frames;
|
|
267
|
+
const main = this.thumbnailer.takeHqDecodeStats();
|
|
268
|
+
this.perf.mainDecodeMs += main.ms;
|
|
269
|
+
this.perf.mainDecodedFrames += main.frames;
|
|
270
|
+
}
|
|
252
271
|
pauseForBenchmark(paused) {
|
|
253
272
|
this.benchmarkRunning = paused;
|
|
254
273
|
}
|
|
@@ -334,6 +353,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
334
353
|
}
|
|
335
354
|
}
|
|
336
355
|
async dispose() {
|
|
356
|
+
this.heldMoments.clear();
|
|
337
357
|
await this.stopVideoLoop();
|
|
338
358
|
await this.frameSource.stop();
|
|
339
359
|
await this.audioLoop.stop();
|
|
@@ -349,6 +369,12 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
349
369
|
this.currentDetectionState = {};
|
|
350
370
|
}
|
|
351
371
|
async onSensorAdded(sensor) {
|
|
372
|
+
if (sensor.role === 'witness') {
|
|
373
|
+
this.feedingSensors.delete(sensor.sensorId);
|
|
374
|
+
this.witnessSensors.add(sensor.sensorId);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
this.witnessSensors.delete(sensor.sensorId);
|
|
352
378
|
if (DETECTION_SENSOR_TYPES.has(sensor.sensorType)) {
|
|
353
379
|
this.feedingSensors.set(sensor.sensorId, sensor.sensorType);
|
|
354
380
|
}
|
|
@@ -364,6 +390,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
364
390
|
}
|
|
365
391
|
}
|
|
366
392
|
async onSensorRemoved(sensorId) {
|
|
393
|
+
this.witnessSensors.delete(sensorId);
|
|
367
394
|
this.classifierLabels.delete(sensorId);
|
|
368
395
|
const sensorType = this.feedingSensors.get(sensorId);
|
|
369
396
|
if (sensorType === SensorType.Face)
|
|
@@ -392,7 +419,12 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
392
419
|
this.ptzAutotracker.setCapabilities(sensorId, capabilities);
|
|
393
420
|
}
|
|
394
421
|
async reportSensorWrite(sensorId, sensorType, properties) {
|
|
395
|
-
|
|
422
|
+
if (sensorType === SensorType.Object && this.witnessSensors.has(sensorId)) {
|
|
423
|
+
this.recordWitness(properties);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// the registry announces the plugin assigned for this type and the
|
|
427
|
+
// witnesses, everyone else reports into the void
|
|
396
428
|
if (!this.feedingSensors.has(sensorId))
|
|
397
429
|
return;
|
|
398
430
|
// a detector reports its spec again once its models finished loading
|
|
@@ -677,6 +709,25 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
677
709
|
...(result.decibels !== undefined ? { decibels: result.decibels } : {}),
|
|
678
710
|
});
|
|
679
711
|
}
|
|
712
|
+
recordWitness(properties) {
|
|
713
|
+
if (properties.detected !== true)
|
|
714
|
+
return;
|
|
715
|
+
const detections = properties.detections ?? [];
|
|
716
|
+
const labels = new Set();
|
|
717
|
+
for (const detection of detections) {
|
|
718
|
+
const label = detection.label?.toLowerCase();
|
|
719
|
+
if (label && this.pipeline.objectLabelAllowed(label))
|
|
720
|
+
labels.add(label);
|
|
721
|
+
}
|
|
722
|
+
if (labels.size === 0)
|
|
723
|
+
return;
|
|
724
|
+
const at = Date.now();
|
|
725
|
+
for (const label of labels) {
|
|
726
|
+
this.pipeline.attest(label, at);
|
|
727
|
+
this.witnessSeen.set(label, at);
|
|
728
|
+
}
|
|
729
|
+
this.logger.trace(`[witness] ${[...labels].join(', ')}`);
|
|
730
|
+
}
|
|
680
731
|
writeSensorProperties(sensorId, properties) {
|
|
681
732
|
const msg = {
|
|
682
733
|
sensorId,
|
|
@@ -1087,6 +1138,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1087
1138
|
let firstFrame = true;
|
|
1088
1139
|
while (this.loopRunning) {
|
|
1089
1140
|
const tickStart = Date.now();
|
|
1141
|
+
let onMainStream = false;
|
|
1090
1142
|
const snap = await this.frameSource.nextFrame(lastFrameId);
|
|
1091
1143
|
if (!snap)
|
|
1092
1144
|
break; // source stopped
|
|
@@ -1115,6 +1167,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1115
1167
|
// motion always reads the low stream: switching its input resolution
|
|
1116
1168
|
// would reset the background model on every transition
|
|
1117
1169
|
const analysis = await this.acquireAnalysisFrame(snap);
|
|
1170
|
+
onMainStream = analysis.isMainStream;
|
|
1118
1171
|
// debugging
|
|
1119
1172
|
detectionRecord.setFrame(analysis.isMainStream ? 'main' : 'low', analysis.frame.width, analysis.frame.height, analysis.rtp, analysis.role);
|
|
1120
1173
|
try {
|
|
@@ -1147,9 +1200,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1147
1200
|
// ignore
|
|
1148
1201
|
}
|
|
1149
1202
|
}
|
|
1150
|
-
|
|
1151
|
-
this.perf.decodeMs += decode.ms;
|
|
1152
|
-
this.perf.decodedFrames += decode.frames;
|
|
1203
|
+
this.collectDecodeStats();
|
|
1153
1204
|
// activity, not stream choice: cameras without main-stream analysis still count as active
|
|
1154
1205
|
if (this.worldSpans.size > 0 || this.eventManager.hasActiveSegment())
|
|
1155
1206
|
this.perf.activeTicks++;
|
|
@@ -1159,7 +1210,12 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1159
1210
|
const remaining = (this.mainStreamActive ? ACTIVE_TICK_MS : IDLE_TICK_MS) - (Date.now() - tickStart);
|
|
1160
1211
|
if (remaining > 0)
|
|
1161
1212
|
await sleep(remaining);
|
|
1162
|
-
|
|
1213
|
+
const tickMs = Date.now() - tickStart;
|
|
1214
|
+
this.perf.loopMs += tickMs;
|
|
1215
|
+
if (onMainStream) {
|
|
1216
|
+
this.perf.mainTicks++;
|
|
1217
|
+
this.perf.mainLoopMs += tickMs;
|
|
1218
|
+
}
|
|
1163
1219
|
}
|
|
1164
1220
|
await this.frameSource.detach();
|
|
1165
1221
|
this.frameScaler.clearCache();
|
|
@@ -1167,12 +1223,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1167
1223
|
}
|
|
1168
1224
|
async acquireAnalysisFrame(snap) {
|
|
1169
1225
|
if (this.mainStreamActive) {
|
|
1170
|
-
const t0 = Date.now();
|
|
1171
1226
|
try {
|
|
1172
1227
|
const main = await this.thumbnailer.acquireHqFrame(0);
|
|
1173
1228
|
if (main) {
|
|
1174
|
-
this.perf.mainFrames++;
|
|
1175
|
-
this.perf.mainDecodeMs += Date.now() - t0;
|
|
1176
1229
|
return { frame: main.frame, scaler: main.scaler, isMainStream: true, rtp: main.rtp, role: this.thumbnailer.mainStreamRole };
|
|
1177
1230
|
}
|
|
1178
1231
|
}
|
|
@@ -1185,12 +1238,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1185
1238
|
async acquireOpeningHqFrame() {
|
|
1186
1239
|
if (!this.mainStreamAvailable)
|
|
1187
1240
|
return undefined;
|
|
1188
|
-
const t0 = Date.now();
|
|
1189
1241
|
try {
|
|
1190
1242
|
const main = await this.thumbnailer.acquireHqFrame(0);
|
|
1191
1243
|
if (main) {
|
|
1192
|
-
this.perf.mainFrames++;
|
|
1193
|
-
this.perf.mainDecodeMs += Date.now() - t0;
|
|
1194
1244
|
return { frame: main.frame, scaler: main.scaler, isMainStream: true, rtp: main.rtp, role: this.thumbnailer.mainStreamRole };
|
|
1195
1245
|
}
|
|
1196
1246
|
}
|
|
@@ -1225,6 +1275,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1225
1275
|
trace.rtp = analysis.rtp;
|
|
1226
1276
|
trace.src = analysis.role?.replace('-resolution', '');
|
|
1227
1277
|
trace.attrs = traceAttributes(results);
|
|
1278
|
+
const witness = [...this.witnessSeen].filter(([, at]) => Math.abs(trace.tMs - at) <= WITNESS_WINDOW_MS).map(([label]) => label);
|
|
1279
|
+
if (witness.length > 0)
|
|
1280
|
+
trace.witness = witness;
|
|
1228
1281
|
// debugging
|
|
1229
1282
|
detectionRecord.tick({ ...trace });
|
|
1230
1283
|
return trace;
|
|
@@ -1259,8 +1312,10 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1259
1312
|
const motionDue = t0 - this.lastMotionAt >= MOTION_INTERVAL_MS - TICK_SLACK_MS;
|
|
1260
1313
|
const motionScaleStart = Date.now();
|
|
1261
1314
|
const motionFrame = motionDue ? await this.scaleForMotion(motionRawFrame) : undefined;
|
|
1262
|
-
if (motionDue)
|
|
1263
|
-
this.perf.
|
|
1315
|
+
if (motionDue) {
|
|
1316
|
+
this.perf.motionScaleMs += Date.now() - motionScaleStart;
|
|
1317
|
+
this.perf.motionScaleCount++;
|
|
1318
|
+
}
|
|
1264
1319
|
if (!this.loopRunning)
|
|
1265
1320
|
return;
|
|
1266
1321
|
if (motionFrame) {
|
|
@@ -1306,7 +1361,8 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1306
1361
|
if (localizeDue && this.localizerWanted) {
|
|
1307
1362
|
const scaleStart = Date.now();
|
|
1308
1363
|
const gray = await this.scaleForMotionInput(motionRawFrame);
|
|
1309
|
-
this.perf.
|
|
1364
|
+
this.perf.motionScaleMs += Date.now() - scaleStart;
|
|
1365
|
+
this.perf.motionScaleCount++;
|
|
1310
1366
|
if (!this.loopRunning)
|
|
1311
1367
|
return;
|
|
1312
1368
|
if (gray)
|
|
@@ -1344,6 +1400,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1344
1400
|
if (this.updateWorldSpans(pipelineResult) && !analysis.isMainStream) {
|
|
1345
1401
|
this.hqUpgrade = await this.acquireOpeningHqFrame();
|
|
1346
1402
|
}
|
|
1403
|
+
await this.holdSightingMoments(pipelineResult, this.hqUpgrade ?? analysis, t0);
|
|
1347
1404
|
await this.captureMoments(pipelineResult, this.hqUpgrade ?? analysis, t0);
|
|
1348
1405
|
// open spans and a lingering segment keep the cascade armed: the
|
|
1349
1406
|
// world can only observe absence or a reappearance while it still
|
|
@@ -1648,6 +1705,35 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1648
1705
|
}
|
|
1649
1706
|
return opened;
|
|
1650
1707
|
}
|
|
1708
|
+
async holdSightingMoments(result, analysis, at) {
|
|
1709
|
+
for (const [trackId, held] of this.heldMoments) {
|
|
1710
|
+
if (at - held.capturedAt > HELD_MOMENT_MS)
|
|
1711
|
+
this.heldMoments.delete(trackId);
|
|
1712
|
+
}
|
|
1713
|
+
for (const id of result.removed)
|
|
1714
|
+
this.heldMoments.delete(id);
|
|
1715
|
+
if (this.witnessSensors.size === 0)
|
|
1716
|
+
return;
|
|
1717
|
+
const confirmed = new Set(result.created);
|
|
1718
|
+
for (const sighting of result.sightings) {
|
|
1719
|
+
// confirmed in the same tick: the regular moment cuts this frame anyway
|
|
1720
|
+
if (confirmed.has(sighting.trackId))
|
|
1721
|
+
continue;
|
|
1722
|
+
const box = { x: sighting.x, y: sighting.y, width: sighting.width, height: sighting.height };
|
|
1723
|
+
const rendered = await this.renderMoment({ subject: box, base: box }, analysis);
|
|
1724
|
+
if (!rendered)
|
|
1725
|
+
continue;
|
|
1726
|
+
const score = sighting.confidence * Math.sqrt(sighting.width * sighting.height);
|
|
1727
|
+
this.heldMoments.set(sighting.trackId, {
|
|
1728
|
+
strip: rendered.strip,
|
|
1729
|
+
card: rendered.card,
|
|
1730
|
+
capturedAt: at,
|
|
1731
|
+
score,
|
|
1732
|
+
rank: MOMENT_RANK_OBJECT,
|
|
1733
|
+
stream: analysis.isMainStream ? 'main' : 'low',
|
|
1734
|
+
});
|
|
1735
|
+
}
|
|
1736
|
+
}
|
|
1651
1737
|
async captureMoments(result, analysis, at) {
|
|
1652
1738
|
let subject;
|
|
1653
1739
|
let bestScore = -1;
|
|
@@ -1672,6 +1758,16 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1672
1758
|
// one frame per tick, not one per object: they share the picture
|
|
1673
1759
|
if (!subject)
|
|
1674
1760
|
return;
|
|
1761
|
+
// a track confirmed through a witness after its only sighting: the
|
|
1762
|
+
// current frame no longer shows it, the picture held at the sighting does
|
|
1763
|
+
const held = this.heldMoments.get(subject.trackId);
|
|
1764
|
+
this.heldMoments.delete(subject.trackId);
|
|
1765
|
+
if (held && trigger === 'objectEntered' && subject.lastSeenMs < at) {
|
|
1766
|
+
if (!this.eventManager.wantsMoment(held.rank, held.score, held.stream, at))
|
|
1767
|
+
return;
|
|
1768
|
+
this.eventManager.offerMoment({ ...held, capturedAt: at, shownAt: held.capturedAt });
|
|
1769
|
+
return;
|
|
1770
|
+
}
|
|
1675
1771
|
if (!this.eventManager.wantsMoment(MOMENT_RANK_OBJECT, bestScore, analysis.isMainStream ? 'main' : 'low', at))
|
|
1676
1772
|
return;
|
|
1677
1773
|
await this.captureMoment(subject, bestScore, trigger, result.tracked, analysis, at);
|
|
@@ -1921,7 +2017,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1921
2017
|
const perWindow = await Promise.all(windows.map((window) => this.detectInWindow(objectPlugin, analysis.frame, analysis.scaler, window, inputSpec)));
|
|
1922
2018
|
this.perf.objectMs += Date.now() - inferStart;
|
|
1923
2019
|
this.perf.objectCount++;
|
|
1924
|
-
|
|
2020
|
+
for (const window of perWindow)
|
|
2021
|
+
this.perf.scaleMs += window.cropMs;
|
|
2022
|
+
return mergeWindowDetections(perWindow.flatMap((window) => window.detections));
|
|
1925
2023
|
}
|
|
1926
2024
|
const scaleStart = Date.now();
|
|
1927
2025
|
const objectFrame = await this.scaleForObject(analysis.frame, analysis.scaler);
|
|
@@ -1937,11 +2035,11 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1937
2035
|
async detectInWindow(plugin, frame, scaler, window, spec) {
|
|
1938
2036
|
const scaleStart = Date.now();
|
|
1939
2037
|
const cropped = await scaler.cropToSpec(frame, window, spec);
|
|
1940
|
-
|
|
2038
|
+
const cropMs = Date.now() - scaleStart;
|
|
1941
2039
|
if (!cropped)
|
|
1942
|
-
return [];
|
|
2040
|
+
return { detections: [], cropMs };
|
|
1943
2041
|
const result = await PromiseTimeout(plugin.proxy.detectObjects(scaler.toVideoFrameData(cropped.padded, 'model')), DETECT_TIMEOUT_MS, undefined, `Object detection timed out after ${DETECT_TIMEOUT_MS}ms`);
|
|
1944
|
-
return FrameScaler.undoLetterbox(ensureDetectionBoxes(result.detections), cropped.geometry);
|
|
2042
|
+
return { detections: FrameScaler.undoLetterbox(ensureDetectionBoxes(result.detections), cropped.geometry), cropMs };
|
|
1945
2043
|
}
|
|
1946
2044
|
async scaleFrameForPlugin(rawFrame, plugin, scaler = this.frameScaler) {
|
|
1947
2045
|
const inputSpec = plugin.modelSpec?.input;
|
|
@@ -1990,7 +2088,6 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1990
2088
|
const found = boxed.filter((d) => reportedLabels.size === 0 || reportedLabels.has(d.label.toLowerCase()));
|
|
1991
2089
|
if (found.length === 0)
|
|
1992
2090
|
return { detections: reported, assisted: false };
|
|
1993
|
-
this.perf.objects += found.length;
|
|
1994
2091
|
return { detections: found, assisted: true };
|
|
1995
2092
|
}
|
|
1996
2093
|
catch (error) {
|
|
@@ -2013,7 +2110,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
2013
2110
|
if (windows.length > 0) {
|
|
2014
2111
|
detectionRecord.zoom({ kind: 'assist', anchors, windows });
|
|
2015
2112
|
const perWindow = await Promise.all(windows.map((window) => this.detectInWindow(assist, frame, scaler, window, inputSpec)));
|
|
2016
|
-
return mergeWindowDetections(perWindow.
|
|
2113
|
+
return mergeWindowDetections(perWindow.flatMap((window) => window.detections));
|
|
2017
2114
|
}
|
|
2018
2115
|
}
|
|
2019
2116
|
detectionRecord.tick({
|