EpgImporter / e2m3u2bouquet 0.7.6

We’ve had some reports of issues with epgimport .

Initial investigation suggest that a recent epgimport update will stop it from working with any panel’s epg feed.

We’ll investigate further but in the meantime we suggest not updating to the latest epgimport version.


This issue is caused by the latest version of epgimport checking for a ‘LastUpdate.log’ file on the server that supplies the xmltv epg feed. If the file doesn’t exist or the date within is older than 2 days then the server is considered invalid and not used. Unfortunately this file is used by Rytec feed servers but not IPTV panels.

We’ve released v0.7.6 which sets a flag in the epgimport sources to ignore this check however this flag has only recently been added to epgimport and at the moment only works on the OpenPLI branch and not the OE-Alliance fork. Hopefully the OE-Alliance fork will merge this feature soon.


New versions of epgimport have broken the epg for IPTV panels. You should avoid updating epgimport for now, or revert to a previous version.

Updating to v0.7.6 of this script/plugin should fix the issue on OpenPli and hopefully future OE-Alliance images.

Provider Managed Updates

This post will only be relevant to you if you are a provider or manage multiple boxes.

As mentioned on the plugin homepage the new plugin has a mechanism to update provider details (i.e. name, host name, port) across multiple boxes. We’ve received a number of enquiries on how providers can provide automated updates and one line installs. This post aims to address these questions.

Create Provider Update File

The provider update file is a text file that has your provider details. The plugin will automatically check this file every 6 hours and apply any updates. The text file should follow the format ‘Name,M3UURL,EPGURL’  e.g.


Note: USERNAME & PASSWORD should be left as the generic placeholders

Upload the provider.txt file to an accessible hosting space e.g. your panel or some cloud service like Dropbox

Create Generic Provider Config

Create a generic config file with your provider URLs e.g.

 E2m3u2bouquet supplier config file
 Add as many suppliers as required
 this config file will be used and the relevant bouquets set up for all suppliers entered
 0 = No/False
 1 = Yes/True
 For elements with <![CDATA[]] enter value between empty brackets e.g. <![CDATA[mypassword]]>
 <name>SULS</name><!-- Supplier Name -->
 <enabled>1</enabled><!-- Enable or disable the supplier (0 or 1) -->
 <m3uurl><![CDATA[http://www.suls.co.uk/get.php?username=USERNAME&password=PASSWORD&type=m3u_plus&output=ts]]></m3uurl><!-- Extended M3U url --> 
 <epgurl><![CDATA[http://www.suls.co.uk/xmltv.php?username=USERNAME&password=PASSWORD]]></epgurl><!-- XMLTV EPG url -->
 <username><![CDATA[uuuuu]]></username><!-- (Optional) will replace USERNAME placeholder in urls -->
 <password><![CDATA[ppppp]]></password><!-- (Optional) will replace PASSWORD placeholder in urls -->
 <providerupdate><![CDATA[https://www.dropbox.com/s/<fileid>/provider.txt?dl=1]]></providerupdate><!-- (Optional) Provider update url -->
 <iptvtypes>0</iptvtypes><!-- Change all TV streams to IPTV type (0 or 1) -->
 <streamtypetv></streamtypetv><!-- (Optional) Custom TV stream type (e.g. 1, 4097, 5001 or 5002 -->
 <streamtypevod></streamtypevod><!-- (Optional) Custom VOD stream type (e.g. 4097, 5001 or 5002 -->
 <multivod>0</multivod><!-- Split VOD into seperate categories (0 or 1) -->
 <allbouquet>0</allbouquet><!-- Create all channels bouquet (0 or 1) -->
 <picons>0</picons><!-- Automatically download Picons (0 or 1) -->
 <xcludesref>1</xcludesref><!-- Disable service ref overriding from override.xml file (0 or 1) -->
 <bouqueturl><![CDATA[]]></bouqueturl><!-- (Optional) url to download providers bouquet - to map custom service references -->
 <bouquetdownload>0</bouquetdownload><!-- Download providers bouquet (uses default url) must have username and password set above - to map custom service references -->
 <bouquettop>1</bouquettop><!-- Place IPTV bouquets at top (0 or 1) -->
  • The providerupdate url https://www.dropbox.com/s/<fileid>/provider.txt?dl=1 should be set to the URL of your provider update file created in the previous step
  • Again USERNAME & PASSWORD should be left as the generic placeholders
  • The username string ‘uuuuu’ and password string ‘ppppp’ should be left as these values. They will get replaced with the individuals details within the install command below

Upload the config.xml file to an accessible hosting space e.g. your panel or some cloud service like Dropbox

One line install script

The version below will only copy the config file if the user doesn’t already have one

wget -O /tmp/config.xml "https://www.dropbox.com/s/<fileid>/config.xml?dl=1" && sed -i 's/uuuuu/myusername'/g /tmp/config.xml && sed -i 's/ppppp/mypassword'/g /tmp/config.xml && opkg install --force-reinstall "https://github.com/su1s/e2m3u2bouquet/releases/download/v0.7.6/enigma2-plugin-extensions-e2m3u2bouquet_0.7.6_all.ipk" && reboot
  • The config file URL https://www.dropbox.com/s/<fileid>/config.xml?dl=1 should be set to the URL of your config file
  • The text myusername & mypassword in the command should be replaced with the individuals users username & password. You should do this on a server script (see below for a JavaScript generator) or instruct the user to make the change.
  • The command above references the 0.7.6 version of the plugin, this should be updated to the current release version

The version below will overwrite the config file even if the user already has one (not recommended)

rm -f /etc/enigma2/e2m3u2bouquet/config.xml && wget -O /tmp/config.xml "https://www.dropbox.com/s/<fileid>/config.xml?dl=1" && sed -i 's/uuuuu/myusername'/g /tmp/config.xml && sed -i 's/ppppp/mypassword'/g /tmp/config.xml && opkg install --force-reinstall "https://github.com/su1s/e2m3u2bouquet/releases/download/v0.7.6/enigma2-plugin-extensions-e2m3u2bouquet_0.7.6_all.ipk" && reboot
  • The config file url https://www.dropbox.com/s/<fileid>/config.xml?dl=1 should be set to the URL of your config file
  • The text myusername & mypassword in the command should be replaced with the individuals users username & password. You should do this on a server script or instruct the user to make the change.
  • The command above references the 0.7.6 version of the plugin, this should be updated to the current release version

Below is an example of a simple JavaScript generator page that asks for the users username & password and then outputs the custom install line. The config.xml URL in the line towards the bottom starting ‘var installcmd’ will need edited to the correct config.xml URL and as it currently references the 0.7.6 version of the plugin, this should be updated to the current release version

<!doctype html>
<html lang="en">
 <title>Generator Demo</title>
 h1 {
 font-size: 1.5em
 input, button {
 min-width: 72px;
 min-height: 36px;
 border: 1px solid grey;
 padding: 3px;
 label, input, button {
 display: block;
 input {
 margin-bottom: 1em;
 pre {
 background: #f1f1f1;
 border: 1px solid #ccc;
 overflow: auto;
 padding: 1em;
 white-space: pre-wrap;
 word-break: break-all;
 word-wrap: break-word;
 .hidden {
 display: none;
 <h1>Generator Demo</h1>
 <label for="username">Username</label>
 <input id="username" placeholder="Enter Username">
 <label for="password">Password</label>
 <input id="password" placeholder="Enter Password"> 
 <button id="generate">Generate</button>
 <pre id="output" class="hidden"></pre>
 <script type="text/javascript"> 
 function onClick() { 
 var username = document.getElementById('username').value;
 var password = document.getElementById('password').value;
 var output = document.getElementById('output');
 if (inputsAreEmpty(username, password)) {
 output.textContent = 'Error: need to enter username and password';
 var displaycmd = installcmd.replace('myusername', username).replace('mypassword', password); 
 output.textContent = displaycmd; 
 function inputsAreEmpty(username, password) {
 if (username === '' || password === '') {
 return true;
 } else {
 return false;
 var installcmd = "wget -O /tmp/config.xml \"https://www.dropbox.com/s/<fileid>/config.xml?dl=1\" && sed -i 's/uuuuu/myusername'/g /tmp/config.xml && sed -i 's/ppppp/mypassword'/g /tmp/config.xml && opkg install --force-reinstall \"https://github.com/su1s/e2m3u2bouquet/releases/download/v0.7.6/enigma2-plugin-extensions-e2m3u2bouquet_0.7.6_all.ipk\" && reboot";
 var button = document.getElementById('generate');
 button.addEventListener('click', onClick);

e2m3u2bouquet 0.7.3


This is a plugin release if you use the script there is no need to upgrade if you are on v0.7.1 or higher

Plugin changes

  • Fix issue with main screen showing no text on some skins
  • Add option to reset bouquets

Please note we will now no longer be maintaining or updating the list of providers that the old plugin used. From v0.7.1 the plugin uses a config file based support and supports any provider.

See the plugin page for details


e2m3u2bouquet 0.7.1


Script changes

  • Make sure comments are xml safe
  • Extract username and password from m3u url if they are not passed in
  • Set services to stream type ‘1’ in epg config so that the epg can be imported if
    serviceapp is overriding stream type ‘4097’ to exteplayer3
  • Minor fixes & tidy
  • Option for custom stream type for TV and VOD
  • Allow https & rtmp services
  • Unicode fixes
  • Url encoding fixes

Plugin changes

  • Multi custom provider support
  • File based setup (values can be edited in an xml file instead
    of entered using the remote)
  • Provider managed update system
  • Fixed time schedule type
  • Option for custom stream type for TV and VOD

Full details on the plugin page

Latest releases here

Community guides here

e2m3u2bouquet 0.7


Updated release today of the script only. This update adds the following functionality to the script

  • Config file based settings
  • Support for multiple providers

If you are a plugin user on 0.6.3 with a single IPTV provider there is no need to upgrade to script version 0.7 (Plugin v0.7 is in the pipe line).

However as probably the largest out standing feature on our list I thought it worth releasing the script alone for those that don’t mind the commandline.

So script release is available here;


Install Guide

Download and extract the e2m3u2bouquet.py file.

FTP it to /etc/enigma2/e2m3u2bouquet on your enigma2 box.

SSH into your enigma box, then;

cd /etc/enigma2/e2m3u2bouquet
chmod 755 e2m3u2bouquet.py

The script on first run will create a config.xml in /etc/enigma2/e2m3u2bouquet and tell you to fill it in.

Edit the config.xml and populate provider details and settings for as many providers as your require, the XML is commented so should be pretty straight forward.

NB: You need to change the supplier name field for the script to know you have updated the file.

nano config.xml
vi config.xml

Or use FTP to transfer the file for editing and replace it.

Then run the script again.


This will create bouquets for all the providers specificed and enabled in the config file.


To automate this use cron.

crontab -e


0 5 * * * /etc/enigma2/e2m3u2bouquet/e2m3u2bouquet.py >> /tmp/e2.log

and press ESC follwed by :wq to exit the cron editor and save the entry. This will update your bouquets at 5am daily.


Any issues / bugs or problems leave a coment.

e2m3u2bouquet 0.6.3


Quick update to cover the changes made in v0.6.2 & v0.6.3

v0.6.2 Changes

  • New versions of epg-importer use categories for sources. The IPTV provider source will now be listed under the ‘IPTV Bouquet Maker – E2m3u2bouquet’

v0.6.3 Changes

  • Some providers are now using Cloudflare (or equivalent service) to restrict access to their service. In some case this resulted in the script/plugin being unable to download the providers playlist. v0.6.3 has a workaround for the issue

Latest releases here

Community guides here

e2m3u2bouquet 0.6.1


Script changes

  • Dedicated config directory ‘/etc/enigma2/e2m3u2bouquet’
  • Pre Python 2.7.9 SSL context workaround
  • Remove delimiter options (command arguments -d1, -d2, -d3, -d4)
  • Option to place IPTV bouquets at top or bottom ‘-bt’
  • Consistent channel numbering (best results when IPTV bouquets are set to top). Each new IPTV category will start numbering +100 from start of last category

Plugin changes

  • Add /picon option for download path
  • Show last playlist update
  • Add override service refs option
  • Add IPTV bouquet position option
  • Add option download providers bouquet (for custom service refs)


The delimiter command arguments have been removed (-d1, -d2, -d3, -d4). Due to improvement in the m3u parsing these are no longer needed

The script and plugin will now save e2m3u2bouquet-sort-current.xml and look for e2m3u2bouquet-sort-override.xml in the new config directory ‘/etc/enigma2/e2m3u2bouquet’. If the override file can’t be found in the config folder it will also check in the current working directory ‘/hoem/root’ in most cases.

Plugin Potential Issues

Custom sorting – If you have an override.xml file then when the bouquet update is happening you may see the spinner graphic and the box ui may be unresponsive for around a minute

Downloading Picons (especially on first run) takes a long time. Your box will show the spinner graphic and the ui will be unresponsive  while this happening.


Latest releases here

Community guides here

FAB URL Changes

Fab Urls

Changes to the new Fab new urls were made by Doug last night (12/08/2017)

However due to changes in the way we handle providers in later versions of the script you need to be on version >= 0.6 of the script or plugin to receive these changes.

See here or here to download the latest version.

Also please note FAB continue to be blocked by the current court directives despite the change in URLs so do not expect service during EPL matches

If you’re looking to setup a VPN on your enigma2 box there’s a guide available on the PIA website here