github Pharaoh-Labs/teamarr v2.22.0

4 hours ago

✨ New Features

  • Source discovery. Teamarr scans the M3U groups that are not yet sources, on its own daily schedule, and keeps the evidence: which groups carry streams that match real games, on which days. Suggested sources appear on the Sources page for review and one-click Add; a group added this way is a managed source that Teamarr retires when it goes idle and restores when games return. Automatic mode goes further: toggle a league or a whole sport on the Subscriptions page and qualifying groups are added without asking, marked Auto-added. Replay groups are excluded by their own words, and discovery never reads the guide, so linear channels still need a hand-made source. (#997)
  • MotoGP race weekends. ESPN's MotoGP endpoint is dead, so the league moves to TheSportsDB (premium key, like IMSA and WEC). Practice, both qualifying sessions, the Sprint and the Grand Prix each get their session, and Moto2/Moto3 streams stay off the MotoGP weekend. (#604)
  • Plex Live TV integration (opt-in, feedback wanted). After each generation Teamarr refreshes your Plex server's Live TV channel map so new and removed channels reach the guide without a manual rescan, the same post-generation pattern as Emby, Jellyfin and Channels DVR. Settings → Media Servers → Plex. Teamarr records what it pushed and only ever disables channels it pushed itself; it refuses to write when the device read looks wrong. Off by default. — thanks @aresthegodofwar (#866, #696)

🐛 Bug Fixes

  • Team channel name and logo templates substitute every variable — they now run through the template engine instead of a partial substitution, and a team that cannot be mapped is rejected instead of guessed. (#983)
  • A source preview reads the same streams a run would, so the preview on an EPG source respects its channel-group scope. (#985)
  • Dispatcharr channel-source rows follow the saved selection immediately, without waiting for a generation run. (#986)
  • After-game and idle filler render from the refreshed game, not a stale copy, so the row chosen on fresh data shows fresh data. (#987)
  • Event channels no longer get overlapping filler when several sources match the same event: every source builds its filler window from the run's one clock reading. (#988)
  • The template preview picker offers every league, including discovered ones, and opens on a league the template is actually used for. (#993)
  • Games with no announced start time read "TBD", not 12:00 AM, and sit as an all-day placeholder on their own date. (#995)
  • College conference names render by name, never as "Conference 5". (#996)
  • An exception keyword's M3U-group or stream-name regex can be cleared once set. (#1010)

⚡ Enhancements

  • Starter templates follow one wording style, modelled on Gracenote listings: article-aware starters, sentence-case openings, a running event keeps "has not yet ended as of the last update", and the team starters match the event wording with idle descriptions that say when the next game is. (#991, #981)
  • {game_preview} reads the preview headline ahead of the wire story's opening sentence, and machine-generated previews keep their description. (#979)

🔧 Under the Hood

  • Dependencies: anyio 4.14.2 (closes two advisories), brace-expansion 5.0.12, source-map-js patched; FastAPI 0.142, Vite 8.3.2 and the usual minor bumps. (#969)

Upgrade notes: two Plex settings columns are added automatically on start. Nothing changes behaviour until you switch a new setting on: source discovery is off, automatic mode has no leagues toggled, Plex is disabled.

Full changelog: v2.21.1...v2.22.0

Don't miss a new teamarr release

NewReleases is sending notifications on new releases.