Commit Graph

14 Commits

Author SHA1 Message Date
git_admin 650a531f21 live: double-click solos a cell to full screen (fullscreen mode)
Double-clicking a grid cell now maximizes that camera ("solo") via a CSS
class on the grid instead of putting the tile into the browser Fullscreen
API. In fullscreen the soloed camera fills the screen; double-clicking
again returns to the grid (staying fullscreen). From windowed mode the
gesture also enters fullscreen so the camera fills the screen. ESC exits
fullscreen natively; on exit the solo state is cleared.

VERSION -> 0.0.121.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:32:36 +05:00
git_admin 44f5aa920f settings: unify transcode param styling and controls
- Style QP <input type=number> like the <select>s (it rendered with the
  default white background -> stood out); add a disabled (greyed) style.
- QP vs bitrate are now mutually DISABLED instead of hidden: QP mode
  greys the bitrate field, VBR/CBR greys the QP field. Hiding never
  worked because .tr-row label{display:flex} overrode [hidden].
- Replace SOFT/MEDIUM/HARD preset buttons with a "Готовый профиль"
  dropdown, placed last (rightmost) in the params row.

VERSION -> 0.0.120.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:21:28 +05:00
git_admin c876a46e61 transcode: add CBR/VBR/QP rate control + more x264 presets
Player/transcoding settings gain encoder controls:
- Rate-control mode VBR / CBR / QP (constant quantizer). x264: VBR uses
  -b:v/-maxrate/-bufsize, CBR adds -x264-params nal-hrd=cbr (min=max=b:v),
  QP uses -qp N (no bitrate). VP9 maps QP -> -crf N -b:v 0, CBR -> min=max=b:v.
- Preset list expanded to ultrafast/superfast/veryfast/faster/fast/medium
  (was only ultrafast/superfast); for VP9 the preset maps to cpu-used.
- New QP field in the UI, shown when rate control = QP, otherwise the
  bitrate field is shown.

Both /play.mp4 (archive) and /live.mp4 accept rc + qp query params.
All three modes verified producing valid output on the live restream.
VERSION -> 0.0.119.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:38:04 +05:00
git_admin 5828873910 settings: fold Account widget into Users tab, drop Account tab
Per request, move the account widget (current user line + logout button)
to the top of the "Пользователи" tab and remove the standalone Account
tab. Note: the Users tab is superadmin-only, so logout is now reachable
only by superadmin (it is the only logout in the app) -- confirmed
acceptable by the user, who operates as superadmin.

VERSION -> 0.0.118.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:20:14 +05:00
git_admin fcddc0c470 settings: move Player/transcode and Account into their own tabs
The "Система" tab was a catch-all (Recording, Player & transcoding,
Storage, System info, Account). Split out two dedicated tabs:

- "Плеер": per-browser playback/transcode profiles. Kept at operator+
  (the transcode option spawns server-side ffmpeg, i.e. CPU load).
- "Учётная запись": current user + logout. Ungated, so any signed-in
  user (incl. viewers) can log out -- previously it was buried inside
  the operator-only "Система" tab.

.tabs gets flex-wrap so the now-7 tabs wrap instead of overflowing.
VERSION -> 0.0.117.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:14:59 +05:00
git_admin d1ef54af27 player: fix HEVC color (BT.709 limited range)
The built-in WASM player (frontend/static/vendor/hevcjs/hevc-core.js)
rendered washed-out, green/red-shifted video. Two causes, both fixed:

- VideoFrame path (Chrome): the I420 VideoFrame was created without a
  colorSpace, so the browser defaulted to BT.601 limited -> hue shift,
  and guessed the range -> washout. Set explicit BT.709, fullRange:false.
- WebGL fallback shader: used BT.709 FULL-range coefficients on
  limited-range camera output -> washout/desaturation. Switched to
  BT.709 limited-range conversion ((Y-16)*255/219, chroma centered 128).

VERSION -> 0.0.116.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:03:30 +05:00
git_admin 00cfca1a57 go2rtc: auto-reconcile streams so live/recording self-heal
Live and recording both read from the go2rtc restream. If go2rtc's
runtime stream table gets emptied (camera clear via API, go2rtc restart
with a stale/empty config, or a silently-failed startup sync_all), every
restream returns 404 and both live and recording go dark until a manual
`docker restart nvr-go2rtc`.

Add a background Reconciler that every 30s diffs the desired streams
against go2rtc /api/streams and PUTs only the missing ones (existing
streams are left untouched so active producers/consumers are not
disrupted). VERSION -> 0.0.115.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:53:02 +05:00
git_admin 346d3b5b96 deploy 2026-05-30 00:57:29 +05:00
git_admin 3dc2bdd631 v114 2026-05-30 00:48:16 +05:00
git_admin 1da4f2e1b6 fix cert 2026-05-30 00:42:20 +05:00
git_admin 32f1c82e2b add .gitattributes: force *.sh to LF
entrypoint.sh has a /bin/sh shebang; CRLF would break exec in the Linux
container. Keep shell scripts LF-only regardless of Windows autocrlf.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:27:47 +05:00
git_admin 21b26d73bd v113 2026-05-30 00:19:40 +05:00
git_admin 43dee9f796 fix 2026-05-30 00:15:16 +05:00
git_admin d3afd698b6 init 2026-05-30 00:08:59 +05:00