6 poin oleh GN⁺ 2024-07-30 | 1 komentar | Bagikan ke WhatsApp
  • Penghentian build ARM 32-bit

    • Versi Node yang baru tidak mendukung ARM 32-bit
    • Karena pembaruan keamanan dan masalah dependensi, perlu migrasi ke OS 64-bit
  • Pengenalan MeTube

    • GUI web untuk youtube-dl (menggunakan fork yt-dlp)
    • Mendukung pengunduhan video dari YouTube dan berbagai situs lain

Menjalankan dengan Docker

  • Perintah Docker

    docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
    
  • Contoh 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
    

Konfigurasi dengan variabel lingkungan

  • UID: ID pengguna yang akan menjalankan MeTube (default: 1000)
  • GID: ID grup yang akan menjalankan MeTube (default: 1000)
  • UMASK: nilai umask (default: 022)
  • DEFAULT_THEME: tema default (light, dark, auto, default: auto)
  • DOWNLOAD_DIR: path penyimpanan unduhan (default: /downloads)
  • AUDIO_DOWNLOAD_DIR: path penyimpanan unduhan khusus audio (default: DOWNLOAD_DIR)
  • DOWNLOAD_DIRS_INDEXABLE: apakah direktori unduhan dapat diindeks (default: false)
  • CUSTOM_DIRS: apakah unduhan ke direktori kustom diaktifkan (default: true)
  • CREATE_CUSTOM_DIRS: apakah pembuatan direktori otomatis didukung (default: true)
  • STATE_DIR: path penyimpanan file persistensi antrean (default: /downloads/.metube)
  • TEMP_DIR: path penyimpanan file unduhan sementara (default: /downloads)
  • DELETE_FILE_ON_TRASHCAN: apakah file yang dihapus dari UI juga dihapus dari server (default: false)
  • URL_PREFIX: path dasar server web (default: /)
  • PUBLIC_HOST_URL: URL dasar untuk tautan unduhan yang ditampilkan di UI
  • PUBLIC_HOST_AUDIO_URL: URL dasar untuk tautan unduhan audio
  • OUTPUT_TEMPLATE: template nama file unduhan (default: %(title)s.%(ext)s)
  • OUTPUT_TEMPLATE_CHAPTER: template nama file video yang dibagi per chapter (default: %(title)s - %(section_number)s %(section_title)s.%(ext)s)
  • YTDL_OPTIONS: opsi tambahan yang diteruskan ke youtube-dl (format JSON)
  • YTDL_OPTIONS_FILE: path file JSON untuk mengisi YTDL_OPTIONS

Menggunakan cookie browser

  • Tambahkan ke docker-compose.yml

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Pasang ekstensi ekstraksi cookie

    • Firefox
    • Chrome

Ekstensi browser

  • Chrome: dapat dipasang dari Google Chrome Webstore
  • Firefox: dapat dipasang dari Firefox Addons

Pintasan iOS

  • Pintasan iOS: mengirim URL dari Safari ke MeTube
  • Perlu memasukkan alamat server dan port

Kompatibilitas iOS

  • Persyaratan file video iOS: memerlukan codec video h264 atau h265 dan codec audio aac
  • Saat mengunduh format MP4, dapat memilih opsi "Best (iOS)"

Bookmarklet

  • Bookmarklet Chrome: mengirim halaman web yang sedang dibuka ke MeTube
  • Saat digunakan di halaman HTTPS, diperlukan reverse proxy HTTPS

Menjalankan di balik reverse proxy

  • Contoh konfigurasi 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;
    }
    
  • Contoh konfigurasi 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>
    
  • Contoh konfigurasi Caddy

    example.com {
      route /metube/* {
        uri strip_prefix metube
        reverse_proxy metube:8081
      }
    }
    

Pembaruan yt-dlp

  • Build nightly otomatis: jika ada versi yt-dlp baru, build dan image Docker akan diperbarui secara otomatis
  • Disarankan memasang dan mengonfigurasi watchtower

Pemecahan masalah dan pengajuan issue

  • MeTube adalah UI untuk yt-dlp: masalah terkait yt-dlp sebaiknya tidak diajukan ke proyek MeTube
  • Disarankan menggunakan perintah yt-dlp secara langsung: uji opsinya lalu terapkan ke YTDL_OPTIONS

Build dan jalankan secara lokal

  • Alat yang dibutuhkan: node.js dan 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
    
  • Build image Docker secara lokal

    docker build -t metube .
    

Catatan pengembangan

  • Berjalan di Windows, macOS, Linux
  • Saat menjalankan server dari VSCode, folder unduhan adalah folder Downloads milik pengguna

Ringkasan GN⁺

  • MeTube adalah GUI web untuk youtube-dl yang menyediakan kemampuan mengunduh video dari berbagai situs
  • Dapat dideploy dan dikonfigurasi dengan mudah menggunakan Docker, serta mendukung kustomisasi melalui berbagai variabel lingkungan
  • Pengunduhan video dapat dilakukan dengan nyaman melalui ekstensi browser dan pintasan iOS
  • Selalu diperbarui ke versi yt-dlp terbaru secara otomatis
  • Proyek dengan fungsi serupa mencakup JDownloader dan Video DownloadHelper

1 komentar

 
GN⁺ 2024-07-30
Komentar Hacker News
  • Tube Archivist berguna untuk mengarsipkan dan mengindeks kanal teknis

    • Menyediakan kemampuan pencarian full-text dan metadata tingkat lanjut
    • Menawarkan fungsi pencarian yang jauh lebih baik daripada Alphabet
  • Menginginkan fitur seperti YouTube TiVo

    • Tidak ingin melewatkan 100 kanal yang sering ditonton
    • Membutuhkan feed prioritas
    • Akan lebih baik jika bisa diunduh dan ditonton melalui DLNA
    • YouTube tidak tertarik memastikan pengguna tidak melewatkan konten yang mereka sukai
  • Sedang berpikir untuk membuat aplikasi sederhana menggunakan yt-dlp

    • Rasanya tidak perlu di-host di server
    • Penasaran apakah ada alternatif
  • Akan bagus jika ada antarmuka yang terintegrasi dengan Jellyfin

    • Bisa mencari YouTube, mengunduh dengan yt-dlp, lalu streaming lewat Jellyfin tanpa iklan
  • Agak heran ada banyak alat mirroring YouTube

    • Penasaran kenapa orang mengunduh/mengarsipkan video
    • Mengarsipkan untuk berjaga-jaga jika videonya dihapus memang bagus, tetapi secara pribadi itu jarang terjadi
    • Merasa setelah menonton video, biasanya tidak perlu menontonnya lagi
  • Server berbasis yt-dlp bisa jadi populer jika dikemas seperti PiHole dengan image sederhana dan aplikasi klien frontend

    • Beli Raspberry Pi, flash image ke kartu microSD, pilih kanal YT favorit, lalu pasang aplikasi klien agar bisa menikmati konten YT lokal tanpa iklan
  • Sedang menggunakan TubeSync

    • Meski fiturnya sederhana dan banyak bug, tetap bekerja cukup baik
    • Bisa berlangganan kanal atau playlist, mengunduh video ke path tertentu, dan memeriksa konten baru sekali sehari
    • Hanya butuh UX untuk pengaturan kanal
    • Cukup simpan file dan biarkan Plex menangani sisanya
    • Penasaran apakah ada opsi yang lebih baik
  • Sedang menggunakan Cobalt.tools

    • Puas dengannya
  • Mengunduh video yang ditambahkan ke playlist lalu menyimpannya ke server Plex bersama

    • Terutama mengarsipkan video konser dan bagian skate
  • Sebagai alat terkait ada Yark: YouTube Archiver with Offline UI