📺Marquee

MVP Builtv1.0.2

MarqueeAmbient now-playing display for Jellyfin spaces

Marquee is a free, open-source ambient display for Jellyfin. It runs as one Docker container and turns a spare TV, tablet or wall panel into an always-on screen showing what is playing now, what is up next, and what was recently added — with nothing to click.

Features

What Marquee does

  • Designed as a passive screen rather than an interactive client

  • Surfaces now-playing, up-next, and recently-added moments

  • Built to sit on a TV, hallway display, or dashboard monitor

  • Uses Coral's shared app shell and Jellyfin integration foundations

Audience

Who Marquee is for

  • Wall displays
  • Passive household screens
  • Now-playing ambience

Requirements

  • A running Jellyfin server and an API key

  • A screen that can run a browser in kiosk mode — a tablet, Raspberry Pi or smart TV browser is plenty

  • Docker, or Node.js 22.5+ to run from source

Install with Docker Compose

Marquee listens on port 3000:

services:
  marquee:
    image: getcoral/marquee:latest
    restart: unless-stopped
    depends_on: [jellyfin]
    ports:
      - "3004:3000"
    environment:
      MARQUEE_DATA_DIR: /data
      JELLYFIN_URL: http://jellyfin:8096
      JELLYFIN_API_KEY: ${JELLYFIN_API_KEY}
      JELLYFIN_USER_ID: ${JELLYFIN_USER_ID}
    volumes:
      - ./marquee-data:/data
    networks: [coral]

Then point a screen at it. Anything that runs a browser full-screen will do — a Raspberry Pi behind a wall-mounted monitor, an old tablet propped on a shelf, a smart TV’s built-in browser, a spare laptop. On a Pi, Chromium in kiosk mode is the usual approach:

chromium-browser --kiosk --noerrdialogs --disable-infobars http://your-nas:3004

You can also run it straight from the source checkout if you would rather build locally:

docker build -t marquee .
docker run -p 3000:3000 \
  -e JELLYFIN_URL=http://your-nas:8096 \
  -e JELLYFIN_API_KEY=your-key \
  -e JELLYFIN_USER_ID=your-user-id \
  marquee

Presence, not control

Every other module in Coral is something you use. Marquee is something you glance at.

That single decision shapes all of it. There are no menus, no navigation, no settings surfaced on screen and nothing to click, because the screen it runs on is usually three metres away on a wall and nobody is holding a remote for it. What it shows is what is true right now: what is playing, who is next in the queue, and what landed in the library recently.

It is read-only against Jellyfin. Marquee never starts a session, never controls playback and never writes server state, so it cannot interfere with what someone is watching in the other room.

The obvious pairing is with Aurora on the TV and Marquee on a second screen — one to choose with, one to look at. At a party, running it next to Encore means guests can see what is playing and what they queued without asking.

What Marquee is not

It is not a dashboard. It will not show you disk usage, transcoding load, or server health — for that you want Grafana or one of the homelab dashboard projects, and they do it far better.

It is not a client either. There is no browsing and no playback in Marquee. If you point it at a TV expecting to watch something, you want Aurora.

Marquee is marked MVP Built: the shape is right and it runs, but it is one of the younger modules in the reef and there is more ahead of it than behind.

Configuring Marquee

The full reference lives in the Marquee documentation.

VariablePurpose
JELLYFIN_URLYour Jellyfin server URL, for example http://jellyfin:8096.
JELLYFIN_API_KEYA Jellyfin API key from Dashboard → API Keys.
JELLYFIN_USER_IDThe UUID of the Jellyfin user — not their username.
JELLYFIN_USERNAMEOptional. With JELLYFIN_PASSWORD, opens a real playback session.
JELLYFIN_PASSWORDOptional password for that session user.
MARQUEE_DATA_DIRDirectory for the SQLite state file.

Marquee — frequently asked questions

Is Marquee a Jellyfin client I can play things from?

No, and that is the point. Marquee is a display, not a player. It shows what is happening on your server — what is playing, what is next, what arrived recently — and offers nothing to click. If you want to browse and play, that is Aurora.

What hardware do I point at it?

Anything that can run a browser full-screen. A Raspberry Pi behind a wall-mounted monitor, an old tablet on a shelf, a smart TV's built-in browser, or a spare laptop. Marquee itself runs on your server as a container; the screen just needs to load the page in kiosk mode.

Does Marquee need to be on the same machine as Jellyfin?

No. It talks to Jellyfin over HTTP with an API key, so it can run anywhere that can reach your server. Running it in the same Compose stack is simply convenient, because then you can use the internal hostname and skip exposing anything extra.

Will it wake or interrupt playback?

No. Marquee only reads from the Jellyfin API. It does not start sessions, control playback, or change any server state, so nothing it does can interfere with what someone is watching elsewhere in the house.

How current is the display?

Marquee polls Jellyfin for session and library state, so what you see tracks the server closely enough for an ambient screen. It is built for glanceability rather than frame-accurate now-playing, which is the right trade for something that lives on a hallway wall.