github jmita2288-debug/optdowns v2.14.0
OPTDOWNS 2.14.0 YouTube on this page, Instagram by link, lighter load on Cobalt

one hour ago

Highlights

  • YouTube in "On this page". The tab identifies the open video from its URL and uses the same Worker flow as "By link": same card, same quality picker, same download path.
  • Instagram in "By link". Reels, posts and carousels are resolved through your Worker and Cobalt instance, with one card per carousel item. If the Worker or Cobalt is unavailable, the anonymous public read from earlier versions is used.
  • Interface languages. Portuguese (Brazil), English and Spanish, switched with the flags at the bottom of the panel. The first run follows the browser language.
  • Lighter load on Cobalt. Fewer and better-spaced requests, with retries and backoff.

Added

  • LINK_PROXY_INSTAGRAM and LINK_PROXY_INSTAGRAM_ORDER ('cobalt-first' or 'local-first') in the userscript.
  • Worker routes /ig/info and /ig/dl, and probe=1 to check an item without opening the tunnel.
  • Worker variables COBALT_CONCURRENCY, COBALT_GAP_MS, COBALT_RETRIES, COBALT_BACKOFF_MS and COBALT_COOLDOWN_MS.
  • 240p in the default YT_QUALITIES.
  • Error codes COBALT_RATE_LIMIT, COBALT_UNAVAILABLE and the IG_* family.
  • New documentation: CHANGELOG.md and docs/COBALT.md (also in Portuguese), plus screenshots in the README.

Changed

  • At most two concurrent calls to Cobalt, with a minimum gap, retries with backoff on 429, 502, 503 and 504 (honoring Retry-After), a short pause after repeated 429, and a 20-second cache for permanent failures.
  • One tunnel per download instead of three. The request that CORS used to discard is gone.
  • YouTube and Instagram downloads no longer use Range, because the Cobalt tunnel does not serve it.
  • The userscript reads the Worker's JSON error and stops retrying on permanent errors.

Fixed

  • The player's blob: source no longer creates invalid cards on YouTube ("The received MP4 has no video track").
  • Audio-only answers are no longer listed as video options.
  • The received size is compared with Content-Length, so a truncated file is reported and retried instead of saved.
  • WebM is never renamed to MP4.
  • The Short badge is kept when a Shorts URL is converted.

Testing status

The tests for the YouTube and Instagram work used a simulated Cobalt, YouTube and Instagram. Nothing has been validated against the real services, a real Cobalt instance, the Cloudflare Workers runtime, Tampermonkey or iOS. TikTok, HLS and mux.js were not changed in this release. Expect to adjust things on first use.

Install

Open the raw file and confirm in your userscript manager:
https://raw.githubusercontent.com/jmita2288-debug/optdowns/main/optdowns.user.js

YouTube and Instagram through Cobalt need your own Worker and Cobalt instance. See docs/COBALT.md. Full list of changes in CHANGELOG.md.


Resumo em português

  • YouTube em "Nesta página" e Instagram em "Por link" (Reels, posts e carrosséis) pelo seu Worker e pela sua instância do Cobalt.
  • Idiomas: português (Brasil), inglês e espanhol, trocados pelas bandeiras no rodapé do painel.
  • Menos carga no Cobalt: no máximo duas chamadas simultâneas, novas tentativas com espera progressiva, cache de falhas definitivas e um túnel por download em vez de três.
  • Correções: o blob: do player não cria mais cards inválidos no YouTube, respostas só com áudio não aparecem como vídeo, downloads incompletos são detectados e repetidos, e o WebM nunca é renomeado para MP4.
  • Testes: feitos com Cobalt, YouTube e Instagram simulados. Nada foi validado com os serviços reais.

Documentação: README.pt-BR.md, docs/COBALT.pt-BR.md e CHANGELOG.md.

Don't miss a new optdowns release

NewReleases is sending notifications on new releases.