Skill: user0856/snaprender (version 1.5.1)

--- 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-[REDACTED_SECRET]" \ -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-[REDACTED_SECRET]" \ -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-[REDACTED_SECRET]" \ -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-[REDACTED_SECRET]" \ -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-[REDACTED_SECRET]" -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.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)