Lumen is a private, self-hosted video discovery interface. It is set up for one person or a small private household: it keeps local results warm, runs up to three upstream yt-dlp workers, and uses the official YouTube Data API only for public channel artwork and metadata.
-
Install Docker Desktop.
-
Copy the example configuration:
Copy-Item .env.example .env.local -
Edit
.env.localand setYOUTUBE_API_KEYif you want fast official search plus channel banners, avatars, descriptions, and counts.INVIDIOUS_URLis optional and can point to your own Invidious server. -
Start Lumen:
docker compose up --build -d
-
Open http://localhost:3000.
To stop it:
docker compose down-
Install Node.js 22+ and
yt-dlp. -
Create
.env.localas above. -
Install and start:
pnpm install --no-frozen-lockfile --ignore-scripts pnpm dev -- --port 3000
- For You refreshes frequently but rotates a cached candidate pool.
- Search, channel, and video metadata are cached in memory to avoid repeat upstream work.
- The upstream queue defaults to three active
yt-dlpworkers. SetYTDLP_CONCURRENCYto a value from 1 to 4 to tune it for your connection and rate-limit tolerance. - Docker restarts the service automatically unless it is deliberately stopped.
Lumen uses the YouTube Data API v3 for fast search and official public channel metadata. The key is free to create and use.
-
Open the Google Cloud Console, create or select a project, and enable YouTube Data API v3 from APIs & Services → Library.
-
Go to APIs & Services → Credentials → Create credentials → API key.
-
Restrict the key to YouTube Data API v3. For a public deployment, also add your server IP address or hosting platform restrictions where available.
-
Add the key to
.env.local:YOUTUBE_API_KEY=your_key_here
-
Restart the app or run
docker compose up --build -dagain.