Version: 1.26.2901817 |
Author: PiratesIRC | Last Updated: Oct 17 2026, 18:25 UTC |
Scans for channels with EPG assignments but no program data. Auto-matches EPG to channels using intelligent fuzzy matching with aliases, removes EPG from hidden channels, and manages EPG assignments.
epg-janitor-latest.zipb55013eChecksums:
MD5: ec10772f3d36e04454e068eac38b0473
SHA256: cb87b8968f8132722d9387a40c6f49aa72032b917e87fcb5e580ee3e520892e0
| Version | Download | Built | Commit | MD5 | SHA256 |
|---|---|---|---|---|---|
1.26.2901817 |
Download | Oct 17 2026, 18:25 UTC | b55013e |
ec10772f3d36e04454e068eac38b0473 | cb87b8968f8132722d9387a40c6f49aa72032b917e87fcb5e580ee3e520892e0 |
1.26.2832018 |
Download | Oct 10 2026, 20:24 UTC | 81947ce |
efd2962982e1cd37032600a84e2702a8 | e120b41abeb582f1cc80b736501cb92f38fbf57eb8223b88f73a21bdfbdfeccc |
1.26.2481223 |
Download | Sep 05 2026, 19:57 UTC | ceb7847 |
de24b7ac4404039dec564a5bd315d4f8 | 2cc9ba6b40733bf40a059376deb72da9639cec40df4dcdcfa0cd77abffb7f60a |
1.26.2281111 |
Download | Aug 16 2026, 16:17 UTC | 79842f2 |
8e7ade420998eadd4c60fcb617672989 | 239cf4955b3d079ab76c97983a6989472470af7d7cd847b87ac9cabfd8761e30 |
1.26.2241232 |
Download | Aug 12 2026, 18:14 UTC | 990a732 |
8421a27d9dd9c7ba8e2f0732f573a16a | 07b8e5bfa73cd1505278eadb9dd20965be45b6f10e75f6b426015e7cb4fbb739 |
1.26.2241113 |
Download | Aug 12 2026, 16:23 UTC | 72a2b84 |
5959b74ddfba7eab9cf884abaf750f7c | 2570b9dcbe9e2f30a90a6ce5422061a7a886ca72423fbd35f1d2fcacc1aa4a0b |
1.26.1791309 |
Download | Jun 29 2026, 11:27 UTC | 7ffd2cc |
0b1509586098119da3e920c579893a26 | 9e72f5c744dbcc2f70437a9bb7c45c4e4bfbd4daca6d2d2c802624b141a90d59 |
1.26.1660712 |
Download | Jun 15 2026, 14:20 UTC | dba280a |
1ec4eba71a3d9190da36389713927fd3 | aedcc482a09c0f0e24851658fa2d1a59313ddd330eeb52231e9e24cfb8347b64 |
1.26.1420824 |
Download | May 22 2026, 14:19 UTC | a5ccaa9 |
d50bf65d2cd18488c6be7f652a36e90a | 55cc84fa57d509b3eefea3511ffbb9705ee5dd2f1994f6c247e6ee6372484ba0 |
1.26.1021352 |
Download | Apr 12 2026, 19:22 UTC | 2cf371a |
25cf566d3e3c0fec1f99d78d7b09dd85 | 9109e92484c73b24fad2c92b455f9a3bd8e2280b51b6eac7120c14de42314499 |
| Maintainers: PiratesIRC | 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.
The badges add up figures sent by every install that keeps Share anonymous usage counts ticked; see Anonymous usage counts. The author’s own installation includes a reconstructed opening record of 2,212 guide assignments, an estimate made from its CSV exports when its local tally was added on 5 September 2026; it counts toward that installation’s total only. Every install sends only the work its own ledger records.
Before installing or using this plugin, it is highly recommended that you create a backup of your Dispatcharr database. This plugin modifies EPG assignments on channels and can rename channels.
Click here for instructions on how to back up your database.
Dispatcharr can assign a programme guide to a channel, but nothing checks whether that assignment actually works. EPG Janitor finds the channels where it does not, and fixes them.
Assign a guide to channels that have none. Auto-match scores every channel against every eligible EPG entry using two independent methods and takes the better result: weighted structural signals over US callsign, state, city and network, and a fuzzy name pipeline running alias lookup, then exact, then substring, then token-sort comparison. Every run has a preview that writes a CSV and changes nothing.
Repair guides that are assigned but empty. Scan & Heal finds channels whose EPG assignment carries no actual programme data, searches for a working replacement among the sources you allow, and only commits one that has real programme data in the window you set.
Recognise US over-the-air stations properly. Callsigns are matched in
parentheses (ABC (WABC)), at the end of a name (WABC-DT), and in the leading
CALLSIGN (NETWORK) form used by feeds such as jesmann-US. A shared
high-confidence callsign anchors the match and a disagreement rejects it. Every
callsign the FCC licenses is shipped with the plugin, so a real station is
recognised even when it is absent from the channel databases, while
callsign-shaped English words such as KILN and WHIP are not mistaken for
stations.
Avoid the mistakes that look like successes. Numbered and time-shifted
siblings do not cross-match, so Fox Sports 1 does not take Fox Sports 2’s
guide and ITV2 does not take ITV2 +1’s. Regional variants route to the
correct regional feed. Number words fold to digits, CamelCase splits, and dotted
compounds split, while radio frequencies are left alone.
Clean up in bulk. Remove EPG assignments by regular expression, from hidden channels, or from whole groups. Tag channels with missing programme data with a visible suffix. Export any run to CSV with the score, the method and the reasoning for every row.
Know what a run did, and what it was told to do. Every CSV export opens with a commented preamble naming the report, stating the counts the run produced, and listing the settings it used under the names the form gives them. Button colour tells you the consequence before you press anything: red can remove a guide assignment and always confirms first, orange writes data but removes no assignment, green runs an operation that writes no channel data, and blue only reads. Exports can be cleaned up by age, which is off unless you set a number of days, and never touches another plugin’s files.
Watch for guides going stale, if you want it. An optional freshness watchdog checks every EPG source on a schedule and refreshes any that has errored or is running out of guide data. It is off by default and writes system events only.
Everything runs inside Dispatcharr against its database directly, so there are no API credentials to configure. There are no required dependencies.
Read the warning about East to Pacific reassignment before your first bulk apply on cable or premium channels. A channel whose name carries no regional marker can be moved from an East feed to a Pacific one, shifting its whole guide by two to three hours.
The EPGs 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 the scheduled EPG Freshness Watchdog check when that is enabled (after the next Celery worker restart following an update). EPGs Matched counts the guide assignments this plugin wrote to channels when Apply Auto-Match or Scan & Heal (Apply Changes) writes them. A preview writes nothing and counts nothing. A channel re-assigned later counts again, so the figure measures work done, not distinct channels.
When an action or a scheduled run finishes, the plugin sends this plugin’s EPGs 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 guides. There is no timer: a run that finishes inside the gap sends nothing, and the next action or scheduled run that finds the gap passed sends the total.
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 EPGs 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, guide sources, URLs 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/epg-janitor/ (install_id, sent, backoff, disabled, delete_backoff, lock). To start a new id, untick the setting and let an action run so the server deletes this install’s figures; deleting that folder while the setting is ticked, or before the server confirms the delete, leaves the old figures on the server, and the new id then sends the full total again, so the badge counts it twice.
rapidfuzz for faster matching if it happens to be installed in the environment; if absent, a corrected pure-Python scorer computes the identical scoreEPG-Janitor.zip from the Releases page.docker restart dispatcharr (or equivalent).EPG Janitor is published in the Dispatcharr Plugins official repository, so you can install and update it directly from Dispatcharr’s Plugin Hub without downloading the zip manually.
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.
See CONTRIBUTING.md.
MIT. See LICENSE.
All product names, trademarks, and registered trademarks mentioned in this project are the property of their respective owners. Channel alias data is community-compiled from publicly available information and is not affiliated with or endorsed by any broadcaster.