Skip to content

Releases: roto31/StreamTV

StreamTV v1.3.6

StreamTV v1.3.6 Pre-release
Pre-release

Choose a tag to compare

@roto31 roto31 released this 18 Jul 23:44

StreamTV v1.3.6

Signed and notarized macOS build of StreamTV.

  • Drag StreamTV.app to Applications
  • Requires Python 3.10+ on first launch (venv created in ~/Library/Application Support/StreamTV/)
  • FFmpeg recommended (install via Homebrew: brew install ffmpeg)

Web UI remains available at http://localhost:8410 while using the native app.

StreamTV v1.3.5

Choose a tag to compare

@roto31 roto31 released this 18 Jul 21:04

StreamTV v1.3.5

Signed and notarized macOS build of StreamTV.

  • Drag StreamTV.app to Applications
  • Requires Python 3.10+ on first launch (venv created in ~/Library/Application Support/StreamTV/)
  • FFmpeg recommended (install via Homebrew: brew install ffmpeg)

Web UI remains available at http://localhost:8410 while using the native app.

StreamTV v1.3.4

Choose a tag to compare

@roto31 roto31 released this 18 Jul 16:49

StreamTV v1.3.4

Signed and notarized macOS build of StreamTV.

  • Drag StreamTV.app to Applications
  • Requires Python 3.10+ on first launch (venv created in ~/Library/Application Support/StreamTV/)
  • FFmpeg recommended (install via Homebrew: brew install ffmpeg)

Web UI remains available at http://localhost:8410 while using the native app.

StreamTV v1.3.2

Choose a tag to compare

@roto31 roto31 released this 13 Jul 03:47

StreamTV v1.3.2

Signed and notarized macOS build. Core platform closure release — all 15 core components brought to production-ready completeness (YouTube, Archive.org, PBS, channels, media, import, builder, playout, FFmpeg, HDHR, WebGUI, docs).

Highlights

Core streaming & sources

  • PBS metadata enrichment on POST /api/media (get_media_info PBS branch)
  • Boot-defer channel lists moved to config.playout (youtube_only_boot_defer, hybrid_boot_defer)
  • HDHomeRun returns 503 when ChannelManager is unavailable (no silent fallback)
  • Bedrock backup script: scripts/backup_bedrock_snapshot.sh

WebGUI & operator UX

  • authenticatedFetch on media, playlists, player, logs, dashboard
  • Media library: add from URL, delete, edit title (PATCH /api/media/{id})
  • Dashboard PBS auth tile + core quick links (Builder, Import, Auth)
  • Resources nav: Guides (Markdown), Channel Builder, Import; OpenAPI (Swagger) label

Channel Builder

  • Block build when PBS show URLs are not expanded (resolve before build)

Import & docs

  • /docs/channel_builder and Import vs Builder guide routes fixed
  • Local path import gated (security.allow_local_path_import, default false)
  • Operator guides: Archive.org, PBS/Playwright, FFmpeg profiles, YouTube geo-blocks, quickstart

API & tests

  • POST /api/channels/bulk-enabled
  • HDHR, IPTV, builder, media, import HTTP smoke tests

Install

  1. Download StreamTV.1.3.2-macos.dmg
  2. Drag StreamTV.app to Applications
  3. Requires Python 3.10+ on first launch
  4. FFmpeg recommended: brew install ffmpeg
  5. Web UI: http://localhost:8410

Documentation

StreamTV v1.3.1

Choose a tag to compare

@roto31 roto31 released this 12 Jul 20:04

StreamTV v1.3.1

Highlights

  • Channel Builder v2 — Source-first wizard with Playwright auth, PBS show expander, and community source registry
  • WebGUI remediation — Settings hub, YAML export/schedule compile bridge, Plex UI cleanup, cache status page
  • macOS tree protection — Forbidden-path guards and Linux export tooling (see docs)

Install

  1. Download StreamTV.1.3.1-macos.dmg
  2. Drag StreamTV.app to Applications
  3. Requires Python 3.10+ on first launch (venv in ~/Library/Application Support/StreamTV/)
  4. FFmpeg recommended: brew install ffmpeg

Web UI: http://localhost:8410

See CHANGELOG for full notes.

StreamTV v1.3.0

Choose a tag to compare

@roto31 roto31 released this 11 Jul 15:48

[1.3.0] - 2026-07-11

See Docs index · Plex Live TV recovery · Streaming bedrock freeze

Added

  • YouTube RAM full-cache (youtube_full_cache) — In buffer playback mode, YouTube VOD can download via yt-dlp to cache_directory (e.g. TunarrRAM) before FFmpeg plays the local file, eliminating googlevideo signed-URL 403 mid-song pauses. Archive.org channels stay CDN-first. Config: youtube_full_cache: true, prefetch_count: 2, download_strategy.enabled: true, youtube_cache_wait_seconds: 120. — 152 classic rock music videos from the Top40Weekly best 80s rock bands ranking (Van Halen through The Cars), expanded with signature MTV-era hits per act; Vevo/official YouTube sources preferred. Artifacts: data/unified/1986.channel.yaml, data/channels_generated_1986.yaml, schedules/1986.yml; builder script scripts/create_1986_80s_rock_channel.py
  • Channel 1991 playlist extensionscripts/extend_channel_1991.py adds five YouTube playlists plus Garth Brooks official videos (randomly interleaved), backfills per-video runtime in data/unified/1991.channel.yaml, and skips geo-blocked/unavailable entries; channel now has 422 items (was 250)
  • Channel 1984 Sarajevo exhaustive catalogRetro Olympics - 1984 Sarajevo Chronological (222 ABC/Archive.org streams, Feb 8–19); Archive.org day 3/day 5 tapes preferred; Not Just Every Four Years ABC splits; schedule all: 1984_olympics; scripts/rebuild_1984_sarajevo_sources.py
  • Channel 1984 Twin Cities time-capsule schedule — Day-by-day Olympics (Feb 8–19) interleaved with weekday ~5PM blocks (KSTP/KARE/WCCO/KMSP local then ABC/CBS/NBC national from TC Media Now + Malg2025) and weekend late news; exact Games-date WCCO Feb 16 5/6pm and KSTP Feb 17 10pm; scripts/rebuild_1984_local_schedule.py; date gate: local/national/bumpers must match the Olympics coverage day exactly (Feb 8–19 only; no ±1 or month/year fallbacks)
  • Channels 1988 & 1994 Twin Cities time-capsule schedules — Same day-exact insert model as 1984: Calgary (Feb 13–28) with ABC preview on Feb 12, KSTP + CBS national on matching dates; Lillehammer (Feb 12–27) with WCCO/CBS inserts and Late Show on verified air dates; scripts/rebuild_1988_local_schedule.py, scripts/rebuild_1994_local_schedule.py
  • Channel 1998 Nagano Winter Olympics — CBS coverage Feb 7–22: Archive.org day tapes (Days 1–5), 3Axel1996 figure-skating splits, full women's hockey gold (Gvfx_0IETtM, Feb 17), day-exact CBS Evening News inserts, opening-day CBS commercials, verified Late Show Feb 20 clip; scripts/rebuild_1998_nagano_sources.py, scripts/rebuild_1998_local_schedule.py, data/unified/1998.channel.yaml
  • Channels 1980 & 1992 Twin Cities time-capsule schedules — Lake Placid 1980 (ABC Feb 13–24): day-exact ~5PM ABC World News (Feb 18), ~10PM WCCO newscast (Feb 23), KSTP hockey special (Feb 22 Miracle day), WCCO/KSTP team-return coverage (Feb 24), WCCO bumpers/commercials shuffle; scripts/rebuild_1980_local_schedule.py. Albertville 1992 (CBS Feb 8–23): full 63-part Archive.org catalog restored (scripts/rebuild_1992_albertville_sources.py), CBS Evening News ~5PM blocks Feb 15/18/20; scripts/rebuild_1992_local_schedule.py

Changed

  • CI pytest — GitHub Actions installs pytest-asyncio alongside pytest; pytest.ini sets asyncio_mode = auto so async streaming tests execute on the M4 self-hosted runner.

  • CI test determinism — golden FFmpeg snapshots pin ffmpeg.threads / extra_flags in-test (no dependency on gitignored config.yaml); test_youtube_ydl_opts_includes_ejs_from_config monkeypatches YouTube EJS settings instead of requiring operator config on the runner.

  • CI Xcode 27 beta — workflows set DEVELOPER_DIR to /Applications/Xcode-beta.app and select it before Swift builds; added scripts/configure-m4-xcode-ci.sh for M4 runner setup on macOS 27.

  • Channel 1994 Letterman/local hunt — Multi-host search (Archive.org, YouTube uploaders, tcmedianow, Malg2025, AVTB): no Twin Cities newscasts dated Feb 12–27, 1994 besides WCCO commercial pod Feb 25; CBS Evening News full broadcasts remain Feb 23/25 only. WCCO Feb 25 pod now uses Archive.org (cbswcco22594) with YouTube mirror noted. Added verified Letterman Feb 18 (FMareiAe0q8) and Feb 22 partial (tJ-Ze7Ur7VM); dropped wrong-date WCCO Jan 16 / May 23 filler from generated stream list.

  • Olympics local source policyrebuild_1988/1994/1998_local_schedule.py document that tcmedianow is not the sole valid host; Archive.org, YouTube, Vimeo, and other verified uploads are eligible when broadcast_date matches the Games day exactly.

  • Channel 1998 Nagano local — KARE 10pm newscast Feb 22 (dT3fwu2ZpGg, tcmedianow/YouTube) wired as closing-day late block; only verified Games-week Twin Cities newscast in the Feb 7–22 window.

  • 1980/1992 local source gaps — Exhaustive multi-host search (tcmedianow, Smoke, Malg2025, AVTB, tvandmoviearchive, Rick's Clips, Bob Parker, archive.org TV News): no additional WCCO/KSTP dated newscasts for Feb 13–24, 1980 beyond WCCO 10pm Feb 23; no Twin Cities newscasts Feb 8–23, 1992. 1980 hockey specials anchored on Feb 22/24 where title lacks air date. 1992 CBS Evening News full broadcasts: Feb 15/18/20 only.

  • Chronological playout verify gatescripts/verify_chronological_playout.py asserts every order: chronological collection keeps CollectionItem.order in the generated playlist (ads/shuffle skipped); optional --yaml-dates checks Olympics unified YAML broadcast_date monotonicity

  • Playout reset at arbitrary itemscripts/reset_channel_playout.py and POST .../playout-reset accept --item-index / --item-title so operators can restart troubleshooting at e.g. Randy Travis Promises (idx 12) instead of always rewinding to item 0.

  • Streaming bedrock FROZEN (2026-07-11) — Owner approval required for all changes to streaming pipeline code. Manifest: docs/STREAMING_BEDROCK_FROZEN.md. Rules: .cursor/rules/streaming-bedrock-frozen.mdc (project), ~/.cursor/rules/streamtv-streaming-bedrock-frozen.mdc (global, perpetual).

  • Tunarr-style RAM cache evictionevict_after_play removes a YouTube full-cache .mp4 when playout advances after complete/fail; evict_off_schedule drops READY/QUEUED manifest entries outside the current + prefetch window so /Volumes/TunarrRAM/streamtv-cache does not fill with orphan files. Config: cache.evict_after_play, cache.evict_off_schedule (default true).

  • Smoother post-restart Plex tune — off-schedule eviction is scoped per channel schedule (one channel cannot delete another's cache); currently playing source_id is always kept; YouTube full-cache waits use tune_buffer_max_wait_seconds (default 5s) when a tuner is connected instead of 120s. Docs: Plex Live TV recovery.

Fixed

  • Plex guide stale after playout resume — StreamTV XMLTV (and merged /tuners/guide.xml) already air-anchor to the on-air item; Plex GUI “Refresh Guide” does not re-fetch XMLTV. Merged guide now sends Cache-Control: no-cache; discover.json EPGURL points at /tuners/guide.xml when merged_guide is enabled. StreamTV POSTs Plex reloadGuide once per process when playout resumes behind wall-clock. See Plex Live TV recovery.
  • Plex reloadGuide 404 (wrong DVR id)config.yaml plex.dvr_id was 109 but the active StreamTV DVR on PMS is 113; auto-reload and scripts/reload_plex_streamtv_guide.sh silently failed, leaving Plex guide ~28+ items ahead of lagged playout (e.g. Born to be Alive in guide while Dancing With Myself on air). Default script DVR_ID updated to 113.
  • YouTube RAM-cache audio-only (Randy Travis / ch 1991)ffprobe -select_streams v:0,a:0 returned empty streams on cached .mp4, forcing bad transcode; cached local YouTube files now use standard local FFmpeg input (no -re) and H.264/AAC copy mode when probe succeeds. — Regression fix: local cached YouTube VOD must use -re pacing (same as CDN VOD) or playout restarts the same song every ~1s (hold_partial loop); idle tune_only snap no longer jumps from playout index to wall-clock guide when behind (skipping e.g. Garth The Dance); LRU eviction protects entries accessed within 20 minutes so in-play cache is not deleted during large prefetch downloads.
  • EPG / playout lag (channel 1991 and all continuous channels) — XMLTV used wall-clock guide index while playout resumed behind on last_item_index (e.g. guide I Told You So while air was Randy Promises); EPG assignment now prefers live/saved on-air index when lagging.
  • Plex Apple TV guide “overlayed” titles — When playout lagged past a song’s scheduled end, XMLTV advanced to the next item while FFmpeg was still on the prior one; Plex showed both titles stacked. EPG now stretches the on-air slot until playout advances.
  • Plex guide stacked airings after reloadGuide — Plex accumulated duplicate near-overlapping programme rows when each XMLTV fetch shifted start times by seconds. EPG now caches per-channel start times until the on-air item changes and emits whole-minute XMLTV stamps.
  • XMLTV EPG 500 (Unable to generate EPG) — Stabilized programme start times were timezone-aware while the EPG builder compared against naive UTC now; fixed by normalizing cached starts to naive UTC.
  • All channels infinite Plex tune spinnerChannelManager failed to import (Any missing from channel_manager.py after EPG live-state helper); HDHomeRun on-demand fallback referenced undefined streamer. Both prevented any MPEG-TS bytes on tune.
  • DocsLESSONS_LEARNED.md Issues 35–40 (YouTube RAM-cache -re, EPG lag, startup regressions, disk full); new rules `youtube-r...
Read more