{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/framethrower/main/json-schema/framethrower-frame-schema.json", "title": "Frame", "description": "A single film frame. Thumbnails and deep links only — never raw image bytes.", "x-generated": "2026-09-25", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/framethrower-openapi.yml#/components/schemas/Frame", "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string", "format": "uri", "description": "Deep link to this frame on FrameThrower" }, "thumbnail": { "type": "string", "format": "uri" }, "depthUrl": { "type": [ "string", "null" ], "format": "uri", "description": "Precomputed depth map (Depth-Anything V2), WebP, same pixel dimensions as the frame — feed straight to a depth ControlNet. null when the frame has no map; a stale URL 404s, in which case compute depth locally. Never falls back to the colour image." }, "score": { "type": "number", "description": "Relevance, when the call was a search" }, "film": { "type": "object", "properties": { "title": { "type": "string" }, "year": { "type": "integer" }, "slug": { "type": "string" }, "frameCount": { "type": "integer" }, "director": { "type": "string" }, "cinematographer": { "type": "string" } } }, "shot_type": { "type": "string" }, "lens_character": { "type": "string" }, "camera_angle": { "type": "string" }, "setting": { "type": "string" }, "time_of_day": { "type": "string" }, "visual_style": { "type": "string" }, "colorPalette": { "type": "array", "items": { "type": "string" }, "description": "Dominant colours as hex" }, "colorDescription": { "type": "string" }, "prompt": { "type": "string", "description": "Stored descriptive prompt for the frame" } } }