homesec 0.1.0__py3-none-any.whl → 1.0.0__py3-none-any.whl

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.
Files changed (45) hide show
  1. homesec/__init__.py +1 -1
  2. homesec/app.py +34 -36
  3. homesec/cli.py +14 -11
  4. homesec/config/loader.py +11 -11
  5. homesec/config/validation.py +2 -5
  6. homesec/errors.py +2 -4
  7. homesec/health/server.py +29 -27
  8. homesec/interfaces.py +11 -6
  9. homesec/logging_setup.py +9 -5
  10. homesec/maintenance/cleanup_clips.py +2 -3
  11. homesec/models/__init__.py +1 -1
  12. homesec/models/alert.py +2 -0
  13. homesec/models/clip.py +8 -1
  14. homesec/models/config.py +9 -13
  15. homesec/models/events.py +14 -0
  16. homesec/models/filter.py +1 -3
  17. homesec/models/vlm.py +1 -2
  18. homesec/pipeline/core.py +15 -32
  19. homesec/plugins/alert_policies/__init__.py +3 -4
  20. homesec/plugins/alert_policies/default.py +3 -2
  21. homesec/plugins/alert_policies/noop.py +1 -2
  22. homesec/plugins/analyzers/__init__.py +3 -4
  23. homesec/plugins/analyzers/openai.py +34 -43
  24. homesec/plugins/filters/__init__.py +3 -4
  25. homesec/plugins/filters/yolo.py +27 -29
  26. homesec/plugins/notifiers/__init__.py +2 -1
  27. homesec/plugins/notifiers/mqtt.py +16 -17
  28. homesec/plugins/notifiers/multiplex.py +3 -2
  29. homesec/plugins/notifiers/sendgrid_email.py +6 -8
  30. homesec/plugins/storage/__init__.py +3 -4
  31. homesec/plugins/storage/dropbox.py +20 -17
  32. homesec/plugins/storage/local.py +3 -1
  33. homesec/plugins/utils.py +2 -1
  34. homesec/repository/clip_repository.py +5 -4
  35. homesec/sources/base.py +2 -2
  36. homesec/sources/local_folder.py +9 -7
  37. homesec/sources/rtsp.py +22 -10
  38. homesec/state/postgres.py +34 -35
  39. homesec/telemetry/db_log_handler.py +3 -2
  40. {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/METADATA +66 -31
  41. homesec-1.0.0.dist-info/RECORD +62 -0
  42. homesec-0.1.0.dist-info/RECORD +0 -62
  43. {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/WHEEL +0 -0
  44. {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/entry_points.txt +0 -0
  45. {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homesec
3
- Version: 0.1.0
3
+ Version: 1.0.0
4
4
  Summary: Pluggable async home security camera pipeline with detection, VLM analysis, and alerts.
5
5
  Project-URL: Homepage, https://github.com/lan17/homesec
6
6
  Project-URL: Source, https://github.com/lan17/homesec
@@ -247,11 +247,9 @@ Description-Content-Type: text/markdown
247
247
  [![Python: 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/)
248
248
  [![Typing: Typed](https://img.shields.io/badge/typing-typed-2b825b)](https://peps.python.org/pep-0561/)
249
249
 
250
- HomeSec is a pluggable, async pipeline for home security cameras. It records
251
- short clips, runs object detection, optionally calls a vision-language model
252
- (VLM) for a structured summary, and sends alerts via MQTT or email. The design
253
- leans toward reliability: clips land on disk first, state/event writes are
254
- best-effort, and non-critical stages can fail without losing the alert.
250
+ HomeSec is a self-hosted, extensible network video recorder that puts you in control. Store clips wherever you want, analyze them with AI, and get smart notifications—all while keeping your footage private and off third-party clouds.
251
+
252
+ Under the hood, it's a pluggable async pipeline for home security cameras. It records short clips, runs object detection, optionally calls a vision-language model (VLM) for a structured summary, and sends alerts via MQTT or email. The design leans toward reliability: clips land on disk first, state/event writes are best-effort, and non-critical stages can fail without losing the alert.
255
253
 
256
254
  ## Highlights
257
255
 
@@ -261,6 +259,7 @@ best-effort, and non-critical stages can fail without losing the alert.
261
259
  - Policy-driven alerts with per-camera overrides
262
260
  - Fan-out notifiers (MQTT for Home Assistant, SendGrid email)
263
261
  - Postgres-backed state + events with graceful degradation
262
+ - Built around small, stable interfaces so new plugins drop in cleanly
264
263
  - Health endpoint plus optional Postgres telemetry logging
265
264
 
266
265
  ## Pipeline at a glance
@@ -277,32 +276,42 @@ ClipSource -> (Upload + Filter) -> VLM (optional) -> Alert Policy -> Notifier(s)
277
276
 
278
277
  ### Requirements
279
278
 
280
- - Python 3.10+ (newest available is best; 3.14 is fine if your deps support it)
281
- - ffmpeg in PATH (required for RTSP source)
282
- - Postgres for state/events (`make db-up` starts a local instance). The pipeline
283
- continues if the DB is down, but a DSN is still required.
279
+ - Docker and Docker Compose
284
280
  - Optional: MQTT broker, Dropbox credentials, OpenAI-compatible API key
285
281
 
286
282
  ### Setup
287
283
 
288
- 1. Install dependencies:
289
- `uv sync`
290
- 2. Create a config file:
291
- - Start from `config/example.yaml` or `config/sample.yaml`
292
- 3. Set environment variables (use `.env.example` as a template):
293
- `cp .env.example .env`
294
- 4. Start Postgres:
295
- `make db-up`
296
- 5. Validate config:
297
- `uv run python -m homesec.cli validate --config config/example.yaml`
298
- 6. Run:
299
- `uv run python -m homesec.cli run --config config/example.yaml --log_level INFO`
300
-
301
- Tip: `make homesec` loads `.env` and runs `config/production.yaml`.
284
+ 1. Create a config file:
285
+ ```bash
286
+ cp config/example.yaml config/config.yaml
287
+ # Edit config/config.yaml with your settings
288
+ ```
289
+ 2. Set environment variables:
290
+ ```bash
291
+ cp .env.example .env
292
+ # Edit .env with your credentials
293
+ ```
294
+ 3. Start HomeSec + Postgres:
295
+ ```bash
296
+ make up
297
+ ```
298
+ 4. Stop:
299
+ ```bash
300
+ make down
301
+ ```
302
+
303
+ ### Running without Docker
304
+
305
+ If you prefer to run locally:
306
+
307
+ 1. Install Python 3.10+ and ffmpeg
308
+ 2. `uv sync`
309
+ 3. `make db` (starts Postgres)
310
+ 4. `make run`
302
311
 
303
312
  ## Configuration
304
313
 
305
- Configs are YAML and validated with Pydantic. Start with any file in `config/`.
314
+ Configs are YAML and validated with Pydantic. See `config/example.yaml` for all options.
306
315
 
307
316
  Minimal example (RTSP + Dropbox + MQTT):
308
317
 
@@ -362,8 +371,8 @@ per_camera_alert:
362
371
  A few things worth knowing:
363
372
  - Secrets never go in YAML. Use env var names (`*_env`) and set values in your shell or `.env`.
364
373
  - At least one notifier must be enabled (`mqtt` or `sendgrid_email`).
365
- - Built-in YOLO classes: `person`, `bird`, `cat`, `dog`, `horse`, `sheep`, `cow`,
366
- `elephant`, `bear`, `zebra`, `giraffe`.
374
+ - Built-in YOLO classes: `person`, `car`, `truck`, `motorcycle`, `bicycle`,
375
+ `dog`, `cat`, `bird`, `backpack`, `handbag`, `suitcase`.
367
376
  - Local storage for development:
368
377
 
369
378
  ```yaml
@@ -377,14 +386,35 @@ storage:
377
386
  - For a quick local run, pair `local_folder` with `local` storage and drop a clip
378
387
  into `recordings/`.
379
388
 
389
+ ## Extensible by design
390
+
391
+ HomeSec is intentionally modular. Each major capability is an interface
392
+ (`ClipSource`, `StorageBackend`, `ObjectFilter`, `VLMAnalyzer`, `AlertPolicy`,
393
+ `Notifier`) defined in `src/homesec/interfaces.py`, and plugins are discovered at
394
+ runtime via entry points. This keeps the core pipeline small while making it
395
+ easy to add new backends without editing core code.
396
+
397
+ What this means in practice:
398
+ - Swap storage or notifications by changing config, not code.
399
+ - Add a new plugin type as a separate package and register it.
400
+ - Keep config validation strict by pairing each plugin with a Pydantic model.
401
+
402
+ Extension points (all pluggable):
403
+ - Sources: RTSP motion detection, FTP uploads, local folders
404
+ - Storage backends: Dropbox, local disk, or your own
405
+ - Filters: object detection (YOLO or custom models)
406
+ - VLM analyzers: OpenAI-compatible APIs or local models
407
+ - Alert policies: per-camera rules and thresholds
408
+ - Notifiers: MQTT, email, or anything else you can send from Python
409
+
380
410
  ## CLI
381
411
 
382
412
  - Run the pipeline:
383
- `uv run python -m homesec.cli run --config config/example.yaml --log_level INFO`
413
+ `uv run python -m homesec.cli run --config config/config.yaml --log_level INFO`
384
414
  - Validate config:
385
- `uv run python -m homesec.cli validate --config config/example.yaml`
415
+ `uv run python -m homesec.cli validate --config config/config.yaml`
386
416
  - Cleanup (reanalyze and optionally delete empty clips):
387
- `uv run python -m homesec.cli cleanup --config config/example.yaml --older_than_days 7 --dry_run True`
417
+ `uv run python -m homesec.cli cleanup --config config/config.yaml --older_than_days 7 --dry_run True`
388
418
 
389
419
  ## Built-in plugins
390
420
 
@@ -399,6 +429,11 @@ storage:
399
429
  HomeSec discovers plugins via entry points in the `homesec.plugins` group. A plugin
400
430
  module just needs to import and register itself.
401
431
 
432
+ Each plugin provides:
433
+ - A unique name (used in config)
434
+ - A Pydantic config model for validation
435
+ - A factory that builds the concrete implementation
436
+
402
437
  ```python
403
438
  # my_package/filters/custom.py
404
439
  from pydantic import BaseModel
@@ -430,7 +465,7 @@ my_filters = "my_package.filters.custom"
430
465
 
431
466
  - Health endpoint: `GET /health` (configurable in `health.host`/`health.port`)
432
467
  - Optional telemetry logs to Postgres when `DB_DSN` is set:
433
- - Start local DB: `make db-up`
468
+ - Start local DB: `make db`
434
469
  - Run migrations: `make db-migrate`
435
470
 
436
471
  ## Development
@@ -0,0 +1,62 @@
1
+ homesec/__init__.py,sha256=tO_V5DJgS44qHCIySDUFIK5-Rbgjh3MpUBHa2HhZiB4,452
2
+ homesec/app.py,sha256=ma1_wClIHAFyVB-dOzSlKvoWAWUhHvAPjZVARtqHTK0,14124
3
+ homesec/cli.py,sha256=S7-K7aAIkus4mWvhjPqcGURabNhDlL4237iDeLvPxBI,5608
4
+ homesec/errors.py,sha256=fBW_OdnYgqtb6u6t0YZh4tHgsiv0Pb1DiF9G6b4Vcbk,2105
5
+ homesec/interfaces.py,sha256=z_bL6zrow5dxXBQLyeCK4ED7HzDrGBHe83Mm5W_4_pk,8388
6
+ homesec/logging_setup.py,sha256=Z12nzCPK04cqFHfIQgasioGfXb4TLvXJT9stzD8Dh4c,5546
7
+ homesec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ homesec/storage_paths.py,sha256=MGQNT_7mJS6wuTWUHZNl0hvRmSVRvNksLu_imfZOEpo,1696
9
+ homesec/config/__init__.py,sha256=CjvulJwzj4Rdivrxz7tuDlyfw0c2IhqnSeUcHeu7ldk,421
10
+ homesec/config/loader.py,sha256=7BDw4plVQUCo8SHexdNiwAPd9mR8eVQEKnwzlvQthYQ,3030
11
+ homesec/config/validation.py,sha256=eDMM8upz_ATVWPDBtXkhNQOJEvh1gPU1LzY0UlH---M,2792
12
+ homesec/health/__init__.py,sha256=fbndfsLOR9aA7d_5I1mEZN0oM5IYMmcJNjOt0iaXKZc,107
13
+ homesec/health/server.py,sha256=VP-4XmZ0K3ooFyd000AFOZohZ5R7QcnZC4n7oj0RMqI,7014
14
+ homesec/maintenance/__init__.py,sha256=6a5W2x8oUgnoWaK374-Wq_nrOD5UDAUqUtSANaEck2M,60
15
+ homesec/maintenance/cleanup_clips.py,sha256=KmpadZjcYjsq3q0xjgN307w6X5dxdvqa1ukUMn_8llg,23455
16
+ homesec/models/__init__.py,sha256=zcSyQR0Mq_YlIrUFG304pQ72the1vtNbkWhjNJsso50,1889
17
+ homesec/models/alert.py,sha256=lBPP7qQK97JN2RI5Wlpqk6JSeGQxRiiwxzEloNfyKOc,968
18
+ homesec/models/clip.py,sha256=srqSLT1YXSG9CSZscOQssMSyg40SGaoEjABg9FzOxFQ,2254
19
+ homesec/models/config.py,sha256=BHHxfWQ_RtcTkAyHFVTBybiwZSCHgZJ9cmR5veOt3BA,12234
20
+ homesec/models/events.py,sha256=WdfkQrVPpEbjvPEhPsMnQQe9TgVglMfo9Ctz3xUJmFc,4605
21
+ homesec/models/filter.py,sha256=3f0hhXA1qPw1IOCxUIq5tGEQpeUTwJrrPL7DowQhMRg,1974
22
+ homesec/models/source.py,sha256=eHaJV8gk559kWNy0mt4KMr_zpdIccMvF7x4t3PkotGs,2204
23
+ homesec/models/storage.py,sha256=63wyHdDt3QrfdsP0SmhrxtOeWRllZ1O2GPrA4jI7XmU,235
24
+ homesec/models/vlm.py,sha256=Wd_hxWyIAETLtOth0FJoRt-sY9NdCS89T-BV-8ZDcP4,2883
25
+ homesec/pipeline/__init__.py,sha256=kiQLECc6JIPmeIdBJrVpTApPs0GBAgWoZ1kU4XZyJVY,214
26
+ homesec/pipeline/alert_policy.py,sha256=gFl5SJ96fgEfEUnhSL51YA6O2GPGXTXmxaDC-q3h1rs,152
27
+ homesec/pipeline/core.py,sha256=D552e-xpIpom5C-Y_TkWB9Ufbm8xClGmCdo_4tseXuU,23840
28
+ homesec/plugins/__init__.py,sha256=RhsQXLV1TJHoPVmk4Ql_X3IPQhFam5WXJMXjGUoXLuE,2117
29
+ homesec/plugins/utils.py,sha256=Cj9bnL4ldlD8ryvqCwAhc-HBgYby3eugN49Ltycemy4,1778
30
+ homesec/plugins/alert_policies/__init__.py,sha256=hPM7bK1DW6jown-IMNm4TkW471TBqkd56kMHpliJjg0,1978
31
+ homesec/plugins/alert_policies/default.py,sha256=uWoxGGFDE-t6ykddFbkOAX_2Tizg30alrUYJ9muuA_E,3895
32
+ homesec/plugins/alert_policies/noop.py,sha256=s-pJMpq6ekC6dVlg_lY7pizT_RYqCrOOHjJU7qAt5A0,1627
33
+ homesec/plugins/analyzers/__init__.py,sha256=K2LqO9Isa9xbL_duwi59TGvRTD9i5L-yYcg1pEBiJ_o,3138
34
+ homesec/plugins/analyzers/openai.py,sha256=18UfBiki0Qq7UcyGwxBY1lBz541mYYy-itxBamz6rqU,15392
35
+ homesec/plugins/filters/__init__.py,sha256=mpn7l51fCU7r3y5GkB5krVf6dX66gJIFftvUWg0Zf4I,3165
36
+ homesec/plugins/filters/yolo.py,sha256=bcE6S9QFBF7ZIbF2G_vhKQuAcXpPBJrmmxQPC3r4YYY,9781
37
+ homesec/plugins/notifiers/__init__.py,sha256=PaKnY6Yvzk_ovK8mmJ_iqUtK_B-DeUpgtN480rBbxH0,1911
38
+ homesec/plugins/notifiers/mqtt.py,sha256=p-Q4dTvQFqjazX141_FHKjGtIWsuvUQsfq_DnwBF-pM,6131
39
+ homesec/plugins/notifiers/multiplex.py,sha256=LlnwozjkMDQwz7__v7mT4AohZbiWZK39CZunamRp7FM,3676
40
+ homesec/plugins/notifiers/sendgrid_email.py,sha256=UZ_e-K31yHebUsXRUsAqdllytZUp1vv594RhdI0jwhE,8462
41
+ homesec/plugins/storage/__init__.py,sha256=UzYg0TeQwSBwm-5EAZ6lRn3-fI-BYOBQWqTu2cUHVks,3026
42
+ homesec/plugins/storage/dropbox.py,sha256=Rafi4NTTJBvm82BId5CYSFXkIbvV4IDDFAJiLbQUlL0,9793
43
+ homesec/plugins/storage/local.py,sha256=lXaVQRUpiZMqtSGDLKb2IZUIela_ysqc3QbRx3lPBBI,3703
44
+ homesec/repository/__init__.py,sha256=6cye2uQIA2v6jeLk5D2S9y3rlkfzJH5GceqdOroF3hU,160
45
+ homesec/repository/clip_repository.py,sha256=qSkfVk2MIx9wOKskUWUNnYwO-w0showR4WPsxUdCijs,16807
46
+ homesec/sources/__init__.py,sha256=wuCtiF44ceo7n3wJN51VHHcDavko3ubUDICtFbWmaRI,505
47
+ homesec/sources/base.py,sha256=HZkGJkyUjRRkELZnpEoslUuV0du7S-uWPvNQhToxDWU,6926
48
+ homesec/sources/ftp.py,sha256=ynIPbgcbIi1jub8yr4H1259Y1HbNM42RFDBBivXD4mg,7308
49
+ homesec/sources/local_folder.py,sha256=-6CbnuLNOhVZx7wDoQUtGc_t6JtegLkIKbusvtI85NQ,8955
50
+ homesec/sources/rtsp.py,sha256=3TOFDfIqadH3-DepB1xgv6mtOd0h-FYppZXBXSTBBi0,47304
51
+ homesec/state/__init__.py,sha256=Evt1jqTebmpJD1NUzNh3vwt5pbjDlLjQ0DgMCSAZOuM,255
52
+ homesec/state/postgres.py,sha256=Yis8ip2Y9dNYyTr2WEBcZ51m0ECoHuOe_XWT83cYQaI,16670
53
+ homesec/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ homesec/telemetry/db_log_handler.py,sha256=KM8g4kcOyPzFJbpGxpSzecx_hrEWY0YfpoIKygETy5k,7539
55
+ homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
56
+ homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
57
+ homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
58
+ homesec-1.0.0.dist-info/METADATA,sha256=C5aghtGZcdyN8kav-x2zFsQ11-RqFTVVrnarJ-IxMTI,21605
59
+ homesec-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
60
+ homesec-1.0.0.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
61
+ homesec-1.0.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
+ homesec-1.0.0.dist-info/RECORD,,
@@ -1,62 +0,0 @@
1
- homesec/__init__.py,sha256=V-CRoux1Qo5d8Logyv0k0VDtVyLdExE8vSU1dpMtVBU,452
2
- homesec/app.py,sha256=I1N5V22_ERREFXt4lcmKtUkwby6agKcO8gewHHN04iQ,14327
3
- homesec/cli.py,sha256=4cOlJvdpz5iPuLtydSWNpWGvH978axk77AE3EvW7CYc,5637
4
- homesec/errors.py,sha256=RfdPTP8uMfdO3GQPtgakOIKSSelM2CIhGO7tkgNEPps,2123
5
- homesec/interfaces.py,sha256=zn2AB4Jf5mF1sVtRze5E2f2mN4FQyFhpORqkYo_4Xrs,8365
6
- homesec/logging_setup.py,sha256=75rsrT9cEQfuaMOYZPgM0ZMwrpQPLhua-Uigd-ikM_w,5556
7
- homesec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- homesec/storage_paths.py,sha256=MGQNT_7mJS6wuTWUHZNl0hvRmSVRvNksLu_imfZOEpo,1696
9
- homesec/config/__init__.py,sha256=CjvulJwzj4Rdivrxz7tuDlyfw0c2IhqnSeUcHeu7ldk,421
10
- homesec/config/loader.py,sha256=kpFbpny-3YuQcfN1y1Euw5rQHR9pFrVjzLzCFHYQvY8,3102
11
- homesec/config/validation.py,sha256=FtGVo8X6sIU-NHN-gIR0O8vmgP05PegDWQDsFq6LetQ,2837
12
- homesec/health/__init__.py,sha256=fbndfsLOR9aA7d_5I1mEZN0oM5IYMmcJNjOt0iaXKZc,107
13
- homesec/health/server.py,sha256=2_9G6sOYGOYtllPDiP9GROq1Vap5JIzcteCmfmYPFTs,7132
14
- homesec/maintenance/__init__.py,sha256=6a5W2x8oUgnoWaK374-Wq_nrOD5UDAUqUtSANaEck2M,60
15
- homesec/maintenance/cleanup_clips.py,sha256=B-IYNRcj_-hE3lQfcK6u3cHQwE1UsbC0gDpa1WqCZeQ,23475
16
- homesec/models/__init__.py,sha256=ZFJ0R8B32cHT58_Wg0YdxbxDI45Ojp-JTIrT-AU2mCk,1889
17
- homesec/models/alert.py,sha256=XzYauW_Kle73SCDKTMyS6CufgvPt4xzzxDbMksZHXac,966
18
- homesec/models/clip.py,sha256=HGmoZ6nNOWHQWUwyZMQlyb97IL_cWxU-zbJAXdS7VG8,2009
19
- homesec/models/config.py,sha256=xGQ7-jJxhS-h1zJ-K6T3TWqZGTjXFNu2q3FcKtKAWnY,12318
20
- homesec/models/events.py,sha256=MymbKYnals8HqX8t8Bi9rZpHWS2wTaVwgV8Kl8TsVT8,4591
21
- homesec/models/filter.py,sha256=zhBxFDLe7hYb_FiSIN2rnsKNZqZovw2qmfB1WEa3ImE,2019
22
- homesec/models/source.py,sha256=eHaJV8gk559kWNy0mt4KMr_zpdIccMvF7x4t3PkotGs,2204
23
- homesec/models/storage.py,sha256=63wyHdDt3QrfdsP0SmhrxtOeWRllZ1O2GPrA4jI7XmU,235
24
- homesec/models/vlm.py,sha256=DEI-V2gSKtn82IG5PLRN98F0Wpwdvn3nkA-obRziSIw,2901
25
- homesec/pipeline/__init__.py,sha256=kiQLECc6JIPmeIdBJrVpTApPs0GBAgWoZ1kU4XZyJVY,214
26
- homesec/pipeline/alert_policy.py,sha256=gFl5SJ96fgEfEUnhSL51YA6O2GPGXTXmxaDC-q3h1rs,152
27
- homesec/pipeline/core.py,sha256=E1EpaHE5A_2L7d9pD3a0dBVjUJRWCSA3o5a2JOIsenI,24141
28
- homesec/plugins/__init__.py,sha256=RhsQXLV1TJHoPVmk4Ql_X3IPQhFam5WXJMXjGUoXLuE,2117
29
- homesec/plugins/utils.py,sha256=vHJcd8WmWCAFkjTzuvhouLDk2IpIEkIFWTHhtm7hBUI,1751
30
- homesec/plugins/alert_policies/__init__.py,sha256=f0ljzi5ODx7q_dkW4tpuur5I1QXAxIOWs-VuJ1Zm_4o,1957
31
- homesec/plugins/alert_policies/default.py,sha256=SDmJr-u43fAnbipBI94FOI7Wy7zLNHfJBkOJXdWprqo,3916
32
- homesec/plugins/alert_policies/noop.py,sha256=QliBKPbtwoEaTzwgvrmsW_20hhSdd3oXUkHJmZUV9xc,1658
33
- homesec/plugins/analyzers/__init__.py,sha256=7JacZ5jH6oKq2KBfmNTqDJiguqhOVvKaph2LMLV6Tpg,3133
34
- homesec/plugins/analyzers/openai.py,sha256=Vpk28MkqccJ6f97JNsbWfk45l-TH8GqwOpNBjOw6HZk,15799
35
- homesec/plugins/filters/__init__.py,sha256=BhZvv7BFBt1CxJzYf0j86pRZ3M3lI6xMXL3t2zedTP4,3160
36
- homesec/plugins/filters/yolo.py,sha256=O082XOvT6MTi421Z7cjZHxHF24M0bkzpIl3FYpiYT-A,9968
37
- homesec/plugins/notifiers/__init__.py,sha256=S6-tC6orO9xDbXJtuCJlh7omXDdpnH9OzEiJF8MSZ1s,1884
38
- homesec/plugins/notifiers/mqtt.py,sha256=8pTsZ5PofAEVXVtmCHi8U4u3EZDmGf6Nzs2UrGZ9BJ4,6247
39
- homesec/plugins/notifiers/multiplex.py,sha256=dTknkgEVF47bCEmpxG4RcjjhJ8Wfpmv2hiNwHSWfX2A,3649
40
- homesec/plugins/notifiers/sendgrid_email.py,sha256=YrbldoGdUzkgm7ISYZ9LF7nOpO7Ee_Hz1TiffduidC0,8528
41
- homesec/plugins/storage/__init__.py,sha256=zLmPlWKD9kY6cl7OKqDfSysVlVXPqzkqBRVjxYbbOas,3021
42
- homesec/plugins/storage/dropbox.py,sha256=0Xh5m8lape-39JT2zBA6p780u2QiBrdfK0MkxVmDc1I,9906
43
- homesec/plugins/storage/local.py,sha256=5v8h9-JJYlJBJCLBXin89xzA30_0wrU2fx4LmuZvYVo,3701
44
- homesec/repository/__init__.py,sha256=6cye2uQIA2v6jeLk5D2S9y3rlkfzJH5GceqdOroF3hU,160
45
- homesec/repository/clip_repository.py,sha256=JGbb0BEF56QIWFM64S--D50QAat1PPgNPVHyT4oOqIs,16780
46
- homesec/sources/__init__.py,sha256=wuCtiF44ceo7n3wJN51VHHcDavko3ubUDICtFbWmaRI,505
47
- homesec/sources/base.py,sha256=pV4lwM2T5h3IaPk5CfhcTMc2AxCxmw19hXC85T0FC1w,6917
48
- homesec/sources/ftp.py,sha256=ynIPbgcbIi1jub8yr4H1259Y1HbNM42RFDBBivXD4mg,7308
49
- homesec/sources/local_folder.py,sha256=8DQTDYaZdS-tyow4xWukibIjPWIcWauEWe1YU0KnrLg,8940
50
- homesec/sources/rtsp.py,sha256=Log4cZAoRhev8tXvf9sB8of2y2_RLkU-zxwco3FyT6A,47121
51
- homesec/state/__init__.py,sha256=Evt1jqTebmpJD1NUzNh3vwt5pbjDlLjQ0DgMCSAZOuM,255
52
- homesec/state/postgres.py,sha256=R_vSgcoqZQrCJWTHRsZJsDSYUMGcHeAfFNWqUbxAKqw,16817
53
- homesec/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- homesec/telemetry/db_log_handler.py,sha256=7qjKB9q6YWuy8ySoNWcPA4ENmDcvq8yYV2ooEqLEo9E,7502
55
- homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
56
- homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
57
- homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
58
- homesec-0.1.0.dist-info/METADATA,sha256=fQu17bHr7Yw3tVupfPYSAbnJvNDSTzvVEgmMXdrNvjk,20374
59
- homesec-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
60
- homesec-0.1.0.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
61
- homesec-0.1.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
- homesec-0.1.0.dist-info/RECORD,,