scene_preview
Inspect rendered FX scene frames
Render exact frames of a saved scene in a contained browser and return real MCP PNG images. Inspect the images before judging a change, then iterate with scene_read and scene_edit. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Omit project_id/brand_id 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 1dce717408a55fac1047e7d779177fa3ef8ede51
Public contract commit 1ce47f7857ae3d9b6933fe83d5c33de3ae5efc64
Public contract SHA-256 241d47d25e4b4c1dae9d2263793874d06fc4ba7bc3c78d4cf2bc63fbb32ed7dc
Captured 2026-09-24T16:39:30.100Z. 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": "Render exact frames of a saved scene in a contained browser and return real MCP PNG images. Inspect the images before judging a change, then iterate with scene_read and scene_edit. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Omit project_id/brand_id 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": {
"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": "Render exact frames of a saved scene in a contained browser and return real MCP PNG images. Inspect the images before judging a change, then iterate with scene_read and scene_edit. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Omit project_id/brand_id 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": {
"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"
}
}
},
"required": [],
"additionalProperties": false
}
}Live Workspace descriptor
{
"name": "scene_preview",
"title": "Inspect rendered FX scene frames",
"description": "Render exact frames of a saved scene in a contained browser and return real MCP PNG images. Inspect the images before judging a change, then iterate with scene_read and scene_edit. The snapshot binds source revision, settings, assets and runtime; it uses the same programmable scene contract as FX Studio. Omit project_id/brand_id 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": {
"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"
}
}
},
"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"
}
}
]