「Invidious」をセルフホストしてYoutubeから広告を消す夢をみる

カテゴリー: PC
投稿日:
更新日:
書いた人: 山椒ねこまんま

YouTubeのおすすめ動画があまりにも不快すぎて、対策として「再生履歴を保存しない」設定にしていました。 こうするとおすすめ動画が表示されなくなり大変快適だったのですが、代わりに動画の再生時間が保存されないので長尺動画を見るのが大変不便になってしまったのです。
仕方がないので渋々再生履歴を保存する設定に戻したところ、再生時間は記憶されないのにおすすめ欄だけ返ってくるという地獄が誕生しました。 ぎゃー!

いろいろ設定をいじっても治らなかったので、非公式のフロントエンドを使って解決することを決意!
「おすすめを出してこない」「再生時間を記憶できる」「チャンネル登録が可能」の3つの要件を満たすWebツールを探した結果、 「Invidious」 に辿り着きました。 おまけで広告が流れなくなる夢もみるようになりました。 不思議だなぁ

セットアップ

python3 -c "import secrets; print(''.join(secrets.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(16)))"

半角英数字16字のパスワードを2つ生成しておきます。

services:
  invidious:
    image: quay.io/invidious/invidious:latest
    # image: quay.io/invidious/invidious:latest-arm64 # ARM64/AArch64 devices
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      # https://github.com/iv-org/invidious/blob/master/config/config.example.yml
      INVIDIOUS_CONFIG: |
        db:
          dbname: invidious
          user: kemal
          password: kemal
          host: invidious-db
          port: 5432
        check_tables: true
        default_locale: "ja-JP"
        locales:
          - "ja-JP"
          - "en-US"
        invidious_companion:
        - private_url: "http://companion:8282/companion"
        # 先ほど生成したキー1個目
        invidious_companion_key: "CHANGE_ME!!"
        domain: youtube.local.example.com
        # 先ほど生成したキー2個目
        hmac_key: "CHANGE_ME!!"
    healthcheck:
      test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
      interval: 30s
      timeout: 5s
      retries: 2
    logging:
      options:
        max-size: "10m"
        max-file: "2"
    depends_on:
      - invidious-db

  companion:
    image: quay.io/invidious/invidious-companion:latest
    environment:
    # 先ほど生成したキー1個目
       - SERVER_SECRET_KEY=CHANGE_ME!! 
    restart: unless-stopped
    logging:
      options:
        max-size: "10m"
        max-file: "2"
    cap_drop:
      - ALL
    read_only: true
    volumes:
      - companioncache:/var/tmp/youtubei.js:rw
    security_opt:
      - no-new-privileges:true

  invidious-db:
    image: postgres:14-alpine
    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: kemal
      LANG: ja_JP.UTF-8
      LC_ALL: ja_JP.UTF-8
      POSTGRES_INITDB_ARGS: "--locale=ja_JP.UTF-8 --encoding=UTF8"
      POSTGRES_SHARED_BUFFERS: "64MB"
      POSTGRES_WORK_MEM: "4MB"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]

volumes:
  postgresdata:
  companioncache:

docker-compose.ymlを作成します。 CHANGE_ME!! のところを先ほど作成したパスワードで置き換えてください。

docker-compose up -d で実行します。

YouTube側の仕様変更により動画再生ができなくなることがあります。 そんなときはこのコマンドで更新してやるとたぶん直ります。

docker-compose down && docker-compose pull && docker-compose up -d

リソース消費

CONTAINER ID   NAME                       CPU %     MEM USAGE / LIMIT    MEM %     NET I/O           BLOCK I/O         PIDS
95677bcf7057   invidious-invidious-1      0.01%     71.59MiB / 3.88GiB   1.80%     75.3MB / 62.6MB   63.8MB / 57.3kB   2
20d36b223ead   invidious-companion-1      3.23%     294.1MiB / 3.88GiB   7.40%     123MB / 70.7MB    165MB / 0B        13
30681853f447   invidious-invidious-db-1   0.01%     31.59MiB / 3.88GiB   0.80%     270kB / 1.08MB    74.8MB / 5.85MB   9

リソース消費はこんな感じです。

コンパニオンの消費がちょっと気がかりかなぁ

使用感

InvidiousのWebUI

アクセスするとこんな感じで動画の一覧が表示されます。 アカウントを作成することでチャンネル登録や再生履歴の記憶が可能です。

動画再生開始時のレスポンスは本家YouTubeには少し劣りますが、ストレスを感じるほどではありませんね。 一度再生を始めれば止まることもなく、快適に視聴できます。 おすすめに変な動画が表示されることもないので、も〜最高!

あと使ってみて始めた気づいたのですが、検索時に登録チャンネルや大手Youtuberの関係ない動画が表示されたりしないので、目的の動画がとても探しやすいです。 不快なおすすめ動画や広告が出ないことよりもこちらの方がダントツでうれしいかな。


アプリなどを作ったりしています! よかったらみていってください→ つくったもの
今のイチオシ↓

山椒ねこまんま
山椒ねこまんま

個人アプリ開発者、ブロガー。

UKキーボードのためだけにMacを選んでいる。