Why maxresdefault is missing for some videos
Paste a link into the thumbnail downloader and, for some videos, the largest card reads "not available for this video". That is not the tool failing: it is the tool declining to hand you a gray 120×90 placeholder as if it were a 1280×720 image. This guide explains what YouTube sends back for a size it never generated, why a plain image tag makes that look like a thumbnail, how the downloader tells the two apart, where the check stops, and what you get instead. Every figure and verdict below is computed at build time by the functions that run when you use the tool.
5 sizes, 2 of them optional
From a video ID, YouTube's image server stores 5 thumbnail sizes at predictable addresses.
The first 3 exist for effectively every public video; the other 2 — sddefault and maxresdefault — are generated only for some uploads. For the example ID jNQXAC9IVRw, the engine derives this set:
| Key | Stored size | Frame | Exists for |
|---|---|---|---|
default | 120×90 | 4:3 | effectively every public video |
mqdefault | 320×180 | 16:9 | effectively every public video |
hqdefault | 480×360 | 4:3 | effectively every public video |
sddefault | 640×480 | 4:3 | some uploads only |
maxresdefault | 1280×720 | 16:9 | some uploads only |
Each key maps to one URL; the largest is https://img.youtube.com/vi/jNQXAC9IVRw/maxresdefault.jpg, and the set ends
there — maxresdefault at 1280×720 is the largest size YouTube
serves back out. Note the frames: only mqdefault and maxresdefault are 16:9; the rest, including
sddefault, reduce to 4:3, which the aspect engine files under "Older video; sddefault storage frame". What each size is for is covered in the
sizes guide; the upload-side rules are
cited to Google's help documentation on the size guide.
"Only for some uploads" is the whole of what this site can say about which videos get the optional sizes. It is what the methodology page states. This guide does not speculate about YouTube's reasons, and neither does the tool: it reports what the image server served for the video you pasted, at the moment you checked.
What YouTube sends back for a size it never generated
When a size is missing, YouTube answers with HTTP 404. The unusual part is the response body:
instead of an error page, it is a real, decodable image — a gray placeholder measuring
120×90 pixels. Its frame is 4:3, the
shape of the smallest stored size, not the 16:9 of the maxresdefault that was
asked for.
A plain <img> tag does not consult status codes; it decodes whatever bytes arrive,
and these decode fine. A page that writes the maxresdefault URL into an image tag shows
a gray rectangle — and, if stretched to a 1280-pixel-wide slot, turns 120 pixels of gray into a large, blurry one. A page that wires a download button straight to that URL
saves the placeholder to your disk under a "maximum resolution" filename. Nothing in that chain asked
whether the image was the thumbnail. That is the junk download the methodology page warns about.
The two-signal check
The downloader fetches each of the 5 URLs in your browser and records two things per size:
whether the response reported success, and the pixel dimensions the bytes decode to (or that they
did not decode). A failed status is reported missing at once, before any decoding. When the status
is a success, the decoded dimensions go to a pure function, classifyThumbnail,
together with the size requested. The function carries the status rule as well, first in its
list, so the verdict is the same whichever signals a caller supplies. Three rules and a default,
in order:
- If the response was not a success, the size is missing.
- If the bytes produced no dimensions, the size is undecodable.
- If the decoded width is smaller than the width requested and no wider than the placeholder (120 px), the size is missing — a placeholder body arrived, whatever the status said.
- Otherwise the size is available.
Here is that function run against probe inputs at build time. Each verdict is the engine's own output, not a typed-in expectation:
| Requested | Probe result | Verdict | Card shows |
|---|---|---|---|
maxresdefault (1280×720)
| HTTP 404, nothing decodable | missing | “not available for this video” |
maxresdefault (1280×720)
| success, 120×90 decoded | missing | “not available for this video” |
sddefault (640×480)
| success, 120×90 decoded | missing | “not available for this video” |
maxresdefault (1280×720)
| success, 1280×720 decoded | available | preview and download button |
hqdefault (480×360)
| success, 480×360 decoded | available | preview and download button |
default (120×90)
| success, 120×90 decoded | available | preview and download button |
maxresdefault (1280×720)
| success, nothing decodable | undecodable | “could not be decoded” |
maxresdefault (1280×720)
| success, 640×480 decoded | available | preview and download button |
Three rows matter most. The first is the everyday case: the 404 alone settles it as "missing" before any decoding happens. The second is the belt-and-braces case: a placeholder-sized body
arriving with a success status, which the width rule still catches as "missing". And the default row shows why the rule is a comparison rather than a fixed threshold:
default genuinely is
120×90, so a 120-pixel decode is exactly what
was requested and the verdict is "available". Without the "smaller than requested"
half of the rule, the smallest real thumbnail would be reported missing on every video.
Where the check stops
The last row is the honest limit. A decode of 640 pixels where 1280 was requested is narrower than nominal but far wider than the placeholder, so the verdict is "available". The rule is deliberately a placeholder check, not a resolution audit: it catches the one specific junk response YouTube is known to send and does not second-guess a real image that is smaller than the key's nominal size.
The check also cannot tell you why. A "missing" verdict means the image server did not serve that size for this video when you asked — not that the upload was of any particular quality, age, or type, about which this site has no information. The "undecodable" verdict is different again: a success status arrived, but the bytes did not decode in your browser. The card then reports that the size could not be decoded, and draws no preview or button for it. And the tool only reports what YouTube currently serves: if nothing usable comes back for any of the 5 sizes, every card is unavailable, and that is the correct report, not a guess.
What the downloader shows instead
Each size gets a card headed with its label and nominal dimensions. A size that passed the check
gets a preview at true proportions and a "Download JPG" button whose file is the real bytes your
browser fetched, named descriptively — for the example ID and
maxresdefault, youtube-jNQXAC9IVRw-maxresdefault-1280x720.jpg. A size classified "missing" gets no preview and no button; its card reads "Not available for this video — YouTube
generates this size only for some uploads." The status line above the cards sums the run: for a
video where only the 3 guaranteed sizes were generated, the engine classifies
3 of 5 sizes available and 2
not generated by YouTube for this video, and the largest card with a button is
hqdefault at 480×360.
That is the whole difference between this tool and one that renders junk: the classification happens before a button is drawn, on decoded pixels rather than on the URL. The placeholder never becomes a download because it never becomes "available".
When downloads are blocked: the "Open image" fallback
Reading image bytes from another domain requires that domain's permission (CORS). YouTube's
image server sends Access-Control-Allow-Origin: * on thumbnail responses — verified empirically,
and documented on the methodology page — which is why your browser can
fetch the file, decode it, classify it, and offer a one-click download without this site's servers
ever seeing your link. The mechanism has its own guide,
how the one-click download works.
Some environments break that path: an aggressive extension, or a corporate proxy that strips
CORS headers. When the fetch itself fails, the downloader falls back to loading each URL in an
<img> element and reading the decoded natural width — the second signal doing the
work alone, through the same classifyThumbnail function with the status treated as a
success. The placeholder is still caught: a 120-pixel decode against a
1280-pixel request is still "missing". Sizes that pass show an
"Open image" link to the original YouTube URL with a save instruction ("Right-click the opened
image → Save image as…"), and the status line says direct downloads were blocked in this
browser. What you never see is a download button that produces nothing.
The parser runs first
None of this happens until the pasted text resolves to a video ID, and the parser is as strict
as the classifier. It accepts the forms people actually paste: the share link
https://youtu.be/jNQXAC9IVRw?si=share-tracking-token, tracking string and all, yields jNQXAC9IVRw; the Shorts
link https://www.youtube.com/shorts/jNQXAC9IVRw yields jNQXAC9IVRw; a bare ID with stray
whitespace yields jNQXAC9IVRw. Every ID it returns is exactly 11 characters
of letters, digits, hyphens, and underscores. What it rejects, it rejects with a reason:
https://www.youtube.com/playlist?list=PLexampleplaylist fails as playlist-url ("That is a playlist link, not a single video. Open a video in the playlist and paste its URL."); https://www.youtube.com/@examplechannel fails as channel-url ("That is a channel link, not a video. Open one of the channel’s videos and paste that URL."); the lookalike host https://youtube.com.evil.example/watch?v=jNQXAC9IVRw fails as
not-a-youtube-url, because the parser checks the whole hostname; and
https://www.youtube.com/watch?v=tooshort fails as invalid-video-id ("That link does not contain a valid video ID — YouTube IDs are exactly 11 letters, digits, hyphens, or underscores."). Only a validated ID reaches the URL set and the probes.
How to read the result
"Not available for this video" on sddefault and maxresdefault: YouTube did not serve those sizes
for this upload; the largest real image is the highest card that got a button — with both
optional sizes missing, hqdefault at 480×360. "Could not
be decoded": bytes arrived with a success status but would not decode in your browser. "Open
image" instead of "Download JPG": the fetch was blocked in your environment, the size still
passed the width check, and the link opens the genuine YouTube URL. If you ever see a size
labelled available that was not, or the reverse, the
contact page is where that report belongs; confirmed issues are fixed in the
engine and pinned with a test. More guides are collected at /guides/.
Frequently asked questions
Is maxresdefault missing because the video is low quality?
This site does not know, and does not guess. What is verifiable is the behaviour: YouTube generates sddefault and maxresdefault only for some uploads, and for the rest it answers HTTP 404 with a gray 120×90 placeholder. The downloader reports that behaviour for the video you pasted and stops there.
Another site let me download maxresdefault for the same video. Why not this one?
Check the dimensions of what you downloaded. A missing size still returns an image file — the 120×90 placeholder — and a tool that wires a download button straight to the URL hands you that file under a "maximum resolution" label. This site decodes the bytes first: a 120 px decode where 1280 px was requested is classified "missing", so no button appears.
Why does the check look at two signals instead of just the HTTP status?
Because the status is not always visible. When something in your environment blocks the fetch, the downloader falls back to an image-element probe, which exposes only the decoded pixel size. The width signal therefore has to catch the placeholder on its own, and it does — it is the same classifyThumbnail function with the status passed as a success. The status is the fast path; the width is the guarantee.
Why is the default size not flagged as a placeholder? It is also 120×90.
Because the rule compares the decoded width with the width requested. For default, 120 px was requested and 120 px came back, so nothing is smaller than expected and the verdict is "available". For maxresdefault, 1280 px was requested and 120 px came back — smaller than asked for and no wider than the placeholder — which is "missing".
What is the largest real image I can get when maxresdefault is missing?
The largest card that passed the check. When both optional sizes are missing, that is hqdefault at 480×360, a 4:3 frame rather than 16:9. Nothing larger than maxresdefault (1280×720) is stored, so there is nothing beyond the 5 listed cards to try.
Does the site see which video I checked?
No. The link is parsed by JavaScript in your browser, and your browser requests the images directly from YouTube’s image server — the same requests it makes when you browse YouTube. No server on this site receives your link or the images; you can confirm this in your browser’s network inspector.
The downloader this guide describes parses links locally in your browser and never transmits them to this site; your browser fetches the images directly from YouTube. How each check works — including the placeholder-detection trick — is documented on the methodology page.