Start a stream
REC TC 00:00:00:00
HeroStatusFeaturesHow it worksA show nightInstallFAQGet it
Software by CTD · Self-hosted · Overlays for OBS

CTD
Overlay.Overlays that run
the show.

A self-hosted overlay platform: one server that runs the show on its own clock and serves styled overlays to OBS browser sources. Scenes, title cards, the lineup and the night's cues, taken from a console on your phone — with chat, alerts and viewer counts from CTD Relay.

Self-hosted Node.js 24 · Docker TrueNAS SCALE OBS browser sources Beta
Your PC or NAS · CTD Overlay
CTD Overlay icon
  • Feeds in
  • CTD RelayChat · alerts · viewers
  • TwitchNext
  • KickNext
  • YouTubeNext
  • SpotifyNext
Overlay Show clock · cues One take · every overlay
OBS browser sources
Main · 1920×1080Program
9:16Vert
Status · in development

Early, and upfront about it. The platform, its admin pages and the CTD Relay connection work today, so chat, alerts and viewer counts already come in through Relay. Direct Twitch, Kick, YouTube, Spotify and OBS connections are the next steps in the plan. There's no tagged release yet: the container image follows the main branch.

Feedback on GitHub
Self-hosted overlays

The show runs
on the server.

Runs on its own clock

A show's cues fire on the server's clock from its schedule — with every browser closed, and through a restart. A cue more than five minutes late is marked missed, so a restart never replays a night.

One take, every overlay

A show puts overlays on air together, a horizontal and a vertical feed say. One take changes every member’s scene, and a trigger lands on all of them on the same frame.

The night builds itself

Give it the lineup and it makes the cues: who’s on and a title card at each act, the headliner’s intro, now playing on a timer. Edit the lineup mid-show and the cues rebuild without replaying anything.

A console for one thumb

Live is the show-night console on a phone: scenes, title cards, who’s on, REC, the next cue with Trigger now and Skip, and the viewer count.

Templates that update themselves

Install from a package, a URL or a GitHub release, preview with sample data first, and follow a repository: safe updates move overlays on their own, breaking ones wait for you.

CTD Relay built in

Merged chat and alerts from every platform CTD Relay streams to, live status per stream, and a viewer count totalled across every platform.

Made for OBS browser sources

Each overlay has a URL with its own key and the size to set; updates arrive over Server-Sent Events with a polling fallback.

Media that plays in OBS

With ffmpeg installed, phone video is converted to H.264 MP4 and HEIC photos to JPEG.

Roles, tokens, an audit log

A setup code instead of a default password, owner, admin, operator and viewer roles, two-factor codes, API tokens for a Stream Deck, and secrets encrypted at rest.

An API for everything

Everything the admin pages do goes through API v1, described in OpenAPI at /api/v1/openapi.json.

How it works

Three steps.
Then it's showtime.

By default it listens on its own machine only. Serving the local network (OBS on another PC, the console on a phone) or the internet over HTTPS is a setting you choose.

01

Start it, make the owner

On the OBS PC with npm start, or on a NAS from the image. The first start prints a one-time setup code; use it to create the owner account. There's no default password.

02

Make overlays, add them to OBS

Pick a template, preview it with sample data, make an overlay. Its page gives you the URL and the size: add it to OBS as a Browser source. Connect CTD Relay for chat and alerts.

03

Build the show. Take it live.

Put the overlays in a show with the date, go-live time and lineup, let it build the night's cues, and run it from Live on your phone.

A show night

Set the lineup.
The night runs itself.

Pre-showGo liveEach actAll night
01 · Build the cues
02 · Take live · REC
03 · Who's on · title card
04 · Now playing

Build the cues

From the lineup: who's on and a title card at each act, the headliner's own intro where the template has one, the event intro five minutes in.

Take live · REC

REC starts by itself at the first take of the live scene, or at go-live. Every overlay in the show changes on the same take.

Who's on · title card

Each act's cues fire on the server's clock. Fire one now or skip it from Live; fix a time mid-show and nothing that already happened goes out again.

Now playing

Every ten minutes until the next act, by default. A timed scene only plays while the show is on its program scene, so it never pulls you off a BRB.

Install

On the OBS PC,
or on your NAS.

Data and the master key live in separate folders: keep the key, it decrypts the saved tokens. ffmpeg is optional, for converting phone video.

The OBS PC · Windows, macOS, Linux

Node.js 24, nothing to install

git clone https://github.com/ItsLimitlezz/ctd-overlay.git
cd ctd-overlay
npm start

It listens on http://127.0.0.1:4848. For the console on a phone or OBS on another machine, start it with npm start -- --exposure lan.

TrueNAS SCALE · any Docker host

The public image

docker run -d --name ctd-overlay -p 4848:4848 \
  -e SKP_HOSTS=<nas-ip> \
  -v ctd-data:/data -v ctd-config:/config \
  ghcr.io/itslimitlezz/ctd-overlay:latest

On TrueNAS: Apps → Discover Apps → ⋮ → Install via YAML with the repo's TrueNAS file. The setup code is in the app's logs.

Running guide →
FAQ

Questions,
answered.

What is CTD Overlay?

A self-hosted live-stream overlay platform: one server that runs the show on its own clock and serves styled overlays to OBS browser sources. Overlays are made from templates, put together in shows, and run from a phone-friendly console.

Is it ready to use?

It's early. The platform, its admin pages and the CTD Relay connection work today. Direct connections to Twitch, Kick, YouTube, Spotify and OBS are the next steps in its plan, and there's no tagged release yet: the container image follows the main branch.

What do I need to run it?

Either the PC that runs OBS (Windows, macOS or Linux) with Node.js 24 or newer — no npm install, it has no dependencies — or a NAS or any Docker host, using the public image ghcr.io/itslimitlezz/ctd-overlay (amd64 and arm64), with a ready-made TrueNAS SCALE YAML.

How do overlays get into OBS?

Make an overlay from a template and its page gives you its URL and size. Add a Browser source in OBS with that URL and size. Each URL carries the overlay's own key, and rotating the key retires the old URL.

Does it connect to Twitch, Kick or YouTube directly?

Not yet. Today it gets chat, alerts, viewer counts and live status through CTD Relay, which already streams to those platforms. Direct Twitch and Kick connectors are next in the plan, with YouTube, Spotify and OBS after.

How does it work with CTD Relay and the CTD OBS Plugin?

Connect it to CTD Relay with a code you approve in Relay's settings; one connection can follow every Relay profile, each a stream of its own. Through that connection it also shares the overlays it feeds with the CTD OBS plugin, which adds them to OBS as browser sources at the right size and canvas.

Can my crew run it without seeing our keys?

Yes. Operators run scenes, cues and the lineup but never see credentials; admins also install templates and read the audit log; viewers only look. Deleting and key changes sit behind a menu and ask first.

Can CTD see my overlays or keys?

No. It runs on your own PC or NAS — CTD doesn't host it. Secrets are encrypted at rest with a master key kept in its config folder, separate from the data. By default it listens on its own machine only; serving the local network or the internet over HTTPS is a setting you choose.

Get CTD Overlay. Self-hosted · Your PC or NAS · Works with CTD Relay