Jump to content

Invidious

From Pulsed Media Wiki

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 3100 is bound to 127.0.0.1 so 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 SERVER with 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