Skip to content

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.

  • 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 amd64 and arm64.
  • 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.

  1. On the machine, make a folder for the server, for example iptv-deck, and two folders inside it: data for its sign-in and database and recordings for the files.

    Terminal window
    mkdir -p iptv-deck/data iptv-deck/recordings && cd iptv-deck
  2. 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
  3. Save this as compose.yaml in 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:latest
    container_name: iptv-deck
    restart: unless-stopped
    network_mode: host
    user: "1000:1000"
    environment:
    IPTV_DECK_SERVER_NAME: "IPTV Deck server"
    TZ: "Europe/London"
    volumes:
    - ./data:/data
    - ./recordings:/recordings
  4. 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:

Terminal window
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:latest
  1. 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
  2. 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.
  3. 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.

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 will be recorded on <server>, and the server records it with its own Start early and Stop late, which you change for it in the account panel. A recording of a live programme ends with the programme, plus Stop late. The device you recorded from can be off meanwhile.

When the server seems to be off, the app asks before sending: seems to be off, with Record on this device and Send to .

Recordings on each device has a section On , for example On IPTV Deck server:

LineMeaning
Waiting for the computerthe server has not taken the request yet
Scheduledit will record at that time; the cross cancels it
Recording nowit is recording; press it to watch from the beginning while it records
the size of the filefinished; press it to play, the bin deletes it from the server
The computer was off at that timeit missed the recording
The computer does not have this channelits playlists lack the channel
Recording on the server needs Premiumthe 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 is off or on another network. LG TVs show Recordings in the side menu once the account has a recording server. The files themselves are in the 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.

The server never updates itself. In its folder:

Terminal window
docker compose pull && docker compose up -d

Without 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.

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.

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:

Terminal window
docker compose down && docker compose run --rm iptv-deck node /app/server.cjs --sign-out

The 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.

What it saysWhat to do
Your account has no free device: remove a device in the account panelremove 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 accountthe account has neither Premium nor the free trial
Cannot reach your accountthe machine has no internet, or a firewall blocks it
is off or on another network on a phone at homea firewall on the machine blocks the other devices: allow ports 47811 and 47812 from your home network
the status page does not openread 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 watchingyour provider allows one connection at a time, see What you need