Your home's TV, streams, radio and cameras. One app.
DuoTV is a media server you run at home. Thousands of internet TV channels with one guide, Twitch and YouTube live, world radio, your security cameras and every recording — with pause and rewind, live AI subtitles in any language, and watching in sync with family anywhere.
The world's free TV, cleaned up and in one list.
Add any M3U playlist — or start with iptv-org's world index — and DuoTV turns tens of thousands of raw streams into a channel list that stays fast, numbered and healthy.
iptv-org, any M3U, single addresses.
One entry per channel; the best copy plays first.
A playlist and its first segment — every 48 h, dead ones daily.
Numbered for good; dead ones hidden, favourites repaired.
- One channel, many sources
Copies of a channel from different playlists merge into one entry and the best one plays first — a list of 26k streams became 19k channels.
- Fast at 22,000 channels
Lists are virtualised, filtering and search run on the server: the Live page on a throttled phone went from 1.24 MB to 21.7 KB.
- No transcoding when it isn't needed
About 98 % of healthy streams are HLS and pass straight through to the browser; the rest are transcoded on the iGPU.
- Health checks that cost almost nothing
A playlist plus its first segment — a few KB per stream. Dead channels hide themselves and come back when they recover.
- Dead favourites repaired
When a favourite stays dead for a day, DuoTV looks for a working copy in your playlists and stream catalogues, tests it and offers it with a preview.
- Channel logos that look right
White-on-transparent logos get a darkened copy; missing ones are found automatically.
- Catch-up
Playlists that carry an archive play past programmes back, seekable, for up to 30 days.
- Protected streams
Encrypted channels a playlist carries the means to play are decrypted on the server and play like any other — nothing about them ever reaches a browser.
- Per-country routing
WireGuard tunnels run inside the server process, so only the streams that need a country's connection use one — nothing changes on the host.
- Plays in your other apps too
M3U and XMLTV for VLC, Kodi, TiviMate and Jellyfin, with a personal token per user.


Twitch, YouTube and the rest — in the same player.
Twitch, Kick, YouTube, Bilibili, TwitCasting and SHOWROOM live streams get everything TV channels get: rewind, clips, subtitles, recording and casting.
- Low-latency mode
About 2.5 s behind a Twitch stream instead of the usual 18–22 s.
- Live chat beside the picture
Emotes and badges, a delay that lines chat up with the video, and AI translation into any language with a live cost meter.
- Your accounts, linked
Link Twitch or Kick to write in chat and import everyone you follow.
- Went-live alerts and auto-recording
Followed channels can record themselves — with the chat, replayed in step.
- Web TV
A curated list of always-on web channels: news, music, study rooms.
- Live cameras of the world
About 2,540 public cameras in 80 countries, found from YouTube and Bilibili live search and SkylineWebcams.


Every live thing becomes something you can rewind.
A live buffer, a recorder that works from the guide, and a library that edits losslessly — for any channel or stream.
- Pause and rewind live
A 30-min buffer by default (up to 4 h), picture previews on the seek bar, "from the start".
- Clips
Cut any range of the buffer into a recording or a download.
- Recordings from the guide
One-off, keyword and series rules, "new episodes only", padding and quotas.
- Lossless editing
Trim a 10-minute 1080p recording in 0.2 s.
- Ad breaks found and skipped
Learns each channel's on-screen graphics: 99.5 % precision by time on the test set.
- Continue watching, Up next
Seek-bar thumbnails, a countdown to the next episode.
- NAS archive over SMB
Back up or move recordings per rule and play straight from the NAS.
- Listen
A channel's sound only, as 64 kbit/s AAC for a screen-off phone — about 2 % of one core.
- Even volume, sleep timer
A loudness leveller tames a 10 dB-louder ad in ~0.6 s; the sleep timer fades sound and picture out.
Understand anything on screen — in your language.
Optional and cheap by design: every AI call is metered in tokens and dollars, and every feature has a hard limit and an off switch.
Heard once, read in everyone's language.
Each viewer picks the translation, the words as spoken, or both at once — in English or any other language. The speech is heard once; each language is translated once, in parallel, and shared by everyone who picked it.
Ten people watching in Turkish cost one Turkish translation per chunk.
Pick the language being spoken and you simply get the original.
The picture pauses on it: 台風 → たいふう, "typhoon" — a built-in Japanese dictionary in ~1 ms, plus the AI's sense in your language.
The free allowance goes to English first: an extra language pauses — and the player says so — before it would use up the day's free quota.
- Live subtitles in any language
Speech is heard and translated in the cloud about 12 s behind live, with a local Whisper fallback that keeps everything on the box.
- Original and translation together
Tap a word for its meaning and reading; a built-in Japanese dictionary answers in about 1 ms.
- Voice-over
Subtitles read aloud while the programme ducks underneath — or free with an on-box voice.
- What's on screen?
Pause and ask "Who is this? Where is this? Translate the text" — fractions of a cent per question.
- What's this song?
Song recognition from radio, live TV or recordings, with the fingerprinting done in Go.
- Recordings that explain themselves
AI subtitles, summaries with chapters, search inside recordings and questions answered with clickable moments.
- Morning digest
Overnight news becomes a few short stories with "Watch" links, pushed at your time.
- Save recipe
A cooking show becomes an ingredient checklist and timestamped steps.

Watch in sync with family, wherever they are.
The server keeps one playback state for the room. Every player measures its clock against the server's and steers itself to the same moment, four times a second.
Close enough that nobody can tell.
At most ±8 %, so no one sees a jump.
Jump straight to the room's moment.
Someone's connection stalls? The room holds at the same place, "Waiting for …", until they're ready — up to 8 s, so one slow line can't stop everyone.
- Watch together
Rooms that keep every player in step — recordings within 0.08 s, live within 0.1–0.2 s — for TV, streams, catch-up, radio and cameras.
- Room life
Chat, reactions and full-screen effects; invites by push, QR or a 6-character code; the room waits for whoever is buffering.
- Go live
Share a phone's camera or screen, or stream from OBS over RTMP, to the household — 0.2–0.4 s behind on the low-latency path.
A camera recorder that tells you what happened.
No detector running on every frame: motion inside your zones wakes it, it looks at a few cropped frames, and the event gets a label — and, if you want, a sentence.
- USB webcams and IP cameras
ONVIF/RTSP with discovery, sub-second live view, pan/tilt with presets.
- Continuous or motion recording
Motion zones, a timeline, timelapse, retention and a NAS archive by day.
- Person, vehicle, animal
A small detector checks a few cropped frames per motion event — about 77 ms a frame on the CPU.
- Events in words
"Person in a teal shirt hangs laundry" — searchable, plus a written summary of each day.
- Popups over the TV
A camera can pop up over whatever is playing, with optional push alerts.
- Planes in the frame
Labels the aircraft visible in a sky-facing camera.
Leave the world running on the TV.
Beyond TV: the planet's radio, live data on maps, and the sky above your house.
- World radio on a globe
99,928 stations in 245 countries with now-playing titles, plus public shortwave receivers with a live waterfall and live sounds from microphones and hydrophones around the world.
- World now
A live map of earthquakes, flights, rain radar, the ISS, the day/night line and the news by country.
- Weather and hazards
Rain-in-minutes alerts, animated radar, air quality, lightning, wildfires, a live seismograph and earthquake alerts with your own thresholds.
- Sky tonight, Earth & space
ISS and Starlink passes, meteor showers, the whole Earth from NASA EPIC, the Sun in seven wavelengths, the newest photos from Mars.
- Concerts and classic films
The Internet Archive's live music and public-domain films, on demand or as themed 24/7 channels.
- Your own channels
Turn your media files — or fireplace, rain and ocean loops — into channels that play on a clock like real TV.


The same home, on every screen.
- Installable web app
A phone layout with touch gestures, casting to Chromecast and AirPlay, and a notification drawer.
- Android app
Reaches home from anywhere with no VPN app on the phone — the network runs inside the app. Picture-in-picture, background audio, encrypted push.
- TV mode
A ten-foot, remote-driven interface with a channel switcher and info bar — it can run on the box's own HDMI.
- Phone as a remote
Pair with a 6-digit code or QR and drive any screen playing DuoTV.
- Looks you pick
Seven complete UI packs per device, and a player button row you arrange yourself.
- My home
A page each user arranges: inline players, cameras, weather, clock, notes and shortcuts.


Home in your pocket. No VPN app, no open ports.
The DuoTV app carries its own ZeroTier node inside it. At home it talks to the server over Wi-Fi; anywhere else it reaches it over an encrypted peer-to-peer network that the server runs itself — nothing to install, no VPN slot taken, nothing exposed to the internet.
The app's node joins the server's network on its own.
The new phone can reach only the sign-in page.
Password, two-factor, or scan a QR code from a signed-in screen.
The phone is yours: everything works, at home or away.
Three wrong passwords or time running out removes the phone. Admins see pending and paired phones — with their connection, direct or relayed, and latency — and can approve, refuse or remove any of them.
- Fast enough for HD
The in-app node moved 31–40 Mbit/s in tests; DuoTV's streams need 6–10.
- A real app around it
Picture-in-picture, background audio, encrypted push notifications, in-app updates.
- Go live from the phone
Share the phone's camera or screen to the household, from anywhere.
Built for a household, not a single user.
- Real sign-in
Users and roles, Argon2id, authenticator apps with recovery codes, passkeys, QR sign-in.
- Invite links
Single- or multi-use, with a guided walkthrough for new accounts.
- Backups you can trust
Nightly verified database backups and an encrypted settings snapshot with a section-by-section restore preview.
- Health in plain words
Disk, memory, backups, tunnels, guide, certificates and AI limits; companion containers heal themselves.
- Stats and Wrapped
Viewing heatmaps, streaks and top channels — and a shareable monthly Wrapped.
- Accounting
Traffic per stream and per tunnel, AI cost per feature, an audit log.
A closer look.
One idea: everything is a Source.
Every module ends in a Source — an MPEG-TS byte stream fanned out to whoever subscribes. It starts with its first viewer and stops a few seconds after the last one leaves, so flipping channels stays fast. The player, the recorder and the analyzer never know where a Source came from.
- Server
- Go — one static binary that embeds the UI; PostgreSQL 17 (pgx, no cgo)
- Media
- ffmpeg 7 with Intel VAAPI, go2rtc for cameras (WebRTC/MSE), streamlink, in-process WireGuard (wireguard-go + gVisor netstack)
- Web
- React 19, Vite, Bun, Tailwind 4, shadcn on Base UI, TanStack Query/Table/Virtual, hls.js, MapLibre GL, WebGPU
- Sidecars
- faster-whisper (local subtitles), Piper (voice), YOLOX-tiny on OpenVINO (detection), the iptv-org/epg grabber
- Android
- Kotlin WebView shell with ZeroTier inside the app (libzt) and FCM push
- AI
- OpenRouter through one metered client; Groq's free plan for live subtitles
- Deploy
- One Docker image and a compose file on Debian
- Runs on
- A 2016 mini PC: Intel i5-6500T (4 cores), HD 530 iGPU, 11 GB RAM, 110 GB NVMe
DuoTV isn't released yet.
It runs every day in one household while it gets ready for yours. When it ships, it will be one Docker image and a compose file — any Linux box with Docker, an Intel iGPU if you have one, everything else optional.
- One command to start
docker compose up -d, then the first visit creates your admin account.
- Bring your playlists
Any M3U by address, file or single stream — or iptv-org's world index in one click.
- Invite the household
Invite links, phones paired at sign-in, and an AI key only if you want the AI features.