Sportarr v4.1.1.1111
release v4.1.1
This release is about playing well with others. The webhook system was
rebuilt end to end with a real integration partner testing every payload,
a new live event stream and a documented, stability-guaranteed API give
third-party apps a first-class way to build against Sportarr, and a long
list of artwork, custom format, queue, and performance improvements
rounds it out.
Integrations and API
- Webhook payloads restructured into the nested series/release/
episodeFile/deletedFiles shape integration partners expect, with a
typed payload replacing the old ad hoc dictionaries - Webhook series objects now carry the TheSportsDB cross-reference id,
persisted at sync so existing libraries backfill automatically - Native Notifiarr connection type
- New server-sent events feed at /api/stream: live event and file
changes with cursor catch-up on reconnect, so integrations no longer
need to poll - New wiki page documenting the stable integration API contract for
third-party apps, with guaranteed fields and a deprecation policy - sonarr v3 api compat: backups, custom formats, and profile write
endpoints added; artwork is now labeled correctly everywhere (league
posters as posters, logos as clearlogo, event posters at episode
level), fixing logo-shaped images crammed into poster slots in
downstream dashboards; calendar event images now populate for
library events - Metadata agent no longer returns the wrong image as a thumbnail
- Webhook triggers hardened against real-world gaps: interactive-search
grabs fire the Grab notification, adding a league fires event-added,
and DVR, manual-interaction, rename, and delete payloads all carry
full series identity
Custom formats and search
- Custom Format conditions for Release Type, Indexer Flag, and Size
- Creating or importing a custom format no longer crashes
- New {Stage} search token so stage races can be searched in any
language, and releases with "Tour De France" in the title are no
longer all detected as German - League search tolerates untrimmed whitespace
Downloads and imports
- Recent/older queue priority for every download client, so fresh
events jump ahead of backlog grabs - Minimum import duration setting filters out sample and trailer clips
- Rejected imports were logged as successful; blackhole watch-folder
matching could cross-match sibling releases; RSS sync grabs could go
untracked when a save failed; automatic search's fallback save is
protected against a second failure - Import list league filter reached the backend, and list type
dropdown values match the backend again
DVR and IPTV
- Scheduled recordings move to a better channel automatically when new
EPG data arrives - Multiple channels sharing a tvg-id can each win their EPG match, and
EPG sync no longer fails on long XMLTV descriptions - HDHomeRun tuner emulation and the IPTV/DVR/EPG API surface are now
documented
Monitoring and health
- New health checks: update available, database migration needed,
metadata API unavailable, and notification test failed - Latest Season monitoring now has real semantics distinct from
Current Season
Performance
- Per-league stats, download-queue dedup, TV schedule lookups, import
list matching, and release cache reads all batched instead of
querying row by row; library scans run in the background with
preloaded file lookups
Settings
- New tuning knobs: indexer query/grab rate limits and request delay,
download client working-folder markers, backlog search and RSS fetch
cadence, missing-file cleanup, download monitor poll, disk scan, and
indexer timeout intervals
Also
- Logo re-traced across every icon, fixing the edge notch
- Wiki restructured to one page per integration, sorted alphabetically,
with per-client setup pages for every download client - Startup-on-boot documented for Windows, Linux, and macOS
- Dev builds report their real build number
- Legacy-install safety net for the followed athletes table
Upgrading: webhook consumers should note the payload shape changed to
the nested series/release/episodeFile structure; anyone parsing the old
flat fields must update their handler. The TheSportsDB id column is
added automatically at startup and backfills over the next daily sync.
Full Changelog: v4.1.0.1110...v4.1.1.1111