M3U playlist editor, converter and validator
Three tools for one file type. Open a playlist, check whether it is well-formed, convert it to CSV or JSON, fix channel names and groups, then export a clean file — without uploading it anywhere. The playlist is parsed in this tab, so nothing is sent to a server and no account is needed.
M3U Validator
Check a playlist for syntax errors, missing URLs and duplicate streams.
Validate a playlist →M3U Converter
Convert a playlist to CSV or JSON, or turn JSON back into a clean M3U.
Convert a playlist →One file, three different questions
The validator answers “is this file well-formed”. It reads the structure —
the #EXTM3U header, the #EXTINF lines and the URLs
beneath them — and reports what a player would trip over: an entry with no
stream address, a URL with no entry above it, an unbalanced quote in an
attribute, a file that opens with a comment instead of a header. It also
reports duplicates, because the same stream listed twice is a real problem
in a playlist a player has to scroll through. It does not tell you whether
the streams work, because that would mean contacting them.
The converter answers “what does this look like outside a player”. A playlist is a flat text file with a small amount of structure, and that structure maps cleanly onto a table: name, group, channel id, logo, duration and URL. Converting to CSV gives you something a spreadsheet can sort; converting to JSON gives you something a script can read. The third output, a clean M3U, is useful when you have edited the data and want the file back in its original shape.
The editor answers “how do I fix the parts players read”. Renaming forty channels by hand in a text editor is how a playlist gets broken. The editor loads the file into a table, lets you change the display name and the group in place, remove entries, drop duplicate URLs and sort by group, then writes the whole file back with the attributes preserved.
The file never leaves the tab
Most online playlist tools ask you to upload the file, because parsing on a server is easier to build. That upload is the part worth thinking about. A playlist URL is often not a public address: it is a personal subscription with a username or token embedded in it, which means whoever holds the file can watch what you watch and spend what you paid for. Sending it to an unknown server to be “checked” hands over exactly that.
Here, the parsing runs as JavaScript in the page you are looking at. Reading the file uses the browser's own file API; the text never enters a network request. There is no upload endpoint to misuse, no storage bucket to leak and no retention policy to read, because there is no server-side copy at any point in the process.
The trade-off is honest: everything happens in your device's memory. A playlist with tens of thousands of entries will use a lot of it and may make the tab sluggish, and a very large file can exhaust what the browser will give a single page. For the usual few-hundred-channel file this is not noticeable.
What an M3U file actually contains
An M3U file is a text file with a header line and then pairs of lines. The
header is #EXTM3U, and it is the only thing that distinguishes
a playlist from a list of links. Each entry then has a directive line
beginning #EXTINF:, which carries a duration, a set of
key="value" attributes and a display name after the final comma,
followed by exactly one URL on its own line.
Three attributes do most of the work in practice. tvg-id is what
an EPG matches against to attach programme data; tvg-logo is the
image a player shows; group-title is the category a player sorts
into. A playlist without them still plays, but it arrives as one
undifferentiated list with no guide attached.
The duration field is where newcomers get confused. A value of
-1 means “unknown or live”, which is what almost every IPTV
playlist uses. A positive number is a duration in seconds, which is what a
local audio playlist uses. Both are valid; they describe different things.
Editing that does not break playback
Players are forgiving about content and strict about structure. You can
rename a channel to anything, put emoji in it, or leave the logo out
entirely, and the file still loads. What breaks a file is structure: removing
the header, leaving an #EXTINF line with no URL under it, or
putting two URLs under one entry so every subsequent pair is read one line
out of step.
The other silent breakage is quoting. Attribute values are wrapped in double quotes, so a value that itself contains a double quote has to be handled deliberately; an unbalanced quote swallows the attributes that follow it, and a channel quietly loses its group and its guide id while still appearing to play.
The editor keeps those rules by rebuilding each entry from parsed fields rather than splicing text. Renaming a channel, moving it between groups or deleting its neighbours cannot break the pairing, because the tool writes the file from its own model of the entries.
What these tools deliberately do not do
Nothing here contacts a stream. Validating syntax and testing whether a channel is live are different jobs, and the second one means your browser requesting third-party media servers on your behalf — with your IP attached, often to hosts you know nothing about. The validator reports what the file says, not what the network does.
The tools also do not fetch playlists from a URL, scrape other people's lists, or publish anything. You bring a file you already have; the tools help you inspect, reshape and export it. There is no catalogue of channels here and no subscription sold, which keeps the site's only job honest: fixing files.
If you need public playlist sources rather than tooling, that is a different problem with a different answer, and m3u converter work belongs with a directory that explains what each source is.
Pick the tool that matches the file you have
If the playlist loads but looks wrong in your player, start with the validator — structural faults explain most of that. If it loads correctly and you want the channel data in a spreadsheet or a script, use the converter. If the names and groups are a mess, or the list has duplicates you keep scrolling past, the editor is the shortest path. All three accept a file you open or text you paste, and all three export something you can keep.