A simple m3u
playlist editor, similar to xteve or threadfin, with epg
management.
Tip
Has been tested on large playlist (https://github.com/iptv-org/iptv), with up to 10000+ channels. Note that larger lists will take longer to sync (it takes aproximately 1s for every 1000 channels.).
Feel free to open an issue on this repo, you can also join our Discord server to ask questions and get help, help others, suggest new ideas, and offer suggestions for improvements! 🎉
- Initialization and M3U Playlist(s) creation:
- The service loads M3U playlist from specified URL, downloading and processing it.
- Each playlist will have a unique URL to output enabled channels and any customizations
- Only enabled channels will be returned.
- Initialization and XML EPG(s) creation:
- The service loads EPG from specified URL, or from the uploaded file, downloading and processing it. File should conform to the XMLTV standard.
- Each playlist will have a unique URL to output enabled channels EPG data
- Only enabled channels, that have been mapped to an EPG, will be returned.
- Automatic playlist(s) and epg(s) syncing:
- Playlist and EPG syncs happens upon creation, and every 24hr after. The schedule can be adjusted after playlist is created. Auto sync can also be disabled to prevent this (an initial sync will still happen upon creation).
- (Optionally) custom and merged playlists can be created:
- Merged playlists will allow you to create a new playlist from existing playslist, allowing you to combine multiple playlists into one.
- Custom playlists allow you to select specific channels from existing playslist to compose a new playlist.
- HTTP endpoints:
- The app can be accessed here: http://localhost:36400
- LOGIN INFO: user = admin, password = admin
- Each playlist will have a unique URL, in the format:
http://localhost:36400/9dfbc010-a809-4a31-801d-ca2a34030966/playlist.m3u
- Each playlist will also have a unique EPG URL, in a similar format:
http://localhost:36400/9dfbc010-a809-4a31-801d-ca2a34030966/epg.xml
- NOTE: Only enabled channels that have been mapped to an EPG will be included.
- The app can be accessed here: http://localhost:36400
- Customization:
- Enable/disable auto syncing of Playlists and EPGs.
- Modify M3U channel numbers, logos, and offset. Channels are opt-in, so all channels will be disabled by default and need to be enabled based on your preference. This is to prevent channel additions automatically populating your playlist.
- Docker installed on your system.
- M3U URLs containing a playlist of video streams.
- (Optionally) EPG URLs/files containing valid XMLTV data.
Use the following compose example to get up and running.
version: "3.8"
services:
m3u-editor:
image: sparkison/m3u-editor:latest
container_name: m3u-editor
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /apps/m3ueditor/config:/var/www/config
restart: unless-stopped
ports:
- 36400:36400 # app
- 36800:36800 # websockets/broadcasting
networks: {}
Access via: http://localhost:36400 (user = admin, password = admin)
To ensure the data is saved across builds, link an empty volume to: /var/www/config
within the container. This is where the env
file will be stored, along with the sqlite database and the application log files.
Note
Once built, head to the env
file with your linked config directory and make sure the REVERB_HOST
is properly set to the machine IP (if not localhost
) for websockets and broadcasting to work correctly. This is not required for the app to function, but you will not receive in-app notifications without it. You will need to restart the container after changing this.
Using the MediaFlow Proxy as an example.
version: "3.3"
services:
mediaflow-proxy:
image: mhdzumair/mediaflow-proxy
environment:
- API_PASSWORD=YOUR_PROXY_API_PASSWORD
ports:
- 8888:8888
networks: {}
Your proxied m3u playlist can then be access via: http://localhost:8888/proxy/hls/manifest.m3u8?d=http://localhost:36400/YOUR_M3U_EDITOR_PLAYLIST_UID/playlist.m3u&api_password=YOUR_PROXY_API_PASSWORD
More setup information can be found on the MediaFlow Proxy page.
- 💻 Apple Silicon (M-series) and other non-x86_64 platforms will need to add the
platform
(platform: linux/x86_64
) parameter to the compose file to support x86_64 architecture - for example:
services:
m3u-editor:
platform: linux/x86_64
image: sparkison/m3u-editor:latest
...