M3U playlist validator
Paste a playlist or open the file and the validator reports what a player would object to: entries with no stream address, URLs with no entry, broken attribute quotes, duplicate streams and missing channel ids. Everything runs in this tab.
Validate a playlist
Runs entirely in this browser tab
The faults that stop a playlist working
The validator reads the file the way a player does: line by line, expecting a
header, then #EXTINF and URL pairs. An error is something that
breaks that reading. The most common is an #EXTINF line with no
stream address under it, which happens when a URL is deleted but its metadata
line is left behind. The second is the reverse: a bare URL with no entry above
it, usually from a half-finished paste.
A missing #EXTM3U header is an error because players use it to
recognise the file at all; some will refuse the file, others will guess. Then
there are the warnings that do not stop playback but cause visible damage: an
unbalanced quote in an attribute, a line of prose in the middle of the file, a
duration field that is neither -1 nor a number.
Duplicates and metadata coverage are reported separately, because they are
quality rather than correctness. The same stream listed twice will play; it
will also make every channel after it harder to find. A file where no entry
has a tvg-id will play with no programme guide at all, which is
the single most common reason a playlist feels broken when it is not.
What the score means, and what it does not
The score starts at 100 and subtracts 20 per error and 5 per warning. It is a blunt instrument by design: it exists to tell you whether a file is worth fixing and whether your fix helped, not to rank playlists against each other. A file scoring 100 can still be full of channels that stopped broadcasting years ago.
| Severity | Reported for | Cost |
|---|---|---|
| Error | No #EXTM3U header; an #EXTINF with no URL under it; an #EXTINF followed by another #EXTINF | 20 points |
| Warning | No duration, no channel name, a URL with no entry above it, a line that is neither directive nor URL, a duplicate stream URL | 5 points |
| Info | No tvg-id anywhere; a channel name used more than once | nothing |
Information notes are why a playlist with no guide data can still score 100: it
plays, and the missing tvg-id is a statement about the EPG rather
than a fault in the file. The broken example in the
format guide scores 30/100 on the same
arithmetic — three errors cost 60, two warnings cost 10.
That distinction matters, because “valid” and “working” get used interchangeably and they are not the same claim. Validity is a property of the text: the structure parses, the pairs line up, the attributes are quoted. Whether a stream answers is a property of the network, and it changes minute to minute without the file changing at all. This tool only ever reports the first.
If you want the second, the honest way to get it is to open the playlist in a player and try a few entries from the start, the middle and the end. That is also the only method that does not involve sending your playlist somewhere.
After the validator
Errors with line numbers are easiest to fix in the
editor, which loads the same parse and lets
you remove or rename entries without touching the pairing. If the file is valid
and you want the channel data in a spreadsheet, the
converter exports CSV or JSON from the same
parse. For the rules behind the messages, the
format guide walks through an
#EXTINF line field by field. If the file is structurally clean but no
player will open it, the
guide to opening an M3U file covers file
associations, players and the one case where a valid playlist is not a playlist at
all.