M3U playlist editor
Load a playlist into a table, change the display names and groups in place, remove entries, drop duplicate URLs, sort by group, and download a file that is rebuilt from the parsed entries rather than edited as text.
Edit a playlist
0 channels loaded
| Name | Group | Stream | Remove |
|---|
Nothing loaded yet.
The editor rebuilds, it does not splice
Text editors make playlist edits look easy and then quietly break the file. You
delete a URL, forget the #EXTINF line above it, and from that point
every channel in the file is paired with the wrong address — a player shows the
name of one channel and plays the stream of another. The error is invisible
until you notice a channel is showing the wrong thing.
This editor parses the file into entries first, then writes a new file from
those entries when you export. Renaming a channel changes one field; deleting an
entry removes the directive line and its URL together; regrouping rewrites the
group-title attribute in every matching entry. The pairing cannot
drift, because the output never depends on line positions in the original.
What it preserves: every attribute it parsed, in its original form, including ones the table does not show — a catch-up window, a radio flag, a user agent. What it does not preserve: comments and blank lines between entries, since they carry no meaning for a player and are the first casualty of any rebuild.
What a group actually is
A group is one attribute, group-title, repeated on every entry that
belongs to it. There is no separate definition of a group in the file, which is
why two entries that look grouped can differ by a trailing space and end up in
separate categories in the player. Bulk rename is the fix for that: it matches
the exact old value and rewrites it, so the result is consistent instead of
nearly consistent.
Leaving the new group empty removes the attribute and drops those channels into the player's default bucket. That is sometimes what you want — a handful of channels that do not belong in any category read better ungrouped than in a group called “Other”.
Sorting is by group first, then by channel name, and it changes the order of entries in the exported file. Some players respect that order and some sort again themselves, so treat it as a tidy-up rather than a guarantee of how the list will appear.
Duplicates are a design decision
The remove-duplicates button compares stream URLs exactly. That catches the common case — the same address pasted twice, or a merge of two exports that overlapped — and leaves everything else alone. It will not catch the same channel served from two hosts, or the same stream with a different query string, because those are not duplicates by any rule the tool can justify.
Deciding those cases needs a person: two entries for one channel can be deliberate, such as a backup stream that only works when the main one is overloaded, or the same channel in two quality tiers. Removing them automatically would be a guess about what you want.
When you have finished, download the file and test it in your player before replacing the original. If something is wrong, the validator will usually say what, and the duplicate guide covers the cases this button deliberately skips.
What the editor changes, and what it leaves alone
The table edits three things: the display name, the group, and which entries exist. Everything else is carried through from the parsed entry when the file is rebuilt.
| Field | In the table |
|---|---|
| Display name | Editable, one entry at a time |
group-title | Editable, including regrouping many entries at once |
| Stream URL | Not edited here: the address is the entry's identity, which is what makes duplicate detection exact |
tvg-id, tvg-logo and other attributes | Preserved exactly as parsed, including ones this editor does not display |
| Entry order | Unchanged unless you sort by group |
Because the export rebuilds each entry from its fields rather than splicing text,
renaming a channel cannot unbalance a quote or detach a URL from its
#EXTINF. A name containing a comma is written back as part of the
name, not as a new field — the failure that makes hand-editing a playlist in a
text editor risky.
Removing duplicates follows the same rule: entries are compared on the stream address alone, and the first occurrence is kept. The duplicate guide covers what that rule keeps and what it loses when the later copy carried better metadata, and the format guide explains the line pairing that makes the comparison exact in the first place.