Sending Screenshots to Vision Models Through One Aggregator Key: A Practical Walkthrough
A practical guide to sending screenshots to vision-capable models via a unified API aggregator, covering encoding, model selection, cost structure, and best practices for multi-model workflows.
Why Use an Aggregator for Vision Tasks
Sending screenshots to vision models typically requires managing separate API keys, billing, and SDKs for each provider. An aggregator simplifies this: you top up once with USDC on Base (no KYC), get a single API key, and call many vision-capable models—such as Claude, GPT, DeepSeek, Qwen, GLM, and Kimi—through one consistent interface. You pay the official price × 1.3, and if you contribute keys, you're credited official price × 1.1 (or × 1.2 for premium) in USDC.
Preparing Your Screenshot for the API
Most vision models accept images as base64-encoded strings or via URLs. For screenshots:
- Capture at a reasonable resolution. Very large images increase token usage and cost; downscale if the text remains legible.
- Choose a common format like PNG or JPEG. PNG is better for text-heavy screenshots; JPEG reduces size for photos.
- Encode to base64 if the API expects inline data. Use a library or command-line tool to avoid manual errors.
Example (Python):
import base64
with open("screenshot.png", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode("utf-8")
Constructing the API Request
The aggregator exposes an OpenAI-compatible chat completions endpoint. Include the image in the message content as a JSON object with type image_url and the base64 data URI.
import requests
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "claude-3-5-sonnet", # or another vision model
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "Extract all text from this screenshot."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_b64}"}}
]
}
]
}
response = requests.post("https://api.aggregator.example/v1/chat/completions", headers=headers, json=payload)
print(response.json())
Replace the endpoint and model name with those supported by your aggregator.
Choosing the Right Vision Model
Different models excel at different screenshot tasks:
- Text extraction (OCR): Models like GPT-4o and Claude 3.5 Sonnet handle dense text well.
- UI element detection: Qwen-VL and GLM-4V are strong for layout understanding.
- General reasoning: DeepSeek-VL and Kimi-VL offer competitive performance.
Since you’re using one key, you can benchmark multiple models on your screenshots and pick the most cost-effective one for each use case. Remember that pricing varies—you pay official price × 1.3, so test with small images first.
Handling Responses and Errors
Vision models return a text response, often with extracted content or descriptions. Check for:
- Rate limits or quota errors – the aggregator may impose limits; handle with exponential backoff.
- Image size limits – some models reject images above a certain resolution or file size.
- Invalid base64 – ensure encoding is correct and the data URI prefix matches the format.
Cost Considerations
You pay official price × 1.3 for each call, regardless of model. To manage costs:
- Downscale screenshots when possible.
- Use lower-cost models for simple extraction tasks.
- Cache results if you process the same screenshot repeatedly.
If you contribute API keys, you earn credits at official price × 1.1 (or × 1.2 for premium models), which can offset your usage.
Best Practices
- Batch multiple screenshots in one request if the model supports it, but watch token limits.
- Use clear prompts – specify the task (e.g., “list all buttons”) to get concise answers.
- Validate base64 before sending to avoid wasted calls.
- Monitor usage via the aggregator’s dashboard to track spending.
By following these steps, you can efficiently send screenshots to a variety of vision models through a single API key, simplifying your workflow while keeping costs predictable.