Skip to content

Release v1.4.0

Latest

Choose a tag to compare

@thehack904 thehack904 released this 17 Sep 20:57
16be557

[v1.4.0] - 2026-09-17

  • Added automatic Guide Preview input transport detection for HLS, MPEG-TS, and local-file preview sources before Guide startup.
  • Added source-keyed transport caching through guide_preview_detected_transport and guide_preview_transport_source_key so a cached result is reused only for the exact selected preview source.
  • Added POST /guide-preview/detect-transport for bounded selection-time probing of HTTP/HTTPS preview URLs, with server-side fallback detection when settings are saved.
  • Added a dedicated MPEG-TS Guide Preview relay that normalizes the selected live MPEG-TS source into a short local HLS relay before FFmpeg overlays it into the Guide.
  • Split Guide Preview processing by detected input transport: MPEG-TS uses the dedicated relay/overlay path, while HLS, local files, and unknown network inputs use the shared normalized-frame path.
  • Updated Preview-audio synchronization so the HLS/local-file path derives normalized video and optional AAC audio relays from one FFmpeg input clock; the MPEG-TS path maps preview audio from the same relayed source used for video.
  • Added transport-specific source pacing: detected HLS inputs use realtime pacing, local files loop in realtime, and live network MPEG-TS inputs avoid the HLS pacing behavior.
  • Removed the misleading Guide Channel Group filter from the admin form; M3U group-title remains parsed channel metadata and is not used to filter Guide rendering.
  • Corrected Guide Message parsing/documentation so rotating items use explicit multiline [message] ... [/message] blocks. Blank lines inside a message are preserved as spacing rather than splitting messages.
  • Added timed Guide Message blocks ([message:seconds]) and blank intervals ([blank], [blank:seconds]), with explicit durations capped at one hour.
  • Added regression coverage in tests/test_guide_preview_transport.py, tests/test_guide_preview_integration.py, and tests/test_guide_message_live_update.py for transport detection/caching, pipeline routing, and the corrected message syntax.
  • This change concerns Guide Preview input detection and processing only. Selectable HLS versus MPEG-TS Guide/Virtual Channel output remains a separate future feature request and is not implemented here.

Hardware acceleration reliability

  • Fixed VA-API live encoding for software-rendered RGB24 Guide, Weather, Simulated Traffic, and News Now frames by explicitly opening the DRM render node and converting/uploading frames with format=nv12,hwupload before h264_vaapi.
  • Fixed Guide Preview + VA-API by appending the hardware upload stage to the preview filter_complex output instead of bypassing the overlay graph.
  • Fixed hardware-encoder fallback loops: a hardware process that exits before producing HLS segments now counts as an initialization failure even when the manager watchdog notices it after the original quick-failure timer. After the configured threshold, the channel uses libx264 for the remainder of the process session.
  • Added equivalent hardware-failure fallback handling to News Now and improved exited child-process reaping.
  • Linux install/upgrade now adds the RSMC service account to existing video and render groups so Intel VA-API/QSV can access /dev/dri without a manual usermod.
  • Added RSMC_VAAPI_DEVICE as an optional environment override; the default render node remains /dev/dri/renderD128.

Secondary Guide output

  • Added an optional second Guide Channel output controlled from Guide Channel Render Settings.
  • Secondary output uses its own native resolution-aware renderer rather than scaling the completed primary stream, preserving correct SD/CRT Guide geometry and readable UI proportions.
  • Added secondary resolutions 720x480 (default), 640x480, and 960x720.
  • Secondary rendering reuses the primary Guide data, theme, Guide Message, preview source, timing, and existing hardware/software encoder-selection policy with software fallback.
  • Added SD-specific UI scaling for fonts, row heights, header/footer, channel column, clock, padding, and preview geometry.
  • Added conservative secondary-output bitrate caps to improve playback stability on lower-power IPTV clients.
  • The normal /channel.m3u and XMLTV exports automatically include the secondary Guide as a separate selectable channel when enabled; users do not need to configure the raw secondary HLS playlist directly.
  • Fixed secondary Guide startup ordering, FFmpeg scale syntax, native preview-overlay alignment, and pipeline status/error reporting.
  • Moved Guide Message into its own collapsed accordion on the Guide Preview page so its live-save control is visually separated from Preview save/restart controls.

Guide Channel video preview

  • Added an optional classic cable-guide video preview window to the Guide Channel, disabled by default.
  • Added Web UI controls for enabling/disabling preview video, choosing an uploaded local file or HTTP/HTTPS/HLS source, uploading/removing local preview video, and selecting audio behavior.
  • Added three preview audio modes: Guide (existing Guide Channel music), Preview (preview-source audio), and Silent.
  • Added resolution- and aspect-ratio-aware preview layout for all four Guide Channel output profiles: 1280x720 and 1920x1080 widescreen, plus 960x720 and 1440x1080 standard 4:3.
  • The renderer now reserves the themed header/information area natively and starts the timeline/listings below the preview region instead of vertically squashing the completed guide frame.
  • Preview-enabled pagination automatically reduces visible rows when necessary so lower-resolution layouts do not clip or skip channels.
  • Guide Preview Video Source now includes enabled RSMC Virtual Channels (Weather, Simulated Traffic, News Now, and Channel Mix) as directly selectable live preview sources.
  • Changed the Guide preview presentation to a raised/beveled video window, visually centered between the bottom of the clock text and the guide grid, with the frame right edge aligned to the clock seconds field across all four supported output resolutions; the shadow now adapts to the active theme header color.
  • FFmpeg overlays the preview source inside the renderer-owned themed region while retaining the existing single-renderer Guide Channel pipeline.
  • Added Guide Preview aspect controls: Auto, 16:9, and 4:3. Auto starts immediately with a 16:9 fallback, detects the selected source display aspect ratio asynchronously with a bounded ffprobe worker, caches the result for that exact source, and never blocks Guide startup. Manual 16:9/4:3 overrides skip detection.
  • The raised preview frame now changes between 16:9 and 4:3 while preserving its approved vertical center and fixed right-edge clock alignment; only the left edge moves when a 4:3 window is used.
  • Added optional rotating Guide Message text opposite the video preview. Admin-entered messages support explicit multiline [message] blocks, a configurable 3–60 second default interval, automatic wrapping/clipping, and continuous looping; blank lines inside a message are preserved as spacing. Only one understated message is shown at a time; the text is aligned beneath the Guide Channel title, constrained to the left information area, and never displays timing/status controls on the broadcast output.
  • Added Guide Message blank-screen directives: [blank] holds the message area empty for the normal Display Time, while [blank:seconds] (for example, [blank:90]) holds it empty for an explicit duration up to one hour. Saving changed message text/timing restarts the message rotation at the first slide without restarting the Guide pipeline.

Shared virtual-channel music library

  • Consolidated virtual-channel background audio around the central data/music/ shared library. Existing legacy Weather music files are copied into the shared library on startup when needed.
  • Guide, Weather, Simulated Traffic, and News Now can independently select silence, one track, selected tracks, or all files from the shared library, with independent loop settings.
  • Added AAC/silent-audio output to Traffic and News HLS so those channels can use shared background music natively. Channel Mix now has its own shared-library audio override that drops member audio and keeps Mix audio independent of source changes.

Simulated Traffic broadcast rendering and Virtual Channels export

News Now virtual channel migration

  • Migrated RetroIPTVGuide News Now RSS/Atom behavior into RSMC as CH 4 with a native generated HLS pipeline.

  • Added up to six configurable feeds, synchronized 30-minute wall-clock feed rotation, parser normalization, cached/rate-limited polling, safe text rendering, and graceful empty/error states.

  • Added independent News HD/SD aspect-ratio and resolution settings, /api/news, /news preview, /hls/news.m3u8, M3U/XMLTV.

  • Fixed the Simulated Traffic HLS renderer to use the same OpenStreetMap basemap and real road GeoJSON used by the working RetroIPTVGuide traffic display instead of drawing schematic placeholder lines.

  • Bundled the ten seed-city basemaps and road GeoJSON datasets from the released RetroIPTVGuide implementation so Traffic works immediately without requiring first-run map downloads.

  • Kept congestion levels and incidents explicitly simulated while applying those synthetic conditions to real road geometry.

  • Changed the main-page Weather Channel export checkbox to a Virtual Channels master checkbox; enabling it includes Guide, Weather, and Simulated Traffic in RSMC M3U/XMLTV output and enables both optional virtual-channel pipelines.

  • Traffic continues to support independent 16:9/4:3 and HD/SD resolution selection.

Channel export and channel icon compatibility

  • Changed export to include RSMC-owned channels by default (Guide Channel plus enabled virtual/integration channels).

  • Added opt-in per-channel rebroadcast selection for imported source-playlist channels instead of mirroring the entire upstream playlist.

  • Added XMLTV <icon> metadata for virtual channels.

  • Added a PNG Weather Channel icon and prefer it over SVG for broader IPTV-client compatibility, including clients that do not render SVG tvg-logo images.

  • Added a Channel Mix audio override using the shared music library; member-channel audio is dropped so Mix music remains continuous across source changes.

  • Fixed Shared Music uploads after the central-library migration: uploads now return to the Shared Music tab, enforce the documented 100 MB limit per file rather than per multipart request, recreate the music directory when needed, and validate audio headers without reading whole files into memory.

Fixed

  • Fixed a Plex file-descriptor exhaustion regression that could leave RetroStation MC running but make the Flask UI and SQLite event store inaccessible after several minutes of tuner playback. RSMC-owned tuner channels now remux directly from local HLS playlists instead of recursively fetching their own HLS over Flask, Channel Mix is materialized to a local continuously refreshed playlist, and every SQLite connection is explicitly closed after use.

Virtual Channels UI / export controls

  • Decoupled optional virtual-channel M3U/XMLTV export from per-channel enablement. The main admin checkbox now includes only channels individually enabled on the Virtual Channels page and no longer enables or disables Weather, Traffic, News Now, or Channel Mix.

  • Standardized Weather (CH 2), Simulated Traffic (CH 3), News Now (CH 4), and Channel Mix (CH 5) card headers.

  • Added collapsed-by-default accordion controls to all virtual-channel cards.

  • Moved Channel Mix into the same constrained Virtual Channels page layout as the other generated channels.

  • News Now HLS renderer now mirrors the browser preview layout and caches feed artwork asynchronously for the generated video channel.

  • Added a simulated Traffic virtual channel (CH 3) migrated and adapted from RetroIPTVGuide v4.9.9-dev. The channel generates synthetic congestion levels and incidents using real OSM road geometry; all traffic conditions are simulated and explicitly labeled as such in the UI.

Added

  • Migrated RetroIPTVGuide Channel Mix as RSMC CH 5 with deterministic wall-clock source rotation, ordered per-channel durations, disabled-source fallback, and HLS-level source switching that reuses existing virtual-channel playout.

  • Added app/traffic_channel.py — standalone simulated traffic channel engine. Provides deterministic per-time-slot congestion distributions, synthetic incident generation, city rotation, and OSM road geometry / basemap caching. Adapted from RetroIPTVGuide app.py (traffic demo section); RSMC-native configuration storage via ConfigStore; no DB or Flask dependency within the module itself.

  • Added app/templates/traffic.html — retro-styled virtual traffic channel display page with CRT scanline effect, road overlay canvas, incident log, congestion legend, and simulated-only disclaimer.

  • Added /traffic display page, /api/traffic JSON API, /api/traffic/roads/<city_id> road GeoJSON API, and /traffic-map/<filename> basemap image endpoint.

  • Added /virtual-channels/traffic/config admin endpoint and Virtual Channels admin card for the simulated traffic channel (city enable/disable, rotation interval, pack size).

  • Added scripts/download_road_data.py — CLI helper to pre-download Overpass road GeoJSON to data/roads/ for offline use.

  • Added scripts/generate_basemaps.py — CLI helper to stitch OSM tile images into 1280×720 basemap PNGs at data/maps/traffic/.

  • Added tests/test_traffic_demo.py — test suite covering city seed data, congestion model, payload builder, incident generation, road cache, basemap generation, and all traffic web routes.

  • Added app/playout_fallback.py — standby video and fallback playout handling.

    • PlayoutFallbackHandler inspects each scheduled playout item before it reaches
      the renderer and replaces unavailable items with appropriate standby fallbacks.
    • video and promo items whose source file does not exist on disk are replaced
      by FALLBACK_VIDEO_ITEM (type standby, source default, duration 60 s).
    • virtual_channel and preview_channel items whose source name is empty or
      blank are replaced by FALLBACK_VIRTUAL_CHANNEL_ITEM.
    • standby items are always passed through unchanged; they represent the
      fallback content itself.
    • Every fallback trigger is logged at WARNING level under the
      playout_fallback category with the item type, source, reason, and a
      human-readable detail string so administrators can identify why fallback
      was activated.
    • The most recent fallback event is exposed as handler.last_fallback_event
      (a PlayoutFallbackEvent with a .to_dict() method) for admin diagnostics.
    • The availability check and fallback item definitions are injectable, making
      the handler straightforward to test and extend.

Changed

  • Extended live wall-clock displays to Simulated Traffic and News Now virtual-channel video output, using the configured display/browser timezone.
  • Reordered Channel Mix duration controls so the numeric value is followed by the Minutes unit before the move controls.
  • Updated Pillow from the legacy 10.4.0 pin to Pillow>=12.0.0,<13 for supported Python 3.11-3.14 environments.
  • Linux installation now selects the newest installed, explicitly supported Python 3.11-3.14 interpreter instead of blindly using the system python3.
  • Python dependency installation now uses binary wheels only, preventing unexpected native source builds during normal installation.

Fixed

  • Added Plex troubleshooting documentation noting that Disable video stream transcoding must remain unchecked for Live TV playback through the RSMC tuner.
  • Renamed the built-in Guide and Weather XMLTV/M3U channel IDs from the old retro-* format to clearer rsmc-* identifiers so Plex channel mapping does not show the legacy retro-guide-channel style label.
  • Fixed Mode being unreachable from Plex automatic or targeted discovery because RSMC previously exposed only HTTP lineup endpoints and did not answer the native UDP discovery protocol.
  • Fixed /discover.json to advertise BaseURL and a lib-valid DeviceID rather than a UUID.
  • Docker Compose now publishes UDP 65001 in addition to TCP 8787 so discovery can reach the container.
  • Fixed Linux installation failures on Python 3.14 caused by the legacy Pillow 10.4.0 dependency falling back to an unsupported source build.
  • Added an explicit future-Python safety check so an unvalidated Python release fails early with an actionable message rather than failing deep inside dependency compilation.

Security

  • (empty)

Known Issues

  • (empty)