Official Python SDK for the Rendex screenshot API — capture any webpage as an image
Project description
rendex
Official Python SDK for the Rendex screenshot API. Capture any webpage as a high-quality image with a single function call.
- Full type hints (PEP 561 compatible)
- Single dependency (
httpx) - Sync API with context manager support
- Typed error handling with API error codes
Install
pip install rendex
Quick Start
from pathlib import Path
from rendex import Rendex
rendex = Rendex("your-api-key")
# Capture a screenshot (returns binary image)
result = rendex.screenshot("https://example.com", format="png", full_page=True)
Path("screenshot.png").write_bytes(result.image)
print(f"{result.metadata.bytes_size} bytes, loaded in {result.metadata.load_time_ms}ms")
API Reference
Rendex(api_key, *, base_url="https://api.rendex.dev")
Create a new Rendex client.
rendex = Rendex("your-api-key")
# Or with context manager for connection reuse
with Rendex("your-api-key") as rendex:
result = rendex.screenshot("https://example.com")
rendex.screenshot(url, **options)
Capture a screenshot and return the binary image with metadata.
result = rendex.screenshot(
"https://example.com",
format="webp",
width=1920,
height=1080,
dark_mode=True,
)
Path("screenshot.webp").write_bytes(result.image)
print(result.metadata.load_time_ms) # 350
Returns ScreenshotResult:
image—bytesof the captured imagemetadata—ScreenshotMetadatawith url, dimensions, format, bytes_size, load_time_ms, quality, etc.
rendex.screenshot_json(url, **options)
Capture a screenshot and return JSON with a base64-encoded image.
result = rendex.screenshot_json("https://example.com")
print(result["data"]["bytesSize"]) # 45823
print(result["meta"]["usage"]["remaining"]) # 499
Returns ScreenshotJsonResponse dict with data (image + metadata) and meta (request ID, usage).
rendex.screenshot_url(url, **options)
Generate a GET URL for embedding. No network call — pure URL builder.
url = rendex.screenshot_url("https://example.com", format="png", width=1200)
# Use in <img> tags, OpenGraph, etc.
Note: The API key is included in the URL. Use server-side only.
Screenshot Options
All options are keyword arguments in snake_case. Only url (positional) is required:
| Option | Type | Default | Description |
|---|---|---|---|
format |
str |
"png" |
"png", "jpeg", "webp", or "pdf" |
width |
int |
1280 |
Viewport width (320–3840) |
height |
int |
800 |
Viewport height (240–2160) |
full_page |
bool |
False |
Capture the full scrollable page |
quality |
int |
— | JPEG/WebP quality (1–100) |
delay |
int |
0 |
Delay before capture in ms (0–10000) |
dark_mode |
bool |
False |
Emulate dark mode |
device_scale_factor |
float |
1 |
Device pixel ratio (1–3) for Retina |
block_ads |
bool |
True |
Block ads and trackers |
block_resource_types |
list |
— | Block: "font", "image", "media", "stylesheet", "other" |
timeout |
int |
30 |
Page load timeout in seconds (5–60) |
wait_until |
str |
"networkidle2" |
"load", "domcontentloaded", "networkidle0", "networkidle2" |
wait_for_selector |
str |
— | CSS selector to wait for |
best_attempt |
bool |
True |
Return best-effort screenshot on timeout |
selector |
str |
— | Capture a specific element by CSS selector |
Error Handling
from rendex import Rendex, RendexApiError, RendexNetworkError
rendex = Rendex("your-api-key")
try:
rendex.screenshot("https://example.com")
except RendexApiError as e:
# API returned an error
print(e.error_code) # "RATE_LIMITED", "VALIDATION_ERROR", etc.
print(e.status_code) # 429, 400, etc.
print(e.request_id) # For debugging with Rendex support
print(e.details) # Validation details (if any)
except RendexNetworkError as e:
# Network failure (DNS, timeout, connection refused)
print(f"Network error: {e}")
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
VALIDATION_ERROR |
400 | Invalid request parameters |
INVALID_URL |
400 | URL failed SSRF validation |
TIMEOUT |
408 | Page took too long to load |
CAPTURE_FAILED |
500 | Browser rendering error |
RATE_LIMITED |
429 | Rate limit exceeded |
USAGE_EXCEEDED |
429 | Monthly credit limit reached |
MISSING_API_KEY |
401 | No API key provided |
INVALID_API_KEY |
401 | API key verification failed |
License
MIT - Copperline Labs LLC
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rendex-1.0.0.tar.gz.
File metadata
- Download URL: rendex-1.0.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.13 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d14f94931b5f5679d0619f2149d04524db1be71e2348b543164bb55246bd4aa9
|
|
| MD5 |
dcaf3fb1f1809873b35fc0bd791290d5
|
|
| BLAKE2b-256 |
8179490929cf17826f642fc9dde84e3d3f1cf338af8a940b6d6cbd6f2c6aa76b
|
File details
Details for the file rendex-1.0.0-py3-none-any.whl.
File metadata
- Download URL: rendex-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.13 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa4f0a3589f79684af51c221ffad9d62657075dce911bb1f8906b41f5822ac91
|
|
| MD5 |
0a1404be95071a5899d3024af4237b45
|
|
| BLAKE2b-256 |
e037b14a4cb7bc4519bca63a8ac27e981b8c8a0fc6f33741665388f2a68c33be
|