Advanced M3U Tags: Complete Reference Beyond EXTINF
Most guides cover the basics of M3U tags — #EXTM3U, #EXTINF, and a few attributes. But professional IPTV playlists use a much richer set of tags for EPG integration, player configuration, DRM support, catchup TV, and stream authentication. This complete reference covers every advanced M3U tag and attribute you need to build professional-grade playlists that work perfectly with all major IPTV players.

#EXTM3U Header Attributes
The #EXTM3U header line is not just a marker — it can carry global attributes that apply to the entire playlist.
| Attribute | Example | Purpose |
|---|---|---|
x-tvg-url | x-tvg-url="http://epg.example.com/guide.xml" | Global EPG source URL for entire playlist. IPTV apps auto-load this EPG when importing the playlist. |
x-tvg-id | x-tvg-id="source1" | Identifier for the EPG source (rarely used). |
url-tvg | url-tvg="http://epg.example.com/guide.xml" | Alternative to x-tvg-url — used by some IPTV providers for the same purpose. |
catchup | catchup="default" | Enables catchup TV support globally for the playlist. |
catchup-days | catchup-days="7" | Number of days of catchup archive available globally. |
#EXTINF Attributes: Complete List
The #EXTINF line format is: #EXTINF:duration [attributes],Display Name. All attributes sit between the duration and the comma. Unknown attributes are ignored by players — safe to add custom ones.
| Attribute | Required? | Example | Description |
|---|---|---|---|
tvg-id | Recommended | tvg-id="bbc1.uk" | EPG channel identifier. Must match XMLTV channel ID exactly. |
tvg-name | Optional | tvg-name="BBC One" | Internal channel name for EPG matching. Can differ from display name. |
tvg-logo | Optional | tvg-logo="https://example.com/bbc.png" | URL to channel logo image. Displayed in channel list. |
tvg-language | Optional | tvg-language="English" | Channel broadcast language. Used for filtering and sorting. |
tvg-country | Optional | tvg-country="UK" | ISO 3166 country code. Used for geo-filtering in some apps. |
tvg-shift | Optional | tvg-shift="+1" | EPG time offset in hours. Corrects EPG timing mismatches per-channel. |
group-title | Recommended | group-title="UK | News" | Channel category/group name. Creates folders in IPTV player. |
radio | Optional | radio="true" | Marks channel as audio-only radio stream. Some players show radio icon. |
TVG Metadata Attributes In Depth
tvg-id — The most critical attribute
The tvg-id is what connects your channel to EPG data. Without a correct tvg-id, IPTV apps show no program schedule for that channel. Rules:
- Must match exactly the
idattribute in your XMLTV EPG source - Case-sensitive —
BBC1.uk≠bbc1.uk - If unsure, download your EPG file and search for the channel name to find its ID
- Some providers use channel numbers as IDs (e.g.,
tvg-id="1001")
tvg-logo — Best practices
- Use direct image URLs (PNG, JPG, WebP) — not redirect URLs
- Prefer HTTPS URLs for security
- Recommended size: 256×256px square for channel logos
- If logo URL breaks, channel still works — logo just disappears
- Free logo repositories: github.com/iptv-org/iptv (thousands of channel logos)
group-title — Organizing channels
group-title creates folders in IPTV player channel lists. Use consistent naming across your playlist:
- Avoid changing group names between playlist updates — apps may reset user sorting
- Common naming patterns:
"UK | News","Sports | Football","Movies | Action" - Alphabetical group ordering helps users navigate large playlists
- Some players allow only one group per channel — use the most relevant category
#EXTGRP — Alternative Channel Grouping
#EXTGRP is a standalone tag placed before one or more channels to assign them to a group. It's an older approach — most modern playlists use group-title in EXTINF instead.
#EXTM3U
#EXTGRP:Sports
#EXTINF:-1 tvg-id="sky.sports",Sky Sports Main Event
http://stream.example.com/sky.ts
#EXTINF:-1 tvg-id="btsport1",BT Sport 1
http://stream.example.com/bt.ts
#EXTGRP:News
#EXTINF:-1 tvg-id="bbc.news",BBC News
http://stream.example.com/news.tsWhen to use EXTGRP vs group-title: Use group-title in EXTINF — it's more widely supported. Only use #EXTGRP if you're targeting legacy players that don't parse EXTINF attributes.
#EXTVLCOPT — VLC Player Options
#EXTVLCOPT passes configuration options directly to VLC's streaming engine. Many non-VLC IPTV apps (TiviMate, Perfect Player, IPTV Smarters) also read these options.
| Option | Example | When to use |
|---|---|---|
http-user-agent | #EXTVLCOPT:http-user-agent=Mozilla/5.0 | Server requires specific browser-like user agent to allow connection. |
http-referrer | #EXTVLCOPT:http-referrer=https://example.com | Server checks HTTP Referer header — must come from specific website. |
network-caching | #EXTVLCOPT:network-caching=1000 | Buffer size in milliseconds for this specific stream (1000 = 1 second). |
program | #EXTVLCOPT:program=1234 | Selects specific program from multi-program transport streams. |
sout-keep | #EXTVLCOPT:sout-keep | Keeps stream output open between tracks. |
#EXTINF:-1 tvg-id="channel1" group-title="Premium",Premium Channel HD
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
#EXTVLCOPT:http-referrer=https://provider.example.com
http://streaming.provider.com/live/channel1.ts#KODIPROP — Kodi Properties for DRM Streams
#KODIPROP configures Kodi's inputstream adaptive add-on, primarily for DRM-protected content. These tags are Kodi-specific and ignored by other players.
| Property | Purpose |
|---|---|
inputstream=inputstream.adaptive | Activates the adaptive streaming inputstream for this channel |
inputstream.adaptive.manifest_type=mpd | Specifies MPEG-DASH manifest format (alternatives: hls, ism) |
inputstream.adaptive.license_type=com.widevine.alpha | Sets Widevine DRM license type (also: com.microsoft.playready) |
inputstream.adaptive.license_key=https://... | URL to DRM license server |
inputstream.adaptive.stream_headers=... | Custom headers for stream requests (authentication) |
#EXTINF:-1 tvg-id="channel.drm" tvg-name="Premium DRM Channel" group-title="Premium",Premium HD
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
#KODIPROP:inputstream.adaptive.license_key=https://license.example.com/key
https://streaming.example.com/premium.mpdCatchup TV Tags
Catchup TV allows watching previously aired content. These attributes enable the catchup feature in supported IPTV apps like TiviMate, IPTV Smarters, and OTT Navigator.
| Attribute | Example | Description |
|---|---|---|
catchup | catchup="default" | Enables catchup. Values: default, append, shift, flussonic, xc |
catchup-source | catchup-source="http://..." | URL template for catchup stream. Uses {utc} and {utcend} placeholders. |
catchup-days | catchup-days="7" | Days of archive available (how far back users can go) |
catchup-back | catchup-back="24" | Hours of catchup available (alternative to catchup-days) |
timeshift | timeshift="10800" | Timeshift duration in seconds (3600 = 1 hour) |
#EXTINF:-1 tvg-id="channel1" tvg-name="Sports HD" catchup="default" catchup-source="http://example.com/catchup?utc={utc}&utcend={utcend}" catchup-days="7" group-title="Sports",Sports HD
http://streaming.example.com/sports.m3u8Full Advanced Playlist Example
This example combines all the advanced tags into a real-world professional IPTV playlist:
#EXTM3U x-tvg-url="http://epg.example.com/guide.xml"
#EXTINF:-1 tvg-id="bbc1.uk" tvg-name="BBC One" tvg-logo="https://example.com/bbc1.png" tvg-language="English" tvg-country="UK" tvg-shift="0" group-title="UK | News",BBC One HD
http://streaming.example.com/bbc1.m3u8
#EXTGRP:Sports
#EXTINF:-1 tvg-id="sky.sports.main" tvg-name="Sky Sports Main Event" tvg-logo="https://example.com/sky.png" group-title="Sports",Sky Sports Main Event HD
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
#EXTVLCOPT:http-referrer=https://example.com
http://streaming.example.com/sky-sports.tsValidate your advanced M3U playlist
After adding advanced tags, run your playlist through the validator to ensure proper syntax and no broken attributes.
What are the most important M3U tags for IPTV?
For IPTV playlists, the essential tags are: #EXTM3U (file header), #EXTINF with tvg-id, tvg-name, tvg-logo, and group-title attributes. Advanced users also use tvg-language, tvg-country, and EXTVLCOPT for stream-specific configuration.
What does EXTGRP do in M3U?
#EXTGRP is an alternative way to define channel groups in M3U playlists. It works like group-title but as a standalone tag rather than an attribute. Some older IPTV players prefer EXTGRP for grouping channels into categories.
What is EXTVLCOPT in M3U?
#EXTVLCOPT passes VLC-specific options to the player. Common uses include setting custom HTTP user agents and HTTP referrers required by some IPTV servers for stream authentication.
What is KODIPROP in M3U?
#KODIPROP passes Kodi-specific properties to the player, primarily for DRM configuration. Common properties include inputstream.adaptive.license_type and inputstream.adaptive.manifest_type for encrypted streams.
Can I add custom metadata to M3U channels?
Yes. You can add any custom attributes to EXTINF lines — they won't break compatibility with standard players (unknown attributes are ignored). This is useful for adding custom IDs, categories, or metadata for your own playlist management scripts.
What is the tvg-id attribute used for?
tvg-id links a channel to an EPG (Electronic Program Guide) data source. The tvg-id value must exactly match the channel ID in your XMLTV EPG file. Without a matching tvg-id, IPTV apps can't display program schedules for that channel.
What is the difference between tvg-name and the display name in EXTINF?
tvg-name is used internally by IPTV apps for EPG matching and searching. The display name (after the comma in EXTINF) is what users see in the channel list. They can differ — e.g., tvg-name='BBC ONE' for EPG matching while display name is 'BBC One HD'.
Conclusion
Advanced M3U tags transform basic channel lists into professional IPTV playlists with rich EPG data, channel logos, organized categories, and player-specific configuration. The most impactful additions are correct tvg-idvalues for EPG matching, tvg-logo URLs for visual channel identification, and group-titlecategories for organized navigation.
For power users, #EXTVLCOPT enables stream authentication that many servers require, while#KODIPROP unlocks DRM-protected content in Kodi. Catchup TV tags let users watch past programs when their provider supports archive streaming. Combining these tags correctly produces playlists that rival commercial IPTV management systems.