MeTube: セルフホスティング対応の YouTube ダウンロードプログラム
(github.com/alexta69)-
32ビット ARM ビルドの終了
- 新しい Node バージョンが 32ビット ARM をサポートしていない
- セキュリティアップデートと依存関係の問題により、64ビット OS への移行が必要
-
MeTube の紹介
- youtube-dl の Web GUI(yt-dlp フォークを使用)
- YouTube および複数のサイトからの動画ダウンロードをサポート
Docker で実行
-
Docker コマンド
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube -
docker-compose の例
version: "3" services: metube: image: ghcr.io/alexta69/metube container_name: metube restart: unless-stopped ports: - "8081:8081" volumes: - /path/to/downloads:/downloads
環境変数で設定
- UID: MeTube を実行するユーザー ID(デフォルト: 1000)
- GID: MeTube を実行するグループ ID(デフォルト: 1000)
- UMASK: umask 値(デフォルト: 022)
- DEFAULT_THEME: デフォルトテーマ(
light、dark、auto、デフォルト:auto) - DOWNLOAD_DIR: ダウンロード保存パス(デフォルト:
/downloads) - AUDIO_DOWNLOAD_DIR: 音声専用ダウンロードの保存パス(デフォルト:
DOWNLOAD_DIR) - DOWNLOAD_DIRS_INDEXABLE: ダウンロードディレクトリをインデックス可能にするかどうか(デフォルト:
false) - CUSTOM_DIRS: カスタムディレクトリへのダウンロードを有効にするかどうか(デフォルト:
true) - CREATE_CUSTOM_DIRS: ディレクトリの自動作成をサポートするかどうか(デフォルト:
true) - STATE_DIR: キュー永続化ファイルの保存パス(デフォルト:
/downloads/.metube) - TEMP_DIR: 一時ダウンロードファイルの保存パス(デフォルト:
/downloads) - DELETE_FILE_ON_TRASHCAN: UI で削除したファイルをサーバー上でも削除するかどうか(デフォルト:
false) - URL_PREFIX: Web サーバーのベースパス(デフォルト:
/) - PUBLIC_HOST_URL: UI に表示されるダウンロードリンクのベース URL
- PUBLIC_HOST_AUDIO_URL: 音声ダウンロードリンクのベース URL
- OUTPUT_TEMPLATE: ダウンロードファイル名テンプレート(デフォルト:
%(title)s.%(ext)s) - OUTPUT_TEMPLATE_CHAPTER: チャプター分割された動画ファイル名テンプレート(デフォルト:
%(title)s - %(section_number)s %(section_title)s.%(ext)s) - YTDL_OPTIONS: youtube-dl に渡す追加オプション(JSON 形式)
- YTDL_OPTIONS_FILE:
YTDL_OPTIONSを埋めるための JSON ファイルパス
ブラウザ Cookie の使用
-
docker-compose.yml に追加
volumes: - /path/to/cookies:/cookies environment: - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"} -
Cookie 抽出拡張機能をインストール
- Firefox
- Chrome
ブラウザ拡張機能
- Chrome: Google Chrome Webstore からインストール可能
- Firefox: Firefox Addons からインストール可能
iOS ショートカット
- iOS ショートカット: Safari から URL を MeTube に送信
- サーバーアドレスとポートの入力が必要
iOS 互換性
- iOS 動画ファイル要件: h264 または h265 動画コーデックと aac 音声コーデックが必要
- MP4 形式でダウンロードする場合は "Best (iOS)" オプションを選択可能
ブックマークレット
- Chrome ブックマークレット: 現在開いている Web ページを MeTube に送信
- HTTPS ページで使用する場合は HTTPS リバースプロキシが必要
リバースプロキシ配下で実行
-
NGINX 設定例
location /metube/ { proxy_pass http://metube:8081; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } -
Apache 設定例
<Location /metube/> ProxyPass http://localhost:8081/ retry=0 timeout=30 ProxyPassReverse http://localhost:8081/ </Location> <Location /metube/socket.io> RewriteEngine On RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:8081/socket.io/$1 [P,L] ProxyPass http://localhost:8081/socket.io retry=0 timeout=30 ProxyPassReverse http://localhost:8081/socket.io </Location> -
Caddy 設定例
example.com { route /metube/* { uri strip_prefix metube reverse_proxy metube:8081 } }
yt-dlp の更新
- 自動ナイトリービルド: 新しい yt-dlp バージョンがあれば自動でビルドし、Docker イメージを更新
- watchtower のインストールと設定を推奨
トラブルシューティングと Issue 登録
- MeTube は yt-dlp の UI: yt-dlp 関連の問題は MeTube プロジェクトに登録しない
- yt-dlp コマンドを直接使うことを推奨: オプションをテストしてから
YTDL_OPTIONSに適用
ローカルビルドと実行
-
必要なツール: node.js および Python 3.11
cd metube/ui npm install node_modules/.bin/ng build cd .. pip3 install pipenv pipenv install pipenv run python3 app/main.py -
Docker イメージをローカルビルド
docker build -t metube .
開発ノート
- Windows、macOS、Linux で動作
- VSCode でサーバーを実行する場合、ダウンロードフォルダはユーザーの Downloads フォルダ
GN⁺ のまとめ
- MeTube は youtube-dl の Web GUI で、複数のサイトから動画をダウンロードできる機能を提供
- Docker を使って簡単にデプロイと設定ができ、さまざまな環境変数でカスタマイズ可能
- ブラウザ拡張機能と iOS ショートカットにより、手軽に動画をダウンロードできる
- yt-dlp の最新バージョンを自動更新し、常に最新の状態を維持
- 類似機能を持つプロジェクトには JDownloader、Video DownloadHelper などがある
1件のコメント
Hacker Newsの意見
Tube Archivistは技術系チャンネルのアーカイブとインデックス化に便利
YouTube TiVoのような機能が欲しい
yt-dlpを使ってシンプルなアプリを作ろうかと考えているJellyfinと連携するインターフェースがあるとよい
yt-dlpでダウンロードし、その後広告なしでJellyfin経由でストリーミングできるYouTubeのミラーリングツールがたくさんあるのは不思議
yt-dlpベースのサーバーが、PiHoleのようにシンプルなイメージャーとフロントエンドのクライアントアプリとしてパッケージ化されれば人気が出るかもしれないTubeSyncを使っている
Cobalt.toolsを使っている
プレイリストに追加した動画をダウンロードして、共有Plexサーバーに保存している
関連ツールとしてYark: YouTube Archiver with Offline UIがある