-
2026.8.4
StableAll checks were successful/ pr-review (push) Has been skipped/ pr-review (release) Has been skipped/ gitleaks (push) Successful in 24s/ gitleaks (release) Successful in 16s/ checks (push) Successful in 2m13s/ publish (push) Has been skipped/ publish-container (push) Has been skipped/ checks (release) Successful in 2m4s/ deploy-docs (release) Has been skipped/ publish (release) Successful in 36s/ publish-container (release) Successful in 3m1s/ deploy-docs (push) Successful in 1m11sreleased this
2026-08-04 08:27:02 +00:00 | 0 commits to main since this release[2026.8.4] - 2026-08-04
- Migrated the repo to https://forge.marvin8.zone
Commits
- 🔀 Merge branch 'maint/issue-129-forge-migration-updates'
130818b - 📝 drop Docker Hub references — image only published to registry.marvin8.zone
728c172 - 📝 refer to global AGENTS.md instead of CLAUDE.md
04fe262 - ⬆️ bump pre-commit deps
025bc0f - 📝 point changelog commit links at forge.marvin8.zone
e6c550b - ⬆️ bump deps
8f81fcc - 🚨 ignore PLR0917 in tests, matching existing PLR0913 ignore
477ff5f - 💄 point web UI source link at forge.marvin8.zone
27dea61 - 📝 update docs, README badge, and project URLs to forge.marvin8.zone
9a47223 - ⬆️ bump dev dependencies and align pre-commit hook revs
dc3f163 - 🔧 update OCI labels and justfile URLs to forge.marvin8.zone
61cefbb - 💚 point deploy-docs push and OCI annotations at forge.marvin8.zone
33705e9 - 👷 run weekly checks on suanni runner
773a012
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
2026.7.25 Stable
released this
2026-07-25 03:03:36 +00:00 | 15 commits to main since this release[2026.7.25] - 2026-07-25
- SQLite WAL mode, new indexes, and query optimizations eliminate login hangs during periodic scans and keep the scrubber responsive at high playback speeds.
Commits
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
2026.7.24 Stable
released this
2026-07-23 23:21:24 +00:00 | 21 commits to main since this release[2026.7.24] - 2026-07-24
- 💥 Breaking change: removed all video clip support. Cang is now a snapshot archiver.
Commits
- 🔀 Merge branch 'feat/issue-125-remove-video-support'
2ab42c6 - 🔧 fix dependencies and ruff error on two methods
b742bd2 - 👌 format breaking change as bullet in release notes
792f986 - 🚚 rename clips.py to days.py
b54eaad - 📝 document manual cleanup of legacy clip files
8a1d255 - 📝 update docs and metadata for snapshot archiver identity
53e631a - ⚡ fix scrubber performance — remove interval recreation, optimize filmstrip
29e3dc3 - 🔥 remove video clips from web UI
34048ec - 🔥 remove video clip support from adapters, config, storage, db, and migration
f1657b2 - 🔥 remove transcode pipeline and video file watching
feb04f0 - 🐛 Fix UV_VERSION grep escaping in publish-container job
130a44d - 💚 fix building and publishing container in ci
f62e50f
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
2026.7.23 Stable
released this
2026-07-22 21:27:10 +00:00 | 35 commits to main since this release[2026.7.23] - 2026-07-23
- Container images are now published to
registry.marvin8.zone/marvin8/canginstead of Docker Hub - Switched to calendar versioning
Commits
- ⬆️ bump deps
3202258 - 🐛 fix container build
134570e - ✅ fix test that was checking version against a hardcoded value and bump deps
87c2a77 - 🔀 Merge branch 'maint/issue-123-project-maintenance'
6fff510 - 🔥 remove tools/check_gitmoji.py and its pre-commit hook
ad08612 - 👌 address review: prune zaojun args, reset-release-notes no push, fix uv_build, update Release-Notes
a29b112 - ⏪ revert version number — keep calver scaffolding only
69e2e9a - 📝 mark all TODO.md items complete
24fd325 - 🔖 switch to calver versioning (YYYY.MM.DD)
bed67ba - 🐛 URL-encode camera names in event tile URLs, fix time bar labels
7dc73b6 - 🔥 remove dead list_days and list_days_with_stats functions
8210135 - 📄 document all source files, add per-file-ignores for tests
77d80e4 - 🐳 make Containerfile self-contained, simplify justfile
0be6ce3 - 💚 finish CI overhaul: setup-uv in all jobs, gitleaks checksums, publish-container
cecac51 - 💚 replace curl|sh with setup-uv, gitleaks checksums, add publish-container job
6ba3451 - 🔧 add scaffolding files and config alignment
8c8c714 - 📝 reset Release-Notes.md for next release
fd46ca0
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Container images are now published to
-
0.10.1 Stable
released this
2026-07-16 08:02:41 +00:00 | 57 commits to main since this release[0.10.1] - 2026-07-16
- Fixed a bug where snapshot processing could stop for cameras with frequent
Commits
- 🔀 Merge branch 'fix/issue-121-stale-dcache-after-prune'
d3a2a91 - 📝 Document timezone/NTP requirement for snapshot pruning and add release note
d09719f - 🐛 Only prune snapshot date directories whose day has passed
8af7107 - 🐛 Restrict snapshot-scan pruning to hour/minute leaf directories
477a87a - 📝 reset Release-Notes.md for next release
1735c38
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.10.0 Stable
released this
2026-07-16 03:23:58 +00:00 | 64 commits to main since this release[0.10.0] - 2026-07-16
- Snapshot scrubber on the day-level snapshot page — a time slider, filmstrip, and play/pause controls for browsing large numbers of per-camera still images.
Commits
- 🔀 Merge branch 'feat/PI-snapshot-scrubber'
eb7f067 - 🐛 Restore start_time/end_time filtering in scrubber snapshot route
a1b51ad - ♻️ Replace density dots with motion event markers on scrubber timeline
ae3f94f - 🐛 Make density dots visible — larger 5px size, stronger color
f909a7a - 📝 Add snapshot scrubber release notes and documentation
da800ee - ✨ Add scrubber snapshot template with filmstrip and time slider
0e62acc - ✅ Add failing tests for scrubber snapshot UI
acd131c - 🐛 URL-encode camera name in snapshot query strings
29d84b4
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.9.0 Stable
released this
2026-07-15 06:19:02 +00:00 | 74 commits to main since this release[0.9.0] - 2026-07-15
- Live snapshot strip on the home page — shows the latest snapshot from each camera, auto-refreshing every 30 seconds. Two cameras fill the screen; max three per row. Cameras without snapshots show a placeholder.
Commits
- 🔀 Merge branch 'feat/issue-115-live-snapshot-strip'
b6890bb - 📝 Document live snapshot strip in Release-Notes and web UI docs
728e48e - ✅ Final verification — all tests and linters pass
f04e278 - 💄 Integrate live snapshot strip on home page
969e9af - ✨ Add /live-snapshots fragment route and template
6cef735 - ✨ Add /live/snapshots/{camera}/img route
eb0049a - ✨ Add latest_snapshot_per_camera DB query
d2a670d - 📝 reset Release-Notes.md for next release
9eed1fb
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.8.0 Stable
released this
2026-07-15 02:36:14 +00:00 | 84 commits to main since this release[0.8.0] - 2026-07-15
- New camera setup guide covering recommended Dahua configuration for use with cang
- Fixed: motion on two cameras at the same time now shows as two separate events instead of one mislabelled event
- Processed recordings and snapshots now move out of the camera incoming folders into cang's own storage — anything still in an incoming folder is unprocessed; existing installations migrate automatically on first start
- Fixed: clip videos — and in fact the whole output directory, including the database — were served without authentication; videos now go through an authenticated route
Commits
- 🔀 Merge branch 'feat/incoming-move-out'
7103df9 - 🔧 move CLAUDE.md to AGENTS.md and symlink back to CLAUDE.md
ccd827f - 📝 document storage layout, automatic migration, and removed config key
0983405 - 🐛 guard migration unlinks with atomic copies and content verification
0ff0b1b - ✨ migrate existing storage layout on startup
fa883bc - 🔒 serve clip videos through an authenticated route instead of a public mount
246131a - ♻️ drop filesystem snapshot-to-clip matching from adapters
3cac314 - ✨ store clips under clips/ and resolve thumbnails from the snapshot table
d76b5b7 - 💥 always delete incoming sources after successful transcode
980c78c - ✨ move snapshots into canonical output tree on ingest
a8f7298 - ✨ add db helpers for storage migration and thumbnail updates
6dbaa9d - ✨ add storage path helpers and safe copy/prune primitives
e178f36 - 🔀 Merge branch 'fix/per-camera-events'
c8c2bde - 📝 name marvin8 explicitly in AI-DECLARATION.md
c4d78d6 - 📝 add AI-DECLARATION.md declaring AI involvement levels
f2c8bec - 📝 document per-camera event detection fix
ba496c1 - 🐛 detect motion events per camera instead of merging across cameras
dac91d7 - ✨ add group_events_per_camera for per-camera event grouping
f574692 - 🔀 Merge branch 'docs/camera-setup'
e35d133 - 📝 update Release-Notes for camera setup guide
f6feaab - 📝 address WuMing review: clarify interval dropdown and admin error message
52f8921 - 📝 add DH-IPC-HDW2849TM-S-IL to tested camera models
5c7ff60 - 📝 add camera setup guide for Dahua cameras
135993c - 📝 reset Release-Notes.md for next release
ea91b10
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.7.0 Stable
released this
2026-07-11 09:02:13 +00:00 | 110 commits to main since this release[0.7.0] - 2026-07-11
- Calendar home screen: two-month grid with per-day motion event and snapshot counts
- Day-of-week added to single-day headings (e.g. Thursday · 2026-07-11)
- Login form replaces HTTP Basic Auth for password-manager compatibility
Commits
- 🔀 Merge branch 'feat/calendar-home-dayofweek-login'
a0e3fd0 - 📝 update Release-Notes for calendar, day-of-week, login form
030031d - ✏️ fix 'pasword' typo in TODO item #6
ecffa94 - ✏️ fix double 'a' typo in TODO item #4
f2ef868 - 📝 update docs for calendar, login form, day-of-week; fix in_retention for future dates
4df08bb - ✨ replace HTTP Basic auth with cookie-based login form
03bfd85 - ✨ add day-of-week to single-day headings
a3bbad3 - ✨ calendar home screen with two-month grid
00ec34b - 🔧 increase WuMing max_diff_lines to 3000
01cadd5 - ✨ add list_motion_snapshots_for_range DB query
3db9cb4 - 📝 reset Release-Notes.md for next release
b7ebc5b
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.6.0 Stable
released this
2026-07-09 05:20:23 +00:00 | 123 commits to main since this release[0.6.0] - 2026-07-09
- Snapshot-first NVR redesign: events UI, tiered retention, improved JPG cleanup.
- Documentation now also hosted at https://cang.marvin8.zone; old Codeberg Pages links redirect automatically.
Commits
- Merge branch 'feat/snapshot-first-nvr'
392a417 - ⚡ skip transcoding clips older than video_retention_days; delete source immediately
6150d78 - ⚡ batch snapshot inserts into a single transaction per camera scan
0d2f539 - 🐛 fix day view layout and add event grid CSS so snapshot images scale correctly
10b065f - 🐛 configure root logger so cang.* messages are visible; suppress Ctrl-C traceback
7c80f23 - 🔊 log startup progress per camera with counts
0f6e844 - 🎨 enforce one-import-per-line via isort force-single-line; fix all imports
f04a5d7 - 🎨 split multi-name imports in lifespan.py per project style
3fe1b29 - 📝 fix documentation URL in README
9cf4e6b - 📝 add post-merge TODO items from snapshot-first review
1f4b630 - 📝 document retention_days config keys in docs/config.md
8d921b7 - 📝 update Release-Notes for snapshot-first NVR redesign
1502339 - 📝 remove development-paused notice from README
cd502f8 - ✨ redesign web UI — events grid primary, DB-backed snapshots, clips secondary
9bdc249 - ✨ add group_into_events for motion snapshot event detection
e022481 - ✨ add snapshot ingestion and tiered retention cleanup to lifespan
c35dd4c - ✨ add retention config fields; snapshot cleanup now owned by retention job
08167fc - ✨ add snapshots table (migration v3) and snapshot DB queries
c733f1d - 🎨 split multi-name imports onto separate lines per project style
17992ee - ✨ add IncomingSnapshot dataclass and DahuaAdapter.scan_snapshots
e5a6298 - Merge branch 'feat/forgejo-migration'
0bbf47d - 📝 add grebedoc docs bullet to Release-Notes.md
4b8cd29 - 📝 CLAUDE.md — reference template instead of repeating format
f931c78 - 📝 update CLAUDE.md — release notes process and format
cca26ba - 👷 replace git-cliff with Release-Notes.md changelog generation
2f6ccd8 - 📝 add grebedoc hosting and client-side redirect
c6b6956 - 👷 migrate CI from Woodpecker to Forgejo Actions
17190b8 - 🔧 bump deps
fba55fc
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads