YouTube Download Stuck at 0% or 99%? What to Check
In short
A YouTube download stuck at 0 percent is still preparing: fetching formats, finishing B-ROLL's first-launch setup, or waiting on a sign-in check. One stuck near 99 percent is merging video and audio with ffmpeg or converting to ProRes or DNxHR, which shows its own percentage. Read the download log, then retry or restart B-ROLL.
On this page
Why is a YouTube download stuck at 0 percent?
A YouTube download that never leaves zero is still preparing: yt-dlp is asking YouTube for the video’s details and stream list, and no video data has arrived. In B-ROLL the card reads preparing… while yt-dlp fetches them, then downloading and a live percentage once data flows.
A card that holds at zero is waiting on one of four things, and each leaves a different trace:
- First-launch setup. B-ROLL is still installing its tools. The TOOLS status in the sidebar’s Advanced panel shows what is missing.
- The queue. B-ROLL runs one download at a time, so a card marked queued waits for the one ahead of it. download now on a queued card moves it to the front and pauses the running download, which resumes afterwards.
- A sign-in check. As of September 2026, YouTube can answer a request with “Sign in to confirm you’re not a bot”. B-ROLL then tries your browser logins (the log says
Trying your saved logins…) and, if none works, opens the sign-in wizard. - A clip deep inside a long video. Seeking into one large stream could stall a clip for minutes, so B-ROLL prefers YouTube’s HLS streams for clips.
The table maps every point where a B-ROLL download can appear stuck to what the toolchain is doing there and what you do about it.
| Where it stops | What is happening | What to do |
|---|---|---|
| Card says queued | Waiting for the download ahead of it | Wait, or click download now |
| Card says preparing… at 0 percent | yt-dlp is fetching the video’s details and formats | Read the last log line |
| 0 percent on the first launch | B-ROLL is still installing yt-dlp, ffmpeg and Deno | Wait for ✓ All components ready. in the log |
| 0 percent, log mentions sign-in | YouTube wants a signed-in session | Follow the sign-in wizard with your own account |
| Clip card at 0 percent, no speed | ffmpeg is opening the stream at the clip’s start | Wait: clip cards never show a speed |
| 99 or 100 percent, full video | ffmpeg is merging the video and audio streams | Wait for done |
| Card says to convert or converting… | The ProRes or DNxHR conversion, with its own percentage | Wait: it uses every CPU core |
Why is a YouTube download stuck at 99 percent?
A YouTube download near 99 or 100 percent has finished receiving data, and ffmpeg is now building the file. The yt-dlp README says ffmpeg is required for merging separate video and audio files. As of September 2026, YouTube serves 1080p and higher as separate video and audio streams, so a 1080p or 4K download ends with this merge.
yt-dlp’s percentage counts downloaded data, so the bar stops moving while yt-dlp is merging formats: ffmpeg writes both streams into one file, and a long 4K file takes longer to write than a short 1080p one. For the tool doing that work, see what ffmpeg is and why downloaders need it.
ProRes and DNxHR add a second phase. yt-dlp first merges the best streams into an MKV master, then ffmpeg converts it to a .mov, and the card changes to to convert, then converting… with its own percentage. B-ROLL runs one conversion at a time on every CPU core, and the next download starts while the previous file converts.
If a conversion fails, B-ROLL keeps the MKV master and logs ⚠ DNx transcode failed; keeping the MKV., so the downloaded footage is never lost. The whole pipeline is described in YouTube to ProRes and DNxHR.
What does B-ROLL do on its first launch?
B-ROLL downloads yt-dlp, ffmpeg and Deno on first launch into %LOCALAPPDATA%\Broll. Until that setup finishes, B-ROLL has no tools to download with, so a first launch is a normal reason for a card to wait at 0 percent.
The setup runs in the background behind the main window, in this order:
- Download
yt-dlp.exeand update it to the latest nightly build. - Download the ffmpeg package and keep only
ffmpeg.exe. - Download Deno, the JavaScript runtime. As of September 2026, the yt-dlp README says full YouTube support needs its yt-dlp-ejs component, which runs on a JavaScript runtime such as Deno.
- Set up a local helper service that yt-dlp uses.
- Resolve one public test video so the first real download starts faster.
On Ema Zamboni’s PC the three tools measured 17.0 MB for yt-dlp.exe, 194.8 MB for ffmpeg.exe and 96.4 MB for deno.exe. The log reports each step (Installing ffmpeg…, Installing JS runtime…) and ends with ✓ All components ready.
If TOOLS still shows ffmpeg: missing or JS runtime: missing after setup, Reinstall tools downloads ffmpeg and Deno again. If Windows blocked the app before any of this ran, see Is B-ROLL safe? SmartScreen, signing and checksums.
How long should you wait for a stuck YouTube download?
Wait as long as the download log keeps adding lines: judge by the card state and the log, not by the percentage. B-ROLL shows no time remaining, so the live speed on the card (for example ⬇ 5.0MB/s) and new log lines are the signs of progress.
- Downloading with a speed. Data is arriving. A low speed is a different problem, covered in YouTube download slow or throttled? Causes and fixes.
- A clip with a percentage and no speed. Normal: B-ROLL computes clip progress from ffmpeg’s position against the clip length.
- Converting. Normal for ProRes and DNxHR: the percentage climbs at the pace of your CPU.
- No new log line and no change on the card. Act, following the order in the next section.
Pause before you Stop. Pause keeps the partial file and Resume continues it, while Stop cancels the download and deletes the partial files.
What do you do if a YouTube download never moves?
A YouTube download that never moves needs the cheapest fixes first: read the log, update yt-dlp, repair the tools, then retry. The controls sit in the sidebar’s Advanced panel or on the card.
- Click Open download log and read the last line. It names the step that stopped.
- If the log mentions sign-in, follow the wizard and add a cookies.txt from your own YouTube account, as fix “Sign in to confirm you’re not a bot” on YouTube explains.
- Click Force update yt-dlp. The log shows
✓ yt-dlp update check done.when it finishes. - Check TOOLS. If it shows
ffmpeg: missingorJS runtime: missing, click Reinstall tools and wait for── Reinstall complete ──. - Stop the card and click retry. Stop deletes the partial file, and the download goes back into the queue and asks YouTube for fresh stream links.
- Close and reopen B-ROLL. yt-dlp updates itself at every launch, so a restart also refreshes it.
- If nothing helps, click Report a bug. It opens your email app with your description and, when Include the download log is ticked, the last 4,000 characters of the log; nothing is sent until you send the email.
Errors with a message on the card have their own fixes on the hub, YouTube downloader not working? Fixes for editors.
Frequently asked questions
Does antivirus software slow the first launch?
Only when your security software holds the new tools for a scan. B-ROLL's first launch writes three new programs, yt-dlp.exe, ffmpeg.exe and deno.exe, into its data folder, and security software can inspect new executable files before they run. Watch the download log while setup runs: each tool reports its own line, and the last line reads All components ready.
Why do clip downloads show no speed?
B-ROLL measures clip progress from ffmpeg's position in the clip, not from bytes received. A clip card therefore shows a percentage and no speed. ffmpeg cuts the range while it reads the stream, and its position against the clip length is the progress figure that stays honest. A clip card that has not moved yet is still opening the stream.
Where are B-ROLL's log messages?
B-ROLL's log is in the sidebar's Advanced panel: click Open download log, and the log also appears under the download list while the panel is open. B-ROLL keeps the log in memory for the current session only, so read it, or send it with Report a bug, before you close the app.
Sources
- yt-dlp README on GitHub github.com
- About FFmpeg ffmpeg.org