# Yt Thumbnail Grabber

> Download YouTube video thumbnails in various resolutions. Use when you need to get video preview images, create collages, or save thumbnails for reference.

- Skill: `modbender/yt-thumbnail-grabber` (Agent Skill)
- Install (CLI): `npx skillmds add modbender/yt-thumbnail-grabber`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modbender/yt-thumbnail-grabber/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: modbender (https://skillmd.com/u/modbender)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/modbender/yt-thumbnail-grabber

---


# 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

