36 lines
1.9 KiB
Markdown
36 lines
1.9 KiB
Markdown
# highlights
|
|
|
|
## Purpose
|
|
|
|
Generates derived video products from recorded footage: a daily highlight reel (events scored and assembled into a short FFmpeg-concatenated clip) and scheduled per-camera timelapses. These are offline/batch jobs that read the `events` and `recordings` tables and write new rows into `recordings` tagged with a synthetic trigger.
|
|
|
|
## Key files
|
|
|
|
- `vigilar/highlights/reel.py` — event scoring map (`PET_ESCAPE=10`, `WILDLIFE_PREDATOR=9`, ...), clip selection, FFmpeg concat assembly, inserts resulting file via `insert_recording`
|
|
- `vigilar/highlights/timelapse.py` — per-camera timelapse generator; reads `timelapse_schedules`, walks recordings within the configured hour window, stitches with FFmpeg, inserts a new `recordings` row
|
|
- `vigilar/highlights/__init__.py`
|
|
|
|
## MQTT topics
|
|
|
|
**Subscribes:** No MQTT subscribers found at time of writing.
|
|
**Publishes:** No MQTT publishers found at time of writing.
|
|
|
|
## Database tables
|
|
|
|
- `events` — read-only, source for reel scoring
|
|
- `recordings` — read (source clips) and write (new reel / timelapse entries via `insert_recording`)
|
|
- `timelapse_schedules` — read by `timelapse.py` to determine which cameras / hours / generation times are active
|
|
|
|
## Depends on
|
|
|
|
- `storage` — all table access via `vigilar.storage.queries` and `vigilar.storage.schema`
|
|
- FFmpeg subprocess for clip concatenation and timelapse assembly
|
|
|
|
## Consumed by
|
|
|
|
- `web` — the `recordings` blueprint surfaces reels and timelapses alongside regular recordings
|
|
|
|
## Notes
|
|
|
|
Scoring is a hand-tuned dict in `reel.py`. The top-scored events of the day are pulled, their surrounding recordings are concatenated via FFmpeg, and the result is persisted as a new `recordings` row with a `RecordingTrigger` tag so the UI can distinguish generated from captured clips. Timelapse generation is driven by `timelapse_schedules` rows — each row defines a camera, an hour window, and a `generate_time` at which the day's frames are stitched.
|