Skip to content

Releases: PiratesIRC/Dispatcharr-Channel-Maparr-Plugin

v1.26.1430910 — Alias matching, per-channel logos, Show Status

23 May 15:05

Choose a tag to compare

Major feature release plus a batch of matching-accuracy fixes ported from sibling plugin Lineuparr. Upgrade is recommended for all users — the new alias system and matching guards measurably improve both match recall and false-positive rejection.

✨ New features

🔍 Alias Stage 0 matching

A 200+ entry curated map of canonical channel names ↔ common variants ships in aliases.py. Hits run as an O(1) lookup before fuzzy stages — faster, more reviewable, and safer than fuzzy scoring on noisy provider strings.

Examples that previously missed and now hit at score 100:

  • FNCFox News Channel
  • CSPAN 2C-SPAN2
  • CA: RDSRéseau des Sports (RDS) HD
  • UK: Aljazeera EnglishAl Jazeera English
  • US: NBC GOLF CHANNELGolf Channel

Users can extend with their own via FuzzyMatcher.set_user_aliases({canonical: [variants]}).

🎨 Per-channel logos from tv-logos repo

New Apply Per-Channel Logos action fuzzy-matches each channel name to the tv-logo/tv-logos GitHub repo and assigns individual artwork in bulk. Iterates across the country codes set in Channel Databases. Channels with an existing logo are skipped. Uses the GitHub Git Trees API so directories with >1000 logos (e.g. united-states) return complete results.

ⓘ Show Status action

A persistent progress file at /data/channel_mapparr_progress.json lets the new Show Status button report live progress, ETA, and the most recent completion summary — without watching container logs. Survives container restarts (a stale-run warning fires if updates stop for >2 minutes).

ℹ️ Help text on every setting

All 15 settings fields now carry a one-sentence explanation visible in the Dispatcharr settings panel.


🎯 Matching accuracy improvements

Each item has a curated regression test case in the dev test harness (46/46 baseline + 14/14 user-report cases passing).

  • Callsign denylist (50 K/W-shaped English words: WITH, WATCH, WWE, KING, KIDS, WORLD, …) prevents extracting program-title words as US broadcast callsigns. No more Bizarre Foods with Andrew Zimmern → callsign WITH.
  • Callsign confidence flag — high-confidence (parenthesized/end-of-name) vs. low-confidence (loose mid-name). Loose matches no longer floor or hard-reject a fuzzy candidate.
  • CamelCase + number-word + dot normalizationJusticeCentral.TVJustice Central TV, BBC ThreeBBC 3.
  • East/West parenthetical preservationCartoon Network (W)Cartoon Network West so zoned variants survive normalization.
  • Multi-token country prefixCA FR: RDS, US ES:, UK FHD: now strip the whole prefix instead of leaving the first token stranded.
  • Smarter token-overlap guardnetwork/channel/television demoted to common; new subset, divergent, and numeric-sibling guards catch:
    • BBC OneBBC Two (sibling-number divergence)
    • Sky Cinema DisneySky Cinema Decades (distinctive-token divergence)
    • ABC NewsBBC News (no shared distinctive token)
    • In Country TelevisionCountry Music Television (subset with distinctive extra)
  • Trailing-number anchorESPN 1, HBO 2 no longer match siblings like ESPN2 or HBO 3.
  • Inside-loop guards — previously a high-scoring but guard-rejected candidate could suppress a lower-scoring valid one. Fixed in all three matching pipelines.

🐛 User-reported fixes folded in

  • Canadian French sports (CA: RDS, CA: RDS 1, CA FR: RDS HD, CA: TSN 5 RAW, etc.) — root cause was the parenthesized (RDS) in the canonical DB name being stripped during normalization. Fixed with 13 Canadian alias entries plus the multi-token country prefix fix.
  • CSV "Match Type: None" for unmatched rows — cosmetic only, now writes empty string for cleaner reports.
  • Plugin loader rejected astral-plane emoji button labels (🎨 / 📊) — silently dropped the entire action. Swapped to BMP symbols (, ).
  • Progress file unwritable — moved from plugin dir (owned by root) to /data/ (matching other Dispatcharr plugins' convention).

📦 Installation

  1. Download Channel-Maparr.zip from this release.
  2. In Dispatcharr, go to Plugins → Import Plugin, upload the zip.
  3. If upgrading from an older version, delete the old plugin first, then docker restart dispatcharr before importing.
  4. After install, run Validate Settings, then your usual flow.

📚 More info


🤖 Co-authored with Claude Code

v1.26.1001200

10 Apr 15:46

Choose a tag to compare

Major Performance & Reliability Release

M3U import matching reduced from 32 hours to 6 seconds (19K streams vs 31K channels).

Performance

  • Token-based candidate pre-filter — Inverted index reduces fuzzy match candidates from 31K to ~50-200. Applied to all matching code paths. 19,200x speedup on M3U import.
  • rapidfuzz integration — Conditional import: rapidfuzz (10-100x faster) → thefuzz → built-in Levenshtein.
  • Early termination in Levenshteinmin_ratio parameter with length pre-check and row-level abort. Dynamic cutoff raises as better scores are found.
  • Django query optimizations.only() on stream fetches, stream prefetching before import loop, removed unnecessary select_related.
  • Normalization caching — Pre-computed normalizations for all names in a single pass.

Reliability

  • Atomic CSV writestempfile + os.replace() prevents corrupt partial writes. Orphan temp files cleaned up on exception.
  • Background threading for Organize by Category — Prevents uwsgi worker timeout on long-running operations.
  • Prefetch safety — Graceful handling of streams deleted between prefetch and import.

New Features

  • Match sensitivity presets — Relaxed (70), Normal (80), Strict (90), Exact (95) dropdown.
  • Dynamic M3U source dropdown — Populated from database instead of manual text input.
  • ProgressTracker — WebSocket updates with percentage and ETA for long operations.
  • SmartRateLimiter — Configurable delay between DB writes (None/Low/Medium/High).
  • match_all_streams() method — Returns all matches above threshold sorted by score.
  • PluginConfig class — Centralized configuration constants.
  • Stop/cancel support — Background operations can be cancelled via the UI.

Cleanup

  • Removed legacy files (channels.json, channels.txt, networks.json).
  • Updated README with current features, settings, performance docs, and troubleshooting.

Upgrading from 0.7.0a

This is a major upgrade. Remove the old plugin, restart Dispatcharr, and install the new zip. All settings will need to be reconfigured.

0.7.0a

09 Mar 09:31
ac484d4

Choose a tag to compare

Compatibility for Dispatcharr 0.2x

0.5.1

17 Dec 16:56
7f20b69

Choose a tag to compare

Updated channel databases

0.5.0

29 Nov 16:11
8971f10

Choose a tag to compare

Channel Mapparr Plugin Changelog

Version 0.5.0

New Features

  • Added support for multiple country databases (US, UK, CA, AU, etc.) via the "Channel Databases" setting.
  • Added "Organize Channels by Category" action to move channels into groups based on their category data.
  • Added automatic plugin version checking to notify users of updates from GitHub.
  • Added "Clear CSV Exports" action to remove old preview files.

Improvements & Configuration

  • Added configurable "Fuzzy Match Threshold" setting (0-100) to fine-tune matching sensitivity.
  • Added API token caching (30 minutes) to reduce authentication requests to the server.
  • Added robust handling for 401 Unauthorized API responses to automatically refresh invalid tokens.
  • Replaced the full M3U refresh trigger with a lighter WebSocket frontend refresh trigger.
  • CSV exports now include a header section containing the settings used during the run.

Refactoring

  • Moved core matching logic to a separate FuzzyMatcher module for better maintainability.
  • Updated file handling to support loading multiple JSON database files dynamically.
  • Increased default timeouts for API requests.

0.2

09 Oct 17:04
34110bf

Choose a tag to compare

0.2

Channel Mapparr Plugin - Version 0.2 Changelog

New Features

  • Ignored Tags Field: Configure tags to remove during matching

    • Default: [4K], [FHD], [HD], [SD], [Unknown], [Unk], [Slow], [Dead]
    • Case-insensitive matching
    • Automatically handles both bracket [HD] and parentheses (HD) versions
  • Enhanced OTA Channel Support

    • Improved Prefix Handling: Now handles multiple US/USA prefix formats such as US:, USA:, US -, USA -, US | and variations.
    • Better Callsign Extraction:
      • Extracts callsigns from formats like (WMTW-PORTLAND MAINE)WMTW.
      • Rejects false positives like KIDS, WOMEN, EAST, WEST.
    • Smart Fallback Logic: Only attempts premium matching when NO callsign is found, which prevents OTA channels from incorrectly matching premium channels.
  • Premium/Cable Channel Improvements

    • Regional Indicator Positioning: Regional tags are now placed immediately after the channel name.
      • Before: HBO Comedy (H) West
      • After: HBO Comedy West (H)
    • Enhanced Normalization: Better handling of channel name variations and prefixes.

Code Quality

  • Removed Debug Logging: Cleaner output with only essential information.
  • Improved Error Handling: Better feedback for missing data files and API errors.

Bug Fixes

  • Fixed an issue where prefixes like (SP2) were being preserved in final names.
  • Fixed regional indicator extraction for standalone words (not just those in parentheses).
  • Fixed ignored tags not being properly removed during matching.

v0.1

01 Oct 14:53
4c4c30e

Choose a tag to compare

Initial Release