YouTube Thumbnail Downloader

Download Thumbnail From YouTube

The short answer: you do not download a thumbnail from the watch page — you download it from YouTube's image host. One URL per file: https://img.youtube.com/vi/<video-id>/maxresdefault.jpg. Open it, then save the image. There is no button on YouTube that hands you this file, and no login, and no app needed. The one thing that decides whether the download worked is not the picture you see but the status code the server sent: a missing file still comes back as a perfectly normal-looking JPEG.

That last point is the whole reason this page exists. On 1 October 2026 we requested all six thumbnail file names for four videos, and also recorded what each response actually carried: HTTP status, byte count, Content-Type, Content-Disposition, cache headers and the CORS header. Everything below comes from that run. Nothing here is copied from a downloader page, because downloader pages do not publish this — they print a fixed list of sizes and leave you to find out which ones exist.

The ID is the only part you need

Every route into a YouTube video exposes the same 11-character ID, and the ID is all the image URL needs:

Where you found the videoWhere the ID is
youtube.com/watch?v=XXXXXXXXXXXthe value after v=
youtu.be/XXXXXXXXXXXeverything after the slash
youtube.com/shorts/XXXXXXXXXXXeverything after /shorts/
youtube.com/live/XXXXXXXXXXXeverything after /live/
youtube.com/embed/XXXXXXXXXXXeverything after /embed/

A playlist link that contains v= still yields an ID; a channel link or a playlist link without v= does not, and there is no thumbnail to download from either one. Also worth knowing before you script anything: adding a query string does not break the request. .../maxresdefault.jpg?x=1 returned 200 · 65,324 B · 1280 × 720 on 1 October 2026, byte-identical to the clean URL.

What actually came back, four videos, six names

Same six file names, same day, one request each. A 404 row is not "no image" — it is a real JPEG body and you can save it, which is exactly the trap.

FiledQw4w9WgXcQ9bZkp7q19f0jNQXAC9IVRwaqz-KE-bpKQ
maxresdefault.jpg200 · 65,324 B · 1280 × 720200 · 184,051 B · 1280 × 720404 · 1,097 B · 120 × 90200 · 108,323 B · 1278 × 720
hq720.jpg200 · 65,324 B · 1280 × 720200 · 184,051 B · 1280 × 720404 · 1,097 B · 120 × 90200 · 179,638 B · 1280 × 720
sddefault.jpg200 · 31,029 B · 640 × 480200 · 84,176 B · 640 × 480404 · 1,097 B · 120 × 90200 · 46,793 B · 640 × 480
hqdefault.jpg200 · 21,011 B · 480 × 360200 · 53,433 B · 480 × 360200 · 15,921 B · 480 × 360200 · 32,195 B · 480 × 360
mqdefault.jpg200 · 10,303 B · 320 × 180200 · 26,633 B · 320 × 180200 · 8,710 B · 320 × 180200 · 17,034 B · 320 × 180
default.jpg200 · 2,888 B · 120 × 90200 · 5,096 B · 120 × 90200 · 4,523 B · 120 × 90200 · 4,120 B · 120 × 90

Read the pixel size out of each downloaded file's own JPEG header, so it is what the file is, not what the name promises.

Flat vector diagram: a browser card holding a large 16:9 picture frame, a red arrow curving from it down into an open folder that holds a stack of progressively smaller picture cards, and beyond a thin divider an empty dashed grey square standing alone
What a download actually is: one picture leaves the browser and lands in your folder — while a missing file arrives as a small empty grey square that looks like it came from the same place.

"The biggest name" is not always the biggest file

On the first three videos in the table, hq720.jpg and maxresdefault.jpg returned byte-identical responses — the two names pointed at one file, which is what we reported when we first measured this on 30 September 2026. The 1 October run shows that this is not a rule. On aqz-KE-bpKQ:

Different byte counts, and the width is not even the same: 1278 against 1280. So on that video the file named hq720 is 71,315 bytes larger than the file named maxresdefault, and it is the one that is actually a full 1280 wide. If you asked for "the max resolution one" and saved whatever came back, you saved the smaller of the two. Download both and compare what you got; do not assume the longer file name means the better file.

When the big one is a 404, the numbered frames are still there

On jNQXAC9IVRw — an old upload — maxresdefault, hq720 and sddefault all answered 404. But the same video still had three usable 480 × 360 pictures under names nobody mentions:

FileRequestedStatusBytesMeasured size
hq1.jpg1 Oct 202620014,235 B480 × 360
hq2.jpg1 Oct 202620015,921 B480 × 360
hq3.jpg1 Oct 202620015,061 B480 × 360
mq1.jpg / mq2.jpg / mq3.jpg1 Oct 20262008,133 B / 8,710 B / 8,374 B320 × 180
1.jpg / 2.jpg / 3.jpg1 Oct 20262004,129 B / 4,523 B / 4,295 B120 × 90

These are the stills YouTube crops from the video itself rather than the artwork the uploader chose, so on this upload hq2.jpg answered with exactly the same 15,921 bytes as hqdefault.jpg — the frame it picked happens to be the poster frame. Where the named sizes are gone, they are the only pictures above 320 pixels wide left to download, and they are requestable with the identical URL pattern: https://img.youtube.com/vi/<video-id>/hq2.jpg. The same names returned real files on dQw4w9WgXcQ too (maxres1.jpg came back 200 · 40,095 B · 1280 × 720, a visibly different frame from its maxresdefault).

What the response headers tell you about your download

There is a smaller copy, and a web page cannot download it

YouTube's image host also serves WebP versions of each thumbnail under the vi_webp path. They are real, they are smaller, and here is the measured comparison from 1 October 2026 for dQw4w9WgXcQ:

FileJPEGWebP copyDifferenceCORS on WebP
maxresdefault (1280 × 720)65,324 B28,620 B56.2% smallernone
hqdefault (480 × 360)21,011 B10,404 B50.5% smallernone

Both WebP URLs answered 200 with Content-Type: image/webp and the same pixel dimensions as the JPEG. The catch is the header that was missing: no Access-Control-Allow-Origin. A page on the web can display that image, but it cannot read its bytes — the browser blocks the response from being handed to JavaScript. So no downloader page, this one included, can offer you the WebP copy as a file. What it can do is the JPEG, because the JPEGs do send the CORS header. If you want the smaller file specifically, a desktop command-line request or a browser extension that is not bound by page CORS is the route; the numbers above are there so you know what you would be gaining.

Four ways to download it, in the order that breaks least

  1. Open the URL and save the image. Build https://img.youtube.com/vi/<id>/maxresdefault.jpg, open it in a tab, then save the image. Free, nothing installed, works on a phone. You inherit the name maxresdefault.jpg whether or not the file is real.
  2. Use the tool on the home page. Same one request per file, except it checks the status first, lists only the names that answered and measures each file after it arrives — so a 120 × 90 placeholder never reaches your downloads folder. The grabber page walks through the fallback ladder.
  3. Request it from a terminal if you are doing more than one: one command per file, and the exit status or the status code in the output tells you whether you saved a picture or the grey square.
  4. Read it out of the page source. Slowest by hand and the easiest to get wrong — the watch page carries several image URLs and the one you want is the one with the video's own ID in the path, not a resized copy on another host.

Check what you saved, not what you see

The saved file's own properties end the argument:

What you may do with the file

Saving the file is trivial; the right to reuse it is a separate question, and this page cannot answer it for your situation. The image belongs to the uploader, and it is served from YouTube's own host — nothing here hosts or re-uploads any thumbnail. Your own uploads are yours. For someone else's, treat a downloaded file as reference unless you have permission, and check what your jurisdiction allows before you publish it. This is not legal advice.

Questions people actually ask

"I right-clicked and saved it, but the file is a tiny grey square — did I do something wrong?"
You did the steps right; that video simply has no maxresdefault. The request was answered 404 with a 1,097-byte grey JPEG, and saving it is saving that file. Go back and try hqdefault.jpg, then hq2.jpg.

"It downloaded a file called maxresdefault.jpg but Windows says 120 × 90. How can a max resolution file be 120 pixels?"
Because the file name is just a URL path, not a promise. The name is what you asked for; the response was the placeholder because that size does not exist for that upload. The name in your downloads folder records your request, not the file's contents.

"Do I need an app or an extension to download a YouTube thumbnail, or is the URL enough?"
The URL is enough, on desktop and on a phone, with no account. An extension saves you typing the video ID. Neither one gets you the WebP copy, because that response carries no CORS header.

"The image URL opens fine in my browser, so why can't your page give me the .webp version?"
Because opening something and being allowed to read its bytes are two different permissions. Your browser displays the WebP happily; it will not hand the bytes to a script on a page, and the host does not send the header that would allow it. The JPEGs do send it, which is exactly why the tool can offer you those.

"I downloaded a thumbnail for an old video and got a grey box, but a same-topic video from last year worked. What is different?"
When the upload was processed, not what it is about. On the 1 October 2026 run an old upload was missing maxresdefault, hq720 and sddefault, while its hqdefault, hq1, hq2 and hq3 were all present. Download hqdefault and move on.

All numbers on this page were measured on 1 October 2026 by requesting each URL from img.youtube.com (and i.ytimg.com for the host comparison), recording the HTTP status, Content-Length, Content-Type, Content-Disposition, Cache-Control and Access-Control-Allow-Origin, and reading the pixel size out of each downloaded file's own header. Videos are named by ID only. A different video will return different numbers — that is the point of measuring rather than listing.