homesec 1.0.2__py3-none-any.whl → 1.1.1__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.
homesec/cli.py CHANGED
@@ -155,6 +155,9 @@ class HomeSec:
155
155
 
156
156
  def main() -> None:
157
157
  """Main CLI entrypoint."""
158
+ # Strip --help/-h when it's the only arg so Fire shows its commands list
159
+ if len(sys.argv) == 2 and sys.argv[1] in ("--help", "-h"):
160
+ sys.argv.pop()
158
161
  fire.Fire(HomeSec)
159
162
 
160
163
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homesec
3
- Version: 1.0.2
3
+ Version: 1.1.1
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
@@ -246,15 +246,31 @@ Description-Content-Type: text/markdown
246
246
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
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
+ [![codecov](https://codecov.io/gh/lan17/HomeSec/branch/main/graph/badge.svg)](https://codecov.io/gh/lan17/HomeSec)
249
250
 
250
251
  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
 
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.
253
+ 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](https://en.wikipedia.org/wiki/Vision%E2%80%93language_model)) for a structured summary, and sends alerts via [MQTT](https://en.wikipedia.org/wiki/MQTT) or email. The design prioritizes reliability and extensibility.
254
+
255
+ ## Table of Contents
256
+
257
+ - [Highlights](#highlights)
258
+ - [Pipeline at a glance](#pipeline-at-a-glance)
259
+ - [Quickstart](#quickstart)
260
+ - [Configuration](#configuration)
261
+ - [Extensible by design](#extensible-by-design)
262
+ - [CLI](#cli)
263
+ - [Built-in plugins](#built-in-plugins)
264
+ - [Writing a plugin](#writing-a-plugin)
265
+ - [Observability](#observability)
266
+ - [Development](#development)
267
+ - [Contributing](#contributing)
268
+ - [License](#license)
253
269
 
254
270
  ## Highlights
255
271
 
256
- - Bring your own input: RTSP motion detection, FTP uploads, or a watched folder
257
- - Parallel upload + filter (YOLOv8) with frame sampling and early exit
272
+ - Multiple pluggable video clip sources: [RTSP](https://en.wikipedia.org/wiki/Real-Time_Streaming_Protocol) motion detection, [FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol) uploads, or a watched folder
273
+ - Parallel upload + filter ([YOLOv8](https://en.wikipedia.org/wiki/You_Only_Look_Once)) with frame sampling and early exit
258
274
  - OpenAI-compatible VLM analysis with structured output
259
275
  - Policy-driven alerts with per-camera overrides
260
276
  - Fan-out notifiers (MQTT for Home Assistant, SendGrid email)
@@ -276,6 +292,7 @@ ClipSource -> (Upload + Filter) -> VLM (optional) -> Alert Policy -> Notifier(s)
276
292
 
277
293
  ### Requirements
278
294
 
295
+ - Raspberry Pi 4 (or equivalent) or higher; any x86_64 system works as well
279
296
  - Docker and Docker Compose
280
297
  - Optional: MQTT broker, Dropbox credentials, OpenAI-compatible API key
281
298
 
@@ -476,6 +493,30 @@ my_filters = "my_package.filters.custom"
476
493
  - Tests must include Given/When/Then comments.
477
494
  - Architecture notes: `DESIGN.md`
478
495
 
496
+ ## Contributing
497
+
498
+ Contributions are welcome! Here's how to get started:
499
+
500
+ 1. **Fork and clone** the repository
501
+ 2. **Create a branch** for your feature or fix: `git checkout -b my-feature`
502
+ 3. **Install dependencies**: `uv sync`
503
+ 4. **Make your changes** and ensure tests pass: `make check`
504
+ 5. **Submit a pull request** with a clear description of your changes
505
+
506
+ ### Guidelines
507
+
508
+ - All code must pass CI checks: `make check`
509
+ - Tests should include Given/When/Then comments explaining the test scenario
510
+ - New plugins should follow the existing patterns in `src/homesec/plugins/`
511
+ - Keep PRs focused on a single change for easier review
512
+
513
+ ### Reporting Issues
514
+
515
+ Found a bug or have a feature request? Please [open an issue](../../issues) with:
516
+ - A clear description of the problem or suggestion
517
+ - Steps to reproduce (for bugs)
518
+ - Your environment (OS, Python version, HomeSec version)
519
+
479
520
  ## License
480
521
 
481
522
  Apache 2.0. See `LICENSE`.
@@ -1,6 +1,6 @@
1
1
  homesec/__init__.py,sha256=tO_V5DJgS44qHCIySDUFIK5-Rbgjh3MpUBHa2HhZiB4,452
2
2
  homesec/app.py,sha256=ma1_wClIHAFyVB-dOzSlKvoWAWUhHvAPjZVARtqHTK0,14124
3
- homesec/cli.py,sha256=S7-K7aAIkus4mWvhjPqcGURabNhDlL4237iDeLvPxBI,5608
3
+ homesec/cli.py,sha256=OOp1rKNTRWxAPNRErV_6XJ7nMxaa9msCbbbpXbBsUdM,5771
4
4
  homesec/errors.py,sha256=fBW_OdnYgqtb6u6t0YZh4tHgsiv0Pb1DiF9G6b4Vcbk,2105
5
5
  homesec/interfaces.py,sha256=z_bL6zrow5dxXBQLyeCK4ED7HzDrGBHe83Mm5W_4_pk,8388
6
6
  homesec/logging_setup.py,sha256=Z12nzCPK04cqFHfIQgasioGfXb4TLvXJT9stzD8Dh4c,5546
@@ -55,8 +55,8 @@ homesec/telemetry/db_log_handler.py,sha256=KM8g4kcOyPzFJbpGxpSzecx_hrEWY0YfpoIKy
55
55
  homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
56
56
  homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
57
57
  homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
58
- homesec-1.0.2.dist-info/METADATA,sha256=iD_OFVMSc2YiZ4M25guWo53jF_obJBFeye1xDLsTKUE,21605
59
- homesec-1.0.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
60
- homesec-1.0.2.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
61
- homesec-1.0.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
- homesec-1.0.2.dist-info/RECORD,,
58
+ homesec-1.1.1.dist-info/METADATA,sha256=_-urmcNlTrXZyAeWXSk1TJ5W0YAiMhdo4MmuzZT7FjE,23274
59
+ homesec-1.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
60
+ homesec-1.1.1.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
61
+ homesec-1.1.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
+ homesec-1.1.1.dist-info/RECORD,,