Default model tools

scene_preview

Inspect rendered FX scene frames

Renders exact frames of a saved scene in a contained browser and returns real MCP PNG images. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Without project_id/brand_id it previews for account FX authoring. at_ms selects explicit scene times; burst selects an evenly spaced set. contact_sheet returns one tiled image. This renders preview evidence without changing the scene, production defaults or an Episode.

Surface: Default model and app

Product release eb8538f4a297f331d0399351c1e175bffcd212d2
Public contract commit 20688e11af473a363145ed880d5019c90a7ec1e2
Public contract SHA-256 87a94b85a84dc19245fc03f9b544c70d64bd9f5e08585dcccb38157cace5700d
Captured 2026-10-04T11:55:45.577Z. Review or improve this contract on GitHub.

These blocks show the complete MCP descriptors captured from serving Rails. Security schemes and resource URIs can differ by connected host.

Default model descriptor

{
  "name": "scene_preview",
  "title": "Inspect rendered FX scene frames",
  "description": "Renders exact frames of a saved scene in a contained browser and returns real MCP PNG images. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Without project_id/brand_id it previews for account FX authoring. at_ms selects explicit scene times; burst selects an evenly spaced set. contact_sheet returns one tiled image. This renders preview evidence without changing the scene, production defaults or an Episode.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "project_id": {
        "type": "string",
        "description": "Project public ID; this is the account boundary for the scene and brand."
      },
      "scene_id": {
        "type": "string",
        "description": "Account scene id written by scene_write."
      },
      "recipe": {
        "type": "object",
        "description": "Optional recipe object; scene_id/scene may be read from it."
      },
      "brand_id": {
        "type": "string",
        "description": "Checked-in brand id or account pack id returned by brand_pack_write."
      },
      "at_ms": {
        "type": "array",
        "minItems": 1,
        "maxItems": 6,
        "items": {
          "type": "number",
          "minimum": 0
        },
        "description": "Exact scene times in milliseconds, including fractional frame boundaries. Max 6."
      },
      "burst": {
        "type": "object",
        "description": "Alternative to at_ms: {count, duration_ms}. Max count 6."
      },
      "aspect": {
        "type": "string",
        "enum": [
          "16:9",
          "9:16",
          "1:1",
          "4:5"
        ],
        "description": "Preview aspect. Defaults to the saved scene aspect."
      },
      "contact_sheet": {
        "type": "boolean",
        "description": "When true, model-visible content returns one tiled PNG contact sheet instead of individual frame image blocks. Per-frame data URLs remain in private app hydration and web-bridge results."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "title": "Inspect rendered FX scene frames",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  }
}

App descriptor

{
  "name": "scene_preview",
  "title": "Inspect rendered FX scene frames",
  "description": "Renders exact frames of a saved scene in a contained browser and returns real MCP PNG images. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Without project_id/brand_id it previews for account FX authoring. at_ms selects explicit scene times; burst selects an evenly spaced set. contact_sheet returns one tiled image. This renders preview evidence without changing the scene, production defaults or an Episode.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "project_id": {
        "type": "string",
        "description": "Project public ID; this is the account boundary for the scene and brand."
      },
      "scene_id": {
        "type": "string",
        "description": "Account scene id written by scene_write."
      },
      "recipe": {
        "type": "object",
        "description": "Optional recipe object; scene_id/scene may be read from it."
      },
      "brand_id": {
        "type": "string",
        "description": "Checked-in brand id or account pack id returned by brand_pack_write."
      },
      "at_ms": {
        "type": "array",
        "minItems": 1,
        "maxItems": 6,
        "items": {
          "type": "number",
          "minimum": 0
        },
        "description": "Exact scene times in milliseconds, including fractional frame boundaries. Max 6."
      },
      "burst": {
        "type": "object",
        "description": "Alternative to at_ms: {count, duration_ms}. Max count 6."
      },
      "aspect": {
        "type": "string",
        "enum": [
          "16:9",
          "9:16",
          "1:1",
          "4:5"
        ],
        "description": "Preview aspect. Defaults to the saved scene aspect."
      },
      "contact_sheet": {
        "type": "boolean",
        "description": "When true, model-visible content returns one tiled PNG contact sheet instead of individual frame image blocks. Per-frame data URLs remain in private app hydration and web-bridge results."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "title": "Inspect rendered FX scene frames",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "frames": {
        "type": "array",
        "items": {
          "type": "object"
        },
        "description": "Frame metadata with phase, width, height and byte_size. Web-bridge results also include data_url; MCP app hydration receives it privately."
      },
      "model_image_delivery": {
        "type": "string",
        "description": "How MCP image content was delivered: frames, sampled_frames, contact_sheet, or none."
      },
      "model_image_count": {
        "type": "integer",
        "description": "Number of model-visible image content blocks returned alongside text labels."
      },
      "content_bytes": {
        "type": "integer",
        "description": "Approximate bytes of model-visible PNG image content before JSON/base64 overhead."
      },
      "warnings": {
        "type": "array",
        "items": {
          "type": "object"
        }
      },
      "schema": {
        "type": "string",
        "description": "Result schema identifier, bitterclip.scene_preview.v0."
      },
      "project_id": {
        "type": [
          "string",
          "null"
        ],
        "description": "Project public ID the preview was rendered for; null for an account-level preview."
      },
      "account_id": {
        "type": "string",
        "description": "Account public ID that owns the scene."
      },
      "scene_id": {
        "type": "string",
        "description": "Previewed scene ID."
      },
      "brand_id": {
        "type": "string",
        "description": "Brand the preview rendered with."
      },
      "aspect": {
        "type": "string",
        "description": "Canvas aspect ratio of the preview, such as 16:9 or 1:1."
      },
      "revision": {
        "type": "integer",
        "description": "Scene revision that was previewed."
      },
      "source_sha256": {
        "type": "string",
        "description": "SHA-256 of the previewed scene source."
      },
      "snapshot_sha256": {
        "type": "string",
        "description": "SHA-256 of the full preview snapshot: source, brand and settings."
      },
      "blockers": {
        "type": "array",
        "items": {
          "type": "object"
        },
        "description": "Typed blockers; empty when the call succeeded."
      }
    },
    "required": [],
    "additionalProperties": false
  }
}

Live Workspace descriptor

{
  "name": "scene_preview",
  "title": "Inspect rendered FX scene frames",
  "description": "Renders exact frames of a saved scene in a contained browser and returns real MCP PNG images. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Without project_id/brand_id it previews for account FX authoring. at_ms selects explicit scene times; burst selects an evenly spaced set. contact_sheet returns one tiled image. This renders preview evidence without changing the scene, production defaults or an Episode.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "project_id": {
        "type": "string",
        "description": "Project public ID; this is the account boundary for the scene and brand."
      },
      "scene_id": {
        "type": "string",
        "description": "Account scene id written by scene_write."
      },
      "recipe": {
        "type": "object",
        "description": "Optional recipe object; scene_id/scene may be read from it."
      },
      "brand_id": {
        "type": "string",
        "description": "Checked-in brand id or account pack id returned by brand_pack_write."
      },
      "at_ms": {
        "type": "array",
        "minItems": 1,
        "maxItems": 6,
        "items": {
          "type": "number",
          "minimum": 0
        },
        "description": "Exact scene times in milliseconds, including fractional frame boundaries. Max 6."
      },
      "burst": {
        "type": "object",
        "description": "Alternative to at_ms: {count, duration_ms}. Max count 6."
      },
      "aspect": {
        "type": "string",
        "enum": [
          "16:9",
          "9:16",
          "1:1",
          "4:5"
        ],
        "description": "Preview aspect. Defaults to the saved scene aspect."
      },
      "contact_sheet": {
        "type": "boolean",
        "description": "When true, model-visible content returns one tiled PNG contact sheet instead of individual frame image blocks. Per-frame data URLs remain in private app hydration and web-bridge results."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "title": "Inspect rendered FX scene frames",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "frames": {
        "type": "array",
        "items": {
          "type": "object"
        },
        "description": "Frame metadata with phase, width, height and byte_size. Web-bridge results also include data_url; MCP app hydration receives it privately."
      },
      "model_image_delivery": {
        "type": "string",
        "description": "How MCP image content was delivered: frames, sampled_frames, contact_sheet, or none."
      },
      "model_image_count": {
        "type": "integer",
        "description": "Number of model-visible image content blocks returned alongside text labels."
      },
      "content_bytes": {
        "type": "integer",
        "description": "Approximate bytes of model-visible PNG image content before JSON/base64 overhead."
      },
      "warnings": {
        "type": "array",
        "items": {
          "type": "object"
        }
      },
      "schema": {
        "type": "string",
        "description": "Result schema identifier, bitterclip.scene_preview.v0."
      },
      "project_id": {
        "type": [
          "string",
          "null"
        ],
        "description": "Project public ID the preview was rendered for; null for an account-level preview."
      },
      "account_id": {
        "type": "string",
        "description": "Account public ID that owns the scene."
      },
      "scene_id": {
        "type": "string",
        "description": "Previewed scene ID."
      },
      "brand_id": {
        "type": "string",
        "description": "Brand the preview rendered with."
      },
      "aspect": {
        "type": "string",
        "description": "Canvas aspect ratio of the preview, such as 16:9 or 1:1."
      },
      "revision": {
        "type": "integer",
        "description": "Scene revision that was previewed."
      },
      "source_sha256": {
        "type": "string",
        "description": "SHA-256 of the previewed scene source."
      },
      "snapshot_sha256": {
        "type": "string",
        "description": "SHA-256 of the full preview snapshot: source, brand and settings."
      },
      "blockers": {
        "type": "array",
        "items": {
          "type": "object"
        },
        "description": "Typed blockers; empty when the call succeeded."
      }
    },
    "required": [],
    "additionalProperties": false
  }
}

Errors

[
  "project_not_found",
  "invalid_input"
]

Examples

[
  {
    "label": "Preview the reveal at start, peak, and hold",
    "input": {
      "project_id": "show_...",
      "scene_id": "acme-two-tone-reveal",
      "brand_id": "acct-acme-acme-two-tone",
      "at_ms": [
        0,
        420,
        900
      ],
      "aspect": "16:9"
    }
  }
]