e2m3u2bouquet v0.8 final / v0.8.1

v0.8 final

v0.8 Final has been released.

New features:-

  • When providers bouquet is downloaded (-b or -bd option) now uses full service references instead of just the epg relevant part in case it’s used for picon naming
  • Better multi provider handler e.g. if there is an issue with one provider it won’t stop the script processing others
  • If vod categories are out of order in the playlist, group together
  • Fix file naming issues with non alphanumeric characters
  • Much faster when using an override file ūüôā
  • Don’t retry failed picon downloads
  • Option to add placeholder channel in override file to control channel numbering
  • Allow channels to be moved between categories use categoryOverride in the override file
  • All custom categories use customCategory=”true” in the override file
  • Add provider managed update support to script same functionality as shown here
  • [plugin] Improved performance
  • [plugin] New ‘Attempt Epg Import’ option. If enabled this will attempt to automatically import the epg after an update, so no need to configure or start an import in Epg Importer. This setting is in ‘configure’ and will default to ‘disabled’ on existing installs

Custom Channel ordering changes

Placeholder services
These will allow you to  have more control over channel numbering. In the override file add a placeholder as follows:-

<channel name="placeholder" category="e.g. Sports" />

Move channels between categories
The channels now have a new attribute categoryOverride which can be used to move a channel to a different category


<channel name="BBC ONE" ‚Ķ category="ENTERTAINMENT" categoryOverride="SULS ENTERTAINMENT" ‚Ķ />

Custom categories
You can now have you own custom categories by creating a new category and setting customCategory to true


<category name="SULS ENTERTAINMENT" ‚Ķ customCategory="true"/>

See the Custom Mapping page for full detail.

Update: v0.8.1 that fixes a bug in the plugin has been released

Latest releases here

Live TV streams showing as vod / e2m3u2bouquet 0.7.7

We’ve been made aware that some provider updates have caused the script/plugin to show live stream as vod (which means no epg is listed for them)

If you’re you using ‘output=ts’ in your m3u url please try¬†‘output=m3u8’ as a temporary workaround.

There’s an updated release (untested) here¬†if anyone is willing to test and give feedback.


v0.7.7 has been released which should fix this issue.

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 -->
 <providerhideurls>1</providerhideurls><!-- (Optional) Hide Provider urls in plugin -->
 <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.8.5/enigma2-plugin-extensions-e2m3u2bouquet_0.8.5_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.8.5 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.8.5/enigma2-plugin-extensions-e2m3u2bouquet_0.8.5_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.8.5 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.8.5 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.8.5/enigma2-plugin-extensions-e2m3u2bouquet_0.8.5_all.ipk\" && reboot";
 var button = document.getElementById('generate');
 button.addEventListener('click', onClick);

Update v0.8.5
v0.85 has a new parameter in the config.xml file <providerhideurls> – if this is set to 1 provider urls will not be shown in the plugin.

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.