A zero-dependency Claude Code skill that captures full-page screenshots of any web page as a single PNG image, including all content below the fold.
Connects directly to Chrome DevTools Protocol (CDP) — no Puppeteer, no Playwright, no npm install needed.
overflow-y: scroll/auto containers and expands themIntersectionObserver imagesweb-access skill) holds the WebSocket, automatically falls back to proxy APItargetId, or provide a URL to open → capture → close automatically| Requirement | Version |
|---|---|
| Node.js | 22+ |
| Chrome | Remote debugging enabled |
| Python 3 + Pillow | Optional, for tiling stitch on ultra-long pages |
Enable Chrome remote debugging:
chrome://inspect/#remote-debuggingnpx skills add LewisLiu007/full-page-screenshot
Or manually clone into your skills directory:
git clone https://github.com/LewisLiu007/full-page-screenshot.git ~/.claude/skills/full-page-screenshot
Just ask Claude:
"Take a full-page screenshot of https://example.com"
"Screenshot this page as a long image"
"截个长图"
Claude will automatically invoke this skill when it detects screenshot-related intent.
# Check prerequisites
node scripts/full-page-screenshot.mjs --check
# List open browser tabs
node scripts/full-page-screenshot.mjs --list
# Screenshot a URL (opens tab → captures → closes)
node scripts/full-page-screenshot.mjs --url "https://example.com" output.png
# Screenshot an existing tab by targetId
node scripts/full-page-screenshot.mjs <targetId> output.png
| Flag | Description | Default |
|---|---|---|
output | Output file path | /tmp/screenshot.png |
--width | Viewport width (CSS px). 1200 for articles, 1440–1920 for wide tables | 1200 |
--dpr | Device pixel ratio. 2 = Retina quality (4× file size) | 1 |
--wait | Page load timeout in ms (--url mode only) | 15000 |
Chrome DevToolsActivePort file
│
▼
Discover debug port ──► WebSocket connect
│
▼
Set viewport (Emulation.setDeviceMetricsOverride)
│
▼
Wait for readyState=complete + DOM stable
│
▼
Detect & expand scroll containers (override CSS)
│
▼
Scroll to trigger lazy-loaded images
│
▼
Page.captureScreenshot (or tile + stitch if > 16000px)
│
▼
Save PNG ✓
--dpr to 1--url mode creates a background tab that auto-closes after capturefs, net, path, os, child_process)MIT
JavaScript
100.0%
A zero-dependency Claude Code skill that captures full-page screenshots of any web page as a single PNG image, including all content below the fold.
Connects directly to Chrome DevTools Protocol (CDP) — no Puppeteer, no Playwright, no npm install needed.
overflow-y: scroll/auto containers and expands themIntersectionObserver imagesweb-access skill) holds the WebSocket, automatically falls back to proxy APItargetId, or provide a URL to open → capture → close automatically| Requirement | Version |
|---|---|
| Node.js | 22+ |
| Chrome | Remote debugging enabled |
| Python 3 + Pillow | Optional, for tiling stitch on ultra-long pages |
Enable Chrome remote debugging:
chrome://inspect/#remote-debuggingnpx skills add LewisLiu007/full-page-screenshot
Or manually clone into your skills directory:
git clone https://github.com/LewisLiu007/full-page-screenshot.git ~/.claude/skills/full-page-screenshot
Just ask Claude:
"Take a full-page screenshot of https://example.com"
"Screenshot this page as a long image"
"截个长图"
Claude will automatically invoke this skill when it detects screenshot-related intent.
# Check prerequisites
node scripts/full-page-screenshot.mjs --check
# List open browser tabs
node scripts/full-page-screenshot.mjs --list
# Screenshot a URL (opens tab → captures → closes)
node scripts/full-page-screenshot.mjs --url "https://example.com" output.png
# Screenshot an existing tab by targetId
node scripts/full-page-screenshot.mjs <targetId> output.png
| Flag | Description | Default |
|---|---|---|
output | Output file path | /tmp/screenshot.png |
--width | Viewport width (CSS px). 1200 for articles, 1440–1920 for wide tables | 1200 |
--dpr | Device pixel ratio. 2 = Retina quality (4× file size) | 1 |
--wait | Page load timeout in ms (--url mode only) | 15000 |
Chrome DevToolsActivePort file
│
▼
Discover debug port ──► WebSocket connect
│
▼
Set viewport (Emulation.setDeviceMetricsOverride)
│
▼
Wait for readyState=complete + DOM stable
│
▼
Detect & expand scroll containers (override CSS)
│
▼
Scroll to trigger lazy-loaded images
│
▼
Page.captureScreenshot (or tile + stitch if > 16000px)
│
▼
Save PNG ✓
--dpr to 1--url mode creates a background tab that auto-closes after capturefs, net, path, os, child_process)MIT
JavaScript
100.0%