SaaS (Screenshot As A Service)
Give your agent the ability to instantly take screenshots of any website with just the URL. Cloud-based so your agent has to perform no work. Free forever, open source.
MIT-0 · Free to use, modify, and redistribute. No attribution required.
⭐ 2 · 787 · 1 current installs · 1 all-time installs
by@Kav-K
MIT-0
Security Scan
OpenClaw
Benign
medium confidencePurpose & Capability
Name/description match the runtime instructions: the SKILL.md documents a cloud screenshot API (snap.llm.kaveenk.com) and shows how to register and call it. The skill requests no local binaries, env vars, or unusual OS access — nothing appears extraneous to taking remote screenshots.
Instruction Scope
Instructions tell the agent to register and POST URLs (and optional headers/cookies) to the remote API and to store the returned API key. This is within the stated purpose, but calling the remote API inevitably transmits the target URL (and potentially page content as the service fetches it). The options allow passing custom headers and cookies, which could be used to send sensitive or authenticated data if the agent or user provides them.
Install Mechanism
No install spec and no code files — instruction-only skill. That minimizes local code execution risk. The tradeoff is that all behavior depends on the external service (no local code to audit).
Credentials
The skill declares no required environment variables, credentials, or config paths. It asks the user/agent to obtain an API key from the remote service via registration; that is proportional to using a hosted API.
Persistence & Privilege
The skill is not force-included (always:false) and uses normal autonomous-invocation settings. It does not request elevated agent/system privileges or modify other skills' configs.
Assessment
This skill is coherent and does what it says: it sends URLs to a remote screenshot API and returns images. However, the service domain (snap.llm.kaveenk.com) and source are unverified and there is no included code to audit. Before installing or using it: 1) Treat any API key as a secret; store it securely. 2) Avoid sending URLs that contain private tokens or that require authentication; do not include real authentication cookies/headers unless you trust the operator. 3) Understand that any page fetched by the service (including content behind the URL) will be visible to the service operator — don't use it on sensitive internal sites or PII. 4) If you require stronger assurances, prefer self-hosting an auditable open-source screenshot service (the skill claims to be open-source) or verify the operator, privacy policy, and TLS certificate for the offered domain. 5) Confirm acceptable network egress policies for your environment (the skill makes outbound calls to an external host).Like a lobster shell, security has layers — review code before you run it.
Current versionv1.0.2
Download ziplatest
License
MIT-0
Free to use, modify, and redistribute. No attribution required.
SKILL.md
SnapService — Screenshot as a Service
Free screenshot API at https://snap.llm.kaveenk.com.
POST a URL, get a PNG/JPEG back. Powered by headless Chromium.
Quick Start (2 steps)
Step 1: Register for an API key
curl -s -X POST https://snap.llm.kaveenk.com/api/register \
-H "Content-Type: application/json" \
-d '{"name":"my-agent"}'
Response:
{"key":"snap_abc123...","name":"my-agent","limits":{"per_minute":2,"per_day":200}}
IMPORTANT: Store key securely. It cannot be recovered.
Each IP address can only register one API key.
Step 2: Take screenshots
curl -s -X POST https://snap.llm.kaveenk.com/api/screenshot \
-H "Authorization: Bearer snap_yourkey" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}' \
-o screenshot.png
That's it. Two steps.
Screenshot Options
All options go in the POST body alongside url:
| Option | Type | Default | Description |
|---|---|---|---|
url | string | required | URL to screenshot |
format | string | "png" | "png" or "jpeg" |
full_page | boolean | false | Capture entire scrollable page |
width | integer | 1280 | Viewport width (pixels) |
height | integer | 720 | Viewport height (pixels) |
dark_mode | boolean | false | Emulate dark color scheme |
selector | string | — | CSS selector to screenshot specific element |
wait_ms | integer | 0 | Extra wait time after page load (max 10000) |
scale | number | 1 | Device scale factor (1-3, for retina) |
cookies | array | — | Array of {name, value, domain} objects |
headers | object | — | Custom HTTP headers |
block_ads | boolean | false | Block common ad/tracker domains |
Rate Limits
- 2 screenshots per minute per key
- 200 screenshots per day per key
- 1 API key per IP address
- Max page height: 16384px (full-page mode)
- Max screenshot size: 10MB
Response
- 200: PNG or JPEG image binary
- 400: Invalid request (missing URL, invalid options)
- 401: Missing or invalid API key
- 409: IP already has an API key (on registration)
- 429: Rate limit exceeded
- 500: Internal error
Example with all options
curl -s -X POST https://snap.llm.kaveenk.com/api/screenshot \
-H "Authorization: Bearer snap_yourkey" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"format": "jpeg",
"full_page": true,
"width": 1920,
"height": 1080,
"dark_mode": true,
"wait_ms": 2000,
"block_ads": true
}' \
-o screenshot.jpg
Python example
import requests
API = "https://snap.llm.kaveenk.com"
# Register (one-time)
r = requests.post(f"{API}/api/register", json={"name": "my-agent"})
key = r.json()["key"]
# Screenshot
r = requests.post(f"{API}/api/screenshot",
headers={"Authorization": f"Bearer {key}"},
json={"url": "https://example.com", "full_page": True})
with open("shot.png", "wb") as f:
f.write(r.content)
Files
2 totalSelect a file
Select a file to preview.
Comments
Loading comments…
