- Agar tetap dapat menggunakan unduhan YouTube secara normal di yt-dlp, dalam waktu dekat instalasi Deno (atau runtime JavaScript yang didukung) akan menjadi persyaratan wajib
- Karena perubahan terbaru di pihak YouTube, tantangan JS tidak lagi dapat diselesaikan hanya dengan "interpreter" JavaScript bawaan
- Pengguna executable PyInstaller hanya perlu menyiapkan Deno, sedangkan jika memakai paket PyPI perlu memasang komponen JavaScript tambahan
- Dukungan untuk runtime JavaScript lain (Node, Bun, dll.) tetap terbuka, tetapi hanya Deno yang dinilai sesuai dari sisi keamanan dan sandboxing
- Opsi dan panduan terpisah untuk cara instalasi Deno dan dependensi terkait, serta penentuan path, akan disediakan nanti
Pengumuman perubahan unduhan YouTube di yt-dlp dan persyaratan baru
Latar belakang penerapan persyaratan baru
- Dalam waktu dekat, agar fitur unduhan YouTube tetap bisa digunakan dengan normal, pengguna wajib memasang Deno atau runtime JavaScript lain yang didukung
- Selama ini yt-dlp menyelesaikan tantangan JS dari YouTube dengan memanfaatkan interpreter JavaScript bawaan, tetapi karena perubahan logika internal YouTube baru-baru ini, pendekatan lama tersebut tidak lagi memadai
- Skala perubahan sangat besar, sehingga agar dapat berfungsi normal, yt-dlp kini harus menggunakan algoritme berbasis runtime JavaScript penuh untuk bisa melewati permintaan ke YouTube
Persiapan dan cara penanganan menurut jenis pengguna
- Pasang Deno (atau runtime JS yang didukung)
- Runtime tambahan yang didukung akan diumumkan kemudian melalui FAQ dan lainnya
- Mungkin perlu memasang sebagian komponen JavaScript yang dibutuhkan yt-dlp
- Kebutuhan kerja tambahan bergantung pada cara instalasi dan bentuk distribusi yt-dlp yang digunakan
Checklist menurut distribusi resmi
- Executable resmi yang disediakan lewat PyInstaller (yt-dlp.exe, yt-dlp_macos, yt-dlp_linux, dll.)
- Cukup pasang Deno; komponen tambahan sudah disertakan di dalam executable
- Paket PyPI (pip, pipx, dll.)
- yt-dlp perlu dipasang dengan grup dependensi opsi
default dan diperbarui ke versi terbaru
- Contoh:
pip install -U "yt-dlp[default]"
- Binary zipimport resmi (yt-dlp untuk Unix)
- Perlu menambahkan flag agar Deno mengunduh dependensi npm
- Atau, perlu memasang paket pemecah JS khusus untuk yt-dlp ke lingkungan Python secara terpisah (nama opsi dan paket akan diumumkan nanti)
- Paket pihak ketiga (pacman, brew, dll.)
- Tindakan yang diperlukan bisa berbeda tergantung kebijakan distribusi tersebut, tetapi pengguna dapat mengikuti metode penanganan untuk binary zipimport
Diskusi terkait runtime dan keamanan
- Dukungan untuk runtime JS alternatif seperti Node, Bun, dll. dimungkinkan, tetapi saat ini runtime tersebut belum menyediakan fitur keamanan dan sandboxing setara Deno
- Dukungan untuk runtime JS lain masih dalam pembahasan, dan sampai ada keputusan final, panduan akan berfokus pada Deno sebagai acuan
Panduan tambahan terkait instalasi Deno
- Sama seperti yt-dlp, Deno dapat digunakan hanya dengan mengunduh executable tunggal yang disediakan di GitHub lalu menaruhnya di path
- Ke depannya, opsi
--js-runtimes di yt-dlp akan ditambahkan agar path ke executable Deno bisa ditentukan (nama opsi dan cara pakai dapat berubah)
- Setelah mengunduh Deno dengan Curl atau cara lain, ia dapat berfungsi normal jika diletakkan di folder yang sama dengan executable yt-dlp
FAQ dan panduan tambahan
- Bergantung pada OS atau package manager yang digunakan, mungkin perlu menambahkan PATH
- Pada lingkungan seperti Linux, Deno dapat otomatis terdaftar di PATH
- Pertanyaan tambahan dan masalah terkait instalasi akan didukung melalui FAQ atau komunitas
Respons komunitas lainnya dan pembaruan selanjutnya
- Sejumlah pengguna menanyakan berbagai dampak lanjutan, seperti apakah dukungan untuk sistem 32bit akan dihentikan, opsi distribusi, dan lain-lain
- Tim pengembang yt-dlp sedang menyiapkan panduan dan skema dukungan yang lebih baik berdasarkan pelaporan issue, patch, dan masukan komunitas
Kesimpulan dan ringkasan
- Karena perubahan pada struktur sistem YouTube, struktur kerja dan spesifikasi kebutuhan yt-dlp berubah secara signifikan
- Perubahan pentingnya adalah, jika ingin tetap mengunduh YouTube secara normal, pengguna wajib menyiapkan runtime JS seperti Deno
- Perlu segera menindaklanjuti sesuai panduan untuk masing-masing metode distribusi resmi
- Panduan tambahan, FAQ, dan petunjuk instalasi akan terus disediakan
1 komentar
Komentar Hacker News
Saya pelanggan berbayar YouTube Premium. Akhir pekan lalu saya mencoba mengunduh video untuk ditonton di kereta, tetapi di iPad dan iPhone sama-sama macet di tahap “Menunggu unduhan..”. Restart juga tidak membantu, jadi setelah mencoba selama 1 jam saya menyerah. Akhirnya saya mengunduh videonya dengan yt-dlp, memindahkannya ke flash drive USB-C, lalu menontonnya. Kalau kebijakan “pembatasan berbagi premium antar keluarga” benar-benar diterapkan dalam waktu dekat, saat itulah saya sungguh akan berhenti berlangganan. Soalnya keluarga saya sangat menikmati pengalaman tanpa iklan
Saya juga pelanggan Premium, tetapi mengalami masalah serupa di aplikasi iPad. Saat ingin mengunduh video untuk bayi saya tonton, sering kali tidak berhasil sekaligus. Karena kesal, saya membeli Samsung Galaxy Tab A7 bekas dan memasang custom ROM LineageOS. Sekarang semua media yang saya mau saya simpan di kartu SD 1TB dan saya putar dengan VLC tanpa masalah. Selain itu, NewPipe yang saya dapat dari toko F-Droid bisa mengunduh video YouTube jauh lebih stabil daripada aplikasi resmi. Awalnya saya berniat mengisi media dengan alat seperti yt-dlp, tetapi sekarang sudah tidak perlu lagi
Saya membayar YouTube Premium, tetapi di ponsel saya menonton lewat ReVanced karena harus mematikan penerapan terjemahan otomatis. Saya tidak mengerti kenapa pengguna tidak bisa mengubah pengaturan itu di aplikasi resmi
Kalau Anda mengunggah video ke YouTube lalu mencoba mengunduhnya dari creator dashboard—misalnya setelah live stream tanpa backup lokal, atau saat komputer sedang berat—Anda cuma bisa mendapatkannya dalam kualitas rendah 720p. Sebaliknya, kalau diunduh dengan yt-dlp, Anda bisa mendapatkan kualitas terbaik
Saya membatalkan langganan karena pengalaman tanpa iklan tidak berfungsi di YouTube Kids (saya memakai ShieldTV). Mungkin itu bug, tetapi tanpa dukungan pelanggan tidak ada yang bisa dilakukan. Dulu saya pelanggan berbayar Play Music, lalu dipaksa pindah ke YouTube, jadi ini benar-benar kekecewaan terakhir
Kalau Anda menunggu kabar soal kebijakan pembatasan berbagi keluarga, saya ingin memberi tahu bahwa memang sudah ada berita terkait. Saya juga menerima email dari YouTube soal ini. Saat ini saya masih menggunakannya tanpa iklan, tetapi saya tidak tahu kapan kebijakan itu benar-benar diterapkan. Anda bisa melihat artikel terkait
Saya kagum dengan upaya engineering yang masuk ke “interpreter JavaScript” milik yt-dlp yt-dlp jsinterp.py
Ini pendekatan yang sangat tepat untuk menyelesaikan masalah. Sangat mengesankan bahwa mereka bisa mengimplementasikannya sejauh ini tanpa overhead tambahan
Bagian ini justru inti tersembunyi terbesar dari pengumuman kali ini. Saya tidak tahu sebelumnya bahwa strukturnya sudah serumit ini, dan itu sangat mengagumkan
Ini metode yang hanya menginterpretasikan sebagian JavaScript. Lihat diskusi HN terkait di tautan ini
Sekilas melihat kodenya membuat saya jadi tahu tentang ChainMap di Python
Saya penasaran sebenarnya seberapa banyak JavaScript yang diinterpretasikan, dan karena kodenya bahkan tidak sampai 1.000 baris, apakah ini bisa dipakai di kelas pengantar compiler
Saya seorang “digital hoarder” yang sudah mengumpulkan media digital lebih dari 30 tahun. Saya tidak punya media fisik seperti VHS atau DVD, semuanya saya simpan secara digital. Ada juga beberapa materi langka atau yang berpotensi hilang. Istri saya jadi tertarik dengan sistem saya yang “berjalan seperti Netflix di rumah”, dan dia senang menonton tanpa iklan. Saya tidak pernah menganggap diri saya istimewa dan mengira semua orang akan memakai streaming. Selama bertahun-tahun saya selalu bilang ke orang sekitar, “kalau ada program yang kamu suka di media yang saya punya, bilang saja.” Dalam 2 tahun terakhir, keluarga dan teman mulai meminta akses ke server Jellyfin saya atau meminta saya membangun server kecil di bawah TV mereka. Belakangan saya juga menambahkan pengarsipan kanal YouTube ke Jellyfin, dan untuk tiap kanal saya memakai direktori serta perintah yt-dlp agar video diunduh otomatis. Hanya saja, karena saya tidak bisa mengunduhnya dalam codec h264 yang saya inginkan, saya harus melakukan re-encode. Video YouTube disediakan dalam codec AV1, tetapi smart TV saya masih belum mendukung codec itu, jadi saya encode sendiri
Dulu saya menjalankan skrip sederhana, tetapi sekarang memakai ytdltt GitHub ytdltt melalui bot Telegram, jadi kalau ibu saya menginginkan video YouTube seperti audiobook, saya bisa mengunduhnya teratur per direktori dan memberinya akses lewat Jellyfin. Audiobook yang ibu saya kumpulkan selama 3 tahun sekarang sekitar 1,2TB
Untuk tujuan serupa, tubesync juga layak dicoba
Saat unduhan konten h264 tidak berhasil, dokumentasi yt-dlp terasa sulit dipahami, tetapi cara yang saat ini berhasil kurang lebih seperti ini
yt-dlp -f "bestvideo[width<800][vcodec~='^(avc|h264)']+bestaudio[acodec~='^((mp|aa))']"Baru-baru ini saya mengetahui Pinchflat GitHub Pinchflat, dan ini memakai yt-dlp di backend sebagai alternatif web bergaya *arr. Anda tinggal menambahkan video yang ingin diunduh ke playlist, lalu akan diambil otomatis
Saya penasaran apakah perlu mendaftarkan cookie dan semacamnya untuk menghindari deteksi bot, dan apakah juga perlu memakai VPN
Kini era ketika web hanya perlu mengambil data sederhana sudah berakhir; sekarang kita harus menjalankan ribuan baris JavaScript yang diobfuscate. Dulu kita bisa dengan mudah mengambil file json 1kb lalu meng-cache-nya, sekarang kita harus menjalankan seluruh browser, bertukar 10MB data dalam 100 request, dan lingkungan analisis maupun profil keamanan jadi berantakan. Ini merugikan semua orang
Kalau dilihat dari sisi positif, lingkungan yang serba tidak praktis ini membuka peluang bisnis bagi 10.000 perusahaan scraping yang mengais 10MB sampah lalu menyediakannya sebagai API yang lumayan. Tapi sekarang kualitas konten situs web juga menurun, jadi isu seperti ini makin kurang penting
Sekarang web makin kompleks dan terasa seperti permainan tanpa akhir antara scraping, anti-scraping, dan bypass. Namun dengan munculnya AI/LLM—meski lebih mahal—segala informasi bisa diekstrak. Tak lama lagi LLM juga akan bisa melewati semua CAPTCHA. Mungkin kita akan sampai pada masa ketika “lubang analog” selalu terbuka. Cukup arahkan kamera dan mikrofon ke layar dan suara, lalu AI bisa menafsirkannya lebih baik daripada manusia
Untungnya, scraping skala kecil seperti yt-dlp justru lebih mudah daripada sebelumnya. Dengan investasi satu-dua jam, kita bisa membuat skrip dengan headless Firefox dan mitmproxy dengan mudah, dan selama tidak menjalankan banyak VPS untuk mengais seluruh situs dalam skala besar, saya bisa mengarsipkan konten yang saya mau tanpa masalah. Cloudflare juga tidak memblokir pengguna biasa dengan volume rendah. Otomasi browser modern itu mudah, jadi pengguna tunggal bisa dengan gampang mengambil data meski situsnya SPA. CAPTCHA pun pada skala kecil bisa diselesaikan manual. Belakangan kalau CAPTCHA muncul, saya menerima notifikasi Discord, menyelesaikannya di laptop, lalu membiarkan scraping berlanjut. Karena aplikasi “World Garden” mengontrol webtoon yang saya beli, saya merasa data saya harus saya kendalikan sendiri
Bahkan untuk json 1kb, web modern sebenarnya menuntut kita mengunduh JavaScript berukuran MB hanya untuk menjalankannya dan menampilkan data. Yang saya inginkan cuma HTML 10-20kb, sedikit CSS, dan file gambar. Untuk video juga cukup unduh mp4 langsung dan selesai. Itu sederhana dan efisien, tetapi ceritanya berubah kalau ada sesuatu yang ingin dijual
Alasan semua kerumitan ini pada akhirnya adalah untuk menjual lebih banyak iklan
Nsig/sig - token khusus yang wajib disertakan dalam pemanggilan API. Token ini dibuat di base.js (kode player), dan klien pihak ketiga seperti yt-dlp harus mengekstraknya dengan cara bypass. Dulu token ini bisa diperoleh dengan mengambil sebagian kode lewat regex dan semacamnya, tetapi sekarang kodenya sudah begitu tersebar sehingga untuk mendapatkan token itu, seluruh base.js harus dijalankan
PoToken - token bukti asal yang baru-baru ini diperkuat Google. Tanpanya akan muncul error 403. Di Android diperlukan DroidGuard, di iOS modul bawaan aplikasi, dan di web perlu menjalankan kode JS (challenge). Dulu harus diterbitkan lewat alat eksternal, tetapi dengan pembaruan berbasis Deno di yt-dlp, dikabarkan ini akan segera bisa diintegrasikan langsung
SABR - teknologi adaptive bitrate streaming sisi server, dipakai bersama protokol UMP milik Google, di mana server menerima posisi pemutaran/status buffer lalu mengendalikan buffering optimal hingga penyisipan iklan. Dukungan untuk klien pihak ketiga masih dalam pengerjaan
Contoh ekstraksi Nsig/sig:
Panduan PoToken:
SABR:
(Pembaruan tautan panduan dan contoh kode tambahan)
Sekarang saya jadi paham kenapa Google dan Cloudflare ingin membatasi web hanya pada beberapa browser yang ditandatangani dan diverifikasi integritasnya
Soal PoToken di web, saya penasaran bagaimana menjalankan snippet JS bisa membuktikan bahwa itu bukan bot. Kalau itu hanya JS sisi klien, bukankah seharusnya bisa berjalan juga di headless Chromium?
Baru saja Google memperkenalkannya, cara bypass-nya sudah mulai bermunculan. Memang, bahkan perusahaan sebesar apa pun tidak bisa mencegah bypass selama konten tetap dikirim ke klien. Karena itu mereka semua ingin membangun ekosistem tertutup yang proprietari—supaya bisa memastikan iklan ditonton sampai habis atau menarik biaya penggunaan
Beberapa waktu lalu ada cerita di HN yang mengklaim YouTube sebenarnya ingin alat unduh tetap berfungsi tulisan terkait 1 tulisan terkait 2. YouTube mengoperasikan layanan global yang dipakai 3 miliar orang, dan rasanya mereka tidak pernah benar-benar memblokir unduhan sepenuhnya, melainkan selalu menghambatnya “secukupnya”. Saya pikir jika semua pengguna di dunia memakai iPhone atau Android terbaru, mereka mungkin sudah langsung memasang DRM
yt-dlp memanfaatkan API untuk smart TV lama. Karena perangkat-perangkat ini tidak lagi menerima pembaruan perangkat lunak, kalau trafik ini menghilang maka fungsi tersebut juga bisa dihentikan
Saya rasa teori konspirasi bahwa platform konten ingin mendukung unduhan sampai rela merusak model pendapatannya sendiri sama sekali tidak masuk akal
Player dan halaman YouTube makin berat, sampai-sampai di PC lama justru jadi sangat lambat. Baru-baru ini saya menonton dengan mengubah “watch?v=” menjadi “/embed/” di 480p, dan ketika video yang sama diunduh lalu diputar, penggunaan CPU hanya sekitar 3%. Tetapi bahkan cara ini pun makin lama makin tidak berfungsi. Sementara itu, situs lain (misalnya situs porno) justru memperhatikan optimasi pengalaman dan tidak terlalu peduli memblokir alat unduh
Video (biasa)
Video (embed)
GitHub juga sama tidak optimalnya, sampai-sampai di PC i5 generasi ke-8 hampir tidak bisa dipakai. Karena itu saya malah mengambil snapshot dan meninjaunya secara offline
Penyebab penurunan performa YouTube belakangan ini adalah karena semua orang dipaksa memakai codec modern yang berat. Laptop saya tidak masalah memutar video h264 4K, tetapi begitu menonton video YouTube 720p saja laptop cepat panas dan tersendat. Dengan ekstensi browser h264ify, codec tertentu bisa diblokir, tetapi sayang sekali perilaku default seperti ini tidak bisa diatur. Jauh lebih praktis dan stabil kalau videonya langsung diunduh lalu ditonton
Bukan cuma saya. Pada kuartal 1 2025 saya masih menonton lewat player embed, tetapi pada kuartal 3 Google sengaja memblokir player embed. Saat ini YouTube praktis hanya bisa diakses lewat yt-dlp. Semoga yt-dlp dan para pengembangnya hidup selamanya
Saya berencana meninggalkan YouTube dan pindah ke PeerTube/platform berbasis peer
Ada laporan bahwa QuickJS (interpreter JS ringan) terlalu lambat sampai butuh lebih dari 20 menit per video. Deno jauh lebih cepat, dan saya penasaran bagaimana perbedaannya bisa sebesar itu
(Referensi issue #14404 / balasan)
QuickJS adalah interpreter berbasis bytecode (lambat seperti Python) yang memprioritaskan kesederhanaan dan stabilitas. Sebaliknya, Deno memakai compiler JIT berefisiensi tinggi setingkat Chrome, dan perbedaan ini bisa membuat kecepatan eksekusi berbeda lebih dari 20 kali lipat, terutama pada jenis kode tertentu. QuickJIT (fork QuickJS dengan JIT tambahan memakai TCC) mungkin tetap lebih lambat dari Deno, tetapi ada potensi perbaikan
Performa yang memburuk sedramatis ini sampai terasa menyeramkan, seolah Google sengaja membuatnya lambat di interpreter lain
Fakta yang menarik. Minecraft (Bedrock, untuk keperluan modding) memakai QuickJS, dan meski memang lebih lambat daripada V8, rasanya tidak separah ini
Kini makin jelas bahwa era ripping yang mudah sedang menuju akhirnya. Kalau ada video YT yang ingin disimpan jangka panjang, saya sarankan memasang tubearchivist sekarang juga untuk backup
pinchflat GitHub Pinchflat juga saya rekomendasikan sebagai alternatif. Tingkat kematangannya masih di bawah tubearchivist, tetapi dari pengalaman saya bug-nya lebih sedikit
Saya rasa aset budaya dan pendidikan berharga yang lahir dari dominasi pasar YT saat ini adalah kesempatan terakhir untuk disimpan. tubearchivist memang terlihat menarik, tetapi terasa cukup merepotkan untuk dipasang dan dikelola. Selain itu, pendekatannya hanya mengunduh dari seluruh kanal langganan. Dalam kasus saya, asal ada folder hasil unduhan, itu sudah cukup—yang saya butuhkan hanyalah solusi web server lokal yang sangat ringan yang bisa membaca nama video dan membuat halaman tautan. Kalau ada alternatif super-ringan yang bisa dipasang hanya dengan beberapa klik, saya ingin direkomendasikan
Untuk film YouTube sendiri, DRM sebenarnya sudah diterapkan, jadi saya juga penasaran kenapa teknologi itu belum dipasang ke seluruh kanal
Saya terkejut mereka memilih Deno, tetapi Deno mudah didistribusikan dalam bentuk executable tunggal sehingga masalah instalasi berkurang. Interpreter berbasis Python itu hack yang luar biasa, tetapi memang punya batas, dan topik ini sudah dibahas sejak proyek Youtube-dl lama diskusi HN lama
Node tidak punya fitur keamanan dan isolasi seperti Deno. Pendapat maintainer tentang hal ini juga bisa dilihat di thread yang sama
Fitur sandbox Deno juga menjadi alasan penting dalam pemilihannya. Memang tidak bisa dipercaya 100%, tetapi tetap lebih baik daripada tidak ada sama sekali
yt-dlp mendukung bukan hanya YouTube, tetapi juga banyak situs streaming video lain yang kadang berisiko. Karena itu, sandboxing minimum setingkat browser adalah keharusan. Secara desain alat ini menjalankan kode yang tidak tepercaya, jadi keamanan dasar memang wajib dijaga