6 puan yazan GN⁺ 2024-07-30 | 1 yorum | WhatsApp'ta paylaş
  • MeTube, yt-dlp için self-hosted bir web arayüzüdür; tarayıcıdan YouTube ve desteklenen onlarca siteden medya indirmenizi sağlar
  • Video, ses, altyazı ve küçük resim indirmeyi destekler; ayrıca oynatma listeleri ve kanallar da çıktı biçimi ve indirme seçenekleri ayarlanarak indirilebilir
  • Kanallara ve oynatma listelerine abone olarak yeni öğeleri düzenli aralıklarla kontrol edebilir, yeni yüklemeleri otomatik olarak kuyruğa ekleyebilirsiniz
  • Docker veya docker-compose ile çalışır; eşzamanlı indirme sayısı, kayıt yolu, dosya adı şablonu, HTTPS, CORS, tema, günlük seviyesi gibi ayarlar ortam değişkenleri ile yapılandırılır
  • yt-dlp seçenekleri genel seçenekler, preset'ler ve indirme başına override sırasıyla birleştirilir; indirme başına override rastgele seçenek girişine izin verdiğinden yalnızca güvenilen ortamlarda etkinleştirilmelidir

MeTube ne yapar

  • MeTube, yt-dlp tabanlı self-hosted bir web arayüzüdür
  • YouTube ve yt-dlp tarafından desteklenen onlarca siteden medya indirebilir
  • Başlıca özellikleri şunlardır
    • Tarayıcı arayüzünden video, ses, altyazı, küçük resim indirme
    • Oynatma listeleri ve kanalları indirme
    • Çıktı yolu ve indirme seçeneklerini yapılandırma
    • Kanal ve oynatma listelerine abone olup yeni öğeleri düzenli olarak kontrol etme
    • Yeni yüklemeleri otomatik olarak indirme kuyruğuna ekleme

Çalıştırma şekli

  • Docker ile doğrudan çalıştırılabilir
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
  • docker-compose örneği ghcr.io/alexta69/metube imajını kullanır ve konteyner içindeki /downloads dizinini ana makinedeki indirme dizinine bağlar
services:
  metube:
    image: ghcr.io/alexta69/metube
    container_name: metube
    restart: unless-stopped
    ports:
      - "8081:8081"
    volumes:
      - /path/to/downloads:/downloads

İndirme ve depolama ayarları

  • MAX_CONCURRENT_DOWNLOADS, aynı anda çalışabilecek indirme sayısını sınırlar; varsayılan değer 3tür
  • DELETE_FILE_ON_TRASHCAN true ise, arayüzdeki “Completed” bölümünden bir öğe çöp kutusuna gönderildiğinde sunucudaki indirilen dosya da silinir
  • DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT, bir oynatma listesinden indirilebilecek en yüksek öğe sayısını belirler; varsayılan 0 değeri sınırsız anlamına gelir
  • Abonelikle ilgili varsayılanlar da ortam değişkenleriyle ayarlanır
    • SUBSCRIPTION_DEFAULT_CHECK_INTERVAL: abonelik başına otomatik kontrol aralığı, varsayılan 60 dakika
    • SUBSCRIPTION_SCAN_PLAYLIST_END: abonelik kontrolünde alınacak en fazla oynatma listesi/kanal öğesi sayısı, varsayılan 50
    • SUBSCRIPTION_MAX_SEEN_IDS: abonelik başına saklanacak video kimliği üst sınırı, varsayılan 50000
  • DOWNLOAD_DIR, indirmelerin kaydedileceği yoldur; Docker imajında varsayılan değer /downloads şeklindedir
  • Yalnızca ses indirmeleri için AUDIO_DOWNLOAD_DIR ile ayrı bir kayıt yolu kullanılabilir
  • CUSTOM_DIRS ve CREATE_CUSTOM_DIRS ile arayüzden indirme alt dizinleri seçilebilir veya otomatik oluşturulabilir
  • STATE_DIR içinde queue.json, pending.json, completed.json, subscriptions.json gibi kalıcı durum dosyaları saklanır
  • TEMP_DIR, geçici indirme dosyalarının yoludur; SSD veya RAM dosya sistemi kullanmak performansa yardımcı olabilir ancak RAM dosya sistemi indirmelerin devam ettirilmesini engelleyebilir

Dosya adı ve yt-dlp seçenekleri

  • OUTPUT_TEMPLATE, indirilen dosyaların adlandırma şablonudur; varsayılan değer %(title)s.%(ext)s şeklindedir
  • Bölüm, oynatma listesi ve kanal indirmeleri için ayrı şablonlar ayarlanabilir
    • OUTPUT_TEMPLATE_CHAPTER

    • OUTPUT_TEMPLATE_PLAYLIST

      • OUTPUT_TEMPLATE_CHANNEL
      • yt-dlp seçenekleri bir JSON nesnesi olarak belirtilir
      • Seçenek hiyerarşisi geniş kapsamdan dar kapsama doğru uygulanır
      1. Genel seçenekler: tüm indirmeler için varsayılanlar
      2. Preset'ler: arayüzde indirme başına seçilen, adlandırılmış seçenek paketleri
      3. İndirme başına override: yalnızca belirli bir indirmeye uygulanan serbest girişli seçenekler
      • Çakışan anahtarlar varsa daha spesifik ayar önceliklidir
      • İndirme başına override, preset'lerden önceliklidir
      • Preset'ler, genel seçeneklerden önceliklidir
      • JSON içinde bir seçenek değerini null yapmak, o indirmede ilgili seçeneği kaldırır
      • YTDL_OPTIONS_FILE ve YTDL_OPTIONS_PRESETS_FILE, dosya değişikliklerini izler ve otomatik olarak yeniden yükler; bu yüzden konteyneri yeniden başlatmak gerekmez
      • Dosyalar ve ortam değişkenleri birlikte kullanılıp aynı anahtar ya da aynı preset adı tanımlanırsa dosya ayarları önceliklidir

Preset'ler ve override'lar

  • Preset'ler arayüzde Advanced Options altında “Option Presets” olarak gösterilir
  • Örnek preset'ler şu işlemleri yapar
    • sponsorblock: sponsor, selfpromo, interaction segmentlerini kaldırır
    • embed-subs: İngilizce ve Almanca altyazıları indirir ve video dosyasına gömer
    • limit-rate: indirme hızını yaklaşık 5 MB/s ile sınırlar
  • Birden fazla preset seçilirse sırayla uygulanır; aynı seçenek için sonraki preset öncekinin üzerine yazar
  • ALLOW_YTDL_OPTIONS_OVERRIDES true olarak ayarlanırsa arayüzde “Custom yt-dlp Options” adlı serbest girişli JSON alanı görünür
  • İndirme başına override varsayılan olarak devre dışıdır
  • Bu özellik açılırsa arayüze erişen kişi rastgele yt-dlp API seçenekleri verebilir ve bazı seçenekler konteyner içinde rastgele komut çalıştırılmasına yol açabilir; bu nedenle yalnızca güvenilen ortamlarda etkinleştirilmelidir
  • MeTube, ilk metadata alma aşamasında kendi extract_flat, noplaylist davranışını zorunlu kılar; preset'ler bu aşamadaki anahtarların üzerine yazamaz

Çerezler, tarayıcı entegrasyonu ve hızlı çalıştırma

  • Kısıtlı veya özel videoları indirmek gerektiğinde tarayıcı çerezleri kullanılabilir
    • Firefox veya Chrome uzantısıyla çerezleri cookies.txt olarak dışa aktarın
    • MeTube'da Advanced Options içindeki Upload Cookies ile yükleyin
    • Aynı bölümdeki Delete Cookies ile yüklenen çerezleri silin
  • Tarayıcı uzantısı videoya sağ tıklayıp doğrudan MeTube'a göndermeyi sağlar
    • HTTPS sayfalarında kullanmak için MeTube örneğinin bir HTTPS reverse proxy arkasında olması gerekir
    • Uzantı chrome-extension://... veya moz-extension://... kaynağından istek gönderdiği için CORS_ALLOWED_ORIGINS=* ayarı gerekir
  • Chrome uzantısı Google Chrome Webstore üzerinden kurulabilir veya kaynak kodundan yüklenebilir
  • Firefox uzantısı Firefox Addons üzerinden kurulabilir veya kaynak kullanılabilir
  • iOS Shortcut, Safari paylaşım menüsünden URL'yi MeTube'a gönderebilir
  • Bookmarklet, o anda açık web sayfasını MeTube'a gönderir; HTTPS sayfalarında MeTube'un HTTPS olarak yapılandırılmış olması ya da HTTPS reverse proxy arkasında bulunması gerekir
  • Bookmarklet, mevcut sayfa kaynağından MeTube'a cross-origin istek gönderdiği için kullanılacak site kaynakları CORS_ALLOWED_ORIGINS içine eklenmelidir
  • Raycast için MeTube extension, videoları doğrudan Raycast'ten eklemeyi sağlar

Web sunucusu, HTTPS, reverse proxy

  • Web sunucusuna ilişkin ayarlar ortam değişkenleriyle düzenlenir
    • HOST varsayılan olarak 0.0.0.0
    • PORT varsayılan olarak 8081
    • URL_PREFIX, reverse proxy arkasında alt yol dağıtımları için kullanılır
    • PUBLIC_HOST_URL ve PUBLIC_HOST_AUDIO_URL, tamamlanan dosyaların indirme bağlantıları için temel URL'yi değiştirir
  • HTTPS true yapılıp CERTFILE ve KEYFILE belirtilirse MeTube HTTPS modunda çalışır
  • Reverse proxy, HTTPS sonlandırma veya kimlik doğrulama amacıyla kullanılabilir
  • linuxserver/swag imajı, MeTube için subfolder ve subdomain yapılandırma parçalarının yanı sıra Authelia kimlik doğrulama ayarlarını da içerir
  • NGINX örneği, /metube/ yolunu http://metube:8081 adresine proxy'ler ve WebSocket çalışması için Upgrade ile Connection başlıklarını ayarlar
  • Apache ve Caddy için reverse proxy örnekleri de sağlanır

Güncellemeler, sorun giderme ve yerel geliştirme

  • MeTube, yt-dlp'ye bağlıdır ve video sitesi düzenlerindeki değişiklikler nedeniyle yt-dlp sık sık güncellenmelidir
  • Yeni bir yt-dlp kararlı sürümü çıktığında yeni MeTube Docker imajı otomatik olarak yayımlanır
  • Konteyneri güncel tutmak için watchtower kullanılabilir
  • yt-dlp nightly kanalını takip etmek için YTDL_NIGHTLY_UPDATE_TIME değişkenine günlük yükseltme ve MeTube yeniden başlatma zamanını HH:MM biçiminde ayarlayın
  • Kimlik doğrulama, son işlem, izinler ve YTDL_OPTIONS sorunlarında önce doğrudan yt-dlp üzerinde debug yapıp, çalışan seçenekleri sonra MeTube'a taşımak önerilir
  • Yerel derleme ve çalıştırma için Node.js 22+ ve Python 3.13 gereklidir
  • Arayüz pnpm ile derlenir, Python bağımlılıkları uv sync ile kurulur ve ardından uv run python3 app/main.py ile çalıştırılır
  • Docker imajı docker build -t metube . komutuyla yerelde derlenebilir; bu süreçte arayüz de birlikte derlenir

1 yorum

 
GN⁺ 2024-07-30
Hacker News yorumları
  • Tube Archivist de değerlendirilebilir. Sadece birkaç video indirmek için fazla gelebilir ama sevdiğim teknoloji kanallarını arşivlemek ve indekslemek için kullanıyorum
    Transkript/altyazıların yanı sıra yorumlar, başlıklar ve açıklamalar dahil tüm metin ve meta verilerde arama yapılabiliyor; sinir bozucu biçimde Alphabet’in sunduğundan çok daha iyi
    https://www.tubearchivist.com/

    • TubeArchivist’e bakarken 3 konteyner gerektirmesi hoşuma gitmedi. Sonra selfhosted subreddit’inde Pinchflat’i buldum; tek konteynerle çalışıyor, dağıtımı kolaydı ve şimdiye kadar sorunsuz çalışıyor
      https://github.com/kieraneglin/pinchflat
    • Bundan kaçınmak isterim. Dosya adlandırması, bir veritabanının var olduğu varsayımına dayanıyor
      Geçici depolama için olsa anlarım ama kendine “arşivleme” yazılımı diyen bir araç, korumaya çalıştığı veriden daha uzun ömürlü olmayabileceğini varsaymalı
      İndirme özelliği olan bir PeerTube klonu gibi göründüğü için umutlanmıştım ama çıktısını görünce hevesim kaçtı; yt-dlp’ye akıllıca ayarlar ve betikler eklemek arşivleme işini daha doğru yapıyor
    • Google kendi ürünlerini yapısal ve gelişmiş bir şekilde rahatça kullanılabilir hâle getirmez. Çünkü bu yöntem kullanıcı için fazla avantajlı olur ve kontrolü fazla devreder. Google böyle şeylerden hoşlanmaz
    • Bugün daha önce ana sayfaya çıkan başka bir seçenek de var: Yark: YouTube Archiver with Offline UI
      https://news.ycombinator.com/item?id=41100820
    • Tube Archivist’e geçmeyi uzun zamandır düşünüyorum ama TubeSync ile topladığım birkaç TB YouTube videosu var, tekrar indirmek istemiyorum
      Neyse ki dosya adlarını kaydederken kullandığım biçim dizesi var; TubeSync de Django ve PostgreSQL arka ucunu kullandığı için YouTube ID’leriyle ilişkilendirebilirim belki. Yine de geçiş epey kâbus gibi görünüyor
  • Aslında istediğim şey YouTube TiVo
    Neredeyse dini bir titizlikle takip ettiğim ama nadiren yükleme yapan yaklaşık 100 kanal var ve bu kanalların videolarını kesinlikle kaçırmak istemiyorum
    Günde dört kez video atan kanalların yüzlerce yeni videosu arasında YouTube’da dolaşıp gerçekten izlemek istediğim 1-2 videoyu bulmak da istemiyorum. Sonunda kaçırıyorum
    Gerçekten izlemek istediğim ya da izlemem gerekenlerden oluşan bir öncelikli akış verse iyi olurdu; hepsini indirip DLNA üzerinden izleyebilsem daha da iyi olur
    Sevdiğimiz şeyleri kaçırmamamızı sağlamak YouTube’un çalışma biçimi değil. YouTube’un yöntemi, 3 dakikalık videoyu 18-22 dakikaya uzatan şeyleri izletip geri bildirim döngüsünü yüzümüze bağlamak

    • Bu YouTube abonelikleriyle çözülmüyor mu? O 100 kanala abone olup abonelikler sayfasını yer imlerine eklersen, yalnızca izlemek istediklerinden oluşan bir öncelikli akışın olur
      Hesap oluşturmak istemiyorsan sorun değil, NewPipe sana iyi uyar; ama elle seçtiğin kanalların videolarını kronolojik sırayla gösteren özel bir sayfa varken “sevdiğimiz şeyleri kaçırmamamızı sağlamak YouTube’un çalışma biçimi değil” demek biraz garip
    • NewPipe bu kullanım için çok uygun. Ana sayfa içeriğinden “Default Kiosk” sütununu kaldırıp sadece “What's New”i bırakırsan yalnızca abone olduğun kanalların videolarını görebilirsin. NewPipe’ın abonelikleri Google hesabıyla hiç entegre değil
    • Bildiğim kadarıyla YouTube hâlâ RSS kullanıyor. Bunu deneyebilirsin
    • Bu amaçla Invidious kullanıyorum. Yalnızca abonelikleri hedefleyen bir öncelikli akışı var, hoşuma gidiyor
      Keşfedilebilirlik iyi değil ama ihtiyacın olan kullanım senaryosu bu değilse bakmaya değer
    • Tam olarak bunu yapmak için kullandığım fraidycat eklentisi var
      https://fraidyc.at/
  • Anlamadığım bir şey var. Neden bir sunucuda barındırmak gerekiyor? Windows/Linux/mac üzerinde çalışan bağımsız bir uygulama olsa olmaz mı?
    Yakın zamanda yt-dlp kullanmaya başladım ve basit bir uygulama yapmayı düşündüm. Denemeye değer mi? Bu tür alternatifler zaten var mı?

    • İsterseniz bir Windows/Linux/OSX cihazı ya da onun üzerindeki bir sanal makine/konteyner sunucu olabilir. Böylece geliştirici tarafın web UX'i ile yerel UX'i ayrı ayrı yapması gerekmez
      Birçok kişi self-hosting uygulamalarını harici bir sunucuda, homelab'de ya da bunların bir kombinasyonunda çalıştırıyor ve bu kaynakları yedekleme vb. olanakları olan bir altyapı gibi ayarlıyor. PC/dizüstü/tablet/telefonu nispeten basit bir istemci ya da önbellek olarak bırakırsanız, kaybolma veya hasar durumunda sunucuyla senkronize edilmiş yerel içeriği yeniden alıp kolayca değiştirebilirsiniz. Bu tür self-hosting'in popüler olmasının nedenlerinden biri bu
      yt-dlp için sarmalayıcı olan birkaç masaüstü uygulaması gördüm. Kendim kullanmadığım için kararlılıkları veya güvenilirlikleri hakkında konuşmam zor; ama sırf eğlence için yenisini yapmak istemiyorsanız önce aramanız iyi olur. İstediğiniz şey zaten mevcut olabilir
    • Celluloid, desteklenen bir URL'yi açmasını söylediğinizde otomatik olarak yt-dlp kullanıp stream eder. Parabolic, yt-dlp kullanan özel bir indirme aracıdır
      https://flathub.org/apps/details/io.github.celluloid_player....
      https://flathub.org/apps/org.nickvision.tubeconverter
    • Yalnızca YouTube videoları indirecekseniz yt-dlp bile şart değil. Çok daha az kod ve karmaşıklıkla yapılabiliyor; ben bunu çok küçük bir C programı olarak kullanıyorum. Küçük bir shell betiği de gayet iyi çalışır
      Kimsenin bahsetmediği şey, yt-dlpnin artık itag 22 indirememesi ve itag 18 için hız sınırı uygulanması. Bu yüzden yt-dlp, ses dosyası ile video dosyasını ayrı ayrı indirip sonra ffmpeg ile birleştirmek zorunda
      YouTube reklam gelirleri konsensüs tahminlerini kıl payı kaçırdı. YouTube videolarına erişilebilirlik ileride daha da kötüleşebilir
      Belirli formatları seçme alışkanlığınız yoksa bunu pek fark etmeyebilirsiniz. Örneğin bazı insanlar yıllardır yalnızca itag 18 ve 22 kullanıyordu
    • Freetube da var
      https://freetubeapp.io/
    • Videoları şu an kullandığınız cihaza değil, bir NAS'a veya ev sunucusuna indirip saklamak isteyebilirsiniz
      Docker'laştırılmış bir web uygulamasını yapmak ve sürdürmek, Windows, macOS, Android, iOS ve Linux için ayrı ayrı masaüstü/mobil istemciler geliştirmekten çok daha kolaydır
  • Jellyfin ile entegre çalışan bir arayüz olsa güzel olurdu. YouTube'da arama yapıp yt-dlp ile indirdikten sonra, reklamsız şekilde Jellyfin üzerinden stream etmek gibi

    • Neredeyse böyle kullanıyorum; yalnızca yt-dlp adımı manuel. Bir Jellyfin eklentisi olsa harika olurdu
  • Oldukça güzel. Şu anda https://cobalt.tools kullanıyorum, bu da iyi

    • Mükemmel. Orijinal YouTube ses formatını mp3'e transcode etmeden indirme seçeneği var
  • iOS için Brave'de YouTube videolarını indirip cihaza kaydeden bir oynatma listesi düğmesi olduğunu öğrendim. PiP ve çevrimdışı oynatma mümkün, reklam da yok
    Mozilla iOS backend'ini temel alan açık lisansı kullanıyor; daha fazla uygulamanın neden böyle yapmadığını merak ediyorum. Apple'ın kabul etmesini sağlayacak bir yol bulmuşlar ve CEO da burada bu tekniğin meşru olduğunu savunan bir yazı paylaşmıştı
    Özünde, yalnızca normal YouTube web sitesi içinde video yüklendikten sonra çalışıyor; YouTube'a özgü değil, herhangi bir video içeriğine uygulanabilen okuma modu düğmesi gibi bir yöntem

  • Bu kadar çok YouTube yansılama aracı olması biraz şaşırtıcı. Böyle bir şey kullanıyorsanız, videoyu YouTube'dan doğrudan stream etmek yerine indirme/arşivleme nedeniniz ne?
    YouTube'dan silinmesi ihtimaline karşı saklamanın iyi olabileceğini anlıyorum; ama benim durumumda bu çok nadir oluyor. Videoyu izleyip geçiyorum, tekrar izleyemesem de pek umursamıyorum

    • YouTube'dan stream etmek yerine indirme veya arşivleme için birçok neden var
      Birincisi, reklamları kaldırmak birçok kişi için oldukça büyük bir neden
      İkincisi, zaten yazdığınız gibi, telif hakkı iddiaları veya başka şikâyetler nedeniyle video ya da tüm kanal kaldırılırsa tekrar stream edemezsiniz. İzlediğiniz içeriğe bağlı olarak bu, bazı insanlar için sizin için olduğundan çok daha önemli olabilir
      Üçüncüsü, çevrimdışı oynatma için indirebilirsiniz. Resmî YouTube uygulamasıyla da mümkün ama Premium ücreti ödemeniz gerekiyor; fiyatı da fazla görünüyor ve yine de silinme sorunundan etkileniyor
      Dördüncüsü, yerel indeksleme. Bir videoya daha sonra tekrar bakmak veya paylaşmak için referans vermek istiyorsanız, YouTube kopyasının yer imini tutmak ya da her seferinde aramak yerine kendi yapınız içinde düzenlemek daha kullanışlı olabilir
      Bu nedenlerin bir karışımı olabilir; ayrıca benim düşünmediğim ya da hatırlamadığım başka nedenler de vardır
    • Benim için insanların VCR kullanmasıyla aynı neden. “Telif hakkı ihlali” değil; daha sonra izlemek ya da internet bağlantısı olmadığında veya yavaş olduğunda izlemek için kaydetmek
      İndirdiklerimin çoğunu bir kez izleyip siliyorum
    • Çocukların ev ağında YouTube'u engelliyoruz; bunun yerine kendi seçtiğimiz DadTube'a erişmelerini sağlıyoruz
    • Aracın neden var olduğunu merak ettiğinizi söylerken, o aracın var olmasını gerektiren en büyük nedeni zaten kendiniz söylüyorsunuz
      Üstelik YouTube stream etmenin mümkün olmadığı zamanlar da var. İnternet kesilmiş olabilir, yurt dışı mobil tarifesi yüzünden maliyet sorun olabilir ya da sadece berbat reklamlardan kurtulmak isteyebilirsiniz
    • Nedeni bant genişliği kullanım kotası. Aynı müzik videosu oynatma listesini tekrar tekrar çalmak istiyorsanız kotayı epey tüketir
  • İlgili: Yark: Çevrimdışı UI'lı YouTube Arşivleyici
    https://news.ycombinator.com/item?id=41100820

  • yt-dlp tabanlı sunuculardan birini çok basit, Pi-hole benzeri bir imaj yazma aracı ve oynatma için düzgün bir frontend istemci uygulamasıyla sarmalarsanız, Pi-hole’ın daha az teknik kullanıcılara yayıldığı gibi bunun da büyük çıkış yapabileceğini düşünüyorum
    Raspberry Pi alıp microSD karta imaj yazıyorsunuz, sevdiğiniz YouTube kanallarını seçiyorsunuz, istemci uygulamasını kuruyorsunuz; böylece sevdiğiniz tüm YouTube içerikleri yerelde, reklamsız sunuluyor

  • Şu anda TubeSync kullanıyorum. İşlevleri basit ve bolca hatası var ama benim için yeterince iyi çalışıyor
    Gereken tek şey kanallara veya oynatma listelerine abone olmak, videoları belirli bir yola indirmek ve yeni içerik olup olmadığını günde bir kez kontrol etmek
    Gereken UX yalnızca kanal ayarları; sonrasında dosyaları kaydedip gerisini Plex’e bırakmak yeterli. Daha iyi bir seçenek bilen var mı?