Recording server
The recording server is IPTV Deck without a screen. It runs in Docker on a machine that is always on, such as a NAS, a home server or a Raspberry Pi, and records for every device of your account. Phones, tablets and TVs send their recordings to it and play them from it at home. It has no picture and no player of its own.
It works like a computer that records for your other devices, but nobody has to stay signed in at a computer, and the machine can sit in a cupboard.
What you need
Section titled “What you need”- A machine that is on whenever a recording is due, with Docker and Docker Compose:
a Synology, QNAP, Unraid or TrueNAS NAS, a Linux PC or a Raspberry Pi 4 or 5 with a 64-bit
system. The image runs on
amd64andarm64. - The machine on the same home network as your phones and TVs, so they can play its recordings. A phone away from home reaches it through a VPN such as WireGuard or Tailscale.
- Premium or the free trial on your account.
- One free place among the devices of your account: the server counts as one device.
- Room on the disk: a high-definition channel takes about 2 to 4 GB per hour.
Docker Desktop on Windows and on the Mac cannot give the container the computer’s own address at home, so the phones would not reach its recordings. On a Windows PC or a Mac use Record for other devices in the IPTV Deck app instead, see A computer that records for your other devices.
Your provider sees the server as one more connection. When your provider account allows only one connection at a time, watching on a phone and recording on the server at the same moment can cut one of them off, depending on the provider. Settings → Playlists, the playlist, then the account card shows Connections as in use and allowed.
Install it
Section titled “Install it”-
On the machine, make a folder for the server, for example
iptv-deck, and two folders inside it:datafor its sign-in and database andrecordingsfor the files.Terminal window mkdir -p iptv-deck/data iptv-deck/recordings && cd iptv-deck -
The server runs as the user with id 1000, so let it write to both folders:
Terminal window sudo chown -R 1000:1000 data recordings -
Save this as
compose.yamlin the same folder. Change the name and the time zone if you like: the name is how the server shows among your devices.services:iptv-deck:image: ghcr.io/mistykuu/iptv-deck-server:latestcontainer_name: iptv-deckrestart: unless-stoppednetwork_mode: hostuser: "1000:1000"environment:IPTV_DECK_SERVER_NAME: "IPTV Deck server"TZ: "Europe/London"volumes:- ./data:/data- ./recordings:/recordings -
Start it:
Terminal window docker compose up -d
Keep network_mode: host: the server tells your devices its address at home, and with any other
network mode they would get the address of the container instead.
On a Synology NAS: Container Manager → Project → Create, choose a folder on a shared folder, Create compose.yaml, paste the file above and finish. QNAP Container Station and Portainer take the same file as a new application or stack.
Without Compose, the same in one command:
docker run -d --name iptv-deck --restart unless-stopped --network host --user 1000:1000 -e IPTV_DECK_SERVER_NAME="IPTV Deck server" -e TZ=Europe/London -v "$PWD/data:/data" -v "$PWD/recordings:/recordings" ghcr.io/mistykuu/iptv-deck-server:latestSign it in
Section titled “Sign it in”-
Open the server’s status page in a browser at home:
http://<address of the machine>:47812. It shows a sign-in code and a QR code. Without a browser, read the code from its log:Terminal window docker logs iptv-deck -
Enter the code on one of your signed-in devices:
- On the phone: Settings → Devices → Connect a device, then scan the QR code or type the code. This also sends the passwords of your playlists to the server.
- In the account panel: Devices → Add a recording server, type the code and press Sign in. Passwords reach the server only when they are kept in your account.
-
The status page then says Signed in, this server is one of the devices of your account, Premium is active (or The free trial is active) and Recording for the devices of your account.
The code changes every 14 minutes until it is used. Once signed in the server stays signed in, also after a restart of the container or the machine, and shows no code again. It opens every playlist of your account by itself, so it has every channel to record.
Record on it
Section titled “Record on it”On every device, Settings → Recording → Record on decides where recordings go. The row appears once your account has a recording server. Automatic, the default, picks the server, so there is nothing to change. In the account panel the same Record on is in each device’s settings.
Record as usual: Record on a programme in the guide or in the player, Record by time, or a
repeating recording. The app says
When the server seems to be off, the app asks before sending:
Watch its recordings
Section titled “Watch its recordings”Recordings on each device has a section On
| Line | Meaning |
|---|---|
| Waiting for the computer | the server has not taken the request yet |
| Scheduled | it will record at that time; the cross cancels it |
| Recording now | it is recording; press it to watch from the beginning while it records |
| the size of the file | finished; press it to play, the bin deletes it from the server |
| The computer was off at that time | it missed the recording |
| The computer does not have this channel | its playlists lack the channel |
| Recording on the server needs Premium | the account has neither Premium nor the trial |
A finished recording plays on any device at home, and over a VPN. So does one that is still
recording: several devices can watch it at once, each at its own place, skip through what is
already recorded and use Go live to catch up. Elsewhere the app says
recordings folder, as .ts
files you can also copy or open with any player.
A recording belongs to the profile that scheduled it, so a Kids profile never sees another profile’s recordings.
Update it
Section titled “Update it”The server never updates itself. In its folder:
docker compose pull && docker compose up -dWithout Compose: docker pull ghcr.io/mistykuu/iptv-deck-server:latest, then remove the container
with docker rm -f iptv-deck and start it again with the same docker run. Its sign-in and
recordings stay in the two folders.
Stop a recording
Section titled “Stop a recording”A recording the server is making now can be stopped from Recordings on a phone, TV or computer (the square on the phone, Stop recording in its options on a TV) or with Stop in Recordings of the account panel. What was recorded until then stays on the server as a finished recording.
Sign it out or remove it
Section titled “Sign it out or remove it”To sign the server out of your account and free its place among your devices, open Devices
in the account panel, pick the server and choose Sign out. It answers, leaves the account and
restarts, then shows a new code. The recordings stay in their folder. This needs the restart
policy from the setup above (restart: unless-stopped), otherwise the container stays stopped
until you start it.
On the machine itself, the same works with:
docker compose down && docker compose run --rm iptv-deck node /app/server.cjs --sign-outThe next docker compose up -d shows a new code. Removing the server from Devices in the
account panel or on the phone also frees its place, but it stays signed in, and a removed device
can come back only after 24 hours.
When something is wrong
Section titled “When something is wrong”| What it says | What to do |
|---|---|
| Your account has no free device: remove a device in the account panel | remove a device you no longer use. A device removed from the account, also this server, comes back only after 24 hours. The server tries again every 15 minutes, or restart it with docker restart iptv-deck |
| Recording needs Premium on this account | the account has neither Premium nor the free trial |
| Cannot reach your account | the machine has no internet, or a firewall blocks it |
| a firewall on the machine blocks the other devices: allow ports 47811 and 47812 from your home network | |
| the status page does not open | read the code with docker logs iptv-deck; another program may hold port 47812, then add IPTV_DECK_STATUS_PORT: "47813" under environment |
| a recording stops when you start watching | your provider allows one connection at a time, see What you need |