v0.3.0: find the moment, get it out
Scrubbing that keeps up with your finger, a License plate page rebuilt around a plate's whole history on desktop and Android, exports you can hand to someone, and a server-wide security and correctness sweep.
CrumbVMS is built in the open. Every meaningful change ends up here: releases, design notes, audits, and the bug-of-the-day. Subscribe via RSS or watch the repo on GitHub.
Scrubbing that keeps up with your finger, a License plate page rebuilt around a plate's whole history on desktop and Android, exports you can hand to someone, and a server-wide security and correctness sweep.
Crumb could put a Home Assistant entity's state on the live wall, but you could not do anything with it, and setting the links up was a thin, awkward surface. v0.2.0 rebuilds the authoring layer and makes the badges interactive: tap a light, drag a slider, read a sensor's real value off the frame. Plus adaptive live-wall quality on every client and human-readable plate names.
v0.1.1 is a hardening release. An intensive multi-model audit swept the recorder, the API, every client, and the seams between them, finding each issue, trying to disprove it, then fixing it. Sixty-plus changes, almost none of which change what Crumb does, all of which change how much you can rely on it.
Any single plate sighting exports as a clean one-page PDF from the desktop client, with the plate, the time, the camera, the full frame plus crop, and a recent-sightings dossier. For handing a sighting to someone without screenshotting the app.
Link a camera to your Home Assistant entities and drag their live state onto the video as badges. Self-hosted, REST-polled, configured in the console. State honesty is built in.
Set a camera to Both and every vehicle pass is read by both LPR engines at once. The desktop Benchmark screen puts them head to head so you can see which detected, which missed, and where they differ.
New installs now present the Alpha Tester Terms and responsible-use guide before the setup wizard proceeds. One checkbox, no lawyer-speak, sets the tone for what "pre-release" means.
Push a version tag and CI builds, signs, and publishes the APK with a SHA-256 checksum on the GitHub Release. Fully automated, keystore held as a CI secret.
Crumb now keeps a searchable, camera-scoped database of the plates it sees, with two OCR engines you pick per camera. Both run on your own box, no cloud, no GPU.
go2rtc is now embedded in the recorder, db-backup folded into the api, mosquitto profile-gated. The default stack is postgres + api + recorder + autoheal. Simpler to run, fewer things to break.
Media endpoints now reject full login JWTs via ?token= (scoped short-lived claims only), web-console snapshots use properly scoped tokens, and a router-walk test asserts every protected route rejects unauthenticated requests.
A wall tile that can auto-follow the most-recently-moved camera in a configured set, with a 4-second dwell. Like the spotter in a security room, without the security room.
Place ONVIF d-pad, zoom, home, focus, iris, and preset buttons anywhere on a PTZ camera's live tile. Resizable, snap-aligning, renamable, per-camera.
New `POST /cameras/:id/imaging` endpoint drives ONVIF focus near/far, autofocus, and iris from the desktop PTZ tile. Verified on a Uniview LPR camera.
New users can tap "Find my server" on the Android login screen and CrumbVMS subnet-scans for `/health`. No IP-typing, no mDNS quirks, no router config.
`docs/AI-INSTALL.md` is a step-by-step runbook that an AI coding assistant can follow to install CrumbVMS securely on a host. LAN-only, generated secrets, a verify check after every step.
New deployments now get a guided web wizard: admin account, server address, storage, first camera, optional Frigate. Existing installs aren't disrupted; you can preview the wizard from settings.
Clips auto-zoom to the motion bounding box for the first few seconds, then ease back out. Pinch-zoom on top for the parts that matter.
Controlled A/B at the wall meter. NVDEC cost an extra 32 W (105 W vs 73 W) for the same 11 fps-capped sub-streams. CPU wins at this scale; VAAPI and an admin-selectable decode mode shipped alongside.
Ran a 42-agent audit on "what would a stranger need to install this." Verdict: not distributable yet. Wrote a 6-phase roadmap aimed at zero hand-editing. A lot of Phase 0 has since shipped.
Replaced the fixed motion threshold with a percentile-over-decaying-histogram floor and a diurnal EMA. The detector adapts to each scene over time. No more 3 AM false triggers from wind in the trees.
Motion detection is now a trait with five implementations (Census default, FrameDiff, MOG2, Optical Flow, Ensemble) plus a Frigate-as-source option. Per-camera selection. A golden-replay benchmark ships with the recorder.
A 48-agent audit of every code path that could lose footage. Verdict: footage is roughly 80% solid. Found three real problems including a missing automated backup. The most uncomfortable finding is the most important to publish.
Storage rules used to be per-camera. Now you can name a policy (retention, motion mode, recording profile) and attach a group of cameras to it. Per-camera overrides still work for edge cases.
First major architectural audit. 33 agents in parallel asked "what's working, what's missing, what would a serious operator notice." The direction was right; the gaps were in operations and reliability, not in the architecture.
Watch or star the repo to catch releases, file bugs in Issues, and talk shop in Discussions. Or grab the RSS feed. No mailing list.
Get it on GitHubcrumbvms.com · self-hosted video management