Skip to the content.
Language : Francais | English

Complete User Guide — FluffRadio Admin Panel

This guide describes absolutely everything you can see and do in the FluffRadio admin panel (programmation.fluffradio.com), field by field, button by button, message by message. The goal: you should never need to ask “how do I do this?” — if a question crosses your mind while reading, a chapter is missing; tell us.

Table of contents

  1. Before you start: key concepts
  2. Signing in and out
  3. The structure shared by every page
  4. Who has access to what (roles and groups)
  5. Home
  6. Media Library (Médiathèque)
  7. Uploaded Audio Files (Fichiers audio téléchargés)
  8. Playlists
  9. Schedule (Programmations)
  10. On-air Assets (Habillage d’antenne)
  11. Music Validation (Validation musiques)
  12. Streamers (animators & live control)
  13. Debug API
  14. Cache (request log)
  15. Glossary
  16. FAQ / Troubleshooting

1. Before you start: key concepts

A few notions come up everywhere in the tool. Understanding them once saves a lot of questions later. Note: the interface itself is entirely in French; this guide keeps the exact French labels next to their English meaning so you can match what you see on screen.


2. Signing in and out

Signing in

  1. Open programmation.fluffradio.com. The public home page appears.
  2. Click “Se connecter” (“Log in”).
  3. You’re redirected to the secure sign-in page (Cognito, FluffRadio’s identity service). Enter your username and password.
  4. Once signed in, you’re automatically taken to /dashboard (the panel’s home page).

Special cases when signing in

Signing out

Click “Déconnexion” (“Log out”), visible in the top-right of the dashboard bar on every page. You’re immediately signed out and sent back to the sign-in page.


3. The structure shared by every page

Once signed in, every dashboard page (/dashboard/...) shares the exact same layout:

A breadcrumb / page title at the top of the content area always reminds you where you are.


4. Who has access to what (roles and groups)

Your account belongs to one or more groups, assigned by an administrator. These groups determine what you see:

Group (internal name) Name used in this guide
admins Administrators — access to everything, no exception
AccesMediatheque Media Library Access
GestionPlaylist Playlist Management
ProgrammeursRadio Radio Programmers
StaffRadio Radio Staff (base role, given to everyone)
UploaderRadio Radio Uploader
Streamers Streamers
AccesAuxStatus Status Access

Full access table by page

Page Groups with access
Home Everyone (Radio Staff is enough)
Media Library Administrators, Media Library Access
Uploaded Audio Files Administrators, Radio Uploader
Playlists Administrators, Playlist Management
Schedule Administrators, Radio Programmers
On-air Assets Administrators, Radio Programmers, Streamers
Music Validation Administrators only
Streamers Administrators, Streamers
Debug API Administrators only
Cache Administrators only

If your account only has the base role (Radio Staff, no other group), the Home page shows only a neutral welcome message, with no widget or control at all — that’s expected, not a loading error.

A special group, “Status Access”, grants only the right to see the streaming server’s status panel on the home page (version, memory, current live session…) read-only, without the other widgets or the admin-only Skip control.

Finer checks exist inside some pages beyond page-level access: for instance on “Uploaded Audio Files”, a Radio Uploader account (non-admin) can upload but will never see the Edit/Delete buttons, nor the category picker — these controls are reserved to administrators and simply don’t appear on screen (they’re not greyed out with an explanation, they’re absent).


5. Home

Route: /dashboard.

If your account only has the base role

You see only: “Bienvenue sur FluffRadio. Aucune section supplémentaire n’est associée à votre compte.” (“Welcome to FluffRadio. No additional section is associated with your account.”) Nothing else to do on this page.

If your account has a fuller role

You see, in this order:

1. A grid of shortcut cards (one per area):

2. The streaming server status panel (also visible to the “Status Access” group) — see the detailed description in chapter 12 (“AwooStatusPanel”): the server’s version and uptime, live status, the currently playing track, a chart of memory usage over the last 5 minutes, and (administrators only) a “Passer” (“Skip”) button to skip the current automatic track.

3. An explicit banner: “Section legacy (Icecast/Liquidsoap) — nécessite ICECAST_STATUS_URL / LIQUIDSOAP_STATUS_URL, non configurées actuellement.” (“Legacy section (Icecast/Liquidsoap) — requires ICECAST_STATUS_URL / LIQUIDSOAP_STATUS_URL, not currently configured.”) — this tells you the section below shows fallback/simulated data, not real statistics (the real streaming status is the panel above, not this one).

4. The “Streaming Manager (Icecast + Liquidsoap)” panel (legacy, safe to ignore for everyday use):

In short: to know the real broadcast status, look at the top panel (AwooStatusPanel/LIVE STREAM); the bottom block is an older technical dashboard not wired to the current infrastructure.


6. Media Library (Médiathèque)

Route: /dashboard/mediatheque. Access: Administrators, Media Library Access.

This page is for browsing and listening only to the already-validated music catalog — you can’t upload or edit anything here (for that, see “Uploaded Audio Files” and “Music Validation”).

What you see

What you can’t do here

Upload a file, edit metadata, delete a track: those actions happen from “Uploaded Audio Files” (for admins and Radio Uploader) or “Music Validation” (admins).


7. Uploaded Audio Files (Fichiers audio téléchargés)

Route: /dashboard/fichiers-audio. Access: Administrators, Radio Uploader.

This page has two parts: an upload block at the top, and the catalog list below.

7.1 Uploading one or more files

Step 1 — select files. A drop zone reading “Déposer des fichiers audio ici ou cliquer pour sélectionner” (“Drop audio files here or click to select”), with the note “Sélection multiple · MP3, WAV, OGG, M4A, vidéo (podcasts) · max 25 fichiers” (“Multiple selection · MP3, WAV, OGG, M4A, video (podcasts) · max 25 files”). You can:

A counter at the bottom of the zone shows how many slots remain (“X/25 fichiers sélectionnés · Y places restantes”), or “Limite atteinte : 25/25 fichiers sélectionnés” (“Limit reached: 25/25 files selected”) if you’re at the max. If you try adding more than the limit: “Limite atteinte : vous ne pouvez pas ajouter plus de 25 fichiers.” (or, if some still go through: “Limite atteinte : seuls les 25 premiers fichiers seront pris en compte.”).

Step 2 — the upload rules (mandatory, once per browser). The very first time you open this page (or as long as you haven’t ticked “remember”), a window opens and blocks the rest of the page while it’s open:

Step 3 — each file’s fields. For every added file, a card appears with:

Step 4 — starting the upload. The “Uploader N fichier(s)” (“Upload N file(s)”) button at the bottom:

Step 5 — after the upload. Once every file has been sent successfully, the queue clears itself automatically and a message appears at the top of the page: “N fichier(s) uploadé(s). Cliquez sur « Actualiser » pour les afficher.” (“N file(s) uploaded. Click « Refresh » to display them.”) — the upload does not automatically refresh the catalog list below, you must explicitly click the “Actualiser” (“Refresh”) button.

“Vider” (“Clear”) button: removes every file currently queued (before sending), without uploading anything.

7.2 Managing the existing catalog

Below the upload block:

7.3 The “Corriger les métadonnées” (Fix metadata) window

Opened via the Edit button (administrators only). Contains:

Validations applied before saving (a red message shows and nothing is sent if any fails):

Important: editing a track’s metadata never changes its validation status — an already-validated track stays validated after an admin edits it (the status is explicitly preserved behind the scenes).

7.4 Possible error messages

Every action on this page (loading, upload, delete, save) can show an explicit error message on failure, in this general form: “[Action] : [session expirée ou non autorisée / accès refusé / introuvable côté serveur / erreur interne du serveur backend] — [detail].” (“[Action]: [session expired or unauthorized / access denied / not found server-side / internal backend server error] — [detail].”) If you see “session expirée ou non autorisée” (“session expired or unauthorized”), sign out then sign back in; for other cases, contact an administrator if the problem persists.


8. Playlists

Route: /dashboard/playlists. Access: Administrators, Playlist Management.

8.1 Screen overview

The screen is split in two: a left column (playlist list) and a main area on the right (content of the selected playlist).

8.2 Left column

8.3 Creating a playlist

+ button → “Nouvelle playlist” (“New playlist”) window:

The created playlist appears immediately in the list, empty (0 tracks).

8.4 Deleting a playlist

Clicking a row’s → confirmation window: “Supprimer « [name] » ?” (“Delete « [name] »?”) with the text “Cette action est irréversible : la playlist et son ordre de pistes seront définitivement supprimés.” (“This action is irreversible: the playlist and its track order will be permanently deleted.”) Annuler (Cancel) / Supprimer (Delete) buttons (shows “Suppression…” — “Deleting…” — while in progress). If the deleted playlist was open on screen, the view reverts to “Aucune playlist sélectionnée” (“No playlist selected”).

8.5 Viewing and editing a playlist’s content

Clicking a playlist in the left list opens it on the right with:

Important point: changes (adding, removing, reordering) are saved automatically about 1 second after your last action (no separate “Save” button to click). If you quickly switch playlists or close the tab right after a change, wait to see “Enregistré” (“Saved”) to be sure it was actually captured.

8.6 Adding tracks to a playlist

”+ Ajouter des musiques” button → a full-screen window opens: “Ajouter des musiques à « [playlist name] »” (“Add tracks to « [playlist name] »”).

Search and filter tools, all combinable:

Selection and adding:

“Terminé (N piste(s))” (“Done (N track(s))”) button at the bottom closes the window (additions are already applied, no separate “confirm” needed).

8.7 Where does a playlist’s author come from?

A playlist’s “author” field fills itself automatically with your email address (derived from your login account) — you never have to type it yourself.


9. Schedule (Programmations)

Route: /dashboard/programmations. Access: Administrators, Radio Programmers.

This is the tool’s most complex screen: it builds the station’s entire broadcast schedule.

9.1 Overview

At the top of the page:

Right below, a live preview:

9.2 The weekly grid

A 7-column (Monday to Sunday) by 24-row (hourly, subdivided by half-hour) grid.

9.3 Creating or editing a slot — every field in detail

Type de créneau (Slot type) — a dropdown with 7 choices, each pre-filling a default priority and determining the fields that follow:

Slot type (French label) Meaning Default priority What you pick next
Playlist Playlist 1 a playlist
Playlist alternée Alternating playlist 1 two or more sources that alternate
Émission — direct Live show 50 an animator
Émission — préenregistrée Pre-recorded show 50 a single file from the “Podcasts” category
Habillage / virgule Jingle/ident 25 a single file from the “Jingles” category
Promotion Ad/Promo 75 a single file from the “Ads” category
VOD / Rediffusion VOD/Rerun 50 a single file from the “VOD” category

Changing the type automatically recomputes the default priority (you can always adjust it afterwards) and clears already-picked content fields if they no longer apply.

Priorité (Priority) — a 0–100 slider, with the current value shown in parentheses and a reminder of the chosen type’s default value. Permanent help text: “Priorité plus haute = passe devant en cas de chevauchement. Deux créneaux actifs de même priorité qui se chevauchent sont refusés à l’enregistrement.” (“Higher priority = takes precedence on overlap. Two active slots at the same priority that overlap are rejected on save.”)

Titre (Title) — text field, required.

Récurrence (Recurrence) — three possible choices:

Jours (Days, recurring only) — Monday-to-Sunday checkboxes, at least one must be checked.

Début (Start) / Fin (End) — two time pickers. Permanent help text: “L’heure de fin est la fenêtre du créneau, pas une coupure : le changement se fait à la fin du morceau en cours.” (“The end time is the slot’s window, not a hard cut: the change happens at the end of the currently playing track.”) — and, for non-live types: “« Max boucles » renseigné = travail dû, rattrapé s’il démarre en retard ; vide = remplissage, abandonné à la fin de la fenêtre.” (“A filled-in « Max loops » = work owed, caught up if it starts late; empty = filler, abandoned at the end of the window.”)

Fields specific to each type:

Description — free multi-line text field, optional.

“Actif” (“Active”) checkbox — unchecked, the slot stays saved but is never broadcast (useful to prepare a slot in advance, or temporarily suspend a show without deleting it).

Buttons at the bottom of the window:

9.4 What blocks confirming a slot (error messages)

Before anything is even sent to the server, clicking “Valider” can show:

9.5 Saving the whole schedule

Clicking “Enregistrer” at the top of the page triggers several checks, in order:

  1. Looking for any same-priority overlap across the entire schedule (not just the slot you just edited) — if a conflict exists anywhere, saving is refused with “Des créneaux actifs de même priorité se chevauchent — le backend les refusera. Donne des priorités distinctes.” (“Active slots at the same priority overlap — the backend will reject them. Give them distinct priorities.”) and a detailed list of conflicting pairs appears below.
  2. Structural validation of the entire document — on a (rare) technical issue: “La programmation ne respecte pas le format attendu — rien n’a été envoyé.” (“The schedule doesn’t match the expected format — nothing was sent.”) with details.
  3. Sending to the server. Possible responses:
    • Success: “Programmation enregistrée. Elle sera prise en compte à l’antenne dans les 30 minutes au plus.” (“Schedule saved. It will be reflected on air within 30 minutes at most.”) — remember this delay well: a saved change is never instant on air, it can take up to half an hour for the streaming server to pick it up.
    • Version conflict (someone else saved in the meantime): “Conflit : la programmation a été modifiée entre-temps (v…). Rechargement…” (“Conflict: the schedule was modified in the meantime (v…). Reloading…”) — the page automatically reloads the latest version; your unsaved changes since that reload are lost, you’ll need to redo them after reloading.
    • Insufficient rights: “Ton compte n’a pas le droit de modifier la programmation.” (“Your account doesn’t have the right to modify the schedule.”)
    • Other error: the message returned by the server, with field-level details if available.

9.6 A message that can appear when the page loads

“N créneau(x) récurrent(s) recalé(s) sur une ancre cohérente (ancien modèle « semaine paire/impaire »). Enregistre pour figer.” (“N recurring slot(s) realigned onto a consistent anchor (old « odd/even week » model). Save to lock it in.”) — this means some older slots, created under a now-abandoned recurrence system, have been automatically reinterpreted in an equivalent way. Click “Enregistrer” to make this reinterpretation permanent; otherwise, it will be recalculated on every page load (harmless as long as you haven’t touched anything, but better to lock it in).

If the schedule can’t be loaded from the server at all: “Programmation indisponible ([detail]) — brouillon local, l’enregistrement échouera.” (“Schedule unavailable ([detail]) — local draft, saving will fail.”) — you can still browse/prepare slots in this state, but nothing can be saved until the server connection is restored.

9.7 The lists at the bottom of the page

A discreet reminder at the bottom of the screen: “Connecté en tant que [your name] — heures affichées en Europe/Paris, converties en UTC à l’enregistrement · version [version number]” (“Signed in as [your name] — times shown in Europe/Paris, converted to UTC on save · version [version number]”).


10. On-air Assets (Habillage d’antenne)

Route: /dashboard/habillage-antenne. Access: Administrators, Radio Programmers, Streamers.

This page lets you browse, listen to, download, and (for administrators) edit every file in the media library outside the main Music upload flow — though it also gives access to the Music category for convenience.

10.1 Screen layout

10.2 Actions per row

10.3 In case of a playback or download issue

If the server returns an unexpected response (JSON or an error page instead of the audio file), the message “Le serveur a renvoyé une réponse inattendue (pas un fichier audio).” (“The server returned an unexpected response — not an audio file.”) appears — this usually signals a server-side technical issue, not a mistake on your part; try again, and if it persists, tell an administrator.

“Connecté en tant que [your name]. Lecture et téléchargement passent par le cache S3 ; rien n’est stocké côté navigateur en dehors du fichier téléchargé.” (“Signed in as [your name]. Playback and download go through the S3 cache; nothing is stored on the browser side beyond the downloaded file.”) — in other words, listening to a file here never saves anything on your computer; only an explicit click on “Télécharger” (Download) actually saves a file to your machine.


11. Music Validation (Validation musiques)

Route: /dashboard/validation-musiques. Access: Administrators only.

This is where only music tracks (the “Musiques” category) pass through for a first review after upload — the other categories (jingles, podcasts, ads, VOD, other) don’t have this step and are usable right after upload.

11.1 General behavior

11.2 Editable fields on each card

Contrary to what you might expect, validation only requires Title and Artist as mandatory fields — the others (album, genre, year, language, SACEM, cue points) can be left empty if you choose to validate without filling them in. Of course, it’s recommended to check/complete them before validating, but the tool doesn’t technically force you to, apart from Title/Artist.

11.3 The two possible actions

11.4 A technical detail worth knowing

Right after validating or rejecting a track, it might briefly reappear in the list if you refresh very quickly (the server’s cache takes a few seconds to update) — the tool protects against this internally by hiding any track already processed during this session, but a full manual page refresh (F5) could briefly bring it back; this isn’t an error, wait a few seconds and refresh again if needed.


12. Streamers (animators & live control)

Route: /dashboard/streamers. Access: Administrators, Streamers.

This page has up to three blocks depending on your role: the animator list (admin), your own profile (if you are yourself an animator), and live control (visible to everyone with access to the page).

12.1 “Animateurs” (Animators) block (administrators only)

A table of every existing animator account, with these columns: Identifiant (Username), Titre à l’antenne (On-air title), Dernier direct (Last live session), Secrets rotés le (Secrets last rotated on). A red warning badge appears in front of the username of any disabled account.

Actions per row:

Note under the table: “La liste ne porte pas les modes / l’état « désactivé » : ils s’affichent en ouvrant la fiche (qui renvoie aussi les secrets).” (“The list doesn’t carry the modes / the « disabled » state: they show up when opening the profile, which also returns the secrets.”)

“Nouvel animateur” (“New animator”) button opens a creation window:

After creating or editing, a banner confirms: “Animateur créé.” (“Animator created.”) or “Animateur mis à jour.” (“Animator updated.”)

12.2 “Ma fiche animateur” (My animator profile) block

Visible to everyone, including administrators (an administrator can be an animator themselves without necessarily having the Streamers group).

12.3 “Direct” (Live) block

Constantly shows (refreshed every 5 seconds):

Start/stop form (visible if you’re an admin, or if you have your own animator profile):

Buttons: Arrêter (Stop, always visible) and Démarrer / armer (Start / arm, visible only if you have the right to act on this animator).

An important technical distinction to know (stated in a footnote):

“SRT : l’ingest ne s’arme jamais en avance — il s’arme automatiquement 10 minutes avant le début du créneau, jamais avant. Rien à cliquer : « Démarrer » ne fait que récupérer l’URL déjà ouverte. RTMP : rien n’est pré-armé, il faut « Démarrer » soi-même. Ne relance pas si la réponse dit « déjà en place ». « connecté » faux juste après un démarrage n’est pas un échec.” (“SRT: the ingest never arms itself early — it arms automatically 10 minutes before the slot starts, never before. Nothing to click: « Start » only retrieves the already-open URL. RTMP: nothing is pre-armed, you have to « Start » it yourself. Don’t re-trigger it if the response says « already in place ». « connected » being false right after a start is not a failure.”)

In plain terms:

12.4 The “Secrets” window

Opened from the key icon (admin list) or from “Ma fiche animateur”.


13. Debug API

Route: /dashboard/debug-api. Access: Administrators only.

A technical tool, meant for support and diagnostics — not for everyday scheduling or editing work.

Only use this page if you know what you’re doing, or under a developer’s guidance — several actions here are genuinely destructive.


14. Cache (request log)

Route: /dashboard/cache. Access: Administrators only.

This page’s menu name (“Cache”) is misleading: it does not show a cache management tool, but a network request log of the application’s own calls.

Typical use: an administrator trying to understand why an action “isn’t saving” can open this page, redo the problematic action elsewhere in another tab, then come back here to see exactly which request was sent and what the server answered.


15. Glossary

Term Meaning
Animator (“animateur”) A technical account carrying the connection credentials to broadcast live (distinct from a panel login account, even though it often shares the same name)
Media library category (“catégorie de médiathèque”) Music / Jingles / Podcasts / Ads / VOD / Other — determines where a file shows up and its required fields
Slot (“créneau”) A schedule entry: day/time, duration, content type, priority
Live / ingest (“direct” / “ingest”) The active technical connection while an animator is broadcasting live
RTMP ingest One of the two supported live-broadcast protocols; credentials come as Server + Stream key
SRT ingest The other supported protocol; arms itself automatically 10 minutes before a scheduled slot
Priority (“priorité”) A 0–100 number that determines which slot wins when times overlap
Fallback (“repli”) The playlist that plays when nothing is scheduled at a given moment
SACEM The French copyright collection society — every music track must carry a reference to its registry
Validated (“validé”) The status of a music track confirmed by an administrator, the only condition for it to be usable in Schedule/Playlists/Media Library
VOD / Rerun (“VOD / Rediffusion”) The media library category for content meant to be replayed (show reruns)

16. FAQ / Troubleshooting

I uploaded a file but I don’t see it in the list. Did you click “Actualiser” (Refresh) after uploading? The list never reloads itself after an upload.

My uploaded track doesn’t show up in Schedule / Playlists / Media Library. A music track must first be validated by an administrator (Music Validation page) before it’s usable elsewhere. This only applies to the Music category — other categories are usable right after upload.

I can’t save my schedule, an “overlap” message appears. Two active slots have the exact same priority and overlap in time. Change one of their priorities, or disable one (uncheck “Actif”).

I saved my schedule but nothing changed on air. A save can take up to 30 minutes before the streaming server picks it up — that’s normal, wait it out.

The “Upload” button stays greyed out. At least one required field is missing on at least one queued file — the exact list of missing fields is shown under each affected file.

I can’t find the button to edit/delete a track. These buttons are only visible to administrator accounts. If your role is plain Radio Uploader, you’ll never see them — that’s not an error.

I just started a live session but it shows “not connected yet”. That’s normal right after starting: the streaming software’s actual connection takes a few seconds. If it persists more than a minute, check your streaming software’s (OBS, etc.) configuration against the credentials shown in the “Secrets” window.

A message says “Ingest already in place” when I try to start. That’s not an error: the connection is already open, no need to click again. The already-active URL is simply given back to you.

I lost my animator’s connection credentials. If the live session is currently active, open the “Secrets” window: the URL currently in use is shown there and copyable. Otherwise, only an administrator can give them back to you (or regenerate them, which invalidates the old ones).

I get a “session expired or unauthorized” error. Sign out then sign back in.

I get a persistent “internal backend server error”. This isn’t something you can fix yourself — tell an administrator or developer, with the exact message shown.

Why doesn’t the “Cache” page show an actual cache? That’s a known quirk of the tool: this page actually shows a network request log, useful for technical diagnostics. The menu name just hasn’t been updated to match.