Download YouTube video thumbnails in various resolutions. Use when you need to get video preview images, create collages, or save thumbnails for reference.
Scanned 2/12/2026
Install via CLI
openskills install openclaw/skills---
name: yt-thumbnail-grabber
description: Download YouTube video thumbnails in various resolutions. Use when you need to get video preview images, create collages, or save thumbnails for reference.
metadata: {"openclaw":{"requires":{"bins":["yt-dlp"]},"install":[{"id":"python","kind":"pip","package":"yt-dlp","bins":["yt-dlp"],"label":"Install yt-dlp (pip)"}]}}
---
# YouTube Thumbnail Grabber
## Setup
Install yt-dlp:
```bash
pip install yt-dlp
```
## Download Thumbnail
Using yt-dlp:
```bash
yt-dlp --write-thumbnail --skip-download "VIDEO_URL"
```
Convert to JPG:
```bash
yt-dlp --write-thumbnail --skip-download --convert-thumbnails jpg "VIDEO_URL"
```
Custom output path:
```bash
yt-dlp --write-thumbnail --skip-download -o "thumbnail" "VIDEO_URL"
```
## Direct URL Method
Get thumbnail URL:
```bash
yt-dlp --get-thumbnail "VIDEO_URL"
```
Download with curl:
```bash
curl -o thumbnail.jpg "$(yt-dlp --get-thumbnail 'VIDEO_URL')"
```
## Thumbnail URL Patterns
For video ID `VIDEO_ID`, thumbnails are available at:
```
# Maximum resolution (may not exist for all videos)
https://img.youtube.com/vi/VIDEO_ID/maxresdefault.jpg
# High quality (480x360)
https://img.youtube.com/vi/VIDEO_ID/hqdefault.jpg
# Medium quality (320x180)
https://img.youtube.com/vi/VIDEO_ID/mqdefault.jpg
# Standard quality (640x480)
https://img.youtube.com/vi/VIDEO_ID/sddefault.jpg
# Default (120x90)
https://img.youtube.com/vi/VIDEO_ID/default.jpg
```
## Quick Download by Video ID
```bash
VIDEO_ID="dQw4w9WgXcQ"
# Max resolution
curl -o "thumb_max.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/maxresdefault.jpg"
# HQ
curl -o "thumb_hq.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/hqdefault.jpg"
```
## Download All Resolutions
```bash
VIDEO_ID="dQw4w9WgXcQ"
for res in maxresdefault sddefault hqdefault mqdefault default; do
curl -o "${VIDEO_ID}_${res}.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/${res}.jpg"
done
```
## Extract Video ID from URL
```bash
# From full URL
echo "https://www.youtube.com/watch?v=dQw4w9WgXcQ" | grep -oP '(?<=v=)[^&]+'
# Or using yt-dlp
yt-dlp --get-id "VIDEO_URL"
```
## Batch Download Thumbnails
From playlist:
```bash
yt-dlp --write-thumbnail --skip-download -o "%(title)s" "PLAYLIST_URL"
```
From file with URLs:
```bash
yt-dlp --write-thumbnail --skip-download -a urls.txt
```
## Get Thumbnail with Metadata
```bash
yt-dlp --dump-json "VIDEO_URL" | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(f\"Title: {d['title']}\")
print(f\"Thumbnail: {d['thumbnail']}\")
for t in d.get('thumbnails', []):
print(f\" {t.get('width', '?')}x{t.get('height', '?')}: {t['url']}\")"
```
## Download Best Available Thumbnail
```bash
python3 -c "
import sys
import urllib.request
video_id = sys.argv[1]
resolutions = ['maxresdefault', 'sddefault', 'hqdefault', 'mqdefault', 'default']
for res in resolutions:
url = f'https://img.youtube.com/vi/{video_id}/{res}.jpg'
try:
urllib.request.urlretrieve(url, f'{video_id}.jpg')
print(f'Downloaded: {res} ({url})')
break
except:
continue
" "VIDEO_ID"
```
## Thumbnail Resolutions
| Name | Resolution | Notes |
|------|------------|-------|
| maxresdefault | 1280x720 | Not always available |
| sddefault | 640x480 | Standard |
| hqdefault | 480x360 | High quality |
| mqdefault | 320x180 | Medium quality |
| default | 120x90 | Always available |
| 0, 1, 2, 3 | 120x90 | Video frame captures |
## Alternative Thumbnail Frames
YouTube stores multiple frame captures:
```bash
VIDEO_ID="dQw4w9WgXcQ"
# Different moments from the video
curl -o "frame0.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/0.jpg"
curl -o "frame1.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/1.jpg"
curl -o "frame2.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/2.jpg"
curl -o "frame3.jpg" "https://img.youtube.com/vi/${VIDEO_ID}/3.jpg"
```
## Notes
- `maxresdefault` only exists for HD videos
- Fall back to `hqdefault` if max resolution fails
- Thumbnails are cached by YouTube CDN
- No authentication required for public videos
- WebP format may be returned; use `--convert-thumbnails jpg` to convert
- Frame captures (0-3) show different moments from the video
No comments yet. Be the first to comment!