a54ff08ebb
feat: storage health monitor with UI alert on drive loss
...
Detect a disconnected or read-only recordings drive and surface it
without stopping recording or live view:
- storage.go: probe path existence, mount point, writability and free
space every 30s; capture mount expectation at startup so a clean
unmount (writes falling through to root fs) is also caught
- GET /api/storage endpoint; storage fields in /api/status
- red UI banner while storage is unavailable
- log ALERT on loss, OK on recovery
2026-10-10 07:17:28 +01:00
679c6ae7d6
docs: document live streaming architecture (go2rtc passthrough)
2026-09-13 12:30:57 +01:00
53e12abbfc
fix: use -timeout (RTSP socket I/O) instead of invalid -rw_timeout
2026-09-12 20:30:32 +01:00
fcc760363f
fix: add ffmpeg socket I/O timeout to prevent hung recordings
...
A stalled RTSP stream (TCP connection alive but no data) made the recorder's ffmpeg processes block forever on read(). The -t 300 flag only bounds by input timestamps, not wall-clock, so it never fired and the recorder loop never started the next segment.
Add -rw_timeout (10s socket I/O timeout) so ffmpeg exits on a stalled stream and the existing retry loop reconnects automatically.
2026-09-12 20:27:48 +01:00
9760bdec33
fix: online check also looks for active recorder .part files
2026-08-10 07:23:24 +01:00
953360d251
fix: real camera online status — checks latest.jpg modification time
2026-08-10 07:03:31 +01:00
dc15b8ffd4
feat: download button in clip player — watch first, then save
2026-08-10 07:01:15 +01:00
efcc10f5fd
feat: camera config proxy — access cameras remotely through NextNVR
2026-08-10 06:47:02 +01:00
8328f4049a
docs: storage setup guide — local, USB, NFS; NAS roadmap done
2026-08-06 19:45:45 +01:00
2f656aaa40
fix: default storage to $HOME/nvr_data, not /mnt/recordings
2026-08-06 19:43:01 +01:00
dc236e561d
feat: storage path in Settings UI, deploy creates directory
2026-08-06 19:41:14 +01:00
be801e9d27
fix: save status clears after reload, shows done message
2026-08-06 19:35:20 +01:00
3b2bcd7696
refactor: viewer always listens, access blocked at request level when disabled
2026-08-06 19:31:10 +01:00
f1a6243dac
fix: viewer port disabled by default — opt-in via Settings
2026-08-06 19:25:36 +01:00
c0491143fd
fix: Go default storage path matches config sample
2026-08-06 19:22:00 +01:00
228f4cd518
fix: default storage path in config sample — /mnt/recordings
2026-08-06 19:21:43 +01:00
deb2380507
fix: toggle viewer_port directly instead of viewer.enabled — no ambiguity
2026-08-06 19:12:10 +01:00
c85bba8d56
fix: use mutex-protected config copy in onReload — prevents stale reads
2026-08-06 19:07:08 +01:00
700a0ab4f0
fix: use element IDs for auth checkboxes — reliable checked state
2026-08-06 19:02:21 +01:00
f548ec8fe2
fix: reload config after save so viewer toggle state is correct
2026-08-06 18:56:19 +01:00
72e936d3f1
fix: viewer port starts/stops dynamically on config save, auth bypass removed
2026-08-06 18:52:02 +01:00
2032402597
fix: auth bypass removed, sanitize names, json errors, viewer port toggle
2026-08-06 18:43:14 +01:00
fbb40f4e26
chore: v0.4.0 — cleanup, changelog, version bump
2026-08-06 18:30:49 +01:00
cc972835b0
docs: update README — auth is optional, remove.sh, config.json, roadmap
2026-08-06 18:28:32 +01:00
f280de445f
fix: store real camera password in data attribute, not masked value
2026-08-06 18:04:56 +01:00
83ed6516f1
fix: exclude auth card from camera save — selector scoped to [data-id]
2026-08-06 18:02:09 +01:00
7ebeb73f62
fix: missing function declaration for addCamera
2026-08-06 17:54:05 +01:00
1942c2bb35
feat: clean settings cards — name + desc, advanced collapsed, add/remove
2026-08-06 17:50:16 +01:00
ebc05762b0
feat: add/remove cameras in Settings, empty fallback fix
2026-08-06 17:40:19 +01:00
86ce14bc5b
refactor: no interactive prompts — config.json.sample has defaults, update preserves config
2026-08-06 17:28:46 +01:00
30547fc354
fix: remove auth from first-run wizard, skip empty-name cameras in grid
2026-08-06 17:26:55 +01:00
ef41c29981
fix: move auth collection after config fetch — lexical scope bug
2026-08-06 17:20:15 +01:00
4a9266e249
feat: auth management card in Settings — edit master/viewer, enable/disable
2026-08-06 15:32:10 +01:00
a1f05012b4
fix: graceful stop via systemctl + targeted kill, no pkill -9
2026-08-06 15:23:09 +01:00
7b9902f788
fix: pkill patterns — target binary paths, not script itself
2026-08-06 15:04:03 +01:00
31ea59ceea
feat: remove.sh — clean removal for greenfield redeployment
2026-08-06 14:58:47 +01:00
b2e4dface2
refactor: pivot to JSON config — no yaml dependency, jq in bash, greenfield detection
2026-08-06 14:54:43 +01:00
386d3b3858
fix: deploy_nvr.sh downloads go2rtc binary, sets correct config path
2026-08-06 14:40:31 +01:00
02ee23281c
feat: config hot-reload — save restarts services automatically
2026-08-06 14:37:02 +01:00
e790855f69
feat: deploy prompts for storage path on first install, preserves on update
2026-08-06 14:30:19 +01:00
49b1b8a5ff
fix: config comes from repo clone, fix step numbering
2026-08-06 14:27:58 +01:00
d867e3b976
refactor: storage path in config.yaml only — deploy script no longer prompts
2026-08-06 14:23:56 +01:00
aba58cf1a0
feat: deploy_nvr.sh — stops service before rebuild, update instructions
2026-08-06 14:22:49 +01:00
7c7c920f5e
fix: one-liner reads from /dev/tty for interactive prompt, README explains both methods
2026-08-06 14:18:16 +01:00
6f0576d534
fix: inject storage path into existing config, explain interactive vs piped
2026-08-06 14:15:13 +01:00
e61aab2df5
fix: handle non-interactive piped install — default $HOME/nvr_data
2026-08-06 14:09:33 +01:00
1cbf03d384
fix: default storage to $HOME/nvr_data, empty in repo config
2026-08-06 13:55:29 +01:00
b5dcbe9c56
feat: setup.sh asks for storage path, creates directory, injects into config
2026-08-06 13:53:58 +01:00
7a4c97e760
fix: fallback camera name from IP when ONVIF returns no model
2026-08-06 13:20:27 +01:00
c4c9049e24
fix: go2rtc config path absolute, gitignore generated file
2026-08-06 13:16:02 +01:00