Stream YouTube content in Jellyfin without downloading videos.
@jellytube/app: Generates.strmand.nfofiles for YouTube channels@jellytube/proxy: Resolves YouTube stream URLs on-the-fly
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run with Docker Compose
docker-compose up -dCopy .env.example to .env and configure:
PROXY_URL=http://localhost:9000
CHANNELS=https://www.youtube.com/@channel1,https://www.youtube.com/@channel2
MAX_VIDEOS=50
SKIP_SHORTS=false
SKIP_LIVES=false# Install dependencies
pnpm install
# Run all packages in dev mode
pnpm dev
# Lint all packages
pnpm lint
# Format all packages
pnpm formatjellytube/
├── packages/
│ ├── app/ # Main application (TypeScript)
│ └── proxy/ # Streaming proxy (Node.js)
├── output/ # Generated .strm files
├── docker-compose.yml
└── pnpm-workspace.yaml
# Build and run
docker-compose up -d
# View logs
docker logs jellytube -f
docker logs jellytube-proxy -f
# Stop
docker-compose down- App scans YouTube channels and generates
.strmfiles - Jellyfin reads
.strmfiles and requests the URL - Proxy resolves the YouTube stream URL in real-time
- Jellyfin streams the video directly from YouTube
- ✅ Zero storage (pure streaming)
- ✅ Automatic metadata (.nfo files)
- ✅ Thumbnail downloading
- ✅ Season organization by year
- ✅ Skip Shorts and Livestreams
- ✅ Configurable video limits
MIT © Alex Saavedra