An official plugin for m3u-editor that automatically enriches channel logos by matching channel names against an open-source logo repository - either tv-logo/tv-logos or K-yzu/Logos - via the jsDelivr CDN.
- Two supported logo sources, selectable per-playlist-run via the
logo_sourcesetting:tv-logo/tv-logos(default) - country-folder layout with slugified, country-code-suffixed filenames (e.g.espn-us.png)K-yzu/Logos- region-coded top folders with human-readable filenames (e.g.ABC HD.png); supportsus,ca,gb,au,nz(regional-affiliate subfolders likeTV:US2are not indexed yet)
- Matches channel names to logos using a two-pass strategy: a cached GitHub Contents API index (fast, O(1)) with a HEAD-check fallback for the tv-logo/tv-logos source
- Quality-aware folder/filename probing - channels with HD hints (
HD,FHD,4K, etc.) prefer HD variants first - CamelCase splitting, dot/plus normalisation, and compact hyphenation matching for resilient name resolution
- Per-run match cache with configurable TTL to avoid redundant API calls
- Supports 60+ country codes (ISO 3166-1 alpha-2) on tv-logo/tv-logos
- Dry-run support on all actions
- m3u-editor with plugin support enabled
network_egresspermission (CDN + GitHub Contents API)
Install via the m3u-editor Plugins page using the latest GitHub release, or via Artisan:
php artisan plugins:stage-github-release \
https://github.com/m3ue/tv-logos-plugin/releases/download/v1.0.2/tv-logos-v1.0.2.zip \
--sha256=<checksum>Once staged, approve the install review in the UI and enable the plugin.
| Setting | Default | Description |
|---|---|---|
logo_source |
tv-logo |
Which logo repository layout to match against: tv-logo (tv-logo/tv-logos) or kyzu (K-yzu/Logos). |
github_repo |
tv-logo/tv-logos |
Source repository (owner/repo) used when logo_source is tv-logo. Point to a fork to use custom logos. |
kyzu_github_repo |
K-yzu/Logos |
Source repository (owner/repo) used when logo_source is kyzu. |
default_playlist_id |
- | Playlists to enrich automatically after each sync. |
country_code |
["us"] |
One or more ISO 3166-1 alpha-2 country codes. Tried in order per channel - the first country with a match wins. Supported codes vary by logo_source; codes unsupported by the active source are skipped. |
overwrite_existing |
false |
Overwrite channels that already have a logo URL. |
skip_vod |
true |
Skip VOD channels. |
cache_ttl_days |
7 |
Match cache lifetime in days. Set to 0 to never expire. |
| Action | Description |
|---|---|
health_check |
Pings the CDN and reports cache stats. Dry-run safe. |
enrich_logos |
Enriches logos for a selected playlist. |
Subscribes to playlist.synced. When a playlist sync completes, the plugin automatically enriches logos for any playlists configured in default_playlist_id.
Albania, Algeria, Argentina, Australia, Austria, Belgium, Bosnia & Herzegovina, Brazil, Bulgaria, Canada, China, Croatia, Czech Republic, Denmark, Egypt, Estonia, Finland, France, Germany, Greece, Hungary, India, Ireland, Iceland, Israel, Italy, Japan, Kosovo, Latvia, Lithuania, Luxembourg, North Macedonia, Montenegro, Mexico, Netherlands, New Zealand, Nigeria, Norway, Poland, Portugal, Romania, Russia, Saudi Arabia, Serbia, Slovakia, Slovenia, South Africa, South Korea, Spain, Sweden, Switzerland, Turkey, Ukraine, United Arab Emirates, United Kingdom, United States.
United States (us), Canada (ca), United Kingdom (gb), Australia (au), New Zealand (nz).
bash scripts/package-plugin.shUpdate the SHA-256 checksum in the release notes whenever the zip changes.
MIT