Skip to content

Changelog

Generated at build time from changelog.yml. Cross-reference GitHub Releases for download links and signed artifacts.

4.1.1

2026-06-09

  • SRT egress improvements for H265: subscribers joining between keyframes now get VPS/SPS/PPS prepended so the decoder starts immediately instead of stalling until the next IDR; the listener also gains tunable latency/bandwidth/idle-timeout knobs and aligns its payload to 1316 bytes (7x188) so MPEG-TS packets stay intact (37ff943)

4.1.0

2026-06-08

  • Processes panel rebuilt on a dedicated SSE process stream — live per-process stats pushed instead of polled, with explicit process-removed events; the UI fetches once on start/reconnect, then follows pushes (6d32de6)
  • the daemon now appears as its own self row with live CPU/RSS, the InfoBar derives its stats from the processes stream (dropping /api/system), and host GPU/MPP/NPU utilization is surfaced alongside (897d5fd)
  • source capture hardened — zero-copy dma-heap DMABUF capture, a libplacebo CSC fallback when RGA can't convert NV24, 64B NV12 stride padding, and steadier behavior through signal loss and HDMI link flaps; the v1->v2 config migration and migrate-config command are gone, so streams.toml must already be version 2 (820265a)
  • smaller operational fixes: auth falls back to Basic when /etc/shadow is unreadable, WHEP DELETE is idempotent for an already-closed peer, and an opt-in net/http/pprof debug server for live profiling (519fcb9)

4.0.0

2026-06-03

  • new pipeline architecture: sources, composers, and streams are three independent top-level entities wired by explicit upstream refs, governed by a single pipeline master switch, with encoders that spawn lazily on the first reader and stop after the last (b22080f)
  • native RK3588 media pipeline: videonode-source/composer/sink processes move NV12 dma-bufs zero-copy over SCM_RIGHTS, with a libplacebo GPU compositor and an NV12-end-to-end path carrying colorimetry through to the encoder (1a42a4d)
  • GPU composer with a live layout editor: multi-source compositing onto a canvas, a Region/Content model with per-slot rotation, crop, pan/zoom and fit, per-input perspective effects, configurable background, and edits that apply without restarting the pipeline — plus composer config TOML export/import (c1a4d04)
  • WebRTC playback via a WHEP egress endpoint with H265, fanning out alongside SRT and RTSP from the built-in local relay (f412934)
  • RK3588 hardware acceleration end to end: hardware MJPEG decode through MPP, rkmpp encoders ingesting BGRA/RGB directly, and an S32_LE-capable audio capture path for the on-board ADC (cea24f4)
  • rebuilt operational web UI on a single typed SSE entity stream: live pipeline/source/stream stats and sparklines, per-entity log panels, consumer counts and client IPs, process restart controls, an embedded WHEP player, and dead-rig detection (22fbdd1)
  • unified .deb packaging with a GitHub Pages APT repo, shadow-group-gated auth with postinst enrollment, and service auto-start on install — replacing goreleaser, the in-app self-update service, and install.sh (55a842b)
  • VitePress documentation site with Mermaid diagrams, search, and versioned navigation (cdd37c1)

4.0.0-rc12

2026-05-31

  • MJPEG sources with 4:2:2/4:4:4 chroma (e.g. HDMI-USB capture dongles) no longer show a red color ghost — the source converts them to NV12 instead of mislabeling the decode (0df70cf)

4.0.0-rc11

2026-05-31

  • composer pipeline goes NV12 end-to-end: GPU NV12 canvas output, NV12 composer inputs, an NV12-only sink carrier, and snapshots that read the staged NV12 fds, with colorimetry/VUI tags carried through (8ed71b8)
  • zero-copy canvas broadcast gated on per-consumer read completion, plus a GPU canvas clear and depth-4 ring, cutting per-frame CPU on the compositor (7746e7b)
  • UI surfaces the detected source colorimetry, and the stream audio config now lays out on a single line (4057bcb)
  • composer config exports to and imports from TOML — copy-paste in the browser or a .toml file, including overwriting an existing composer in place (9069dd2)
  • pipeline start is best-effort so one failing stage no longer blocks the rest; the composer also clears a stuck snapshot request on RPC timeout (ba2024f)
  • journald logging de-noised: dedup is keyed on the full record rather than message text, and the packaged service no longer double-logs to the journal (2403997)

4.0.0-rc10

2026-05-31

  • rkmpp encoders ingest BGRA/RGB32 directly, converting in hardware instead of via a CPU-heavy software nv12 filter (7e869b2)
  • readers dialing a stream that isn't configured now get a clean 404 instead of a logged warning and a spawned encoder (89b821e)
  • the .deb ships the videonode asound.conf so the RK3588 audio capture config is present on install (e533874)

4.0.0-rc9

2026-05-31

  • WHEP egress endpoint (POST/DELETE /whep/{stream}) for WebRTC playback, with working H265 and a fix for motion smearing (f412934)
  • WebRTC peers and SRT consumers now share a single hex client-ID scheme (cde5b5c)

4.0.0-rc8

2026-05-30

  • RK3588 audio capture reworked: routed through an mmap plug->dsnoop PCM that converts the card-native format (the Hollyland Lyra is S32_LE-only) to whatever the encoder requests, with a larger dsnoop ring to kill xruns under the 1080p60 transcode load (opus output ~8kbps silence -> ~85kbps); the service unit gains the audio group and streams now honor per-stream audio config (de9c2d1)
  • native source/sink robustness: the source gates NV12 ring reuse on consumer read-completion (per-slot refcount + generation), fixing the venetian-blind tearing seen across snapshot, composer, and encoder output; vn-sink reconnects across a source/composer restart instead of feeding a dead RTSP relay; the composer fails fast on a GPU-less host (661e15c)
  • hardware MJPEG decode adopts MPP's info-change handshake (two buffer groups, packet-owned input, one-shot SET_INFO_CHANGE_READY), fixing the per-frame jpegd reset that left Lyra MJPEG frames undecoded (975e2d3)
  • SSE entity payload is typed end-to-end as a oneOf+discriminator keyed on a type tag, so the UI narrows on event.type with no casts; idle now publishes a full zeroed status, so partial payloads can no longer crash the source panel (56558e4)
  • connection robustness: the UI detects a dead rig in ~20s via an 8s request timeout and a 20s SSE heartbeat watchdog instead of waiting out the TCP timeout, the shared SSE connection persists across navigation, reconnect is health-gated, and offline stats blank to dimmed em-dashes instead of frozen fake-ticking values (02dcb7a)
  • unified POST /api/processes/{id}/restart for source/composer/encoder, with restart buttons on the detail pages (3b5bfba)
  • the .deb no longer hard-depends on out-of-band board libraries (librga2, librockchip-mpp1) that come from a 3rd-party repo or a from-source build, fixing uninstallable 'apt install videonode' where no owning package exists (c38e3bc)

4.0.0-rc7

2026-05-29

  • composer layout editor rebuilt on a Region/Content model: Region is the axis-aligned output rectangle, Content the rotatable source overlay (0/90/180/270, cover/fit/stretch, pan/zoom), fixing rotated-slot resize at the root; edits now persist while the pipeline is idle (c1a4d04)
  • real-time updates collapse onto a single entity-envelope SSE stream, replacing the legacy per-event publishes; consumer-set changes fire a dedicated source.consumers event only on membership change (8275702)
  • operational UI: infobar shows live pipeline uptime/CPU/mem via a new daemon resource endpoint, source list shows format/res/fps and live consumer count, and the header tints with no thrown errors when the backend connection drops (22fbdd1)
  • hardware MJPEG decode now works, driven through MPP's advanced 1-in-1-out path with input-buffer sync (the prior simple-API loop never produced a frame); adds an mpp-jpeg-probe diagnostic (cea24f4)
  • source/capture robustness: reports no-signal when the device is absent, stops busy-spinning on capture-fd errors, stamps status with wall-clock time, and keeps the encoder idle until a reader connects (rebuilding it on a dimension change) (4b21ceb)
  • release target moves to Debian 13 (trixie) so the composer libplacebo backend builds; .deb runtime deps are derived from the real binaries via dpkg-shlibdeps, and installs on bookworm now fail with a readable apt error (7720917)

4.0.0-rc6

2026-05-29

  • arm64 .deb builds on Debian bookworm and declares its native runtime libraries (gRPC, protobuf, abseil, libplacebo, turbojpeg), fixing missing-shared-object and GLIBCXX-version failures on bookworm/Armbian SBCs (0e467ef)

4.0.0-rc5

2026-05-28

  • streams drop configurable publish targets: encoders publish to the built-in local RTSP relay, SRT/WebRTC fan out from there (breaking) (3ccdfaf)
  • remove the in-app self-update service; updates ship via the .deb / APT repo only (breaking) (1de2fe0)
  • sources expose a liveness signal distinct from status, surfaced with per-entity log panels over the shared SSE stream (d5d9270)
  • stream editing UI: partial-PATCH edits and auto-start preview that wakes an idle stream (4676230)
  • pipeline fixes: compositor honors the NV12 UV-plane offset, source pins and reports the real capture rate via G_PARM (47767b1)
  • packaging cleanup: drop the legacy install.sh and the network-online unit dependency (321b127)

4.0.0-rc4

2026-05-28

  • packaging: enroll SUDO_USER on upgrade, not just first install (37f0656)

4.0.0-rc3

2026-05-27

  • VitePress docs site with Mermaid, search, versioned navbar (cdd37c1)
  • release pipeline rewrite: matrix build replaces goreleaser, chglog-driven .deb (feff078)
  • shadow-group-gated auth + postinst enrollment, service auto-start on install (f62e5a3)
  • composer UI: auto-slot on input add, canvas rotation moved to inspector (74749ac)
  • source reports placeholder dims while V4L2 inactive (16f5389)

4.0.0-rc1

2026-05-27

  • feat(packaging): unified .deb via nfpm + GitHub Pages APT repo (c57d69e)
  • refactor(packaging): replace CPack with nfpm (72c5d66)

3.1.0

2026-05-18