- 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
- Genel seçenekler: tüm indirmeler için varsayılanlar
- Preset'ler: arayüzde indirme başına seçilen, adlandırılmış seçenek paketleri
- İ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
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/
https://github.com/kieraneglin/pinchflat
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ıyorhttps://news.ycombinator.com/item?id=41100820
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
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
Keşfedilebilirlik iyi değil ama ihtiyacın olan kullanım senaryosu bu değilse bakmaya değer
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-dlpkullanmaya başladım ve basit bir uygulama yapmayı düşündüm. Denemeye değer mi? Bu tür alternatifler zaten var mı?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-dlpiç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 olabiliryt-dlpkullanıp stream eder. Parabolic,yt-dlpkullanan özel bir indirme aracıdırhttps://flathub.org/apps/details/io.github.celluloid_player....
https://flathub.org/apps/org.nickvision.tubeconverter
yt-dlpbile ş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ışırKimsenin bahsetmediği şey,
yt-dlpnin artık itag 22 indirememesi ve itag 18 için hız sınırı uygulanması. Bu yüzdenyt-dlp, ses dosyası ile video dosyasını ayrı ayrı indirip sonraffmpegile birleştirmek zorundaYouTube 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
https://freetubeapp.io/
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-dlpile indirdikten sonra, reklamsız şekilde Jellyfin üzerinden stream etmek gibiyt-dlpadımı manuel. Bir Jellyfin eklentisi olsa harika olurduOldukça güzel. Şu anda https://cobalt.tools kullanıyorum, bu da iyi
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
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
İndirdiklerimin çoğunu bir kez izleyip siliyorum
Ü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
İlgili: Yark: Çevrimdışı UI'lı YouTube Arşivleyici
https://news.ycombinator.com/item?id=41100820
yt-dlptabanlı 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üyorumRaspberry 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ı?