EPG Planer – User Manual
Planning, approving and publishing the programme guide
← Back to the planner

EPG Planer

The EPG Planer is where your team builds the channel's programme schedule: you keep a library of shows, place broadcasts in a weekly grid, and publish the result as XMLTV, JSON and iCalendar feeds for cable networks, websites and apps.

01Getting started

  1. Log in with the username and initial password you received from your administrator. You can switch the language (DE / EN / IT / FR) at the top of the login window.
  2. Set your own password. On the first login with an initial password you are asked to choose a personal one (at least 8 characters).
  3. Find your way around. The planner opens on the current week, scrolled to the current time.
LanguageThe interface is available in German, English, Italian and French. Your choice is saved in your account under ⚙ Settings → Users and follows you to every device. This manual uses the English labels.

02The screen

AreaWhat it shows
Top barChannel name and logo, the programme On air right now with remaining time and progress, the Next programme and the clock.
ToolbarToday, previous / next, date picker, Day / Week view, the feed links XMLTV JSON ICS, reload ⟳ and + Schedule.
Left sidebarTab Schedule: the day list on top and the show library (Shows) below, both visible at once. Drag the divider between them to change their size; double-click it to reset. Tab Approvals: pending changes.
GridThe week or day, 00:00–24:00. Every block is one broadcast; the coloured edge is the show colour. Day headers show the number of shows and how much of the day is covered.
Editor (right)Opens when you select or create a broadcast.
Status barConnection state, number of broadcasts, shortcuts, your name and role, ⚙ Settings, Help and Log out.

03Roles & approval

Editor

Changes need approval

Can plan and edit everything. Changes are saved, but appear in the feeds only after an admin approves them.

Editor · no approval needed

Publishes directly

Like an editor, but changes go live immediately. Cannot manage users, settings or approve others.

Admin

Full control

Changes go live immediately. Approves or rejects editors' changes, manages users, channel data, feeds and tokens.

Everyone always sees the working version in the planner. The feeds only ever contain the approved version. Items waiting for approval are marked with an amber dot ● and a dashed outline.

04Shows (library)

A show is the reusable template: title and default details. A broadcast is one airing of a show at a specific time. Changing a show updates all its broadcasts.

Create or edit a show

In the Shows list below the day programme, click + New, or click an existing show. The show opens in a window:

FieldPurpose
TitleName of the show. Must be unique.
SubtitleA fixed second title line, e.g. "The Sunday crime drama". This is not closed captions.
Find genreType a keyword in any language – e.g. "Krimi", "Tatort", "Schlager", "Jodel", "Kochen", "Wetter" or "cuisine" – and the matching genre and subgenre are suggested with their code. Enter takes the best match, ↑ ↓ choose another. Small typos are tolerated, and several words narrow the search ("film komödie"). Searching alone does not change the show; only picking a result fills Genre and Subgenre.
Genre (DVB)One of the 11 standard DVB main genres, shown with the first digit of its code (e.g. 0x6_ · Music / Dance). Cable networks and receivers use it for genre colours and filters.
Subgenre (DVB)Refines the genre and completes the two-digit DVB code, e.g. 0x63 · Folk / Traditional music or 0x11 · Detective / Thriller. Leave it on …0 · general if nothing fits. Available once a genre is chosen. For Special (0xB_) the subgenre is the actual characteristic, e.g. 0xB3 · Live broadcast.
Season (default)Current season. Broadcasts use it unless they have their own season.
CategoryYour own free term, e.g. "Schlager", "Volksmusik" or "Magazin". Optional and finer than the DVB genre: shown by receivers as an extra tag and useful for filters on websites and apps. Earlier categories are suggested. Leave it empty if the genre is precise enough.
Duration minDefault length when the show is scheduled.
ColourColour of the show in the grid.
Explicit contentSmall checkbox below the description. Adults only. Marked in the feeds as explicit and shown with a red E in the library and day programme.
Description, ImageDefault synopsis and image for all broadcasts.

A brand-new title typed into a broadcast's Show field also creates a show automatically when you save.

Genre, subgenre or category?Genre and subgenre are the standard codes the partners' systems understand; they are translated automatically into all channel languages in the feeds. The category is your own wording and is passed on as written. Example for a Schlager channel: hit parade = 0x61 · Rock / Pop, category "Schlager"; folk music concert = 0x63 · Folk / Traditional music, category "Volksmusik".

Archive or delete

05Scheduling broadcasts

There are several ways to put a broadcast into the plan:

HowResult
Drag a show from the Shows list into the gridScheduled immediately at the drop position with its default duration.
Drag in an empty area of the gridOpens a new broadcast for exactly the dragged time.
Double-click an empty areaNew 30-minute broadcast at that time.
+ Schedule in the toolbarNew broadcast right after the last one of the selected day.
Schedule in a show's windowSame, already filled with that show.
+ fill on a gap in the day listNew broadcast that fills the gap exactly.

Move a broadcast by dragging it, also to another day. Change its length by dragging its bottom edge. Times snap to your grid (see Grid).

Editing a broadcast

Click a broadcast in the grid or in the day list. The editor on the right shows:

Save (Ctrl+S) stores the broadcast. Duplicate creates a copy directly after it, with the episode number increased by one. Delete asks for confirmation (click twice).

Recurring series

Set Recurrence to turn a broadcast into a series:

OptionSettings
NoneSingle broadcast.
DailyEvery day, or every n days.
Monday – FridayEvery working day.
WeeklySelected weekdays, every n weeks.

Optionally set Until to end the series. Series broadcasts show ↻.

When you change, move or delete a broadcast that belongs to a series, you are asked what the change applies to:

ChoiceEffect
This broadcast onlyOnly this airing changes; the rest of the series stays. The editor notes "this broadcast is customised".
This and all followingThe series is split: earlier broadcasts stay as they were, this one and all later ones change.
All broadcasts in the seriesThe whole series changes, including past airings.
If you change the recurrence itself (e.g. from weekly to daily), "This broadcast only" is not available.

Images

Click the image area, drag a file onto it or paste with Ctrl+V. JPG, PNG, WebP and GIF are accepted.

Automatic formatEvery uploaded image is cropped from the centre to 16:9 and saved as 1920×1080 JPEG (quality 80), the format EPG partners expect. Image addresses typed in by hand are used as they are.

A broadcast without its own image uses the show's image; it is shown faded with the label from show.

06Day programme, gaps & overlaps

The Schedule tab lists the selected day in order. Click a day header in the grid to select another day.

Past broadcasts are dimmed; the one on air is highlighted in red.

07Approvals

Changes by editors who need approval are collected in the Approvals tab. The badge shows how many are open.

When an admin (or an editor without approval) edits an item that already has a pending change, that pending change is published together with the edit.

08EPG output (feeds)

The links XMLTV JSON ICS in the toolbar open the current feeds. While you are logged in they work without a token.

Partners receive their own link with an access token (see EPG output settings). Send them the Feed Guide; it explains the formats, fields and date filters such as ?date=2026-10-20.

Only approved data appears in the feeds.

09Settings

Open ⚙ Settings in the status bar. Editors see Grid and Users; admins also see EPG output.

Grid

Choose the snap step from 5 to 30 minutes. It applies to dragging, resizing, double-clicking and scheduling, and is saved for your account only. Times typed into the editor can still be any 5-minute step.

EPG output Admin

SectionSettings
Channel
  • Logo: PNG or SVG, max. 2 MB. SVG files are cleaned of scripts automatically.
  • Name.
  • Channel ID: the XMLTV ID partners use to map your EPG. Only change it after telling them.
  • Main language with region (e.g. de-CH) and additional languages. Genre names in the feeds are translated into these languages (German, French and Italian are available).
  • Website, phone and e-mail.
Feed periodDays back (0–31) and days ahead (1–31) in the default feed. Shows with broadcasts in this period or later cannot be deleted.
PublicOn: anyone with the link can read the feeds. Off: a token or login is required.
Access tokensCreate one token per recipient (e.g. "Cable network", "Website"), then copy its XMLTV / JSON / ICS link or open it with test ↗. Revoke blocks that recipient immediately without affecting others.

Click Save after changing channel data or the feed period. The logo is saved as soon as it is uploaded.

Users

Your account (everyone): choose the interface language and Change password.

Team Admin:

10Keyboard & mouse

ActionShortcut
Save broadcast or showCtrl+S (⌘+S on Mac)
Close editor or windowEsc
Delete selected broadcastDel or Backspace (not while typing in a field)
New broadcastDouble-click in the grid, or drag across an empty area
Move / change lengthDrag the block / drag its bottom edge
Paste imageCtrl+V while the editor or show window is open

Text pasted from websites or Word is cleaned automatically: no HTML, no hidden characters.

11For administrators

Security & going live

Built in – nothing to configure:

Checklist before going public:

  1. HTTPS with a valid certificate (e.g. Let's Encrypt).
  2. Data folder outside the web root – the safest option, independent of the web server. In config.php set e.g. 'data_dir' => '/var/epg-data' (writable by PHP). If it must stay in data/: on Apache, AllowOverride must allow the shipped data/.htaccess; on nginx add the block below.
  3. Change initial_password, log in, set your own password; keep reset_admin on false.
  4. Delete demo.php if you do not need demo data.
  5. After login, check that no red Security notice appears.
# nginx: data folder blocked, security headers also for the static pages
location ^~ /data/ { deny all; return 404; }
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header Strict-Transport-Security "max-age=31536000" always;   # only with HTTPS

Public demo

For a public demo, run a separate installation (e.g. on demo.example.com) and set 'sandbox' => true in its config.php. Every visitor then automatically gets:

After sandbox_ttl (default 1 hour) the project and its images are deleted; the page then starts a new, empty one. Limits against abuse, all in config.php:

SettingDefaultMeaning
sandbox_ttl3600Lifetime of a project in seconds (minimum 300).
sandbox_max100Projects at the same time; further visitors see "Demo is busy".
sandbox_per_ip5Projects at the same time per visitor address.
sandbox_uploads30Images per project (demo images are shared and do not count).

12Troubleshooting

ProblemSolution
New features or fields are missing after an updateThe browser shows cached files. Reload with Ctrl+F5 (Mac: ⌘+Shift+R).
"Password is correct, but the login is not kept"Allow cookies for this site.
A change does not appear in the feedCheck the Approvals tab. Changes by editors appear only after approval.
A show cannot be deletedIt still has broadcasts in the EPG period or later. Archive it, or delete those broadcasts first.
Feed link returns "Not Found"Short links are not active on the server. Open ⚙ Settings → EPG output once; the planner then switches to the long form automatically.
Feed returns "Zugriff verweigert" (access denied)The token is missing, wrong or revoked, and the feed is not public.
"Too many failed attempts – please try again in n minutes"The login lock is active for this username and address. Wait the stated time; other users are not affected.
"Please change initial_password in config.php first"First start or reset_admin with the shipped default password. Set your own initial_password in config.php.
"Request rejected" when savingThe request did not come from the planner page itself, e.g. an old cached app.js. Reload with Ctrl+F5. If the planner runs behind a proxy, it must pass the original Host header.
Red Security noticeFollow the text in the notice; see Security & going live.
Error "PHP-Erweiterung pdo_sqlite fehlt"The database extension is not active on the server. Enable pdo_sqlite in the PHP settings or ask your hosting provider.
Subgenre list is greyed outChoose a genre first; the subgenres depend on it.
Status bar shows ErrorThe message next to it names the cause (e.g. folder not writable). Click ⟳ to retry.
EPG Planer · User Manual · Interface in DE / EN / IT / FR · Feed documentation for partners: Feed Guide