Browser presets
Launch-ready browser shots
Chrome, Safari, minimal browser, and laptop frames across hero, OG, and square canvases.
Same request, same content_hash. Every asset on this page was rendered by the live API in the last 24 hours.
POST /v1/render
{
"html": "<main><h1>Launch day.</h1></main>",
"preset": "chrome-light-v1",
"canvas": "hero",
"background": "paper",
"format": "png"
}
Paste self-contained HTML or terminal output, choose a frame, and get a watermarked PNG from the production renderer. No API key is accepted by this page.
Rendered output
Edit the starter HTML or render it as-is.
Browser, device, terminal, and laptop presets turn the same source into finished assets without a mockup editor or a design cleanup pass.
Browser presets
Chrome, Safari, minimal browser, and laptop frames across hero, OG, and square canvases.
Real mobile capture
Mobile emulation, touch input, and the preset viewport are applied before capture.
Terminal output
Render clean CLI output with 16-color, 256-color, and truecolor ANSI styling preserved.
Four bounded motion recipes produce MP4, WebP, or GIF output using the same frames and presentation controls as stills.
Frame-stream proof
Each clip reports whether capture stayed deterministic and returns a content_hash over the composed frame stream.
Loading manifest…Add an idempotency key, poll the job, and compare content_hash before you publish a changed asset.
CI · poll and assert content_hash
response=$(curl --silent --fail-with-body \
"$SHOTCURATOR_API_URL/v1/render" \
-H "Authorization: Bearer $SHOTCURATOR_API_KEY" \
-H "Idempotency-Key: $GITHUB_SHA" \
-H "Content-Type: application/json" \
--data @render.json)
job_id=$(jq -r '.id' <<< "$response")
job=$(curl --silent --fail-with-body \
"$SHOTCURATOR_API_URL/v1/jobs/$job_id" \
-H "Authorization: Bearer $SHOTCURATOR_API_KEY")
test "$(jq -r '.content_hash' <<< "$job")" = \
"$(cat .shotcurator-hash)"
Start with curl, then give an MCP-compatible client the same render, recipe, and credit tools.
curl · render a framed still
curl "$SHOTCURATOR_API_URL/v1/render" \
-H "Authorization: Bearer $SHOTCURATOR_API_KEY" \
-H "Content-Type: application/json" \
--data @request.json \
--output product-shot.png
MCP · connect the render tools
SNAPHTML_BASE_URL="$SHOTCURATOR_API_URL" \
SNAPHTML_API_KEY="$SHOTCURATOR_API_KEY" \
pnpm mcp
# Tools include:
# render_product_shot
# render_terminal
# render_clip
# list_recipes
One still costs one credit. Clips cost five credits per second of output.
Free
$0/ month
Explore the API and build a first integration.
Starter
$29/ month
For regular product shots and release assets.
Most popular
Growth
$99/ month
For teams automating launches and campaigns.
Scale
$299/ month
For high-volume rendering across a product portfolio.
Clips reserve five credits per requested second, then settle at their measured duration. Unused reserved credits are released.
Validation, security blocks, missing selectors, timeouts, and browser failures cost zero. Any job hold is refunded.