• 0.2.0 d292624753

    0.2.0 Stable

    marvin8 released this 2026-05-29 21:28:45 +00:00 | 317 commits to main since this release

    Signed by marvin8
    SSH key fingerprint: SHA256:cyGOzvyFNw+A8J/LVjRif8v3KZLo8seQDVZbk/IhNhI

    [0.2.0] - 2026-05-29

    First release. This now has most functionality in place.
    At this point only Dahua cameras are supported.

    Bug Fixes

    • 🐛 Accept Path in load_config, update tests
    • 🐛 Create output dir, log ffmpeg to file, kill on cancel
    • 🐛 Safe mp4 filenames and fix video URL in day template
    • 🐛 Pipeline: copy snapshot to output dir on transcode completion; fixes broken thumbnails when source is deleted
    • 🐛 Lifespan: use middle snapshot as thumbnail instead of first
    • 🐛 Config: add scan_interval to ServerConfig (default 300 s)
    • 🐛 Pipeline: periodic re-scan fallback for inotify race condition
    • 🐛 Dahua: remove serial directory level; cam.root is now the serial dir

    CI

    • 👷 add noxfile.py with ruff and tryke sessions
    • 👷 add .woodpecker/ci.yml lint and test pipeline
    • 👷 add .pre-commit-config.yaml with prek hooks
    • 👷 add ty type-checking session to noxfile.py
    • 👷 address review: drop push trigger, add complexipy/pysentry/deptry/zaojun
    • 👷 Only run CI on pull_request events, not push
    • 👷 CI: expand ci.yml to release/tag events; add gitleaks and validate_release_notes
    • 👷 CI: add publish-pypi.yml pipeline
    • 👷 CI: add fediverse.yml announcement pipeline
    • 👷 CI: add weekly-checks.yml cron pipeline
    • 👷 CI: add publish-docs.yml pipeline

    Documentation

    • 📝 mark Roadmap M0 complete in ROADMAP.md
    • 📝 add Woodpecker CI badge to README.md
    • 📝 mark Roadmap M1 complete in ROADMAP.md
    • 📝 Mark M4 complete in ROADMAP.md
    • 📝 Add docs/config.md and mark M3 complete in ROADMAP.md
    • 📝 Mark M6 done in ROADMAP.md
    • 📝 Add startup scan item to M7 in ROADMAP.md
    • 📝 Web UI and install docs; update config ref and ROADMAP
    • 📝 Document output dir layout, filename format, and ffmpeg.log
    • 📝 Document flags, thumbnail poster, and responsive layout
    • 📝 Docs: config reference — delete_after_transcode
    • 📝 Docs: document completed-only day view and processing banner
    • 📝 Docs: document scan_interval config key
    • 📝 Add Release-Notes.md stub
    • 📝 Add mkdocs.yml, docs_hooks.py, and docs/index.md
    • 📝 Update README; fix docs; remove concept.md and dahua-folders-files.txt
    • 📝 README: correct copyright holder to Marvin8

    Features

    • add src/cang/init.py with importlib.metadata version
    • Implement DahuaAdapter — folder parsing and snapshot matching
    • Implement transcode coroutine and Pipeline queue worker
    • Implement config.py loader and validation
    • Implement db module
    • Integrate watchdog FileWatcher into pipeline
    • Extend config with WebConfig and [web] section
    • Add list_days, list_clips_for_day, get_clip to db
    • Add make_adapter() factory
    • FastAPI app, lifespan, startup scan, auth, routes, templates
    • Add CLI entry point
    • Serve clip thumbnails via /clips/{id}/thumbnail
    • Show trigger flags and snapshot poster on day page
    • Responsive clip grid — auto-fill columns, no fixed-width cap
    • DB + route + template: per-day statistics on /days
    • Config: add delete_after_transcode per-camera option
    • Pipeline: delete source files after successful transcode
    • Web: camera badge + hour sidebar on day page
    • DB: add status column with v2 migration; new helpers set_clip_done, get_clip_by_camera_filename, count_pending_for_day
    • Pipeline: on_done callback on TranscodeJob; Pipeline.watch takes async callback
    • Lifespan: re-enqueue pending clips on restart; mark done after transcode; wire file-watcher DB insert
    • Web: day page filters to completed clips; shows pending-count banner

    Refactoring

    • ♻️ docs_hooks.py: remove llms-full.txt generation

    Security Fixes

    • 🔒 Constrain starlette>=1.0.1 to fix CVEs (GHSA-7f5h, GHSA-2c2j, PYSC-2026-161)

    Testing

    • add tests/test_smoke.py smoke test
    • Add failing tests for DahuaAdapter
    • Add failing tests for pipeline transcode and queue flow
    • Add failing tests for config loader
    • Add failing db tests
    • Add FileWatcher tests
    • Add failing tests for WebConfig parsing
    • Add failing tests for list_days, list_clips_for_day, get_clip
    • Add failing web route tests
    • Tests: list_days_with_stats DB query
    • Tests: delete_after_transcode config and pipeline cleanup
    • Tests: transcode-status DB queries and on_done pipeline callback
    • Tests: snapshot copy to output dir and thumbnail DB update
    Downloads