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
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & 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 zip
latestvk97dz480x2skk47f3wcwt89jzd80wq4r

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:

OptionTypeDefaultDescription
urlstringrequiredURL to screenshot
formatstring"png""png" or "jpeg"
full_pagebooleanfalseCapture entire scrollable page
widthinteger1280Viewport width (pixels)
heightinteger720Viewport height (pixels)
dark_modebooleanfalseEmulate dark color scheme
selectorstringCSS selector to screenshot specific element
wait_msinteger0Extra wait time after page load (max 10000)
scalenumber1Device scale factor (1-3, for retina)
cookiesarrayArray of {name, value, domain} objects
headersobjectCustom HTTP headers
block_adsbooleanfalseBlock 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 total
Select a file
Select a file to preview.

Comments

Loading comments…