Invidious
Invidious
Invidious is a privacy-respecting alternative frontend for YouTube. It lets you watch YouTube videos without Google tracking, without ads, and without requiring JavaScript. Your requests go through your seedbox's connection, not your home IP.
PMSS has built-in proxy support for Invidious. Once you install it and tell PMSS which port it runs on, the reverse proxy configuration is generated and maintained automatically.
What You Get
- No Google tracking -- Invidious proxies video streams through your server. Google sees your seedbox's IP, not yours.
- No ads -- YouTube ads are stripped.
- No JavaScript required -- the interface works without JS (though JS enables extras like comments).
- RSS feeds -- subscribe to channels via RSS without a Google account.
- Two access paths -- one public (shareable), one private (behind your seedbox login).
Access Paths
Once configured, Invidious is available at two URLs:
| Path | URL | Authentication |
|---|---|---|
| Public | https://SERVER.pulsedmedia.com/public-USERNAME/invidious/ |
None -- anyone with the link can access it |
| Private | https://SERVER.pulsedmedia.com/user-USERNAME/apps/invidious/ |
Behind your seedbox login |
The public path is useful for sharing your Invidious instance with friends or using it from devices where you don't want to enter your seedbox credentials. The private path keeps it behind authentication.
Installation
Invidious needs a PostgreSQL database. Docker Compose is the recommended way to run both together.
Step 1: Create a Docker Compose file
mkdir -p ~/invidious && cd ~/invidious
Create docker-compose.yml:
version: "3"
services:
invidious:
image: quay.io/invidious/invidious:latest
restart: unless-stopped
ports:
- "127.0.0.1:3100:3000"
environment:
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: kemal
password:
# ↑ Set your own database password above (e.g. a random string).
host: invidious-db
port: 5432
check_tables: true
external_port: 443
domain: SERVER.pulsedmedia.com
https_only: true
depends_on:
- invidious-db
invidious-db:
image: docker.io/library/postgres:14
restart: unless-stopped
volumes:
- postgresdata:/var/lib/postgresql/data
- ./config/sql:/config/sql
- ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
environment:
POSTGRES_DB: invidious
POSTGRES_USER: kemal
POSTGRES_PASSWORD:
# ↑ Must match the password set in the Invidious config above.
volumes:
postgresdata:
Notes:
- Port
3100is bound to127.0.0.1so Invidious is only reachable through the lighttpd proxy, not directly from the internet. - Pick a port that isn't in use. Check with
ss -tlnp. - Replace
SERVERwith your actual server hostname.
Step 2: Start it
docker compose up -d
Verify it's running:
docker compose ps
curl http://127.0.0.1:3100/
You should see Invidious HTML output.
Step 3: Tell PMSS the port
Create a file containing just the port number:
echo "3100" > ~/.invidiousPort
PMSS reads this file and automatically generates the reverse proxy fragment at ~/.lighttpd/custom.d/pmss-invidious.conf. This happens during the next lighttpd configuration regeneration cycle.
If you don't want to wait for the automatic cycle, you can trigger a regeneration or contact support.
Step 4: Verify
Once the proxy is active, visit:
https://SERVER.pulsedmedia.com/user-USERNAME/apps/invidious/
You should see the Invidious search page.
Disabling Invidious
Remove the port file:
rm ~/.invidiousPort
PMSS will clean up the proxy fragment (pmss-invidious.conf) on the next regeneration cycle. You can then stop and remove the containers:
cd ~/invidious
docker compose down
Add -v to also delete the PostgreSQL data volume:
docker compose down -v
Configuration Tips
Proxy videos through your server
By default, Invidious can serve video URLs that point directly to Google. To route all video traffic through your seedbox (better privacy), add to the INVIDIOUS_CONFIG block:
local: true
This uses more bandwidth and CPU but means your browser never contacts Google directly.
Registration
To allow account creation on your instance (for saved subscriptions, playlists):
registration_enabled: true
To keep it personal, leave registration disabled and use the default account, or limit registrations after creating your own.
Popular page and trending
Disable the popular/trending endpoints if you want a minimal instance:
popular_enabled: false
Adding an Invidious Tab
You can add Invidious as a tab in your web panel using .customFrames:
invidious|Private YouTube|Invidious|/user-USERNAME/apps/invidious/
Troubleshooting
Invidious shows "Could not extract video data"
YouTube regularly changes its API. Update to the latest Invidious image:
cd ~/invidious
docker compose pull
docker compose up -d
This is the most common issue with Invidious. The project releases frequent updates to track YouTube API changes.
Proxy returns 502 Bad Gateway
The container isn't running or isn't listening on the expected port:
docker compose ps
curl http://127.0.0.1:3100/
ss -tlnp | grep 3100
Check container logs:
docker compose logs invidious
Database connection errors
The PostgreSQL container may not be ready yet. Check its status:
docker compose logs invidious-db
If it's still initializing, wait a minute and try again. Invidious will retry database connections on startup.
See Also
- Lighttpd Custom Configuration -- manual proxy configuration (Invidious uses PMSS auto-configuration, but this explains how it works underneath)
- Custom Tabs -- adding Invidious as a tab in your panel
- Docker Rootless -- how Docker works on your seedbox
- Install Media Stack -- Jellyfin, Sonarr, Radarr, and other media tools