Point it at your channels
Paste a channel link and your server starts watching it. Import your YouTube identity for a head start — or don't. Either way, no Google account required to watch.
feed = null·Self-hosted·GPL-3.0
NullFeed is a self-hosted YouTube media center. Follow the channels you actually care about, and your own server quietly caches every new upload for instant, ad-free playback on iPhone, Apple TV, and the web. Nothing recommended. Nothing tracked. Nothing you didn't ask for.
One Docker container · Unraid-native · iPhone & Apple TV apps in TestFlight
How it works
Paste a channel link and your server starts watching it. Import your YouTube identity for a head start — or don't. Either way, no Google account required to watch.
New uploads cache straight to your disk on your schedule — one deduplicated copy per video, bounded retention, full quality fetched in the background. A library with zero babysitting.
Native apps on iPhone and Apple TV, plus a web app baked into the container. Sponsor segments get skipped, positions sync everywhere, and nothing autoplays you down a rabbit hole at 2 a.m.
The good stuff
Tap a video that isn't cached yet and it plays immediately — reverse-proxied through your server — while the full-quality copy lands in the background and swaps in mid-watch. No spinner. No waiting.
SponsorBlock data — with a Claude fallback straight from the transcript — maps every baked-in ad, and the player leaps over them with a little toast. You'll never hear “but first” again.
One copy of each video on disk, reference-counted across the household, evicted automatically when space gets tight. Set retention once and never manage a download again.
Everyone gets their own subscriptions, history, queue, and continue-watching — behind an optional PIN. Your kid's channels stay out of your feed, and vice versa.
An optional Discover tab runs on Claude with your own API key, suggesting channels from your subscription graph. Dismiss anything. Refresh on demand. Or never turn it on at all.
SwiftUI on Apple TV, Flutter on iPhone, web at /. WebSocket push tells every client the moment a cache finishes, an upload drops, or a sponsor map is ready.
Self-host it
The whole thing — API, workers, web app, database — ships as a single Docker image. Point four volumes at your disks and you're running.
8484/services:
nullfeed:
image: ghcr.io/windoze95/nullfeed-backend:latest
ports:
- "8484:8484"
volumes:
- ./media:/data/media
- ./db:/data/db
- ./config:/data/config
- ./thumbnails:/data/thumbnails
environment:
# optional — Claude-powered Discover tab
- ANTHROPIC_API_KEY=
restart: unless-stopped
Free. Open source. GPL-3.0. If it runs on your hardware, it runs by your rules.