Version: 1.26.2911937 |
Author: PiratesIRC | Last Updated: Oct 18 2026, 19:54 UTC |
Automatically add matching streams to channels based on name similarity and quality precedence. Supports unlimited stream matching, channel visibility management, and CSV export cleanup.
stream-mapparr-latest.zip79767cdChecksums:
MD5: b424c81027fd9bb5052c788b8c8c14df
SHA256: 7cbe5837dbf7b300b86bae06871d8cb4cc2fd31aa9de2708351d4800b4022cc6
| Version | Download | Built | Commit | MD5 | SHA256 |
|---|---|---|---|---|---|
1.26.2911937 |
Download | Oct 18 2026, 19:54 UTC | 79767cd |
b424c81027fd9bb5052c788b8c8c14df | 7cbe5837dbf7b300b86bae06871d8cb4cc2fd31aa9de2708351d4800b4022cc6 |
1.26.2911353 |
Download | Oct 18 2026, 14:29 UTC | 9343daf |
521bde132f09bfe6af5dd164fdb88278 | 33370bba6b6a8c0ef2de1e251d2d3023d69ac942755eee894a766bd9c821f3e2 |
1.26.2901847 |
Download | Oct 17 2026, 18:59 UTC | 3dd79d4 |
90fddf324b89eb3dfa95e75b1d493751 | fe8c68a3581bbdd78ad6cff8f0fe431a642586b1a21d0e32832447f64b72514a |
1.26.2901408 |
Download | Oct 17 2026, 14:32 UTC | 7479ce2 |
5f9974c0a7c28477441fc4d9065fd0ee | 79d689a7562f9abc93ba9791c75e1452d59c57ee3f92b25fd79f0100fb7cff95 |
1.26.2841900 |
Download | Oct 11 2026, 19:06 UTC | 0bccc7e |
4fe6ec6c7461b599338a5bf4f46d3e17 | 8ad89a5a0b56ece1625966256a66ee7f3e9b9fd2f34233e39fbe7973cba8a450 |
1.26.2841112 |
Download | Oct 11 2026, 11:19 UTC | 6f08b41 |
ed72bc3989c89dab96253c8715a210a5 | fb5e9c578c7ace1f4b2371413288b06f86484b8bc2e33250cac85570d3959448 |
1.26.2831803 |
Download | Oct 10 2026, 18:09 UTC | 3c5624e |
d6ca7f148ea90ec881221b4a26ea29db | 1b2ec53ddd91cf96f2530669144e1910401bcc0b548f2600a761324ae7f28ee2 |
1.26.2831654 |
Download | Oct 10 2026, 17:01 UTC | 4c32a52 |
bfb74df315f2d88d06616f2290415b70 | 67498919c93ec2fe676ebb5d2496d1ec83438190a496621ad1fe76c9958ec2de |
1.26.2821334 |
Download | Oct 09 2026, 13:42 UTC | e32340a |
8b48e8b71db4e80ed093642ae45d8bca | c53b82949d4190ae5812138fcd9c6463ab61cca30f1ee848169856111879af21 |
1.26.2681209 |
Download | Sep 25 2026, 12:17 UTC | d75dbde |
9d2ab683f719c1794cdbaea5104eb3e2 | 9e4e884e82e7ea5f1f8de37085825834c46087e7ed898a124922b70955aede45 |
Source: Browse Plugin
Metadata: View full manifest
[!TIP] New to Dispatcharr plugins? Start with the Dispatcharr Plugin Workflow guide. It explains what each plugin and tool does, where they overlap, and what order to use them in.
A Dispatcharr plugin that automatically matches and assigns streams to channels using fuzzy matching, quality prioritization, and OTA callsign recognition.
The Streams Matched and Active Installs badges add up figures sent by every install that keeps “Share anonymous usage counts” ticked; see Anonymous usage counts.
Before installing or using this plugin, create a backup of your Dispatcharr database. This plugin modifies channel and stream assignments.
From the Dispatcharr Plugin Hub (recommended):
Manual install:
| Guide | What it covers |
|---|---|
| Regex pre-processing | Writing find and replace rules for provider junk in stream names |
| Notifications and emailed reports | Sending HTML and CSV reports through Newsflasharr |
| Troubleshooting | Stuck operations, no matches, slates, useful commands |
3840PNPO 1, or a two-letter country code followed by
one. A stray single bar is left aloneABC - TX Dallas (WFAA) are matched by FCC callsign, using a bundled station
table of around 1,900 stationsCinemax is treated as the East or national feedPacific, (Pacific) and (PT) all count as WestUS: ABC 25 (WPBF) West Palm Beach HD is a
place, not a West feedUK: BBC ONE WEST stays attached to BBC One as the English region it isSmall jobs run synchronously and the Dispatcharr interface shows the real result, including channel and stream counts and the CSV filename.
Larger jobs run in a background thread. The interface shows a “started in background” notification, and completion arrives by:
docker logs -f dispatcharr | grep Stream-Mapparr, looking for
COMPLETEDWhile a long operation runs, the plugin pushes a started notification, periodic percentage and estimated-time notifications, and a completion notification.
Buttons re-enable immediately. Do not click again while an operation is running: the operation lock prevents concurrent runs and auto-expires after 10 minutes.
| Setting | Type | Default | Description |
|---|---|---|---|
| Overwrite Existing Streams | boolean | True | Replace existing streams rather than appending. A run matching 0 streams never clears a channel |
| Match Sensitivity | select | Normal (80) | Relaxed (70), Normal (80), Strict (90), Exact (95) |
| Channel Profile | select | - | Profile to process channels from |
| Channel Groups | string | (all) | Groups to process, comma-separated. Empty means all groups |
| Channel Groups Mode | select | Only the groups listed | Whether the list names the groups to process or the groups to skip. Choosing to skip means a group you create later is processed automatically. Empty list means all groups either way |
| Stream Groups | string | (all) | Stream groups to draw candidate streams from, comma-separated |
| Stream Groups Mode | select | Only the groups listed | The same choice for stream groups, resolved separately from the channel-group list |
| M3U Sources | string | (all) | M3U sources to use, comma-separated. Order sets priority. Only listed sources are used unless the list contains *, which stands for every other source: Free Provider, * puts Free Provider first and keeps all the rest |
| Custom Aliases | string | (none) | JSON object of extra "channel": ["alias", ...] mappings. Channel names and aliases are both matched case-insensitively, and whitespace around a channel name is ignored |
| Stream Name Regex Rules | string | (none) | JSON list of [find, replace] pairs applied to stream names before matching. See Regex pre-processing |
| Prioritize Quality | boolean | False | Sort by quality first, then by M3U source priority |
| Custom Ignore Tags | string | (none) | Tags to strip before matching, for example [Dead], (Backup) |
| Wait for IPTV Checker Completion | boolean | False | Hold a scheduled run until IPTV Checker has finished, so matching sees fresh stats |
| IPTV Checker Max Wait (hours) | number | 6 | How long to wait before running anyway |
| Run After IPTV Checker Scan | boolean | False | When IPTV Checker finishes a scheduled scan, run the scheduled steps (Fill Mirror Backups, Sort Alternate Streams and Match and Assign, whichever are ticked). IPTV Checker needs its own Trigger Stream-Mapparr setting on |
| Enable CSV Export | boolean | True | Write a CSV on a scheduled Match and Assign run. A dry run always writes one |
| Delete CSV Exports Older Than (Days) | number | 0 | Remove this plugin’s older reports after each new one is written. 0, the default, keeps everything. Only files this plugin wrote are ever considered, because that directory is shared with other plugins. The newest report and the one just written always survive |
| Tag Handling | select | Strip All | Strip All, Keep Regional, or Keep All |
| Channel Database | select | US | Which channel database to use. You choose this, never your provider’s country prefix, so one database per country serves every provider and none needs duplicating |
| Visible Channel Limit | number | 1 | Channels per group to enable and assign streams to |
| Rate Limiting | select | None | None, Low, Medium or High |
| Filter Dead Streams | boolean | False | Skip 0x0 resolution streams. Requires IPTV Checker |
| Restrict Matching To Same Country | boolean | False | Only match streams whose detected country matches the channel’s. GB: is accepted as well as UK:, and DR: as well as DO:. An unrecognised prefix is treated as unknown and the stream is kept, never dropped |
| Stream Prefix Countries | string | (empty) | Tell the country filter what a provider prefix means, as comma-separated PREFIX=COUNTRY entries such as NOW=UK, GO=US. Use it when a prefix names a platform rather than a country, which the plugin cannot know: NOW is Sky’s service in the United Kingdom and also in Italy, so no default is right for everyone. Consulted last, so it fills a gap and never overrules a country the provider stated. Matches only at the start of a name, never a word inside a title |
| Keep Same-Named Streams From One Source | boolean | False | Enable if your provider publishes several genuinely different feeds under one identical name. By default those are treated as duplicates |
| Enable EPG-Based Placeholder Matching | boolean | False | Match a placeholder-named channel or stream by the programme currently airing on it, taken from EPG data, instead of by its literal name. For providers that name event slots generically, such as PPV EVENT 04, and put the real event only in the guide. Channel and stream names are never modified |
| Placeholder Name Patterns | string | (see plugin) | One regex per line. A name is only ever treated as a placeholder if it matches one of these, so nothing else changes behaviour. Press Scan for Placeholder Patterns to find the families your patterns miss |
| EPG Title Cleanup Rules | string | (see plugin) | JSON list of [find, replace] pairs applied to the raw programme title before it is used for matching, for example stripping a Next Event: X at 6:00AM wrapper down to X |
| Skip Titles | string | (see plugin) | Comma-separated. If the cleaned programme title matches one of these, the channel keeps its literal name for that pass, because an idle slot carries no useful event |
| Channel Schedule Suffix Cleanup Rules | string | (see plugin) | JSON list of [find, replace] pairs that strip a schedule annotation such as \| Monday @ 5 from the channel name before it is compared against a programme title |
| EPG Event Watch Source Streams | string | (see plugin) | Comma-separated names of permanently-named source streams to watch for an event, rather than placeholder-named ones |
| Send notifications to Newsflasharr | boolean | False | Emit notifications through the Newsflasharr plugin |
| Email A Report After | select | Scheduled runs only | Which runs email a report: never, scheduled only, or every run |
| Email Report Format | select | Both | Which file is emailed. One report sends ONE email carrying one attachment, because a notification can carry only one. Both writes both files and emails the HTML page; the email names the file it did not attach |
| Scheduled Run Times | string | (none) | Times in HHMM, comma-separated, for example 0400,1600 |
| Auto-match after M3U refresh | boolean | False | Run Match and Assign after each successful M3U refresh. A refresh that ends in an error does not trigger it. Requires a Channel Profile. Dispatcharr v0.27+ |
| Dry Run Mode | boolean | False | Preview without making database changes |
| Enable Throughput-Based Sorting | boolean | True | Add a measured-throughput tier to alternate-stream sorting, falling back to resolution when no probe data exists |
| Probe Duration (seconds) | number | 8 | Length of each throughput probe |
| Probe Cache TTL (minutes) | number | 30 | How long a measurement stays fresh. Stale entries sort as unknown |
| Probe Rate (probes / minute) | number | 6 | Global cap on probes per minute. Also serialized per M3U account |
| Bitrate Safety Margin | string | 1.10 | Multiplier on nominal bitrate. Below nominal times this is insufficient, below nominal times 1.5 is marginal |
| Demote Placeholder Streams | boolean | True | Rank a stream last when it claims 720p or higher but carries less video than the floor below. Streams are moved down the order, never removed, and one with no measured bitrate is never affected |
| Placeholder Bitrate Floor (kbps) | number | 300 | The floor for the setting above. Standard definition is never checked. Where two bitrate figures disagree the higher is used, so a disagreement keeps the stream |
| Audio Channels Priority | string | ”” | Audio layouts, most preferred first, for example 7.1, 5.1, stereo. Ranked before codec. Blank disables it |
| Audio Codec Priority | string | ”” | Audio codecs, most preferred first, for example eac3, ac3, aac. Ranked after layout. Blank disables it |
| Share anonymous usage counts | boolean | True | Sends this plugin’s Streams Matched total and a random id to the plugin author’s counter. See Anonymous usage counts. |
| Action | Description |
|---|---|
| Validate Settings | Check configuration, profiles, groups and databases |
| Test Regex Rules | Preview what your regex rules would change, with before and after samples and invisible characters made visible. Writes the full readout to /config/stream-mapparr/test-regex-rules.txt, since a notification shows only about 280 characters |
| Check Stream Country Labels | Compare each stream’s group country against its EPG identifier suffix and report where they disagree. Reads two database columns, opens no provider connection and changes nothing. A disagreement is not automatically a fault: a channel carried in one country and made in another is ordinary |
| Scan for Placeholder Patterns | Group every stream name into a numbered family, by replacing its numbers with a slot, and report the families that no Placeholder Name Pattern covers, each with a regex to paste. The largest families come first. Each one says how many of its streams carry an EPG identifier, and a family where most of them do is marked, because that is more likely to be an ordinary numbered channel lineup, where a pattern replaces a name that is already matching. A digit followed by K is left alone, since 4K is a resolution tag rather than a slot number. Writes the full readout to /config/stream-mapparr/placeholder-name-scan.txt. Reads one database column, opens no provider connection and changes nothing |
| Load/Process Channels | Load channel and stream data from the database |
| Preview Changes | Dry run with a CSV export |
| Match & Assign Streams | Fuzzy match and assign streams to channels |
| Match US OTA Only | Match US broadcast channels by callsign |
| Sort Alternate Streams | Re-sort existing streams by quality, and by throughput tier where probe data exists |
| Probe Stream Throughput | Measure sustained throughput for assigned streams. Run this before Sort Alternate Streams |
| Fill Mirror Backups | For M3U accounts placed in one Dispatcharr server group that carry the same streams from different provider hosts, add to each channel the matching stream, found by provider stream id, from every other active account whose host the channel has no stream from yet. Two accounts on the same host count as one, and inactive accounts are skipped. New streams go after the existing provider streams and before any custom stream. Adds only and never removes. In live mode it first saves each changed channel’s previous stream order to /data/stream_mapparr_snapshots/, and changes nothing if that save fails. Writes every addition to /config/stream-mapparr/fill-mirror-backups.txt |
| Manage Channel Visibility | Enable or disable channels based on stream count |
| View Check Progress | Show the running operation’s percentage and estimated time |
| View Last Results | Show a summary of the last completed operation |
| Clear CSV Exports | Delete plugin CSV files, skipping any written in the last 40 minutes |
| Cleanup Orphaned Tasks | Remove scheduled task entries left by an older version |
| Report a Bug or Request a Feature | Write a ready-to-paste report with your settings, secrets masked |
0400,1600. Times
use Dispatcharr’s global timezone; there is no plugin timezone settingThe scheduler runs in a background thread and re-arms when the container restarts. Across multiple worker processes, a shared on-disk claim makes sure the job runs once per slot rather than once per worker.
Event-driven alternative (Dispatcharr v0.27+): Auto-match after M3U refresh runs Match and Assign the moment a refresh finishes successfully, instead of or as well as fixed times. Because Dispatcharr fires that event once per M3U account, runs are coalesced under a lock and a follow-up pass catches any account that finishes mid-match. A multi-account refresh therefore produces one effective match rather than one per account.
After an IPTV Checker scan: Run After IPTV Checker Scan runs the same
steps the fixed times run (Fill Mirror Backups, Sort Alternate Streams and
Match and Assign, whichever are ticked) when the IPTV Checker plugin finishes a scheduled scan
that reached the end of its channel list. IPTV Checker calls this plugin
directly, so its own Trigger Stream-Mapparr After Scheduled Check setting
must be on as well. A run already in progress is left alone and the next scan
tries again. The CSV header for such a run reads Scheduled (after IPTV
Checker scan).
Preview and scheduled exports are saved to /data/exports/ and include:
These are not the files that get emailed. See Notifications for that distinction, which matters because the exports contain your M3U source names.
This plugin uses calver, 1.MAJOR.DDDHHMM, being the UTC day of year plus the
UTC time. Run python scripts/bump_version.py to bump plugin.json and
plugin.py together.
The Streams Matched and Active Installs badges count every install that leaves the “Share anonymous usage counts” setting (on by default) ticked and runs at least one action or scheduled run. Streams Matched counts the stream-to-channel assignments that Match & Assign Streams and Match US OTA Only write. With Overwrite Existing Streams on, which is the default, a daily schedule that re-matches the same streams counts them again; with it off, a stream already on a channel is not written or counted again. Sort Alternate Streams is not counted.
When an action or a scheduled run finishes, the plugin sends this plugin’s Streams Matched total and a random id for this plugin on this install to the plugin author’s counter at plugin-stats.dpas.workers.dev. It sends at most once an hour, or ten minutes after the last successful send when a run has just assigned streams. A run that finishes inside that gap is not sent later: the total goes out with the first later run that is an hour past the last successful send, or with a later run that assigns streams once ten minutes have passed.
The server stores that id with the total and the date of the last report, and keeps them until this install unticks the setting and the delete succeeds, or until the plugin author removes them by hand. An install that stops reporting still counts toward Streams Matched. The connection shows the server your public IP address; the server uses it only to limit abuse and does not store it in its database, though when an install first registers it keeps a salted one-way hash of it (of its /64 block for IPv6) for up to three days. Cloudflare, which hosts the server, keeps its own request logs. No names, channels, streams, URLs, providers or settings are sent. The figures are self-reported by installs and capped by the server, not verified.
What counts as an active install: an install that sent at least one report in the last 30 UTC days. A badge changes after the server’s hourly recount, which runs at the start of each UTC hour, and Shields may cache the badge for up to an hour more, so a new report can take up to about two hours to show.
The setting is the last one in the settings form, in its own section. Unticking it takes effect when the next action or scheduled run finishes; the plugin then asks the server to delete this install’s figures. Once the server confirms the delete, the plugin forgets its id, and ticking the setting again later starts a new one; if the delete could not reach the server, the plugin keeps the id and retries. The plugin keeps that id and the timing of its reports in /data/plugin_stats/stream-mapparr/ (install_id, sent, backoff, disabled, delete_backoff, lock). To start a new id, untick the setting and let a run finish so the delete succeeds; deleting that folder while the setting is ticked leaves the old figures on the server, and the new id then sends the full total again, so the badge counts those matches twice.
See CHANGELOG.md for full version history.
Stream-Mapparr provides no television content of any kind. It supplies no channels, no playlists, no streams, no electronic programme guide data and no provider accounts, and it contains no list of where to obtain any of those. It matches and orders stream entries that already exist in your Dispatcharr installation, using bundled reference data: curated per-country channel name lists, and a table of United States broadcast station callsigns published by the Federal Communications Commission.
Almost everything the plugin does reads stream names, never the streams themselves. There is one exception, and it is opt-in. Probe Stream Throughput connects to stream URLs already configured in your Dispatcharr installation and reads a few seconds of data from each, in order to measure how fast that source delivers. It measures only the volume and timing of the bytes. It does not decode, record, store, restream or redistribute anything, and the data it reads is discarded. Nothing is fetched unless you run that action or enable throughput sorting.
Emailed reports, if you enable them, are handed to the Newsflasharr plugin, which sends them to destinations you configured.
You are responsible for what you connect Dispatcharr to. Whether a particular provider, subscription, playlist or stream is lawful for you to use depends on your agreement with that provider and on the law where you live. Use only sources you are authorised to use. Nothing in this project is intended to enable, encourage or assist access to content you have no right to access.
All product names, channel names, network names, callsigns, trademarks and registered trademarks mentioned in this project, or appearing in its examples or bundled reference data, are the property of their respective owners. This project is an independent, community-built plugin. It is not affiliated with, endorsed by, or sponsored by any television network, broadcaster, streaming service or IPTV provider, and it is not affiliated with the Dispatcharr project beyond being a plugin written for it.
See CONTRIBUTING.md for how to set up, run the tests, and what runs on a pull request.
This plugin is free and always will be. If it saves you time and you would like to support the work, you can sponsor it at github.com/sponsors/PiratesIRC.
Sponsoring buys no priority, no private support and no influence over what gets built. Bug reports and pull requests are just as welcome from everyone.
To report a vulnerability, see SECURITY.md. Please do not include provider credentials, stream URLs or M3U account names in a public issue.
MIT