Give your agent eyes on the web — screenshot any URL as an image file. Supports device emulation (iPhone, iPad, Pixel, MacBook), dark mode, full-page scroll, ad blocking. Uses exec tool with curl (NEVER the browser tool). $SNAPRENDER_API_KEY is pre-set. See instructions below.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add Lord1Egypt/awesome-skill-forge --skill snaprender --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Snaprender?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/lord1egypt-snaprender)More formats (shields.io, HTML) on the badges page.
---
name: snaprender
description: "Give your agent eyes on the web — screenshot any URL as an image file. Supports device emulation (iPhone, iPad, Pixel, MacBook), dark mode, full-page scroll, ad blocking. Uses exec tool with curl (NEVER the browser tool). $SNAPRENDER_API_KEY is pre-set. See instructions below."
metadata: {"openclaw": {"requires": {"bins": ["curl", "jq"], "env": ["SNAPRENDER_API_KEY"]}}}
---
# SnapRender — Give Your Agent Eyes
Your agent can read the web but can't *see* it. One command and it captures pixel-perfect screenshots — any site, any device, in seconds.
"Screenshot stripe.com on iPhone", "Compare desktop vs mobile", "Full-page dark mode capture" — just ask.
Free tier: 200 screenshots/month, no credit card. [Get a key ->](https://snap-render.com/auth/signup)
---
**IMPORTANT: Use the `exec` tool with `curl`. NEVER use the `browser` tool for screenshots.**
## How to Capture
Run this command via the `exec` tool. Replace `TARGET_URL` with the target URL:
```bash
jq -n --arg url 'TARGET_URL' \
'{url: $url, response_type: "json", format: "jpeg", quality: 60, block_ads: true, block_cookie_banners: true}' \
| curl -s -X POST "https://app.snap-render.com/v1/screenshot" \
-H "X-API-Key: $SNAPRENDER_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| tee /tmp/snap_response.json \
| jq -r '.image' | sed 's|data:image/[^;]*;base64,||' | base64 -d > /tmp/screenshot.jpg \
&& jq '{url, format, size, cache, responseTime, remainingCredits}' /tmp/snap_response.json
```
This saves the screenshot to `/tmp/screenshot.jpg` and prints metadata.
## Rules
1. **Use `exec` tool only** — NEVER the `browser` tool
2. **`$SNAPRENDER_API_KEY` is already set** — use it literally in the command, do NOT replace it
3. **Always build JSON with `jq --arg`** — never interpolate user input directly into shell strings or JSON. Pass values via `jq -n --arg` to prevent injection
4. **Always use `format=jpeg&quality=60`** — keeps response small enough for the agent context
5. **Always pipe to save the image to a file** — the base64 response is too large to display inline
6. **Report metadata to the user** — file size, response time, cache status, remaining credits
## Render HTML or Markdown
Use POST with a JSON body to render raw HTML or Markdown content (no URL needed). Always use `jq --arg` to safely pass content:
```bash
# HTML
jq -n --arg html '<html><body><h1>Hello</h1><p>World</p></body></html>' \
'{html: $html, format: "jpeg", quality: 60, response_type: "json"}' \
| curl -s -X POST "https://app.snap-render.com/v1/screenshot" \
-H "X-API-Key: $SNAPRENDER_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| tee /tmp/snap_response.json \
| jq -r '.image' | sed 's|data:image/[^;]*;base64,||' | base64 -d > /tmp/screenshot.jpg \
&& jq '{source, format, size, cache, responseTime, remainingCredits}' /tmp/snap_response.json
```
```bash
# Markdown
jq -n --arg md '# Hello World\n\nThis is **bold** text.' \
'{markdown: $md, format: "jpeg", quality: 60, response_type: "json"}' \
| curl -s -X POST "https://app.snap-render.com/v1/screenshot" \
-H "X-API-Key: $SNAPRENDER_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| tee /tmp/snap_response.json \
| jq -r '.image' | sed 's|data:image/[^;]*;base64,||' | base64 -d > /tmp/screenshot.jpg \
&& jq '{source, format, size, cache, responseTime, remainingCredits}' /tmp/snap_response.json
```
Provide exactly one of `url`, `html`, or `markdown` in the JSON body. HTML max 2MB, Markdown max 500KB.
## Signed URLs
Generate a pre-signed URL that anyone can use to view the screenshot without an API key. Signing is free; rendering the URL costs one credit.
```bash
jq -n --arg url 'TARGET_URL' \
'{url: $url, expires_in: 86400}' \
| curl -s -X POST "https://app.snap-render.com/v1/screenshot/sign" \
-H "X-API-Key: $SNAPRENDER_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| jq '.'
```
The response contains `signed_url`, `expires_at`, and `expires_in`. Use the `signed_url` in `<img>` tags, share it, or open it in a browser. No API key needed to render it.
## Parameters
Pass as fields in the JSON body:
| Parameter | Values | Default |
|-----------|--------|---------|
| url | target URL | required |
| response_type | json | json (always use this) |
| format | jpeg, png, webp, pdf | jpeg |
| quality | 1-100 | 60 |
| device | iphone_14, iphone_15_pro, pixel_7, ipad_pro, macbook_pro | desktop |
| dark_mode | true, false | false |
| full_page | true, false | false |
| block_ads | true, false | true |
| block_cookie_banners | true, false | true |
| width | 320-3840 | 1280 |
| height | 200-10000 | 800 |
| delay | 0-10000 | 0 (ms wait after page load) |
| cache | true, false | false (set true to enable caching) |
| cache_ttl | 0-2592000 | 86400 (seconds, clamped to plan max) |
| hide_selectors | CSS selectors | none (comma-separated, hides elements before capture) |
| click_selector | CSS selector | none (clicks element before capture) |
| user_agent | string | default Chrome UA |
To add extra options, include them as fields in the `jq` JSON object. Example for dark mode on iPhone:
```bash
jq -n --arg url 'TARGET_URL' \
'{url: $url, response_type: "json", format: "jpeg", quality: 60, block_ads: true, block_cookie_banners: true, device: "iphone_15_pro", dark_mode: true}' \
| curl -s -X POST ...
```
## Examples
**Desktop screenshot of stripe.com:**
```bash
jq -n --arg url 'https://stripe.com' '{url: $url, response_type: "json", format: "jpeg", quality: 60, block_ads: true, block_cookie_banners: true}' | curl -s -X POST "https://app.snap-render.com/v1/screenshot" -H "X-API-Key: $SNAPRENDER_API_KEY" -H "Content-Type: application/json" -d @- | tee /tmp/snap_response.json | jq -r '.image' | sed 's|data:image/[^;]*;base64,||' | base64 -d > /tmp/screenshot.jpg && jq '{url, format, size, cache, responseTime, remainingCredits}' /tmp/snap_response.json
```
**Mobile screenshot:** add `device: "iphone_15_pro"` to the jq object
**Full scrollable page:** add `full_page: true` to the jq object
**Dark mode:** add `dark_mode: true` to the jq object
**Compare desktop vs mobile:** make two calls, save to `/tmp/screenshot_desktop.jpg` and `/tmp/screenshot_mobile.jpg`
## After Capturing
1. Tell the user the screenshot was saved to `/tmp/screenshot.jpg` (or the filename you used)
2. Report metadata: file size, response time, cache status, remaining credits
3. For comparisons, save each screenshot to a different filename
## Errors
- **401**: Invalid API key — check SNAPRENDER_API_KEY
- **429**: Rate limit or quota exceeded — wait or upgrade plan
- **Timeout**: Target site is slow — add `delay: 3000` to the jq object to wait longer
- **Empty response**: URL unreachable or blocked
## Get an API Key
Free at https://snap-render.com/auth/signup — 200 screenshots/month, no credit card.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!