The Cut · #4 · Teardown · August 27, 2026

The day every YouTube download broke, and the two wrong turns we took

An ffmpeg error that was really a 403, a warning that pointed the wrong way, and a cache that showed green on a broken pipeline.

On 19 August every new video we tried to fetch failed. Not some — every one. If you run anything that downloads YouTube, you probably hit this too, so here is the whole diagnosis including the parts where we were wrong.

Symptom"youtube download failed: ffmpeg exited with code 8", three attempts, dead
Actual causeHTTP 403 on the media URL — ffmpeg reports that as code 8
Affectedevery fresh source; cached windows kept working

Wrong turn one: the warning

The downloader printed a warning saying no JavaScript runtime could be found and pointing at a specific one to install. That looked like the answer, and we spent real time on it. It was not: a container with no JS runtime at all returned the full format list and downloaded fine once two other things were fixed. The warning was true and irrelevant.

Wrong turn two: our own cache

Midway through, one run completed successfully and we concluded production was fine. It was not fine — that run reused an already-downloaded source. The download stage took 1.5 seconds and moved no bytes. A cache hit looks exactly like a working pipeline, which is the most expensive kind of false signal there is.

What was actually wrong

  • The downloader was picking a YouTube client whose media URLs had started returning 403. The fix existed only in nightly builds — the newest stable release still had it.
  • After upgrading, a second error appeared: progressive (muxed) formats no longer exist. All 31 video formats are now "video only", so a selector written to prefer progressive matched nothing.
  • Then our own throttle guard rejected the working download: it required 100 KB/s, and the healthy DASH download ran at 58.8 KB/s.

The number worth keeping

With progressive gone, long section downloads get throttled hard. A 20-minute window pulled from a 3-hour-49-minute source took 759 seconds at 58.8 KB/s. The same pipeline downloads a 4-minute video in 3 seconds at 10 MB/s. If you plan around "clipping takes seconds", plan again — the AI step in that run took 2.5 seconds and the download took twelve and a half minutes.

What to take from it

  • Verify a download fix on a source you have never fetched. A cached success proves nothing about the network path.
  • Check your throttle thresholds after any format change — a guard tuned for progressive will reject healthy DASH.
  • Prefer shorter windows. Clip count per run usually does not depend on window length, but download time very much does.

Full write-up with every measurement: clipember.com/guides/youtube-download-fails-ffmpeg-code-8

Two of these a week, to everyone with a ClipEmber account. Make a clip or read the rest of the archive.