A live TV tuner you'll forget is running.
Tellyard shows up in Plex and Jellyfin as a network TV tuner. Add the live streams broadcasters publish for free, and they play in the Live TV guide like any other channel, on every TV, phone and browser your server reaches.
Why Tellyard
How heavy is it? Featherweight.
One small container with no database, no web app and no background workers. It barely registers on a home server.
Does anything run while nobody watches? Nothing.
No stream and no download. Tellyard only wakes to refresh the guide, every 6 hours by default.
Where do the streams come from? From the source.
Each channel is one link the broadcaster publishes for its free live stream. No M3U playlist to find or keep up to date, and a fresh connection every time you tune in.
What about picture quality? Full quality.
Tellyard plays the best resolution the broadcaster offers and passes it on untouched, with no re-encoding.
Where do channels live? One file.
A few lines per channel. Edit it and the change is live within a minute.
Does every channel get a guide? Always.
Real listings where a schedule exists. Where one doesn't, each hour shows the channel's name instead of an empty row.
Get started
Free and self-hosted. Needs Docker on a 64-bit Intel, AMD or ARM machine, and Plex or Jellyfin.
-
Write your channel list
Create a
configfolder with achannels.toml. Each channel needs a number, a name, a logo and one source. Every option.[[channel]] number = 101 name = "Example News" logo = "https://example.com/logos/example-news.png" hls = "https://example.com/live/news/master.m3u8" [channel.guide] category = "News"Only add streams you are allowed to watch.
-
Create the compose file
Save this as
compose.ymlnext to theconfigfolder.services: tellyard: image: ghcr.io/sandobserver/tellyard:beta container_name: tellyard restart: unless-stopped init: true read_only: true tmpfs: - /tmp cap_drop: - ALL security_opt: - no-new-privileges:true mem_limit: 512m environment: # Time zone for log timestamps - TZ=America/New_York # Streams that may play at the same time - TUNERS=4 # Lowest resolution `tellyard check` accepts: off, or a height such as 1080 - MIN_HEIGHT=off volumes: - ./config:/config:ro - ./data:/data ports: - "5004:5004" -
Start it and check your channels
mkdir -p ./data && sudo chown 1000:1000 ./data docker compose up -d docker exec tellyard tellyard checktellyard checktunes each channel once and reports the resolution it really sends. -
Add it to your media server
Tellyard's address is your server's address with port 5004, such as
192.168.1.10:5004, and its guide ishttp://192.168.1.10:5004/guide.xml.Plex: open Settings > Live TV & DVR > Set up Plex DVR, enter the address by hand, and choose the XMLTV option for the guide. On an iPhone, iPad or Apple TV, turn on Force Direct Play in the Plex app. More about Plex.
Jellyfin: open Dashboard > Live TV, add a tuner device of type HDHomeRun with the address, and add an XMLTV guide provider with the guide address.