Skip to content

Releases: arodd/hdhriptv

v1.1.0

05 Mar 01:04

Choose a tag to compare

Changelog Highlights

Entries added to CHANGELOG.md since v1.0.6.

Features

  • Delivered multi-source playlist support across backend and UI: source CRUD/config parsing, source-scoped sync/reconcile/filtering APIs, per-source virtual tuner pools with live reconfiguration, source-aware auto-prioritize/scheduler behavior, and playlist-source metadata/badges across automation, catalog, channels, and tuners surfaces. (2026-03-04)
  • Added runtime version metadata (app.version, app.commit, app.build_time), surfaced version branding in the admin UI title bar, and added CLI --version output. (2026-03-04)
  • Decomposed admin HTTP control-plane handlers into focused modules while preserving route and payload compatibility. (2026-03-04)

Bug Fixes

  • Hardened multi-source runtime contracts and scale behavior by enforcing strict source uniqueness/validation, startup reconcile + initial-sync gating rules, deterministic source deletion + dependent cleanup, explicit unsupported source-scoped operation errors, resilient virtual-tuner lease transitions, source-key entropy/index/query-plan improvements, and live discovery tuner-count consistency after runtime reload. (2026-03-04)
  • Hardened multi-source automation and DVR orchestration with bounded sync concurrency, retry/backoff freshness controls, structured per-source sync summaries, continue-on-error provider fan-out aggregation, and surfaced persisted-vs-runtime eventual-consistency failures in API/UI mutation flows. (2026-03-04)
  • Hardened scheduler/control-plane reliability by rejecting invalid automation timezones, unifying manual/scheduled DVR sync overlap locking through the job runner, and canceling stale deferred catch-up callbacks on schedule reload/disable. (2026-03-04)
  • Hardened channel and dynamic-query delete paths by explicitly cleaning dependent child rows and applying orphan-prune safeguards when SQLite foreign-key cascades are unavailable. (2026-03-04)
  • Enforced strict startup validation to accept source startup only when startup inventory reports video_audio, and aligned stream fixtures/regressions to MPEG-TS startup probes with both audio and video components. (2026-03-04)
  • Hardened stream close/runtime stability by bounding startup-probe blocked-read worker growth, adding graceful unsupported write-deadline fallback telemetry, and stabilizing close retry-queue + late-abandon dedupe regression coverage. (2026-03-04)
  • Made UI navigation capability-aware so DVR/Automation links render only when those routes are registered. (2026-03-04)

Docs

  • Added a ready-to-import Grafana release-health dashboard bundle (deploy/grafana/hdhriptv-release-health-dashboard.json) with Prometheus/Loki signals and import instructions. (2026-03-04)
  • Consolidated multi-source architecture/API/configuration/automation/catalog/operations/UI docs and tests, including 1.0.7 playlist-source reorder de-scope, corrected rollback and unsupported-capability contracts, and current source-badge/source-selection guidance. (2026-03-04)
  • Updated protocol/streaming/operations docs to reflect current discovery wire details (varlen TLV + little-endian CRC), source-key generation semantics, startup/read-worker and write-deadline telemetry, and removal of stale remediation backlog sections. (2026-03-04)

v1.0.6

02 Mar 05:45

Choose a tag to compare

Changelog Highlights

Entries added to CHANGELOG.md since v1.0.5.

Features

  • Added source-session FFmpeg warning-level stderr observability controls (pass-through toggles, log-level/max-line guardrails, and context-rich sanitized stderr line logging with sequence IDs) plus startup config visibility. (2026-02-27)
  • Added configurable traditional channel guide numbering start (--traditional-guide-start / TRADITIONAL_GUIDE_START) and startup migration so existing channels are renumbered to the configured base. (2026-02-26)

Bug Fixes

  • Realigned streaming startup and buffering defaults to production baseline (STARTUP_TIMEOUT=12s, ffmpeg reconnect/rw-timeout/corrupt-discard enabled, PRODUCER_READRATE_CATCHUP=1.75, PRODUCER_INITIAL_BURST=10, BUFFER_PUBLISH_FLUSH_INTERVAL=20ms, BUFFER_TS_ALIGN_188=true, SUBSCRIBER_JOIN_LAG_BYTES=8388608). (2026-03-02)
  • Added first-class trace application log-level support for healthy UDP discovery/SSDP response emission (discovery response sent, ssdp response sent) and startup validation warnings when ffmpeg_rw_timeout is configured greater than or equal to stall_detect in ffmpeg stream modes. (2026-02-27)
  • Reduced tuner diagnostics log noise by replacing per-request resolve_ip debug logs with 30-minute aggregated resolver summary output and aligning periodic resolver/rate-limit stats logging on a shared cadence-tracking utility. (2026-02-25)
  • Reduced the default debounced DVR lineup reload delay for lineup-changing admin mutations from 60s to 20s. (2026-02-25)

Docs

  • Updated API, operations, and tuner diagnostics guidance to cover aggregated resolve_ip summary telemetry (admin tuner resolve_ip summary, resolve_requests window counter) and the shorter default DVR lineup reload debounce (20s with 300s max-wait). (2026-02-25)

v1.0.5

25 Feb 00:53

Choose a tag to compare

Changelog Highlights

Entries added to CHANGELOG.md since v1.0.4.

Bug Fixes

  • Hardened admin resolve_ip DNS caching with bounded cardinality, heap-backed oldest-expiry eviction plus sweep-throttle/cleanup guardrails, short negative-cache TTLs, and expanded TTL/concurrency regressions. (2026-02-24)
  • Added a shared debounced DVR lineup reload queue across reorder and dynamic sync mutations, introduced a dedicated runtime-configurable reload timeout, treated timeout expiry as failed reload logging, and stabilized queue/timeout regressions. (2026-02-24)
  • Improved Windows stream/runtime behavior by embedding tzdata, wiring configurable ffprobe paths through analyzer/profile probing, and downgrading benign slate_av FontConfig close noise via token-based/casing-safe matching. (2026-02-24)

Docs

  • Documented resolve_ip cache guardrails and telemetry, clarified that cache max-entry/negative-TTL/sweep tuning knobs are compile-time defaults, and corrected FFmpeg buffer memory math (50 * 64 MiB ~= 3.1 GiB). (2026-02-24)
  • Added DVR lineup reload configuration and troubleshooting coverage (--dvr-lineup-reload-timeout/DVR_LINEUP_RELOAD_TIMEOUT, debounce + max_wait + dvr_lineup_reload_timeout timing math, queue semantics/log triage, and /ui/channels canonical refresh behavior). (2026-02-24)
  • Consolidated README/operations guidance for local run order and Windows setup, including release-binary-first quick start, Docker default image usage, --ffprobe-path/FFPROBE_PATH docs alignment, Windows ffmpeg sources, and recovery close_error_type documentation. (2026-02-24)

v1.0.4

24 Feb 05:12

Choose a tag to compare

Changelog Highlights

Entries added to CHANGELOG.md since v1.0.3.

Features

  • Added configurable ffmpeg input tuning for -buffer_size and optional -fflags +discardcorrupt, with independent +genpts toggle behavior. (2026-02-23)
  • Re-enabled Windows release artifact publishing by adding hdhriptv-windows-amd64.exe to release automation, CI build outputs, and release runbook docs. (2026-02-23)
  • Added an opt-in Resolve IP toggle on the Tuners page that reverse-resolves client addresses for both live Client Streams and Shared Session History subscriber rows. (2026-02-23)

Bug Fixes

  • Added handler-level resolve_ip DNS caching plus an 8s total resolve budget to cap tuner status lookup latency under high unique-client churn. (2026-02-23)
  • Added a 2-second per-lookup timeout for tuner resolve_ip reverse DNS resolution to avoid long request-path stalls. (2026-02-23)
  • Added a 64 MiB validation ceiling for ffmpeg_input_buffer_size to prevent oversized per-stream buffer configuration. (2026-02-23)
  • Refactored stream FFmpeg startup helpers to pass typed ffmpegStartupOptions configs instead of growing positional argument chains. (2026-02-23)
  • Hardened UPnP ContentDirectory update-ID coalescing with bounded retry backoff, retry-cap guardrails, stale-cycle reset, and expanded consecutive-cancellation regression coverage. (2026-02-23)
  • Tuned /ui/tuners Active Sessions table responsiveness to fit wide viewports without forced horizontal scroll while preserving compact-window horizontal overflow behavior. (2026-02-23)
  • Fixed /ui/tuners compact-window Active Sessions table behavior so narrow viewports keep row height stable and use horizontal scrolling instead of per-cell vertical character wrapping. (2026-02-23)
  • Fixed /ui/tuners command-bar roll-up behavior so compact viewports (small desktop windows and mobile) can reliably collapse diagnostics controls. (2026-02-23)
  • Added a mobile roll-up toggle for /ui/tuners Diagnostics Command Bar so detailed filter/search/sort controls can collapse while reviewing stream and tuner diagnostics. (2026-02-23)
  • Restored Windows cross-compilation by splitting ffmpeg process setup/termination into OS-specific stream helpers (Unix process-group handling and Windows-safe termination). (2026-02-23)

Docs

  • Expanded tuner diagnostics and ffmpeg buffer guidance with resolve_ip timeout/cache behavior, local DNS resolver recommendations, and explicit per-stream 64 MiB memory planning notes. (2026-02-23)
  • Documented /api/admin/tuners?resolve_ip=1 lookup latency characteristics and ffmpeg discard_corrupt / input-buffer guardrail semantics in API and operations docs. (2026-02-23)
  • Documented UPnP GetSystemUpdateID coalescing retry semantics and telemetry (hdhr_content_directory_update_id_refresh_retries_total) in the operations runbook. (2026-02-23)

v1.0.3

23 Feb 06:42

Choose a tag to compare

Changelog Highlights

Entries added to CHANGELOG.md since v1.0.2.

Features

  • Tuned full-width Active Sessions table sizing so Source gets more horizontal room while compact columns (Subs, Last Push, Actions) use tighter fixed widths. (2026-02-23)
  • Simplified the Tuners dashboard by removing the redundant Alerts/Health rail and expanding the Active Sessions panel to full width. (2026-02-23)
  • Removed legacy playlist-sync DVR lineup reload fallback wiring and standardized post-sync reload hooks on typed ReloadLineupForPlaylistSyncOutcome/ReloadOutcome semantics. (2026-02-23)
  • Removed the temporary DVR provider compatibility shim (DVRProvider union, newProvider, and service providerBuild fallback) and standardized capability-specific factory wiring. (2026-02-23)
  • Split DVR provider contracts into lineup-reload and mapping capabilities with capability-specific factories, preventing Jellyfin from entering mapping sync/reverse-sync/test paths. (2026-02-23)
  • Centralized DVR config normalization across service/provider/store and moved DVR singleton initialization to startup so GetDVRInstance is read-only. (2026-02-23)
  • Refactored DVR forward sync into explicit buildSyncPlan and applySyncPlan stages with new unit coverage for planning and dry-run/apply behaviors. (2026-02-23)
  • Removed legacy tuple-based DVR playlist-sync lineup reload adapters and standardized post-sync reload handling on typed ReloadOutcome semantics. (2026-02-23)
  • Refactored DVR playlist-sync lineup reload reporting to a typed ReloadOutcome contract and centralized shared device-channel indexing across DVR sync/test/reverse-sync paths. (2026-02-23)
  • make release-github-sync-tag now builds and pushes multi-arch container images to arodd/hdhriptv:<RELEASE_TAG> and arodd/hdhriptv:latest during release publishing. (2026-02-23)
  • make release-github-sync-tag now auto-generates pretty GitHub release notes from CHANGELOG.md entries since the previous release tag (with optional notes preface support). (2026-02-22)
  • Updated make release-github-sync-tag to default public mirror squash commits to public(main): release <tag> (unless PUBLISH_GITHUB_COMMIT_MESSAGE override is set). (2026-02-22)

Bug Fixes

  • Hardened /api/admin/dvr to reject non-channels primary providers server-side while keeping Jellyfin available for post-sync reload fan-out configuration. (2026-02-23)
  • DVR UI now limits primary sync/mapping provider selection to Channels DVR while keeping Jellyfin available in active-provider post-sync reload options. (2026-02-23)
  • Ensured DVR UpdateConfig validates through configured lineup/mapping provider factory hooks before persisting config, preserving fail-fast ordering and factory override semantics. (2026-02-23)
  • Bounded recovery timeline rebase offsets to 12h to avoid pathological near-PCR-wrap -output_ts_offset values, with focused shared-session clamp regression coverage. (2026-02-23)
  • Added negative slate_av filler PTS-offset clamp regression coverage and simplified redundant recovery filler offset-expression guard logic. (2026-02-23)
  • Optimized HDHR lineup handling by skipping unused source-codec lookups for lineup.json/lineup.m3u and short-circuiting show=demo before lineup construction. (2026-02-23)
  • Removed runtime silent readrate_catchup clamp-to-base behavior so stream arg building stays consistent with strict config validation. (2026-02-23)
  • Hardened release-github-sync-tag by requiring a pinned BINFMT_IMAGE reference and pushing internal/public release tags before container publish. (2026-02-23)
  • Tightened DVR legacy placeholder cleanup so explicit channels.lan:8089 configs are preserved while untouched default sentinel rows are still normalized away. (2026-02-23)
  • Unified DVR provider URL-configuration gating by filtering unconfigured Jellyfin from active providers during normalization, with playlist-sync reload skip regression coverage. (2026-02-23)
  • Removed a redundant dead assignment in DVR update-payload normalization (NormalizeInstanceConfig) to simplify config-path coherence. (2026-02-23)
  • Added mapping-provider validation in DVR UpdateConfig preflight and removed redundant double normalization on DVR singleton read-back. (2026-02-23)
  • Normalized playlist-sync DVR reload status tokens to canonical values and added fallback handling/tests for unknown typed-outcome statuses. (2026-02-23)
  • Aligned DVR playlist-sync reload skip-reason URL validation with canonical provider base-URL normalization and added focused regression coverage. (2026-02-23)
  • Fixed /ui/tuners shared-session history row rendering artifacts by using explicit listbox option rows and clipping row overflow. (2026-02-23)
  • DVR active-provider normalization now excludes channels until a valid Channels base URL is configured, and post-sync reload reports no_active_providers when nothing is configured. (2026-02-22)
  • Default DVR config now leaves channels_base_url unset and post-playlist-sync reload skips Channels provider work until a valid Channels URL is configured. (2026-02-22)
  • Added configurable ffmpeg source catch-up pacing (--producer-readrate-catchup / -readrate_catchup) with startup fallback for ffmpeg builds that do not support -readrate_catchup. (2026-02-22)

Docs

  • Revalidated DVR cleanup refactor on the current baseline and closed the prior race-suite environment gap by installing CGO toolchain dependencies before rerunning race/full regression tests. (2026-02-23)
  • Clarified recovery timeline PTS-offset test expectations by asserting boundary-PCR advancement semantics before slate keepalive filler startup. (2026-02-23)
  • Expanded OPERATIONS FFmpeg readrate tuning guidance with concrete PRODUCER_READRATE/PRODUCER_READRATE_CATCHUP/PRODUCER_INITIAL_BURST recommendations and interaction notes. (2026-02-23)
  • Added DVR migration notes explaining that Channels active-provider selection is URL-gated and will not persist without a valid channels_base_url. (2026-02-23)
  • Expanded the GitHub release runbook with container registry/tag configuration guidance, pinned BINFMT_IMAGE input documentation, and updated tag-before-image lifecycle/recovery notes. (2026-02-23)
  • Clarified duplicate-close suppression test timeout intent and switched in-flight assertions to a helper to avoid direct map/mutex coupling in stream tests. (2026-02-23)
  • Stabilized TestCloseWithTimeoutConcurrentDuplicateCallsCloseOnce by validating duplicate-close behavior via local closer lifecycle signals instead of exact global close-timeout counters. (2026-02-23)
  • Hardened intermittent internal/stream test determinism for full-suite runs by isolating tune-backoff capacity assertions and using local close-timeout dedupe/worker-bounds assertions. (2026-02-23)
  • Added OPERATIONS tuning guidance for ffmpeg source pacing (PRODUCER_READRATE / PRODUCER_READRATE_CATCHUP) with practical starting ranges and escalation notes. (2026-02-22)

v1.0.2

22 Feb 05:47

Choose a tag to compare

v1.0.2

  • Adding Mac releases

v1.0.1

22 Feb 05:24

Choose a tag to compare

v1.0.1

  • Initial public release binaries