---
title: "render"
description: "The call that produces the pixels: preview panels, full-resolution panels or a fastlane bundle."
canonical: "https://shotops.dev/docs/mcp/reference/render"
last_updated: "2026-09-30"
shotops_mcp_version: "0.10.0"
result_contract_version: "2.0.0"
---
# render

The call that produces the pixels: preview panels, full-resolution panels or a fastlane bundle.

## What it does

- Writes
- Open world
- No account needed

Render the store screenshots. Name a saved project and it renders the screenshots, frame order, captions and look the project already holds, with nothing attached to the conversation; or pass screenshots and a style and it composites each one into a styled 3D device. `output` chooses what comes back: a preview to iterate against (the default, a quarter of the full price), full-resolution panels, or a zip ready for `fastlane deliver`. Rendering never saves a project, and you run fastlane yourself — this server never holds an Apple or store credential and never submits anything for review.

You can ask: “Preview the saved Tidebook project, then build its bundle for both locales.”

The published schema accepts any shape inside `screenshots`, `style` and `look` so a malformed entry comes back as a sentence naming the field rather than a stacked union error.

Annotated open-world because a bundle can publish a share link. It still never reaches a store.

## Input

- `project`stringoptionalat least 1 character Saved project id or exact name. Renders the screenshots, captions and look it holds.
- `screenshots`arrayoptionalat most 60 items Screenshots to render, one per panel in order: { "ref" } from import_screenshot or request_screenshot_upload, { "url" }, { "path" } (local only), or small base64. With a `project`, entries carry `name` and replace the project file of that name. each item any The published schema does not constrain this element, on purpose — a malformed entry comes back as a sentence instead of a stacked union error. What the server re-validates against is below.
- `output`stringoptional "preview" (default, quarter resolution, cheap), "panels" (full-resolution PNGs) or "bundle" (fastlane zip). one of`preview``panels``bundle`
- `outputs`arrayoptionalat least 1 itemat most 2 items Devices to render: iphone-6-9, iphone-6-5. Default: the project's saved devices, else iphone-6-9. each item string one of`iphone-6-9``iphone-6-5`
- `locale`stringoptional App Store locale, e.g. "de-DE". Default: the project base locale, else en-US.
- `locales`arrayoptionalat least 1 itemat most 40 items Bundle only: one fastlane folder per locale. each item string
- `style`objectoptional Supplied screenshots only: layout, captions, background, shotLook. Fields: describe_look.
- `look`objectoptional Supplied screenshots only: a look from read_look or a `layout.correctedLook`.
- `bundleId`stringoptional Bundle only, required: reverse-DNS app id, e.g. com.acme.app. Pre-fills the Deliverfile.
- `share`booleanoptional Bundle only: also create a 14-day share link.
- `delivery`stringoptional "inline" base64 or short-lived "urls". Default: inline when small. one of`inline``urls`
- `waivers`arrayoptional Readiness findings to waive, passed back exactly as a refusal returned them. each item object
- `idempotencyKey`stringoptionalat least 1 characterat most 200 characters A new key forces a fresh paid render; omit for safe retries.

## Result

Results arrive as structured JSON with a `contract` envelope; the example below says what comes back. The schema is not declared, to keep what a model reads small.

## Example

That request maps to this call:

```
{
  "name": "render",
  "arguments": {
    "project": "Tidebook 2.4 launch",
    "output": "bundle",
    "bundleId": "com.tidebook.app",
    "locales": [
      "en-US",
      "de-DE"
    ]
  }
}
```

Panels as PNGs or a zip, inline or as download URLs. A render also reports its composition: a `layout` block names every caption sitting on a device and, where the repair is deterministic, carries a corrected look you can pass straight back.

## Access and cost

- Previews are open to everyone, including a hosted caller with no account.
- Full-resolution panels and every bundle are production output: they need an active Pro trial or Pro, and the server decides that before anything renders or any cloud credit is spent.
- On the hosted server a preview panel costs 1 cloud credit and a full-resolution panel 4 cloud credits. On the local stdio server rendering is free and spends nothing.
- Without an account the hosted server allows 3 preview attempts per network per 30 days, up to 5 panels each.
- Rendering a saved project needs an account. A project holds its own screenshots when its owner set its reach to "Your account" in the web app; read_project reports that.

## When it refuses

- **The reply says production output is not available.**
  That is an entitlement answer, not a render failure — nothing was rendered and nothing was charged. Call account_status, do the step it names, then retry. Previews keep working.

- **A full-resolution screenshot is rejected as too large.**
  Inline base64 is capped for small payloads. Import the file first (import_screenshot for a URL or a ChatGPT attachment, request_screenshot_upload for a file on the user’s disk) and pass the returned ref instead.

- **The result carries a `layout` block full of findings.**
  Captions are landing on devices. Pass `layout.correctedLook` back as `look` and render again, or pick a layout template sized for the longest headline in the set.

- **Shots of a saved project come back reported as missing.**
  The project has a frame with no stored or supplied screenshot. Supply that file by its original name, or accept the strip without it.

- **A locale folder in a bundle came back with fallback captions.**
  That locale has no caption words of its own, so the base locale was used. Add them with edit_project and render again.

## Where this fits

- [The whole path from screenshots to a bundle](https://shotops.dev/docs/mcp/workflows/first-strip)
- [Rendering a saved project](https://shotops.dev/docs/mcp/workflows/saved-project)
- [One bundle carrying every locale folder](https://shotops.dev/docs/mcp/workflows/localization)

## What the agent is told

The title and description the server publishes on `tools/list` — this is the copy a model chooses between, reproduced verbatim.

Render App Store screenshots

Render store screenshots from a saved `project` (it holds its screenshots, captions and look) or from supplied `screenshots` styled with `style`. `output`: "preview" (default), "panels" (full resolution) or "bundle" (fastlane zip). Rendering never saves a project.
