27 poin oleh GN⁺ 2025-09-25 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-09-25
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:

    • 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