Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
alirezarezvani avatar

Full Page Screenshot

  • 551 installs
  • 23.5k repo stars
  • Updated July 17, 2026
  • alirezarezvani/claude-skills

full-page-screenshot is a Node.js CLI skill that captures pixel-accurate full-page screenshots of live URLs or Chrome tabs via CDP for developers who need visual QA and docs assets without a design tool.

About

full-page-screenshot is a standalone full-page-screenshot.mjs CLI from alirezarezvani/claude-skills that drives Chrome DevTools Protocol to capture entire pages. It requires Node.js 22+ and Chrome with remote debugging, supporting --check for environment validation, --list for open tabs as JSON, --url for headless capture with configurable width, devicePixelRatio, and wait timeout, or targetId for existing tabs. Default viewport width is 1200 CSS pixels with 15000 ms page-load wait on URL mode. Developers reach for full-page-screenshot when they need launch screenshots, visual QA evidence, or documentation images directly from production or staging URLs without Figma exports.

  • Four modes: --check (environment), --list (open tabs JSON), --url (open/wait/capture/close), or screenshot by tab target
  • Chrome CDP capture with configurable --width (default 1200), --dpr, and --wait page load timeout (default 15000 ms)
  • Requires Node.js 22+ and Chrome with remote debugging enabled
  • Standalone full-page stitch via full-page-screenshot.mjs—no separate Puppeteer project required
  • Outputs image files to a path you specify alongside optional custom CSS injection via --css

Full Page Screenshot by the numbers

  • 551 all-time installs (skills.sh)
  • Ranked #114 of 550 CLI & Terminal skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/alirezarezvani/claude-skills --skill full-page-screenshot

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs551
repo stars23.5k
Security audit2 / 3 scanners passed
Last updatedJuly 17, 2026
Repositoryalirezarezvani/claude-skills

How do you capture full-page screenshots from Chrome?

Capture pixel-accurate full-page screenshots of live URLs or open Chrome tabs for visual QA, docs, and launch assets without a separate design tool.

Who is it for?

Developers needing automated full-page captures from Chrome CDP for visual QA, docs, or release assets without manual cropping.

Skip if: Visual diff regression suites (use visual-regression-testing) or environments without Node.js 22+ and Chrome remote debugging.

When should I use this skill?

A developer needs a full-page screenshot from a URL or open Chrome tab using CDP with --url, --list, or targetId modes.

What you get

PNG full-page screenshots from URLs or Chrome tab targetIds with configurable viewport width, DPR, and load wait.

  • Full-page PNG screenshots
  • Tab listing JSON
  • Environment check output

By the numbers

  • Requires Node.js 22+ per script header
  • Default viewport width 1200 CSS pixels
  • Default --url page load timeout 15000 ms

Files

SKILL.mdMarkdownGitHub ↗

Full Page Screenshot

Capture a full-page screenshot of any web page via Chrome DevTools Protocol. Produces a single PNG that includes all content — even portions that require scrolling. Zero external dependencies beyond Node.js 22+ and Chrome with remote debugging enabled.

Prerequisites

  • Node.js 22+ (uses built-in WebSocket)
  • Chrome/Chromium with remote debugging enabled

Check environment readiness:

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --check

If Chrome check fails, instruct user to open chrome://inspect/#remote-debugging and enable "Allow remote debugging for this browser instance".

Workflow

Option A: Screenshot an already-open tab (recommended for authenticated pages)

1. List available tabs:

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --list

2. Identify the target by title/URL, then capture:

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" <targetId> /tmp/screenshot.png --width 1200 --dpr 1

Option B: Screenshot a URL (opens a background tab, captures, closes)

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --url "https://example.com" /tmp/screenshot.png --width 1200 --dpr 1 --wait 15000
Note: --url mode creates a background tab. Pages requiring authentication (SSO, login walls) should use Option A instead.

Parameters

ParameterDescriptionDefault
outputOutput PNG file path/tmp/screenshot.png
--widthViewport width in CSS pixels (articles: 1200, dashboards: 1440-1920)1200
--dprDevice pixel ratio (2 = Retina, but 4x file size)1
--waitPage load timeout in ms (--url mode only)15000
--cssCustom CSS to inject before capture (e.g., hide elements)

Verify Output

# macOS
sips -g pixelWidth -g pixelHeight /tmp/screenshot.png

# Linux
file /tmp/screenshot.png

Core Capabilities

1. SPA scroll container expansion — Detects overflow-y: auto/scroll containers, scrolls through them to trigger lazy-loading, then removes overflow constraints (including Tailwind h-[calc(...)]) so all content renders in a single pass.

2. DOM stability detection — After readyState=complete, monitors DOM element count until it stabilizes. This ensures SPA frameworks finish rendering dynamic content.

3. Lazy-load triggering — Scrolls the viewport incrementally to fire IntersectionObserver callbacks, then waits for all <img> elements to complete loading.

4. Tiled capture for very tall pages — Pages exceeding 16,000px are captured in 8,000px tiles and automatically stitched using Python PIL. Falls back to saving tiles separately if PIL is unavailable.

5. Auto-discovery of Chrome — Reads DevToolsActivePort file to find the debugging port. Falls back to probing ports 9222, 9229, 9333.

6. CDP Proxy fallback — When a CDP proxy holds the browser WebSocket, the script falls back to proxy API endpoints (/eval, /screenshot, /scroll) for capture.

How It Works

1. Discover Chrome debugging port
2. Connect via WebSocket (CDP)
3. Attach to target / create background tab
4. Set viewport width via Emulation domain
5. Wait: readyState + DOM stability
6. Detect & expand scroll containers
7. Scroll through page (trigger lazy-load)
8. Wait for images to complete
9. Measure final content height
10. Page.captureScreenshot (or tiled capture)
11. Stitch tiles if needed (PIL)
12. Restore viewport, detach, clean up

Anti-Patterns

Do NOTDo instead
Use --dpr 2 on pages > 10,000px tallUse --dpr 1 to avoid Chrome memory issues
Use --url for authenticated/SSO pagesUse --list + targetId on a tab where user is logged in
Set --wait below 5000 for SPAsSPAs need time to fetch data and render; use 10000-15000
Capture without checking --check firstAlways verify Chrome debugging is available
Hardcode viewport widths for all pagesUse 1200 for articles, 1440+ for dashboards/tables
Skip output verificationAlways verify with sips or file command after capture

Troubleshooting

SymptomCauseFix
"Cannot find Chrome debugging port"Remote debugging not enabledOpen chrome://inspect/#remote-debugging, enable it
"WebSocket connection timeout"CDP proxy holding the connectionScript auto-falls back to proxy API
Blank/white screenshotPage not loaded yetIncrease --wait value
Truncated at bottomScroll container not expandedScript handles this automatically; file an issue if it persists
Out of memoryVery tall page + high DPRReduce --dpr to 1 and/or reduce --width
"PIL not available for stitching"Python Pillow not installedInstall with pip3 install Pillow or accept separate tile files

Cross-References

  • `engineering/browser-automation` — General browser automation patterns via CDP/Playwright
  • `engineering/performance-profiler` — Performance analysis that may complement visual captures

Related skills

How it compares

Use full-page-screenshot for one-off full-page PNG capture; use visual-regression-testing when you need automated cross-build diffs.

FAQ

What does full-page-screenshot require?

full-page-screenshot requires Node.js 22+ and Chrome with remote debugging enabled. Run --check to validate the environment before capturing URLs or listing open tabs as JSON.

How do you capture a URL with full-page-screenshot?

full-page-screenshot supports --url with optional output path, --width, --dpr, and --wait flags. Default viewport is 1200 CSS pixels with a 15000 ms load timeout on URL mode.

Is Full Page Screenshot safe to install?

skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

CLI & Terminalfrontendtesting

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.