A Dispatcharr plugin that standardizes broadcast (OTA) and premium/cable channel names using network data and curated channel lists. It supports multiple country databases and offers advanced organization features.
- Multi-Country Support: Load channel databases for AU, BR, CA, DE, ES, FR, IN, MX, NL, UK, and US (42,800+ channels total).
- Alias Stage 0 Matching (v1.26.1430910+): A 200+ entry curated alias map matches common variant names (e.g.
FNC→Fox News Channel,CSPAN 2→C-SPAN2,CA: RDS→Réseau des Sports (RDS) HD) in O(1) before fuzzy stages run. Faster, more reviewable, and safer than fuzzy scoring on noisy provider strings. Users can extend with custom aliases. - Per-Channel Logos from tv-logos (v1.26.1430910+): The Apply Per-Channel Logos action fuzzy-matches each channel name against the tv-logo/tv-logos GitHub repo and assigns per-channel artwork in bulk. Uses your selected country codes; channels with an existing logo are skipped.
- Show Status Action (v1.26.1430910+): A persistent progress file lets the Show Status button report live progress and ETA for any running or recently finished operation, without watching container logs.
- M3U Stream Import: Create channels from M3U streams with automatic category-based organization. Runs in background with progress tracking.
- Category-Based Organization: Automatically move channels into specific groups based on their content category (e.g., News, Sports, Entertainment).
- Customizable OTA Formatting: Use tags like
{NETWORK},{STATE},{CITY},{CALLSIGN}to format broadcast channel names. - High-Performance Fuzzy Matching: Token-based candidate pre-filtering with
rapidfuzzintegration matches 19K streams against 31K channels in seconds. - Match Sensitivity Presets: Select from Relaxed (70), Normal (80), Strict (90), or Exact (95) sensitivity levels.
- Advanced False-Positive Guards (v1.26.1430910+): Subset, divergent-token, and numeric-sibling guards prevent
BBC OnematchingBBC Two,Sky Cinema DisneymatchingSky Cinema Decades, andABC NewsmatchingBBC News. Trailing-number anchoring rejectsESPN 1vsESPN 2confusion. - Smart Normalization (v1.26.1430910+): CamelCase splitting (
JusticeCentral.TV→Justice Central TV), number-word folding (BBC Three↔BBC 3), East/West zone preservation (Cartoon Network (W)→Cartoon Network West), and multi-token country-prefix stripping (CA FR: RDS→RDS). - Callsign Denylist (v1.26.1430910+): A 50-word denylist of K/W-shaped English words (WITH, WATCH, WWE, KING, ...) prevents false callsign extraction from program titles like "Bizarre Foods with Andrew Zimmern".
- Per-Channel Help Text (v1.26.1430910+): Every settings field carries a one-sentence explanation visible in the Dispatcharr UI.
- Normalization Caching: Pre-computed normalizations avoid redundant processing across matching loops.
- Configurable Ignored Tags: Define a custom list of tags to be removed from channel names before matching.
- Default-Logo Action: Bulk apply a single default logo to channels without artwork.
- CSV Export: Preview renaming, categorization, and import changes with detailed dry-run reports.
- Background Threading: Long-running operations (M3U import, organize) run in background threads with progress tracking via WebSocket.
- Atomic File Writes: CSV exports use temp files with atomic rename to prevent corrupt partial writes.
- Rate Limiting: Configurable delay between database writes during large imports (None/Low/Medium/High).
- Dispatcharr v0.20.0+
- Internet access (for version checking)
- Log in to Dispatcharr's web UI.
- Navigate to Plugins.
- Click Import Plugin and upload the plugin zip file.
- Enable the plugin after installation.
To update Channel Mapparr from a previous version:
- Navigate to Plugins in Dispatcharr.
- Click the trash icon next to the old Channel Mapparr plugin.
- Confirm deletion.
docker restart dispatcharr- Log back into Dispatcharr.
- Navigate to Plugins.
- Click Import Plugin and upload the new plugin zip file.
- Enable the plugin after installation.
- Check that the new version number appears in the plugin list.
- Reconfigure your settings if needed.
- Run Validate Settings to confirm everything is working.
| Setting | Type | Default | Description |
|---|---|---|---|
| Channel Databases | string |
US |
Comma-separated country codes (AU, BR, CA, DE, ES, FR, IN, MX, NL, UK, US). |
| Match Sensitivity | select |
normal |
Relaxed (70), Normal (80), Strict (90), Exact (95). |
| Channel Groups to Process | string |
- | Comma-separated group names for renaming operations. Empty = all groups. |
| Channel Groups for Category Organization | string |
- | Comma-separated group names for category sorting. Empty = all groups. |
| M3U Source | select |
All sources |
Filter streams to a specific M3U account. |
| M3U Group Filter | string |
- | Pre-match filter by M3U group-title. |
| Category Filter | string |
- | Post-match filter by database category. |
| Custom Import Group Name | string |
- | Override category-based group naming for imports. |
| OTA Channel Name Format | string |
{NETWORK} - {STATE} {CITY} ({CALLSIGN}) |
Format template for broadcast channels. |
| Suffix for Unknown Channels | string |
[Unk] |
Suffix to append to unmatched channels. |
| Ignored Tags | string |
[4K], [FHD], [HD], [SD], [Unknown], [Unk], [Slow], [Dead] |
Tags removed before matching (handles [] and ()). |
| Default Logo | string |
- | Logo display name from Dispatcharr's Logos page. |
| Dry Run Mode | boolean |
false |
Preview changes without modifying anything. |
| Rate Limiting | select |
None |
Delay between DB writes (None/Low/Medium/High). |
The action buttons are listed in the recommended execution order:
- Validate Settings - Check DB connectivity and settings.
- Load & Process Channels - Scan groups and determine standardized names.
- Rename Channels - Apply names (or CSV preview in Dry Run).
- Tag Unknown Channels - Append suffix to unmatched channels.
- Apply Default Logo - Assign one default logo to all channels without one.
- Apply Per-Channel Logos (tv-logos) - Fuzzy-match each channel to the tv-logo/tv-logos repo and assign individual artwork.
- Organize by Category - Move channels into category groups (or CSV preview).
- Import M3U Streams - Create channels from M3U streams (or CSV preview).
- Show Status - Display live progress / ETA for the most recent operation (no destructive effect).
- Clear CSV Exports - Delete all plugin CSV files.
Rename before Import ensures duplicate detection is accurate (standardized names prevent duplicates). The two logo actions are independent — use Default Logo for a fast fallback, or Per-Channel Logos for individualized artwork.
Each stream is run through four stages in order — the first stage that produces a confident match wins:
| Stage | Method | When it fires | Why |
|---|---|---|---|
| 0 | Alias | Normalized stream name is a key in the curated alias map | O(1), highest confidence — short-circuits fuzzy entirely for known variants. |
| 1 | Exact / very-high similarity (≥97%) | After normalization, stream and candidate are identical or within a few characters | Catches near-perfect matches instantly with token-overlap guard against ABC News vs BBC News. |
| 2 | Substring | One string contains the other AND lengths within 75% | Handles prefixed/suffixed variants like US: HBO HD ↔ HBO. |
| 3 | Fuzzy token-sort | Levenshtein after token normalization, length-scaled threshold + subset/divergent/numeric guards | Catches reordered words and minor spelling differences. |
If all four miss, the stream is reported as unmatched (and tagged with the configured suffix if you run Tag Unknown Channels).
Channel Mapparr uses several optimization layers for fast matching:
- Alias index (O(1) hash) - 200+ curated variant→canonical mappings checked before fuzzy.
- Exact lookup (O(1) hash) - catches near-identical matches instantly.
- Normalized lookup (O(1) hash) - matches after stripping tags, prefixes, and noise.
- Token-indexed fuzzy matching - inverted index reduces candidates from 31K to ~50-200 before fuzzy comparison.
rapidfuzzC extension - 10-100x faster than pure-Python Levenshtein when available.- Early termination - skips impossible matches via length pre-check and row-level abort.
- tv-logos filelist cache - per-session cache on the GitHub fetch so re-running per-channel logo assignment doesn't repeat the API call.
Benchmark: 19,147 streams matched against 31,621 channels in 6 seconds.
- Processing Cache:
/data/channel_mapparr_loaded_channels.json - Version Cache:
/data/channel_mapparr_version_check.json - Import Results:
/data/channel_mapparr_m3u_import_results.json - Progress File (v1.26.1430910+):
/data/channel_mapparr_progress.json— read by the Show Status action. - Exports:
/data/exports/(CSV previews and reports)
- "Logo not found": Ensure you are using the logo's display name from the Dispatcharr Logos page, not the filename.
- "No match found": Try lowering the Match Sensitivity to Normal or Relaxed if channels are being skipped. If a specific channel is repeatedly mismatched, consider adding it to
aliases.pyso it hits Stage 0 instead. - Database Loading Errors: Ensure the
Channel Databasessetting uses valid 2-letter country codes (e.g.,US,UK). - Slow matching: Install
rapidfuzzin your Dispatcharr container for 10-100x faster fuzzy matching. Check logs for "Using rapidfuzz" vs "Using built-in Levenshtein". - Worker timeout on Organize: Ensure you're running v1.26.1001200+ which runs organize in a background thread.
- Per-channel logos returns "No file lists could be fetched": GitHub anonymous API is rate-limited to 60 req/hr/IP. If you've run other GitHub tooling recently you may need to wait an hour, or set up an authenticated proxy.
- Show Status reports "no operation has run yet" even after running an action: ensure
/data/is writable by the Dispatcharrdispatchuser. The plugin writes/data/channel_mapparr_progress.jsonon every action tick.
This plugin integrates with Dispatcharr's plugin system and follows its licensing terms.