Skip to main content

Overview

Browser Debugger CLI provides intelligent screenshot capabilities:
  • Full page or viewport capture
  • Element-specific screenshots
  • Auto-resize for Claude Vision optimization (~1,600 tokens)
  • Tall page detection and handling
  • Scroll-to-element capture
  • Continuous capture mode
  • PNG and JPEG formats
Screenshots are automatically resized to fit within Claude Vision’s optimal token budget (1568px max edge) unless --no-resize is specified.

Basic Page Screenshot

# Capture full page (auto-resized for Claude Vision)
bdg dom screenshot output.png

# Capture viewport only
bdg dom screenshot visible.jpg --no-full-page

# Full resolution (disable auto-resize)
bdg dom screenshot full-res.png --no-resize
bdg dom screenshot page.png
Captures entire page with auto-resize enabled.

Image Formats

PNG (Default)

Lossless compression, best for UI screenshots:
bdg dom screenshot page.png

JPEG

Smaller file size, adjustable quality:
# Default JPEG quality (90)
bdg dom screenshot page.jpg --format jpeg

# Maximum quality
bdg dom screenshot page.jpg --format jpeg --quality 100

# Lower quality for smaller files
bdg dom screenshot page.jpg --format jpeg --quality 70
JPEG is lossy compression. Use PNG for screenshots with text or UI elements that need to be sharp.

Element Screenshots

Capture specific elements on the page:
# By selector
bdg dom screenshot element.png --selector "#header"

# By index from previous query
bdg dom query "button"
bdg dom screenshot button.png --index 0

# Element with custom format
bdg dom screenshot widget.jpg --selector ".widget" --format jpeg --quality 90
1

Query Element

bdg dom query ".hero-section"
Output shows index: [0] div.hero-section
2

Capture Element

bdg dom screenshot hero.png --index 0

Scroll and Capture

Scroll to an element before capturing:
# Scroll to footer and capture viewport
bdg dom screenshot footer.png --scroll "footer"

# Scroll to element and capture it specifically
bdg dom screenshot pricing.png --scroll "#pricing" --selector "#pricing"

# Scroll to element in list
bdg dom screenshot item.png --scroll ".item" --index 5
When using --scroll, the command automatically waits for lazy-loaded content to stabilize before capturing.

Auto-Resize Behavior

Screenshots are automatically optimized for Claude Vision:

Resize Thresholds

  • Max edge: 1568px (Claude Vision optimal)
  • Target tokens: ~1,600 tokens
  • Tall pages: Aspect ratio > 3:1 automatically captures viewport only

Examples

Original SizeResized ToTokensReduction
1920x10801568x8821,38323%
2560x14401568x8821,38338%
3840x21601568x8821,38359%
1200x8000viewport1,53694% (tall page)

Device Pixel Ratio

Retina displays (DPR > 1) are automatically handled:
# On Retina display (DPR 2.0)
bdg dom screenshot page.png

# Automatically sets DPR to 1 before capture
# Result: 1568px max edge, ~1,600 tokens

Tall Page Handling

Pages with aspect ratio > 3:1 automatically capture viewport only:
bdg dom screenshot long-page.png
Output:
{
  "path": "/path/to/long-page.png",
  "captureMode": "viewport",
  "fullPageSkipped": {
    "reason": "page_too_tall",
    "originalHeight": 8000,
    "aspectRatio": 6.7
  },
  "warning": "Full page capture skipped: page too tall (6.7:1 aspect ratio). Only viewport captured."
}
Tall pages would exceed token limits if captured in full. Use --scroll to capture specific sections.

Continuous Capture Mode

Capture screenshots at regular intervals:
# Capture to directory every second
bdg dom screenshot ./frames --follow

# Custom interval (every 2 seconds)
bdg dom screenshot ./frames --follow --interval 2000

# Limit number of frames
bdg dom screenshot ./frames --follow --limit 10

# JPEG format
bdg dom screenshot ./frames --follow --format jpeg
Output:
Capturing to ./frames every 1000ms...
Frame 1: 001.png
Frame 2: 002.png
Frame 3: 003.png
...
^C
Captured 15 frames
Press Ctrl+C to stop continuous capture.

Use Cases

  • Recording animations
  • Monitoring page changes
  • Creating time-lapses
  • Debugging loading states

Screenshot Metadata

All screenshots return detailed metadata:
bdg dom screenshot page.png --json
Output:
{
  "version": "0.5.1",
  "success": true,
  "data": {
    "path": "/absolute/path/to/page.png",
    "format": "png",
    "width": 1568,
    "height": 882,
    "size": 245678,
    "fullPage": true,
    "captureMode": "full_page",
    "finalTokens": 1383,
    "resized": true,
    "originalWidth": 1920,
    "originalHeight": 1080,
    "originalTokens": 2073
  }
}

Metadata Fields

FieldDescription
pathAbsolute path to saved file
formatImage format (png/jpeg)
widthFinal image width (px)
heightFinal image height (px)
sizeFile size (bytes)
fullPageWhether full page was captured
captureModefull_page or viewport
finalTokensEstimated Claude Vision tokens
resizedWhether auto-resize was applied
originalWidthWidth before resize (if resized)
originalHeightHeight before resize (if resized)
originalTokensTokens before resize (if resized)

Workflow Examples

Capture Page States

1

Initial State

bdg dom screenshot 1-initial.png
2

After Interaction

bdg dom fill "#email" "[email protected]"
bdg dom screenshot 2-filled.png
3

After Submission

bdg dom click "#submit"
bdg dom screenshot 3-submitted.png
4

Error State

bdg console --level error
bdg dom screenshot 4-error.png

Compare Sections

# Header
bdg dom screenshot header.png --selector "header"

# Main content
bdg dom screenshot main.png --selector "main"

# Footer
bdg dom screenshot footer.png --scroll "footer" --selector "footer"

Record Interaction

# Start continuous capture
bdg dom screenshot ./recording --follow --interval 500 &
CAPTURE_PID=$!

# Perform interactions
bdg dom fill "#search" "query"
bdg dom click "#submit"

# Stop capture
kill $CAPTURE_PID

# Review frames
ls -l ./recording/

Mobile Viewport

# Capture viewport (typical mobile view)
bdg dom screenshot mobile.png --no-full-page

# Specific elements
bdg dom screenshot nav.png --selector "nav"
bdg dom screenshot content.png --selector "main"

Token Optimization

Optimize screenshots for AI vision models:

When to Disable Auto-Resize

# Need full quality for OCR
bdg dom screenshot text.png --no-resize

# Small elements already under threshold
bdg dom screenshot icon.png --selector ".icon" --no-resize

# Archival purposes
bdg dom screenshot archive.png --no-resize --format png

When Auto-Resize Helps

# Large pages
bdg dom screenshot page.png  # Auto-resizes to ~1,600 tokens

# High-DPI displays
bdg dom screenshot retina.png  # Handles DPR automatically

# Token budget concerns
bdg dom screenshot all.png  # Stays within Claude Vision limits

Tips and Best Practices

Use PNG when:
  • Capturing text or UI
  • Need lossless quality
  • File size is not a concern
Use JPEG when:
  • Capturing photos or gradients
  • File size is a concern
  • Slight quality loss is acceptable

Troubleshooting

Screenshot Too Large

# Check if auto-resize is enabled
bdg dom screenshot page.png --json | jq '.data.resized'

# Manually enable auto-resize (it's default)
bdg dom screenshot page.png

# Capture viewport only
bdg dom screenshot page.png --no-full-page

Element Not Visible

# Scroll to element first
bdg dom screenshot element.png --scroll "selector"

# Check if element exists
bdg dom query "selector"

# Verify element has dimensions
bdg dom get "selector" --raw

Quality Issues

# Use PNG for text
bdg dom screenshot page.png --format png

# Increase JPEG quality
bdg dom screenshot page.jpg --format jpeg --quality 100

# Disable auto-resize for full quality
bdg dom screenshot page.png --no-resize

Next Steps

DOM Inspection

Query elements for screenshot targets

Forms & Interaction

Capture form states and interactions

API Reference

Complete screenshot command reference

Console Debugging

Debug screenshot failures

Build docs developers (and LLMs) love