feed = null·Self-hosted·GPL-3.0

The algorithm stops at your router.

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

You pick. It fetches. You watch.

01

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.

02

It hoards, quietly

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.

03

You watch, in peace

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

Every feature holds a grudge.

Instant playback, even uncached

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.

Sponsor reads? Skipped.

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.

A cache, not a chore

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.

Profiles with locks

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.

The only algorithm works for you

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.

Live on every screen

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

One container. Zero permission slips.

The whole thing — API, workers, web app, database — ships as a single Docker image. Point four volumes at your disks and you're running.

  • Single container, port 8484
  • Web app and API docs baked in at /
  • Unraid Community Apps template
  • yt-dlp auto-updates on every boot
  • GPL-3.0 — fork it if you hate it
docker-compose.yml
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

Null your feed tonight.

Free. Open source. GPL-3.0. If it runs on your hardware, it runs by your rules.