[{"id":"flux-3-klein","name":"FLUX.3 Klein","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"megapixels","secondary_units":[],"availability":"available","description":"Pictures from a prompt in a few seconds, or a picture changed by one - the cheap one, and the model to bring your own LoRA to.","context":"The fast, inexpensive picture model: draw from a `prompt`, or send an `image` with a prompt saying what to change. Its use beyond that is as the base for a customer's LoRA - a style, a product, a face - trained for FLUX.3 Klein (Fal's Klein trainer makes one), added with f.models.add and called as flux-3-klein@<name>, with `lora_scale` (0-4, default 1). Billed per megapixel made, as the supplier bills it; every aspect ratio here is one.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF; at least 256 pixels a side","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF; at least 256 pixels a side"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":{"kind":"lora","formats":[".safetensors"],"max_bytes":2000000000,"description":"A LoRA trained on FLUX.3 Klein - from Fal's Klein trainer, ai-toolkit or diffusers - as one .safetensors file, uploaded or from a Hugging Face repo. Becomes flux-3-klein@<name>: the same input as flux-3-klein, plus lora_scale (0-4, default 1). A LoRA for FLUX.1 does not work on it."},"limits":{"image":{"formats":["jpeg","png","webp","gif"],"min_side":256},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["megapixels"],"per_million_usd":{"megapixels":13500.0},"prices":{"megapixels":{"usd":0.0135,"per":"megapixel","text":"$0.0135 per megapixel"}},"summary":"$0.0135 per megapixel","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"flux-3","name":"FLUX.3","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Black Forest Labs' best pictures, drawn from a prompt or changed by one.","context":"Higher quality than flux-3-klein, for the picture that will be looked at. Draw from a `prompt`, or send an `image` and say what to change - edits keep what the prompt does not mention. One picture a call. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF; at least 256 pixels a side","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF; at least 256 pixels a side"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"min_side":256},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":72000.0},"prices":{"images":{"usd":0.072,"per":"image","text":"$0.072 per image"}},"summary":"$0.072 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"nano-banana-2.1","name":"Nano Banana 2.1 (Google)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Google's picture model: the best at changing a picture while keeping its subject the same.","context":"For edits that must keep a product, a person or a place recognisably itself: send an `image` and say what to change. Draws from a `prompt` alone too. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":70000.0},"prices":{"images":{"usd":0.07,"per":"image","text":"$0.07 per image"}},"summary":"$0.07 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gpt-image-2.5","name":"GPT Image 2.5 (OpenAI)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"OpenAI's picture model: follows long, exact instructions and draws text that reads.","context":"For pictures described in detail - a layout, a diagram, a label with its words - where following the instruction matters most. Draws from a `prompt`, or changes an `image`. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":67500.0},"prices":{"images":{"usd":0.0675,"per":"image","text":"$0.0675 per image"}},"summary":"$0.0675 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"qwen-image-3","name":"Qwen Image 3 (Alibaba)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Inexpensive pictures and edits, good at text in Chinese and English.","context":"A low-cost picture model that draws from a `prompt` or changes an `image`, and writes text in pictures in either language. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG or WEBP; up to 10 MB; up to 2,048 pixels a side; at least 384 pixels a side","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG or WEBP; up to 10 MB; up to 2,048 pixels a side; at least 384 pixels a side"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp"],"max_mb":10,"max_side":2048,"min_side":384},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":78000.0},"prices":{"images":{"usd":0.078,"per":"image","text":"$0.078 per image"}},"summary":"$0.078 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"ideogram-4.5","name":"Ideogram 4.5","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Pictures with words in them that are spelled right: signs, labels, posters.","context":"The model to use when text in the picture has to be legible. Draws from a `prompt`, or changes an `image` keeping its frame. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":90000.0},"prices":{"images":{"usd":0.09,"per":"image","text":"$0.09 per image"}},"summary":"$0.09 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"seedream-5-pro","name":"Seedream 5.0 Pro (ByteDance)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"ByteDance's picture model: photographic pictures and edits that keep the scene.","context":"Draws from a `prompt`, or changes an `image` while keeping the rest of the scene. Billed per picture.","output":"image","input":{"prompt":"what to draw - or, with an image, what to change (required)","image":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF","aspect_ratio":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","num_images":"how many","seed":"steers the result; suppliers do not promise the same output twice - keep one you want","format":"file format"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what to draw - or, with an image, what to change","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to change; leave it out to draw from the prompt alone - JPEG, PNG, WEBP or GIF"},"aspect_ratio":{"enum":["1:1","4:3","3:4","3:2","2:3","16:9","9:16"],"description":"the picture's shape, at about a megapixel; with an image, the default is the image's own shape","default":"1:1"},"num_images":{"type":"integer","description":"how many","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"},"format":{"enum":["jpeg","png"],"description":"file format","default":"jpeg"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"a red forklift in an empty warehouse","aspect_ratio":"4:3"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":101500.0},"prices":{"images":{"usd":0.1015,"per":"image","text":"$0.102 per image"}},"summary":"$0.102 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"kling-4","name":"Kling 4.0","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"The premium clip: from a prompt, or starting from your picture and doing what the prompt says.","context":"The highest quality of the video models, at the highest price. Send a `prompt`, and an `image` to start from it. Takes a few minutes, so call it with a long timeout or through submit(). Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF; up to 30 MB; at least 300 pixels a side","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF; up to 30 MB; at least 300 pixels a side"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"max_mb":30,"min_side":300},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":235500.0},"prices":{"video_seconds_generated":{"usd":0.2355,"per":"second of video","text":"$0.236 per second of video"}},"summary":"$0.236 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"seedance-2.5","name":"Seedance 2.5 (ByteDance)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"Rich, coherent motion with its own soundtrack, from a prompt or a first frame.","context":"Strong at motion that has to make sense - people, hands, machines - and makes sound to go with it. Send a `prompt`, and an `image` to start from it. Takes minutes; call it through submit(). Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":693500.0},"prices":{"video_seconds_generated":{"usd":0.6935,"per":"second of video","text":"$0.694 per second of video"}},"summary":"$0.694 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"wan-3.0","name":"Wan 3.0 (Alibaba)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"A mid-priced clip with sound, from a prompt or a first frame.","context":"Good quality for its price, with a soundtrack. Send a `prompt`, and an `image` to start from it. Takes minutes; call it through submit(). Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":150000.0},"prices":{"video_seconds_generated":{"usd":0.15,"per":"second of video","text":"$0.15 per second of video"}},"summary":"$0.15 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"ltx-2.5-fast","name":"LTX 2.5 Fast (Lightricks)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"A quick clip with sound from an open-weights model - for drafts and iterating.","context":"Fast and inexpensive: try an idea here before paying for kling-4. Send a `prompt`, and an `image` to start from it; made from a prompt alone it is 16:9 or 9:16. Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":135000.0},"prices":{"video_seconds_generated":{"usd":0.135,"per":"second of video","text":"$0.135 per second of video"}},"summary":"$0.135 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"grok-imagine-video-1.5","name":"Grok Imagine Video 1.5 (xAI)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"The least expensive clip, with sound, from a prompt or a first frame.","context":"For many clips, or a first look at an idea. Send a `prompt`, and an `image` to start from it. Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":213000.0},"prices":{"video_seconds_generated":{"usd":0.213,"per":"second of video","text":"$0.213 per second of video"}},"summary":"$0.213 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"minimax-h3-max-turbo","name":"MiniMax H3 Max Turbo","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"video_seconds_generated","secondary_units":[],"availability":"available","description":"A fast clip that follows the prompt closely, from a prompt or a first frame.","context":"Quick to come back, for demos and trying variations. Send a `prompt`, and an `image` to start from it. No soundtrack. Billed per second of video asked for - 6, 8 or 10.","output":"video","input":{"prompt":"what happens in the clip (required)","image":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF","duration":"seconds of video","aspect_ratio":"the clip's shape, without an image - with one, the clip takes the image's"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"what happens in the clip","maxLength":2000},"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the first frame; leave it out to make the clip from the prompt alone - JPEG, PNG, WEBP or GIF"},"duration":{"enum":[6,8,10],"description":"seconds of video","default":6},"aspect_ratio":{"enum":["16:9","9:16","1:1"],"description":"the clip's shape, without an image - with one, the clip takes the image's","default":"16:9"}},"required":["prompt"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"the forklift drives slowly toward the camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"unmeasured":"not probed yet: the limits each supplier's input schema states, as of 2026-10-27"},"defaults":{},"pricing":{"units":["video_seconds_generated"],"per_million_usd":{"video_seconds_generated":39000.0},"prices":{"video_seconds_generated":{"usd":0.039,"per":"second of video","text":"$0.039 per second of video"}},"summary":"$0.039 per second of video","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"sam2-segment","name":"SAM 2.1 (image segmentation)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"objects","secondary_units":[],"availability":"available","description":"Point at objects in an image; get a mask and a box for each.","context":"Objects are described as for tracking - an id and a point or a box - so a frame segmented here can be followed through a video with sam2.1-hiera-large. Each box is measured from its mask. Billed per object asked about, up to 32 in one request.","output":"masks","input":{"image":"the picture to segment (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF","objects":"what to segment: each an id and a point or a box, in pixels (required)"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to segment - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF"},"objects":{"type":"array","minItems":1,"maxItems":32,"description":"what to segment: each an id and a point or a box, in pixels","items":{"type":"object","properties":{"id":{"type":"string","description":"your name for it; answers use it"},"point":{"type":"array","items":{"type":"number","minimum":0},"minItems":2,"maxItems":2,"description":"[x, y] in pixels"},"box":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"}},"additionalProperties":false,"oneOf":[{"required":["point"]},{"required":["box"]}]}}},"required":["image","objects"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","objects":[{"id":"forklift","point":[512,400]}]},"accepts_weights":{"kind":"checkpoint","formats":[".pt",".pth",".safetensors"],"max_bytes":4000000000,"description":"A fine-tuned SAM 2 or SAM 2.1 (tiny, small, base+ or large), as the state dict SAM 2's own training code saves, or as safetensors. Becomes sam2-segment@<name>: the same input, answer and price as sam2-segment."},"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","avif"]},"measured":"2026-10-22: scripts/probe_limits.py at Fal - up to 48 MP; HEIC not tried at its true size, nor the Modal route"},"defaults":{},"pricing":{"units":["objects"],"per_million_usd":{"objects":2000.0},"prices":{"objects":{"usd":0.002,"per":"object","text":"$0.002 per object"}},"summary":"$0.002 per object","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"whisper","name":"Whisper (speech to text)","family":"speech","primitives":["run"],"input_types":["audio"],"operations":[],"unit":"audio_seconds","secondary_units":[],"availability":"available","description":"What was said in a recording, with timestamps.","context":"Plain transcription, fast and cheap: segments with timestamps, up to 25 MB a recording. For who said what, whisper-speakers. Billed per second of the recording you send, measured when it is uploaded - not per second of speech found in it.","output":"transcript","input":{"audio":"the recording: mp3, wav, m4a, ... (required) - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 25 MB","language":"two-letter code such as 'en'; omit to detect it","task":"translate means into English","diarize":"label who is speaking"},"input_schema":{"type":"object","properties":{"audio":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the recording: mp3, wav, m4a, ... - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 25 MB"},"language":{"type":"string","minLength":2,"maxLength":3,"description":"two-letter code such as 'en'; omit to detect it"},"task":{"enum":["transcribe","translate"],"description":"translate means into English","default":"transcribe"},"diarize":{"type":"boolean","default":false,"description":"label who is speaking"}},"required":["audio"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"audio":"meeting.mp3","language":"en"},"accepts_weights":null,"limits":{"audio":{"formats":["mp3","m4a","wav","ogg","webm","flac"],"max_mb":25},"measured":"2026-10-22: scripts/probe_limits.py: every format, and 30 minutes; 25 MB is Together's"},"defaults":{},"pricing":{"units":["audio_seconds"],"per_million_usd":{"audio_seconds":41.6666666},"prices":{"audio_seconds":{"usd":0.0025,"per":"minute of audio","text":"$0.0025 per minute of audio"}},"summary":"$0.0025 per minute of audio","priced":true,"cold_start_billed":false}},{"id":"whisper-speakers","name":"Whisper with speaker labels","family":"speech","primitives":["run"],"input_types":["audio"],"operations":[],"unit":"audio_seconds","secondary_units":[],"availability":"available","description":"Who said what in a recording: every segment timestamped and labelled with its speaker.","context":"The same transcript as whisper, with `speaker` filled in on every segment, and recordings of any length. Labelling speakers is most of the work, so it costs about ten times plain transcription: use whisper when who spoke does not matter. Billed per second of the recording you send.","output":"transcript","input":{"audio":"the recording: mp3, wav, m4a, ... any length (required) - MP3, M4A, WAV, OGG, WEBM or FLAC","language":"two-letter code such as 'en'; omit to detect it","task":"translate means into English"},"input_schema":{"type":"object","properties":{"audio":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the recording: mp3, wav, m4a, ... any length - MP3, M4A, WAV, OGG, WEBM or FLAC"},"language":{"type":"string","minLength":2,"maxLength":3,"description":"two-letter code such as 'en'; omit to detect it"},"task":{"enum":["transcribe","translate"],"description":"translate means into English","default":"transcribe"}},"required":["audio"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"audio":"meeting.mp3","language":"en"},"accepts_weights":null,"limits":{"audio":{"formats":["mp3","m4a","wav","ogg","webm","flac"]},"measured":"2026-10-22: scripts/probe_limits.py: every format, 30 minutes and 60 MB"},"defaults":{},"pricing":{"units":["audio_seconds"],"per_million_usd":{"audio_seconds":400.0},"prices":{"audio_seconds":{"usd":0.024,"per":"minute of audio","text":"$0.024 per minute of audio"}},"summary":"$0.024 per minute of audio","priced":true,"cold_start_billed":false}},{"id":"sam3-segment","name":"SAM 3 (segment anything by name)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"objects","secondary_units":[],"availability":"available","description":"Name what to find in an image - \"forklift\" - and get a mask and a box for every one.","context":"The same answer as sam2-segment, but an object can be named in words as well as pointed at, so nothing has to know where it is first. A name can match several things; each is its own mask, numbered by `instance`. Billed per object asked about, up to 32 in one request.","output":"masks","input":{"image":"the picture to segment (required) - JPEG, PNG, WEBP, GIF, BMP or TIFF","objects":"what to find: each an id and a name, a point or a box; a name returns every match (required)"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to segment - JPEG, PNG, WEBP, GIF, BMP or TIFF"},"objects":{"type":"array","minItems":1,"maxItems":32,"description":"what to find: each an id and a name, a point or a box; a name returns every match","items":{"type":"object","properties":{"id":{"type":"string","description":"your name for it; answers use it"},"text":{"type":"string","minLength":1,"maxLength":100,"description":"what to find, in words"},"point":{"type":"array","items":{"type":"number","minimum":0},"minItems":2,"maxItems":2,"description":"[x, y] in pixels"},"box":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"}},"additionalProperties":false,"oneOf":[{"required":["text"]},{"required":["point"]},{"required":["box"]}]}}},"required":["image","objects"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","objects":[{"id":"forklift","text":"forklift"}]},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP"},"defaults":{},"pricing":{"units":["objects"],"per_million_usd":{"objects":7500.0},"prices":{"objects":{"usd":0.0075,"per":"object","text":"$0.0075 per object"}},"summary":"$0.0075 per object","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"birefnet-v2","name":"BiRefNet v2 (background removal)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Cut the subject out of a photo: a PNG with the background transparent.","context":"Billed per image cut out.","output":"image","input":{"image":"the photo to cut the subject out of (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the photo to cut the subject out of - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":2000.0},"prices":{"images":{"usd":0.002,"per":"image","text":"$0.002 per image"}},"summary":"$0.002 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"esrgan","name":"Real-ESRGAN (upscaling)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"megapixels","secondary_units":[],"availability":"available","description":"Make an image two or four times larger without it going soft.","context":"Restores detail rather than inventing it, so it is safe on photos where what is there matters. Billed per megapixel of the picture it makes: the size sent, times the scale squared.","output":"image","input":{"image":"the picture to enlarge; at most 50 megapixels once enlarged (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF; up to 3,000 pixels a side","scale":"how many times larger","format":"file format"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to enlarge; at most 50 megapixels once enlarged - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF; up to 3,000 pixels a side"},"scale":{"enum":[2,4],"description":"how many times larger","default":2},"format":{"enum":["jpeg","png"],"description":"file format","default":"png"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","scale":2},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","avif"],"max_side":3000},"measured":"2026-10-22: scripts/probe_limits.py: 3,000 pixels a side took 8 minutes, 4,032 timed out"},"defaults":{},"pricing":{"units":["megapixels"],"per_million_usd":{"megapixels":2000.0},"prices":{"megapixels":{"usd":0.002,"per":"megapixel","text":"$0.002 per megapixel"}},"summary":"$0.002 per megapixel","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gpt-oss-120b","name":"gpt-oss 120B","family":"language","primitives":["chat"],"input_types":[],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Open-weight reasoning model for agent steps and structured output.","context":"OpenAI-compatible chat, streamed or not. JSON output with response_format. Reasoning tokens are billed as output and reported separately, so a short answer after long thinking is explicable.","output":null,"input":{"prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"List three uses for a forklift as JSON: {\"uses\": [...]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.6,"tokens_in":0.15,"tokens_cached":0.15},"prices":{"tokens_out":{"usd":0.6,"per":"million output tokens","text":"$0.60 per million output tokens"},"tokens_in":{"usd":0.15,"per":"million input tokens","text":"$0.15 per million input tokens"},"tokens_cached":{"usd":0.15,"per":"million cached tokens","text":"$0.15 per million cached tokens"}},"summary":"$0.60 per million output tokens; $0.15 per million input tokens; $0.15 per million cached tokens","priced":true,"cold_start_billed":false}},{"id":"florence-2-detect","name":"Florence-2 (object detection)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Everything it recognises in a picture, as labelled boxes.","context":"Boxes are in the picture's pixels, in the same convention as masks, so any of them can go to sam2-segment or sam3-segment as a box prompt. It names what it sees in its own vocabulary; to find a particular thing by name, sam3-segment is the better call. Billed per image.","output":"detections","input":{"image":"the picture to look at (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to look at - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":3000.0},"prices":{"images":{"usd":0.003,"per":"image","text":"$0.003 per image"}},"summary":"$0.003 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"marigold-depth","name":"Marigold (depth from one photo)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"How far away every pixel is, from a single ordinary photo.","context":"A 16-bit depth map the size of the photo, low values near. Relative, not metric: it orders the scene from near to far within one image. For geometry in metres from several photos, map-anything-apache. Billed per image.","output":"depth","input":{"image":"the photo to measure (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the photo to measure - JPEG, PNG, WEBP, GIF, BMP, TIFF or AVIF"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":22000.0},"prices":{"images":{"usd":0.022,"per":"image","text":"$0.022 per image"}},"summary":"$0.022 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"florence-2-ocr","name":"Florence-2 (text in pictures)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Read the text in a photo - labels, signs, screens - with where each line is.","context":"For text in the world, where the position matters: which label is on which box. Each line comes with its box in pixels. For a whole page of a document, got-ocr-2. Billed per image.","output":"document","input":{"image":"the picture of text: a page, label, sign or screen (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture of text: a page, label, sign or screen - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"label.jpg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":2000.0},"prices":{"images":{"usd":0.002,"per":"image","text":"$0.002 per image"}},"summary":"$0.002 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"got-ocr-2","name":"GOT-OCR 2.0 (pages)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Read a whole page - scans, forms, papers - optionally keeping tables and maths.","context":"For documents: the page's text in reading order, or with `formatted` its layout as Markdown and LaTeX. Lines are not located; for text whose position matters, florence-2-ocr. Billed per page image.","output":"document","input":{"image":"a picture of a page (required) - JPEG, PNG, WEBP or GIF","formatted":"keep the layout as Markdown and LaTeX: tables, maths"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture of a page - JPEG, PNG, WEBP or GIF"},"formatted":{"type":"boolean","default":false,"description":"keep the layout as Markdown and LaTeX: tables, maths"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"page.png"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":75000.0},"prices":{"images":{"usd":0.075,"per":"image","text":"$0.075 per image"}},"summary":"$0.075 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"trellis","name":"TRELLIS (image to 3D)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"meshes","secondary_units":[],"availability":"available","description":"A textured 3D model, as a GLB file, from one picture of an object.","context":"Works best on one object against a plain background - birefnet-v2 makes one from a photo. Its view_url shows it rotatable in a browser. Billed per model made.","output":"mesh","input":{"image":"a picture of one object, ideally on a plain background (required) - JPEG, PNG, WEBP, GIF or AVIF","texture_size":"texture resolution","seed":"steers the result; suppliers do not promise the same output twice - keep one you want"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture of one object, ideally on a plain background - JPEG, PNG, WEBP, GIF or AVIF"},"texture_size":{"enum":[512,1024,2048],"description":"texture resolution","default":1024},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"product.png"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["meshes"],"per_million_usd":{"meshes":30000.0},"prices":{"meshes":{"usd":0.03,"per":"mesh","text":"$0.03 per mesh"}},"summary":"$0.03 per mesh","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"triposplat","name":"TripoSplat (image to 3D Gaussian splat)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"splats","secondary_units":[],"availability":"available","description":"The object in one picture, in 3D, in about five seconds: a Gaussian splat, as a .ply file.","context":"Works best on one object against a plain background - birefnet-v2 makes one from a photo. A splat is coloured points, not a mesh; its view_url shows it rotatable in a browser - give the user that link rather than building a viewer. trellis makes a mesh. Billed per splat made.","output":"splat","input":{"image":"a picture of one object, ideally on a plain background (required) - JPEG, PNG, WEBP, GIF or AVIF; up to 4,096 pixels a side","gaussians":"how many Gaussians: more is more detail and a larger file","format":"the file: ply for splat tools, splat for web viewers","seed":"steers the result; suppliers do not promise the same output twice - keep one you want"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture of one object, ideally on a plain background - JPEG, PNG, WEBP, GIF or AVIF; up to 4,096 pixels a side"},"gaussians":{"type":"integer","description":"how many Gaussians: more is more detail and a larger file","minimum":32768,"maximum":262144,"default":262144},"format":{"enum":["ply","splat"],"description":"the file: ply for splat tools, splat for web viewers","default":"ply"},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"product.png"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","avif"],"max_side":4096},"measured":"2026-10-22: scripts/probe_limits.py: 4,032 pixels a side taken, 5,000 refused as too large; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["splats"],"per_million_usd":{"splats":75000.0},"prices":{"splats":{"usd":0.075,"per":"splat","text":"$0.075 per splat"}},"summary":"$0.075 per splat","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"inventory","name":"Inventory (find, segment, crop and read each object)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"objects","secondary_units":[],"availability":"available","description":"Every object you name in a picture, as records: where it is, its mask and crop, and the details you ask for - each with the evidence, and null where the picture does not show it.","context":"The one call for \"what is in this picture, and what is each like\": find names what to look for (every match of each is a record), fields what to read from each object, e.g. {\"condition\": \"new, worn or damaged\", \"label_text\": \"text printed on it\"}. Each record's crop goes straight on to another model as a picture - {\"image\": {\"execution\": ..., \"item\": n}} - and the record into image-cutout or image-crop. Its view_url shows every object on the picture with what was read. SAM 3 finds and segments; a vision model reads each crop. A few seconds. Billed per thing asked to find, however many of each are found.","output":"inventory","input":{"image":"the picture (required) - JPEG, PNG, WEBP or GIF","find":"what to find, in words - every match of each becomes a record, e.g. [\"mug\", \"teapot\"] or [\"product\"] (required)","fields":"what to read from each object: a name and what it means, e.g. {\"condition\": \"new, worn or damaged\", \"label_text\": \"text printed on it\"}"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture - JPEG, PNG, WEBP or GIF"},"find":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string","minLength":1,"maxLength":100},"description":"what to find, in words - every match of each becomes a record, e.g. [\"mug\", \"teapot\"] or [\"product\"]"},"fields":{"type":"object","maxProperties":12,"additionalProperties":{"type":"string","maxLength":300},"description":"what to read from each object: a name and what it means, e.g. {\"condition\": \"new, worn or damaged\", \"label_text\": \"text printed on it\"}"}},"required":["image","find"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"shelf.jpg","find":["mug"],"fields":{"condition":"new, worn or damaged"}},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["objects"],"per_million_usd":{"objects":15000.0},"prices":{"objects":{"usd":0.015,"per":"object","text":"$0.015 per object"}},"summary":"$0.015 per object","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"trellis-2","name":"TRELLIS.2 (image to 3D, PBR)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"meshes","secondary_units":[],"availability":"available","description":"A detailed textured 3D model with PBR materials, as a GLB file, from one picture of an object.","context":"Microsoft's second TRELLIS: finer geometry and real materials, for a model that will be used rather than glanced at - about a minute. Works best on one object on a plain background: image-cutout or birefnet-v2 makes one. trellis is quicker and rougher; triposplat is seconds. Its view_url shows it rotatable in a browser. Billed per model made.","output":"mesh","input":{"image":"a picture of one object, ideally on a plain background (required) - JPEG, PNG, WEBP, GIF or AVIF; up to 4,096 pixels a side","resolution":"detail: higher is slower and finer","texture_size":"texture resolution","vertices":"about how many vertices the mesh keeps: fewer is a smaller file","seed":"steers the result; suppliers do not promise the same output twice - keep one you want"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture of one object, ideally on a plain background - JPEG, PNG, WEBP, GIF or AVIF; up to 4,096 pixels a side"},"resolution":{"enum":[512,1024,1536],"description":"detail: higher is slower and finer","default":1024},"texture_size":{"enum":[1024,2048,4096],"description":"texture resolution","default":2048},"vertices":{"type":"integer","description":"about how many vertices the mesh keeps: fewer is a smaller file","minimum":5000,"maximum":2000000,"default":100000},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"product.png"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","avif"],"max_side":4096},"measured":"2026-10-22: scripts/probe_limits.py: 4,032 pixels a side taken, 5,000 refused as too large; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["meshes"],"per_million_usd":{"meshes":75000.0},"prices":{"meshes":{"usd":0.075,"per":"mesh","text":"$0.075 per mesh"}},"summary":"$0.075 per mesh","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"sam3d-objects","name":"SAM 3D Objects (Meta)","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"meshes","secondary_units":[],"availability":"available","description":"Every object you name in a photo of a scene, in 3D, each placed where it stands - one GLB.","context":"Segmentation and 3D in one call, from an ordinary photo - no cut-out needed: say what in words (prompt: \"chair\" makes every chair), by boxes, or pass sam3-segment's answer as mask. The answer lists each object's position, rotation and scale; its view_url shows the scene. About 10 seconds. Billed per call, however many objects.","output":"mesh","input":{"image":"a photo of a scene (required) - JPEG, PNG, WEBP or GIF","prompt":"what to reconstruct, in words - every match becomes an object, e.g. \"chair\"","boxes":"or the objects by their boxes, in pixels","mask":"or the masks an earlier answer made - sam3-segment's, by {\"execution\": \"exec_...\"}; each mask is one object","textured":"bake a texture image onto the mesh rather than colouring its vertices","seed":"steers the result; suppliers do not promise the same output twice"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a photo of a scene - JPEG, PNG, WEBP or GIF"},"prompt":{"type":"string","minLength":1,"description":"what to reconstruct, in words - every match becomes an object, e.g. \"chair\"","maxLength":100},"boxes":{"type":"array","items":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},"minItems":1,"maxItems":16,"description":"or the objects by their boxes, in pixels"},"mask":{"anyOf":[{"type":"object"}],"description":"or the masks an earlier answer made - sam3-segment's, by {\"execution\": \"exec_...\"}; each mask is one object"},"textured":{"type":"boolean","default":false,"description":"bake a texture image onto the mesh rather than colouring its vertices"},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"kitchen.jpg","prompt":"teapot"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["meshes"],"per_million_usd":{"meshes":30000.0},"prices":{"meshes":{"usd":0.03,"per":"mesh","text":"$0.03 per mesh"}},"summary":"$0.03 per mesh","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"sam3d-body","name":"SAM 3D Body (Meta)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"meshes","secondary_units":[],"availability":"available","description":"Each person in a photo as a 3D body mesh, with 70 named keypoints in 2D and 3D.","context":"Pose and shape from one photo - hands and feet included: the keypoints are what code reads (where a wrist is, how a knee bends), the GLB is what a person looks at (view_url). Every person is found; pass a mask from sam3-segment to pick one. About 8 seconds. Billed per call.","output":"mesh","input":{"image":"a photo with people in it (required) - JPEG, PNG, WEBP or GIF","mask":"optional: which person, as a mask from sam3-segment - {\"execution\": \"exec_...\"}"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a photo with people in it - JPEG, PNG, WEBP or GIF"},"mask":{"anyOf":[{"type":"object"}],"description":"optional: which person, as a mask from sam3-segment - {\"execution\": \"exec_...\"}"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"runner.jpg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["meshes"],"per_million_usd":{"meshes":30000.0},"prices":{"meshes":{"usd":0.03,"per":"mesh","text":"$0.03 per mesh"}},"summary":"$0.03 per mesh","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"qwen-angles","name":"Qwen Image Edit - camera angles","family":"generative","primitives":["run"],"input_types":["image"],"operations":[],"unit":"megapixels","secondary_units":[],"availability":"available","description":"The same scene from another camera angle: turn around it, look down on it, or move closer.","context":"horizontal_angle goes round the subject (90 is its right side, 180 behind), vertical_angle looks from above (30 elevated, 90 top-down), zoom moves in or out. For seeing what one photo does not show, or for the extra views a multi-view 3D model wants. About 10 seconds; the new view is the size of the picture sent. Billed per megapixel made.","output":"image","input":{"image":"the picture to see from another angle (required) - JPEG, PNG, WEBP, GIF or AVIF","horizontal_angle":"degrees around the subject: 0 front, 90 its right side, 180 behind, 270 its left","vertical_angle":"degrees above: -30 looking up, 0 eye level, 30 elevated, 90 straight down","zoom":"0 wide, 5 as it is, 10 close up","prompt":"anything else to say about the new view","num_images":"how many versions","seed":"steers the result; suppliers do not promise the same output twice - keep one you want"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to see from another angle - JPEG, PNG, WEBP, GIF or AVIF"},"horizontal_angle":{"type":"number","description":"degrees around the subject: 0 front, 90 its right side, 180 behind, 270 its left","minimum":0,"maximum":360,"default":0},"vertical_angle":{"type":"number","description":"degrees above: -30 looking up, 0 eye level, 30 elevated, 90 straight down","minimum":-30,"maximum":90,"default":0},"zoom":{"type":"number","description":"0 wide, 5 as it is, 10 close up","minimum":0,"maximum":10,"default":5},"prompt":{"type":"string","minLength":1,"description":"anything else to say about the new view","maxLength":2000},"num_images":{"type":"integer","description":"how many versions","minimum":1,"maximum":4,"default":1},"seed":{"type":"integer","description":"steers the result; suppliers do not promise the same output twice - keep one you want"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"kitchen.jpg","horizontal_angle":90,"vertical_angle":30},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","avif"]},"measured":"2026-10-22: scripts/probe_limits.py - up to 48 MP; BMP and TIFF not tried"},"defaults":{},"pricing":{"units":["megapixels"],"per_million_usd":{"megapixels":52500.0},"prices":{"megapixels":{"usd":0.0525,"per":"megapixel","text":"$0.0525 per megapixel"}},"summary":"$0.0525 per megapixel","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"physics-sim","name":"Rigid-body physics (MuJoCo)","family":"physics","primitives":["run"],"input_types":["mesh"],"operations":[],"unit":"simulations","secondary_units":[],"availability":"available","description":"What a 3D model does when dropped onto a floor or stood on a slope: where it lands, whether it tips over, when it comes to rest - played back in 3D.","context":"The physics step after the geometry: send a mesh answer as it is - {\"mesh\": {\"execution\": \"exec_...\"}} from trellis-2 or sam3d-objects - with the real object's height_m and mass_kg (an inventory can read both from the photo). scenario drop lets it fall from drop_height_m turned by rotation_deg; tilt stands it on a tilt_deg slope. The answer names each moment - contact, slides, tipped, at_rest - sums up how it ended, says what it assumed, and its view_url plays it back, rotatable. Plausible, not measured: the convex hull is what collides. About a second warm. Billed per simulation.","output":"simulation","input":{"mesh":"the 3D model: a mesh answer (trellis-2, sam3d-objects) by {\"execution\": \"exec_...\"}, or a .glb file (required)","scenario":"drop: let it fall onto a hard floor; tilt: stand it on a slope","height_m":"how tall the real object is, in metres - the model has no size of its own (required)","mass_kg":"what the real object weighs, in kilograms (required)","drop_height_m":"for drop: how high its lowest point starts, in metres","rotation_deg":"for drop: how it is turned as it falls, degrees about x, y and z","tilt_deg":"for tilt: the slope, in degrees","friction":"between the object and the surface: 0.2 ice-like, 0.6 wood, 1.0 rubber","duration_s":"how many seconds to simulate"},"input_schema":{"type":"object","properties":{"mesh":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the 3D model: a mesh answer (trellis-2, sam3d-objects) by {\"execution\": \"exec_...\"}, or a .glb file"},"scenario":{"enum":["drop","tilt"],"description":"drop: let it fall onto a hard floor; tilt: stand it on a slope","default":"drop"},"height_m":{"type":"number","description":"how tall the real object is, in metres - the model has no size of its own","minimum":0.005,"maximum":20},"mass_kg":{"type":"number","description":"what the real object weighs, in kilograms","minimum":0.001,"maximum":10000},"drop_height_m":{"type":"number","description":"for drop: how high its lowest point starts, in metres","minimum":0.0,"maximum":50,"default":1.0},"rotation_deg":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"for drop: how it is turned as it falls, degrees about x, y and z","default":[25,0,10]},"tilt_deg":{"type":"number","description":"for tilt: the slope, in degrees","minimum":0,"maximum":80,"default":15},"friction":{"type":"number","description":"between the object and the surface: 0.2 ice-like, 0.6 wood, 1.0 rubber","minimum":0.01,"maximum":2,"default":0.6},"duration_s":{"type":"number","description":"how many seconds to simulate","minimum":0.5,"maximum":10,"default":3}},"required":["mesh","height_m","mass_kg"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"mesh":{"execution":"exec_..."},"scenario":"drop","height_m":0.25,"mass_kg":0.6},"accepts_weights":null,"limits":{"unmeasured":"runs on our Modal runner, which the probe was not given a token for"},"defaults":{},"pricing":{"units":["simulations"],"per_million_usd":{"simulations":10000.0},"prices":{"simulations":{"usd":0.01,"per":"simulation","text":"$0.01 per simulation"}},"summary":"$0.01 per simulation","priced":true,"cold_start_billed":false}},{"id":"kokoro","name":"Kokoro (text to speech)","family":"speech","primitives":["run"],"input_types":[],"operations":[],"unit":"characters","secondary_units":[],"availability":"available","description":"Natural-sounding English speech from text, as a WAV file.","context":"Nineteen voices, American and British. Billed per character of text sent.","output":"audio","input":{"text":"what to say (required)","voice":"a (American) or b (British), f or m, then a name","speed":"how fast"},"input_schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"what to say","maxLength":5000},"voice":{"enum":["af_heart","af_alloy","af_aoede","af_bella","af_jessica","af_kore","af_nicole","af_nova","af_river","af_sarah","af_sky","am_adam","am_echo","am_eric","am_fenrir","am_liam","am_michael","am_onyx","am_puck"],"description":"a (American) or b (British), f or m, then a name","default":"af_heart"},"speed":{"type":"number","description":"how fast","minimum":0.5,"maximum":2.0,"default":1.0}},"required":["text"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"text":"Forklift two oh four is out of service.","voice":"af_heart"},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["characters"],"per_million_usd":{"characters":6.0},"prices":{"characters":{"usd":0.006,"per":"1,000 characters","text":"$0.006 per 1,000 characters"}},"summary":"$0.006 per 1,000 characters","priced":true,"cold_start_billed":false}},{"id":"gemini-3.8-flash-tts","name":"Gemini 3.8 Flash TTS (text to speech)","family":"speech","primitives":["run"],"input_types":[],"operations":[],"unit":"characters","secondary_units":[],"availability":"available","description":"Expressive speech in any of Gemini's languages, told how to say it, as a WAV file.","context":"Thirty voices; `style` says how to say it - 'cheerfully', 'slowly, in a whisper'. Billed per character of text and style, a Chinese, Japanese or Korean character counting as four. For plain English at a ninth of the price, kokoro; for the same voices for less, gemini-3.8-flash-lite-tts.","output":"audio","input":{"text":"what to say, in any language (required)","voice":"the voice","style":"how to say it - 'cheerfully', 'slowly, in a whisper', 'like a station announcer'"},"input_schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"what to say, in any language","maxLength":5000},"voice":{"enum":["Kore","Zephyr","Puck","Charon","Fenrir","Leda","Orus","Aoede","Callirrhoe","Autonoe","Enceladus","Iapetus","Umbriel","Algieba","Despina","Erinome","Algenib","Rasalgethi","Laomedeia","Achernar","Alnilam","Schedar","Gacrux","Pulcherrima","Achird","Zubenelgenubi","Vindemiatrix","Sadachbia","Sadaltager","Sulafat"],"description":"the voice","default":"Kore"},"style":{"type":"string","minLength":1,"description":"how to say it - 'cheerfully', 'slowly, in a whisper', 'like a station announcer'","maxLength":500}},"required":["text"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"text":"Forklift two oh four is out of service.","voice":"Kore","style":"calmly"},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["characters"],"per_million_usd":{"characters":54.5},"prices":{"characters":{"usd":0.0545,"per":"1,000 characters","text":"$0.0545 per 1,000 characters"}},"summary":"$0.0545 per 1,000 characters","priced":true,"cold_start_billed":false}},{"id":"gemini-3.8-flash-lite-tts","name":"Gemini 3.8 Flash Lite TTS (text to speech)","family":"speech","primitives":["run"],"input_types":[],"operations":[],"unit":"characters","secondary_units":[],"availability":"available","description":"Gemini's voices for less: speech in any of its languages, as a WAV file.","context":"The same thirty voices and `style` as gemini-3.8-flash-tts, at two thirds of its price. Billed per character of text and style, a Chinese, Japanese or Korean character counting as four.","output":"audio","input":{"text":"what to say, in any language (required)","voice":"the voice","style":"how to say it - 'cheerfully', 'slowly, in a whisper', 'like a station announcer'"},"input_schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"what to say, in any language","maxLength":5000},"voice":{"enum":["Kore","Zephyr","Puck","Charon","Fenrir","Leda","Orus","Aoede","Callirrhoe","Autonoe","Enceladus","Iapetus","Umbriel","Algieba","Despina","Erinome","Algenib","Rasalgethi","Laomedeia","Achernar","Alnilam","Schedar","Gacrux","Pulcherrima","Achird","Zubenelgenubi","Vindemiatrix","Sadachbia","Sadaltager","Sulafat"],"description":"the voice","default":"Kore"},"style":{"type":"string","minLength":1,"description":"how to say it - 'cheerfully', 'slowly, in a whisper', 'like a station announcer'","maxLength":500}},"required":["text"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"text":"Forklift two oh four is out of service.","voice":"Kore","style":"calmly"},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["characters"],"per_million_usd":{"characters":36.5},"prices":{"characters":{"usd":0.0365,"per":"1,000 characters","text":"$0.0365 per 1,000 characters"}},"summary":"$0.0365 per 1,000 characters","priced":true,"cold_start_billed":false}},{"id":"sam3-track","name":"SAM 3 (follow things through a video, by name)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"object_frames","secondary_units":[],"availability":"available","description":"Name what to follow - \"forklift\" - and get its box in every frame, and its mask as a video.","context":"Up to four objects and a minute of video per request. A name follows every match of it together. To follow one particular thing marked with a point or a box, sam2-track. Billed per object per frame of video, in blocks of 16 frames.","output":"tracks","input":{"video":"the clip (required) - H264, HEVC or VP9; up to 60 seconds; wider than it is tall","objects":"what to follow, each an id and a name (required)"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the clip - H264, HEVC or VP9; up to 60 seconds; wider than it is tall"},"objects":{"type":"array","minItems":1,"maxItems":4,"description":"what to follow, each an id and a name","items":{"type":"object","properties":{"id":{"type":"string","description":"your name for it; answers use it"},"text":{"type":"string","minLength":1,"maxLength":100,"description":"what to find, in words"}},"additionalProperties":false,"oneOf":[{"required":["text"]}]}}},"required":["video","objects"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","objects":[{"id":"forklift","text":"forklift"}]},"accepts_weights":null,"limits":{"video":{"formats":["h264","hevc","vp9"],"max_seconds":60,"landscape":true},"measured":"2026-10-22: scripts/probe_limits.py: 720p to 4K wide taken, 1080x1920 and 2160x3840 upright failed; 60 seconds is ours"},"defaults":{},"pricing":{"units":["object_frames"],"per_million_usd":{"object_frames":468.75},"prices":{"object_frames":{"usd":0.0075,"per":"16 frames of one object","text":"$0.0075 per 16 frames of one object"}},"summary":"$0.0075 per 16 frames of one object","priced":true,"cold_start_billed":false}},{"id":"sam2-track","name":"SAM 2 (follow what you mark through a video)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"object_seconds","secondary_units":[],"availability":"available","description":"Mark an object with a point or a box on one frame; get its box in every frame.","context":"The same answer as sam3-track, for when what to follow is a particular thing rather than a kind of thing. Up to four objects and a minute of video per request. Billed per object per second.","output":"tracks","input":{"video":"the clip (required) - H264, HEVC or VP9; up to 60 seconds; wider than it is tall","objects":"what to follow, each an id and a point or a box marked on one frame (required)"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the clip - H264, HEVC or VP9; up to 60 seconds; wider than it is tall"},"objects":{"type":"array","minItems":1,"maxItems":4,"description":"what to follow, each an id and a point or a box marked on one frame","items":{"type":"object","properties":{"id":{"type":"string","description":"your name for it; answers use it"},"point":{"type":"array","items":{"type":"number","minimum":0},"minItems":2,"maxItems":2,"description":"[x, y] in pixels"},"box":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},"frame":{"type":"integer","minimum":0,"default":0,"description":"the frame it is marked on"}},"additionalProperties":false,"oneOf":[{"required":["point"]},{"required":["box"]}]}}},"required":["video","objects"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","objects":[{"id":"forklift","box":[40,60,300,280]}]},"accepts_weights":null,"limits":{"video":{"formats":["h264","hevc","vp9"],"max_seconds":60,"landscape":true},"measured":"2026-10-22: scripts/probe_limits.py: 720p to 4K wide taken, 1080x1920 and 2160x3840 upright failed; 60 seconds is ours"},"defaults":{},"pricing":{"units":["object_seconds"],"per_million_usd":{"object_seconds":7000.0},"prices":{"object_seconds":{"usd":0.007,"per":"object-second","text":"$0.007 per object-second"}},"summary":"$0.007 per object-second","priced":true,"cold_start_billed":false}},{"id":"glm-5.3-flash","name":"GLM-5.3 Flash (vision and text)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Reads images and answers about them: what is in a scene, and where, in pixels.","context":"The vision-language model to start with. Fast, and its boxes are in the image's own pixels - measured at within three pixels on a test image - so they can go straight to sam3-segment or sam2-segment as box prompts. Send an image with `image` and a question with `prompt`; JSON output with response_format.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG or WEBP","images":"several pictures, instead of image - JPEG, PNG or WEBP","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG or WEBP"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG or WEBP"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp"]},"measured":"2026-10-22: scripts/probe_limits.py at Together - up to 48 MP; GIF, BMP, TIFF, HEIC and AVIF refused"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.5,"tokens_in":0.15,"tokens_cached":0.03},"prices":{"tokens_out":{"usd":0.5,"per":"million output tokens","text":"$0.50 per million output tokens"},"tokens_in":{"usd":0.15,"per":"million input tokens","text":"$0.15 per million input tokens"},"tokens_cached":{"usd":0.03,"per":"million cached tokens","text":"$0.03 per million cached tokens"}},"summary":"$0.50 per million output tokens; $0.15 per million input tokens; $0.03 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"glm-5.3","name":"GLM-5.3","family":"language","primitives":["chat"],"input_types":[],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Z.ai's open-weight reasoning model, for coding and agent work; text only.","context":"Open weights at a fraction of the frontier models' price, for the steps that need real reasoning: planning, code, long documents. Text only - for images, glm-5.3-flash. JSON output with response_format; a million-token context.","output":null,"input":{"prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"List three uses for a forklift as JSON: {\"uses\": [...]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":4.4,"tokens_in":1.4,"tokens_cached":0.26},"prices":{"tokens_out":{"usd":4.4,"per":"million output tokens","text":"$4.40 per million output tokens"},"tokens_in":{"usd":1.4,"per":"million input tokens","text":"$1.40 per million input tokens"},"tokens_cached":{"usd":0.26,"per":"million cached tokens","text":"$0.26 per million cached tokens"}},"summary":"$4.40 per million output tokens; $1.40 per million input tokens; $0.26 per million cached tokens","priced":true,"cold_start_billed":false}},{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","family":"language","primitives":["chat"],"input_types":[],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Strong, inexpensive reasoning with a million-token context.","context":"For the steps that need thinking over a lot of material - a codebase, a contract, a long transcript. Reasoning tokens are billed as output and reported separately.","output":null,"input":{"prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"List three uses for a forklift as JSON: {\"uses\": [...]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":1.2,"tokens_in":0.3,"tokens_cached":0.006},"prices":{"tokens_out":{"usd":1.2,"per":"million output tokens","text":"$1.20 per million output tokens"},"tokens_in":{"usd":0.3,"per":"million input tokens","text":"$0.30 per million input tokens"},"tokens_cached":{"usd":0.006,"per":"million cached tokens","text":"$0.006 per million cached tokens"}},"summary":"$1.20 per million output tokens; $0.30 per million input tokens; $0.006 per million cached tokens","priced":true,"cold_start_billed":false}},{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","family":"language","primitives":["chat"],"input_types":[],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"The strongest open-weight reasoning model here, for the hardest steps.","context":"The expensive rung: send it what the flash model gets wrong. A million-token context. Reasoning tokens are billed as output and reported separately.","output":null,"input":{"prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"prompt":"List three uses for a forklift as JSON: {\"uses\": [...]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":null,"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":3.96,"tokens_in":1.32,"tokens_cached":0.13},"prices":{"tokens_out":{"usd":3.96,"per":"million output tokens","text":"$3.96 per million output tokens"},"tokens_in":{"usd":1.32,"per":"million input tokens","text":"$1.32 per million input tokens"},"tokens_cached":{"usd":0.13,"per":"million cached tokens","text":"$0.13 per million cached tokens"}},"summary":"$3.96 per million output tokens; $1.32 per million input tokens; $0.13 per million cached tokens","priced":true,"cold_start_billed":false}},{"id":"video-clip","name":"Video clip (ffmpeg)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"video_seconds","secondary_units":[],"availability":"available","description":"Cut one stretch out of a video - from start_s to end_s - as its own video.","context":"For handing a model only the moment that matters: a video model on the 17 seconds around an incident rather than the whole shift. Read from the stored video by seeking, so a short clip from a long file is quick. Billed per second of clip.","output":"video","input":{"video":"the video; the Python client uploads a path (required)","start_s":"where the clip starts, in seconds (required)","end_s":"where it ends, in seconds (required)"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the video; the Python client uploads a path"},"start_s":{"type":"number","description":"where the clip starts, in seconds","minimum":0},"end_s":{"type":"number","description":"where it ends, in seconds","minimum":0}},"required":["video","start_s","end_s"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"warehouse.mp4","start_s":17,"end_s":34},"accepts_weights":null,"limits":{"video":{},"measured":"2026-10-22: scripts/probe_limits.py: ffmpeg here read H.264, HEVC and VP9, to 4K and 3 minutes"},"defaults":{},"pricing":{"units":["video_seconds"],"per_million_usd":{"video_seconds":100.0},"prices":{"video_seconds":{"usd":0.0001,"per":"second of video","text":"$0.0001 per second of video"}},"summary":"$0.0001 per second of video","priced":true,"cold_start_billed":false}},{"id":"video-downsample","name":"Video downsample (ffmpeg)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"video_seconds","secondary_units":[],"availability":"available","description":"The whole video, smaller: scaled to a height in pixels, optionally fewer frames per second, or made to fit a size.","context":"For sending a long or high-resolution recording to a model with a size limit, or cheaply - a model reads 480p as well as 4K for most questions. max_mb makes a copy no bigger than that, for gemini-3.8-flash's 15 MB; past about twenty minutes at that size, split with video-scenes instead. Billed per second of video.","output":"video","input":{"video":"the video; the Python client uploads a path (required)","height":"the height to scale to, in pixels","fps":"frames per second to keep, at most 30; the original rate if left out","max_mb":"the most the copy may be, in megabytes (1,000,000 bytes) - for a model that takes files up to a size; the picture's quality is lowered to fit"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the video; the Python client uploads a path"},"height":{"enum":[240,360,480,720,1080],"description":"the height to scale to, in pixels","default":480},"fps":{"type":"number","description":"frames per second to keep, at most 30; the original rate if left out","minimum":1,"maximum":30},"max_mb":{"type":"number","description":"the most the copy may be, in megabytes (1,000,000 bytes) - for a model that takes files up to a size; the picture's quality is lowered to fit","minimum":0.1}},"required":["video"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"warehouse.mp4","height":480},"accepts_weights":null,"limits":{"video":{},"measured":"2026-10-22: scripts/probe_limits.py: ffmpeg here read H.264, HEVC and VP9, to 4K and 3 minutes"},"defaults":{},"pricing":{"units":["video_seconds"],"per_million_usd":{"video_seconds":100.0},"prices":{"video_seconds":{"usd":0.0001,"per":"second of video","text":"$0.0001 per second of video"}},"summary":"$0.0001 per second of video","priced":true,"cold_start_billed":false}},{"id":"video-frames","name":"Video frames (ffmpeg)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Pictures from a video, every N seconds or at chosen times - each saying when it was taken.","context":"For running image models over a video: detection, OCR of labels and IDs, segmentation. Each picture carries time_s. At most 64 per call. Billed per picture.","output":"image","input":{"video":"the video; the Python client uploads a path (required)","every_s":"one picture every this many seconds","times":"or the exact seconds to take pictures at"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the video; the Python client uploads a path"},"every_s":{"type":"number","description":"one picture every this many seconds","minimum":0.1},"times":{"type":"array","items":{"type":"number","minimum":0},"maxItems":64,"description":"or the exact seconds to take pictures at"}},"required":["video"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"warehouse.mp4","every_s":10},"accepts_weights":null,"limits":{"video":{},"measured":"2026-10-22: scripts/probe_limits.py: ffmpeg here read H.264, HEVC and VP9, to 4K and 3 minutes"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":1000.0},"prices":{"images":{"usd":0.001,"per":"image","text":"$0.001 per image"}},"summary":"$0.001 per image","priced":true,"cold_start_billed":false}},{"id":"video-scenes","name":"Video scenes (ffmpeg)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"video_seconds","secondary_units":[],"availability":"available","description":"Split a video where the picture changes: one keyframe per scene, with its start_s and end_s.","context":"The first step for a long video: map a model over the scenes - a video model on each clip, or an image model on each keyframe - then put the answers together. max_scene_s splits long scenes so each is a size a model can take. Billed per second of video.","output":"image","input":{"video":"the video; the Python client uploads a path (required)","threshold":"how much the picture must change to start a new scene, 0-1","min_scene_s":"the shortest a scene may be, in seconds","max_scene_s":"the longest a scene may be; longer ones are split, in seconds"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the video; the Python client uploads a path"},"threshold":{"type":"number","description":"how much the picture must change to start a new scene, 0-1","minimum":0.05,"maximum":0.9,"default":0.3},"min_scene_s":{"type":"number","description":"the shortest a scene may be, in seconds","minimum":0.5,"default":2},"max_scene_s":{"type":"number","description":"the longest a scene may be; longer ones are split, in seconds","minimum":1,"default":60}},"required":["video"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"warehouse.mp4","max_scene_s":60},"accepts_weights":null,"limits":{"video":{},"measured":"2026-10-22: scripts/probe_limits.py: ffmpeg here read H.264, HEVC and VP9, to 4K - slowly: 7 minutes for 10 seconds of 4K"},"defaults":{},"pricing":{"units":["video_seconds"],"per_million_usd":{"video_seconds":100.0},"prices":{"video_seconds":{"usd":0.0001,"per":"second of video","text":"$0.0001 per second of video"}},"summary":"$0.0001 per second of video","priced":true,"cold_start_billed":false}},{"id":"image-cutout","name":"Image cutout by mask (Pillow)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"One object from a picture, on a transparent background, cut out by its mask from sam3-segment - the input an image-to-3D model wants.","context":"The step between segmenting and anything that wants the object alone: sam3-segment finds it, this cuts it out, triposplat or trellis turns it into 3D. Send the picture and the masks answer as it is - {\"mask\": {\"execution\": \"exec_...\"}} - with `object` naming which one; the best match is used if left out. Trimmed to the object unless crop is false. Billed per picture made.","output":"image","input":{"image":"the picture the object is in (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side","mask":"the object's mask: a masks answer from sam3-segment or sam2-segment, by {\"execution\": \"exec_...\"}, or one mask from it (required)","object":"which one: the id you gave the segmenter, or a detection's label; the best match if left out","crop":"trim the picture to the object, with padding around it","padding":"pixels kept around the object"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture the object is in - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side"},"mask":{"anyOf":[{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]},{"type":"object"}],"description":"the object's mask: a masks answer from sam3-segment or sam2-segment, by {\"execution\": \"exec_...\"}, or one mask from it"},"object":{"type":"string","minLength":1,"description":"which one: the id you gave the segmenter, or a detection's label; the best match if left out","maxLength":100},"crop":{"type":"boolean","default":true,"description":"trim the picture to the object, with padding around it"},"padding":{"type":"integer","description":"pixels kept around the object","minimum":0,"maximum":512,"default":16}},"required":["image","mask"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","mask":{"execution":"exec_..."},"object":"camera"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_side":4096},"measured":"2026-10-22: scripts/probe_limits.py: peak memory, against the server's 512 MB"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":1000.0},"prices":{"images":{"usd":0.001,"per":"image","text":"$0.001 per image"}},"summary":"$0.001 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"image-crop","name":"Image crop by boxes (Pillow)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Each detected or segmented object cut out as its own picture, labelled - or any boxes you give.","context":"The step between finding things and looking closely at each: florence-2-detect or sam3-segment finds them, this crops every one, and a map runs a vision model over the crops. Send the answer as it is - {\"boxes\": {\"execution\": \"exec_...\"}} - and `object` to keep only one label; each picture says its label and box. Billed per picture made.","output":"image","input":{"image":"the picture to cut from (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side","boxes":"what to cut out: a detections or masks answer by {\"execution\": \"exec_...\"} - every object in it, or only `object` - or [x0, y0, x1, y1], or a list of those (required)","object":"only these: the segmenter id or detection label; every object if left out","padding":"pixels kept around the object"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to cut from - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side"},"boxes":{"anyOf":[{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]},{"type":"object"},{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},{"type":"array","items":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},"minItems":1,"maxItems":64}],"description":"what to cut out: a detections or masks answer by {\"execution\": \"exec_...\"} - every object in it, or only `object` - or [x0, y0, x1, y1], or a list of those"},"object":{"type":"string","minLength":1,"description":"only these: the segmenter id or detection label; every object if left out","maxLength":100},"padding":{"type":"integer","description":"pixels kept around the object","minimum":0,"maximum":512,"default":0}},"required":["image","boxes"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","boxes":{"execution":"exec_..."},"object":"person"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_side":4096},"measured":"2026-10-22: scripts/probe_limits.py: peak memory, against the server's 512 MB"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":1000.0},"prices":{"images":{"usd":0.001,"per":"image","text":"$0.001 per image"}},"summary":"$0.001 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"image-overlay","name":"Image overlay of masks and boxes (Pillow)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"Masks and boxes drawn on the picture, coloured and labelled - to show a person, or to check what a model found.","context":"Send the picture with a masks answer, a detections answer, or both, as they are - {\"masks\": {\"execution\": \"exec_...\"}}. One picture back. Billed per picture made.","output":"image","input":{"image":"the picture to draw on (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side","masks":"a masks answer to tint on it, by {\"execution\": \"exec_...\"}","boxes":"a detections answer, or boxes, to outline and label"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture to draw on - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 4,096 pixels a side"},"masks":{"anyOf":[{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]},{"type":"object"}],"description":"a masks answer to tint on it, by {\"execution\": \"exec_...\"}"},"boxes":{"anyOf":[{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]},{"type":"object"},{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},{"type":"array","items":{"type":"array","items":{"type":"number","minimum":0},"minItems":4,"maxItems":4,"description":"[x0, y0, x1, y1] in pixels, x1 and y1 exclusive"},"minItems":1,"maxItems":64}],"description":"a detections answer, or boxes, to outline and label"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","masks":{"execution":"exec_..."}},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_side":4096},"measured":"2026-10-22: scripts/probe_limits.py: peak memory, against the server's 512 MB"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":1000.0},"prices":{"images":{"usd":0.001,"per":"image","text":"$0.001 per image"}},"summary":"$0.001 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"image-resize","name":"Image resize and convert (Pillow)","family":"perception","primitives":["run"],"input_types":["image"],"operations":[],"unit":"images","secondary_units":[],"availability":"available","description":"A picture made smaller, or turned into JPEG, PNG or WebP - for a model that refuses a phone photo's size or format.","context":"The step a refusal names when a picture is too large, too many pixels or a format a model does not read: max_side for pixels, max_mb for megabytes, format for the kind of file. A phone photo is turned the way it was taken first. Billed per picture made.","output":"image","input":{"image":"the picture (required) - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 40 MB; up to 8,192 pixels a side","max_side":"the longer side, at most, in pixels; never scaled up","max_mb":"the most the file may be, in megabytes (1,000,000 bytes); quality, then size, is lowered to fit","format":"the file format"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the picture - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 40 MB; up to 8,192 pixels a side"},"max_side":{"type":"integer","description":"the longer side, at most, in pixels; never scaled up","minimum":16,"maximum":16384},"max_mb":{"type":"number","description":"the most the file may be, in megabytes (1,000,000 bytes); quality, then size, is lowered to fit","minimum":0.05},"format":{"enum":["jpeg","png","webp"],"description":"the file format","default":"jpeg"}},"required":["image"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.heic","max_side":2048,"format":"jpeg"},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_mb":40,"max_side":8192},"measured":"2026-10-22: scripts/probe_limits.py: a 48 MP JPEG read at reduced scale peaks at 167 MB; a 48 MP PNG, which cannot be, at 556"},"defaults":{},"pricing":{"units":["images"],"per_million_usd":{"images":1000.0},"prices":{"images":{"usd":0.001,"per":"image","text":"$0.001 per image"}},"summary":"$0.001 per image","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"video-events","name":"Video events (find every time something happens)","family":"perception","primitives":["run"],"input_types":["video"],"operations":[],"unit":"video_seconds","secondary_units":[],"availability":"available","description":"Every time something you describe happens in a video: each moment's start and end, what was seen, a frame and a clip of it.","context":"Say what happens in words - find: \"a forklift crosses the yellow line\". A vision model watches the whole video and names the moments; each comes back with a frame from its middle and, unless clips is false, the moment cut out as its own clip - the video's own pixels, to check or to show. Frames go straight on as pictures, clips as videos. No events is an answer. The video is sent to the vision model whole, so it is 15 MB at most - a longer recording goes through video-downsample with max_mb first. About a tenth of its length to run. Billed per second of video watched.","output":"events","input":{"video":"the video to watch, up to an hour (required) - H264 or VP9; up to 15 MB","find":"what happens, in words - e.g. \"a person puts a cup on the table\" (required)","clips":"also cut each moment out as its own clip"},"input_schema":{"type":"object","properties":{"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"the video to watch, up to an hour - H264 or VP9; up to 15 MB"},"find":{"type":"string","minLength":1,"description":"what happens, in words - e.g. \"a person puts a cup on the table\"","maxLength":500},"clips":{"type":"boolean","default":true,"description":"also cut each moment out as its own clip"}},"required":["video","find"],"additionalProperties":false},"health":{"status":"unknown","recent_calls":0},"example":{"video":"kitchen.mp4","find":"a person puts a cup on the table"},"accepts_weights":null,"limits":{"video":{"formats":["h264","vp9"],"max_mb":15},"measured":"2026-10-22: scripts/probe_limits.py: the video goes to Gemini whole - 31 MB refused; HEVC refused until Gemini is measured on it"},"defaults":{},"pricing":{"units":["video_seconds"],"per_million_usd":{"video_seconds":400.0},"prices":{"video_seconds":{"usd":0.0004,"per":"second of video","text":"$0.0004 per second of video"}},"summary":"$0.0004 per second of video","priced":true,"cold_start_billed":false}},{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash (Google)","family":"language","primitives":["chat"],"input_types":["image","video","audio"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Google's frontier model that watches video, listens to audio and reads images, then reasons about what happened and when.","context":"The one to ask what happened in a clip, and why: send `video` (or `audio`, or `image`) with a `prompt`. Pairs with the specialised models - sam3-track finds the forklift, this explains what it did between 00:17 and 00:34. A million-token context; video and audio are billed as input tokens. JSON output with response_format. A video can be a phone recording as it is, up to 2 GB.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB","images":"several pictures, instead of image - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB","video":"a clip to watch; the Python client uploads a path - H264, HEVC or VP9; up to 2000 MB","audio":"a recording to listen to; the Python client uploads a path - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 20 MB","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264, HEVC or VP9; up to 2000 MB"},"audio":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a recording to listen to; the Python client uploads a path - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 20 MB"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_mb":20},"video":{"formats":["h264","hevc","vp9"],"max_mb":2000},"audio":{"formats":["mp3","m4a","wav","ogg","webm","flac"],"max_mb":20},"measured":"2026-10-26: scripts/probe_limits.py at Google - every picture, recording and video case taken, a 600 MB video too; 2 GB is Google's word, not tried"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":3.75,"tokens_in":0.75,"tokens_cached":0.75},"prices":{"tokens_out":{"usd":3.75,"per":"million output tokens","text":"$3.75 per million output tokens"},"tokens_in":{"usd":0.75,"per":"million input tokens","text":"$0.75 per million input tokens"},"tokens_cached":{"usd":0.75,"per":"million cached tokens","text":"$0.75 per million cached tokens"}},"summary":"$3.75 per million output tokens; $0.75 per million input tokens; $0.75 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol (OpenAI)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"OpenAI's frontier model, for the hardest reasoning and structured output; reads images.","context":"For the step that needs the strongest general reasoning: planning, judging, writing a report from what the specialised models found. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"total_mb":50,"unmeasured":"not probed yet through OpenAI directly (moved there 2026-10-28): its stated 50 MB a request; through the gateway, pictures up to 48 MP were taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":10.0,"tokens_in":2.0,"tokens_cached":2.0},"prices":{"tokens_out":{"usd":10.0,"per":"million output tokens","text":"$10.00 per million output tokens"},"tokens_in":{"usd":2.0,"per":"million input tokens","text":"$2.00 per million input tokens"},"tokens_cached":{"usd":2.0,"per":"million cached tokens","text":"$2.00 per million cached tokens"}},"summary":"$10.00 per million output tokens; $2.00 per million input tokens; $2.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"claude-sonnet-5.5","name":"Claude Sonnet 5.5 (Anthropic)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Anthropic's frontier model, for careful reasoning, writing and agent steps; reads images.","context":"For steps that need judgement and clear writing - an incident report, a review of what other models produced. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"max_side":8000},"total_mb":32,"unmeasured":"partly probed through Anthropic directly (moved there 2026-10-28): a 7.7 MB picture was taken; 32 MB a request is its stated limit. Through the gateway, 8,064 pixels a side was refused and 4,032 taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":10.0,"tokens_in":2.0,"tokens_cached":2.0},"prices":{"tokens_out":{"usd":10.0,"per":"million output tokens","text":"$10.00 per million output tokens"},"tokens_in":{"usd":2.0,"per":"million input tokens","text":"$2.00 per million input tokens"},"tokens_cached":{"usd":2.0,"per":"million cached tokens","text":"$2.00 per million cached tokens"}},"summary":"$10.00 per million output tokens; $2.00 per million input tokens; $2.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gpt-6-astra","name":"GPT-6 Astra (OpenAI)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"OpenAI's most capable model, for the hardest single step; reads images.","context":"Five times gpt-6.1-sol's price: send it the step the others get wrong - a hard judgement, a long plan, a final review. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"total_mb":50,"unmeasured":"not probed yet through OpenAI directly (moved there 2026-10-28): its stated 50 MB a request; through the gateway, pictures up to 48 MP were taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":50.0,"tokens_in":10.0,"tokens_cached":10.0},"prices":{"tokens_out":{"usd":50.0,"per":"million output tokens","text":"$50.00 per million output tokens"},"tokens_in":{"usd":10.0,"per":"million input tokens","text":"$10.00 per million input tokens"},"tokens_cached":{"usd":10.0,"per":"million cached tokens","text":"$10.00 per million cached tokens"}},"summary":"$50.00 per million output tokens; $10.00 per million input tokens; $10.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"claude-fable-5.1","name":"Claude Fable 5.1 (Anthropic)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Anthropic's most capable model, for the hardest reasoning and writing; reads images.","context":"Five times claude-sonnet-5.5's price: for the step where judgement matters most. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"max_side":8000},"total_mb":32,"unmeasured":"partly probed through Anthropic directly (moved there 2026-10-28): a 7.7 MB picture was taken; 32 MB a request is its stated limit. Through the gateway, 8,064 pixels a side was refused and 4,032 taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":50.0,"tokens_in":10.0,"tokens_cached":10.0},"prices":{"tokens_out":{"usd":50.0,"per":"million output tokens","text":"$50.00 per million output tokens"},"tokens_in":{"usd":10.0,"per":"million input tokens","text":"$10.00 per million input tokens"},"tokens_cached":{"usd":10.0,"per":"million cached tokens","text":"$10.00 per million cached tokens"}},"summary":"$50.00 per million output tokens; $10.00 per million input tokens; $10.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"claude-opus-5.5","name":"Claude Opus 5.5 (Anthropic)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Anthropic's flagship, for hard reasoning, long agent work and careful writing; reads images.","context":"Twice claude-sonnet-5.5's price and well under claude-fable-5.1's: for the steps where judgement matters and Fable is more than the step is worth. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"max_side":8000},"total_mb":32,"unmeasured":"partly probed through Anthropic directly (moved there 2026-10-28): a 7.7 MB picture was taken; 32 MB a request is its stated limit. Through the gateway, 8,064 pixels a side was refused and 4,032 taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":20.0,"tokens_in":4.0,"tokens_cached":4.0},"prices":{"tokens_out":{"usd":20.0,"per":"million output tokens","text":"$20.00 per million output tokens"},"tokens_in":{"usd":4.0,"per":"million input tokens","text":"$4.00 per million input tokens"},"tokens_cached":{"usd":4.0,"per":"million cached tokens","text":"$4.00 per million cached tokens"}},"summary":"$20.00 per million output tokens; $4.00 per million input tokens; $4.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"claude-haiku-5.5","name":"Claude Haiku 5.5 (Anthropic)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Anthropic's fast, inexpensive model, for the many small steps of an agent; reads images.","context":"A twentieth of claude-sonnet-5.5's price: for classifying, extracting, routing and checking - the steps a pipeline runs thousands of times. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; up to 8,000 pixels a side; 32 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"],"max_side":8000},"total_mb":32,"unmeasured":"partly probed through Anthropic directly (moved there 2026-10-28): a 7.7 MB picture was taken; 32 MB a request is its stated limit. Through the gateway, 8,064 pixels a side was refused and 4,032 taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.5,"tokens_in":0.1,"tokens_cached":0.1},"prices":{"tokens_out":{"usd":0.5,"per":"million output tokens","text":"$0.50 per million output tokens"},"tokens_in":{"usd":0.1,"per":"million input tokens","text":"$0.10 per million input tokens"},"tokens_cached":{"usd":0.1,"per":"million cached tokens","text":"$0.10 per million cached tokens"}},"summary":"$0.50 per million output tokens; $0.10 per million input tokens; $0.10 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gpt-6-luna","name":"GPT-6 Luna (OpenAI)","family":"language","primitives":["chat"],"input_types":["image"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"OpenAI's fast, inexpensive model, for the many small steps of an agent; reads images.","context":"A twentieth of gpt-6.1-sol's price: for classifying, extracting, routing and checking at volume. Images with `image`; JSON output with response_format; a million-token context.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 50 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"image":"photo.jpg","prompt":"List the objects in this picture as JSON: {\"objects\": [{\"name\": str, \"box\": [x0, y0, x1, y1]}]} in pixels.","response_format":{"type":"json_object"},"reasoning_effort":"low","max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"total_mb":50,"unmeasured":"not probed yet through OpenAI directly (moved there 2026-10-28): its stated 50 MB a request; through the gateway, pictures up to 48 MP were taken"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.5,"tokens_in":0.1,"tokens_cached":0.1},"prices":{"tokens_out":{"usd":0.5,"per":"million output tokens","text":"$0.50 per million output tokens"},"tokens_in":{"usd":0.1,"per":"million input tokens","text":"$0.10 per million input tokens"},"tokens_cached":{"usd":0.1,"per":"million cached tokens","text":"$0.10 per million cached tokens"}},"summary":"$0.50 per million output tokens; $0.10 per million input tokens; $0.10 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"gemini-4-argon","name":"Gemini 4 Argon (Google)","family":"language","primitives":["chat"],"input_types":["image","video","audio"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Google's flagship: watches video, listens to audio and reads images and documents, then reasons hard about them.","context":"Gemini's strongest reasoning, for the clip or recording gemini-3.8-flash gets wrong - or the question that needs more thought. Send `video`, `audio` or `image` with a `prompt`. A million-token context; video and audio are billed as input tokens. A video can be a phone recording as it is, up to 2 GB.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB","images":"several pictures, instead of image - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB","video":"a clip to watch; the Python client uploads a path - H264, HEVC or VP9; up to 2000 MB","audio":"a recording to listen to; the Python client uploads a path - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 20 MB","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP, GIF, BMP, TIFF, HEIC or AVIF; up to 20 MB"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264, HEVC or VP9; up to 2000 MB"},"audio":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a recording to listen to; the Python client uploads a path - MP3, M4A, WAV, OGG, WEBM or FLAC; up to 20 MB"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif","bmp","tiff","heic","avif"],"max_mb":20},"video":{"formats":["h264","hevc","vp9"],"max_mb":2000},"audio":{"formats":["mp3","m4a","wav","ogg","webm","flac"],"max_mb":20},"unmeasured":"not probed yet (added 2026-10-27); declared as gemini-3.8-flash's, through the same Google route"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":10.0,"tokens_in":2.0,"tokens_cached":2.0},"prices":{"tokens_out":{"usd":10.0,"per":"million output tokens","text":"$10.00 per million output tokens"},"tokens_in":{"usd":2.0,"per":"million input tokens","text":"$2.00 per million input tokens"},"tokens_cached":{"usd":2.0,"per":"million cached tokens","text":"$2.00 per million cached tokens"}},"summary":"$10.00 per million output tokens; $2.00 per million input tokens; $2.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro (Moonshot)","family":"language","primitives":["chat"],"input_types":["image","video"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Moonshot's frontier model, strong at code and long agent work; reads images and video.","context":"A frontier alternative to the American labs for planning, coding and reviewing, which also watches a clip. Send `image` or `video` with a `prompt`; JSON output with response_format; a million-token context. A video goes through the gateway, so 15 MB of files a call.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all","video":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"video":{"formats":["h264","vp9"]},"total_mb":15,"unmeasured":"not probed yet (added 2026-10-27): the gateway's 15 MB, and the formats its other video models took"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":10.0,"tokens_in":2.0,"tokens_cached":2.0},"prices":{"tokens_out":{"usd":10.0,"per":"million output tokens","text":"$10.00 per million output tokens"},"tokens_in":{"usd":2.0,"per":"million input tokens","text":"$2.00 per million input tokens"},"tokens_cached":{"usd":2.0,"per":"million cached tokens","text":"$2.00 per million cached tokens"}},"summary":"$10.00 per million output tokens; $2.00 per million input tokens; $2.00 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"minimax-m3.1-flash","name":"MiniMax M3.1 Flash","family":"language","primitives":["chat"],"input_types":["image","video"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Watches video and reads images at a twentieth of Gemini's price - the one for many clips.","context":"Video understanding for volume: describe or label every clip in a batch, then send the hard ones to gemini-3.8-flash. Send `video` (or `image`) with a `prompt`; JSON output with response_format. Through the gateway, so 15 MB of files a call - cut longer recordings with video-scenes or video-clip. Does not hear the audio track: mimo-v2.6-flash does.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all","video":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"video":{"formats":["h264","vp9"]},"total_mb":15,"unmeasured":"not probed yet (added 2026-10-27): the gateway's 15 MB, and the formats its other video models took"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.6,"tokens_in":0.15,"tokens_cached":0.15},"prices":{"tokens_out":{"usd":0.6,"per":"million output tokens","text":"$0.60 per million output tokens"},"tokens_in":{"usd":0.15,"per":"million input tokens","text":"$0.15 per million input tokens"},"tokens_cached":{"usd":0.15,"per":"million cached tokens","text":"$0.15 per million cached tokens"}},"summary":"$0.60 per million output tokens; $0.15 per million input tokens; $0.15 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"mimo-v2.6-flash","name":"MiMo V2.6 Flash (Xiaomi)","family":"language","primitives":["chat"],"input_types":["image","video","audio"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"Sees and hears - pictures, video and sound - at the lowest price here.","context":"For clips where what is said matters as much as what is seen: a radio call, an alarm, an instruction - and for recordings on their own. Send `video`, `audio` or `image` with a `prompt`; JSON output with response_format. 15 MB of files a call.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all","video":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all","audio":"a recording to listen to; the Python client uploads a path - MP3 or WAV; 15 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all"},"audio":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a recording to listen to; the Python client uploads a path - MP3 or WAV; 15 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"video":{"formats":["h264","vp9"]},"audio":{"formats":["mp3","wav"]},"total_mb":15,"unmeasured":"not probed yet (added 2026-10-27): the gateway's 15 MB, and the formats its other video models took"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.28,"tokens_in":0.14,"tokens_cached":0.14},"prices":{"tokens_out":{"usd":0.28,"per":"million output tokens","text":"$0.28 per million output tokens"},"tokens_in":{"usd":0.14,"per":"million input tokens","text":"$0.14 per million input tokens"},"tokens_cached":{"usd":0.14,"per":"million cached tokens","text":"$0.14 per million cached tokens"}},"summary":"$0.28 per million output tokens; $0.14 per million input tokens; $0.14 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}},{"id":"nemotron-3.5-super-vl","name":"Nemotron 3.5 Super VL (NVIDIA)","family":"language","primitives":["chat"],"input_types":["image","video"],"operations":[],"unit":"tokens_out","secondary_units":["tokens_in","tokens_cached"],"availability":"available","description":"NVIDIA's open-weights model for video, pictures and where things are in them.","context":"Inexpensive video and spatial understanding from open weights - the one that could also run on GPUs of your own. Send `video` or `image` with a `prompt`; JSON output with response_format. 15 MB of files a call.","output":null,"input":{"image":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all","images":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all","video":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all","prompt":"the question or instruction; or send messages","messages":"OpenAI-style [{role, content}], instead of prompt","system":"a system prompt","max_tokens":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","reasoning_effort":"how long a reasoning model thinks first","response_format":"{'type': 'json_object'} for JSON","temperature":"sampling temperature","top_p":"nucleus sampling","stop":"a string or strings that end the answer","seed":"sampling seed","presence_penalty":"OpenAI-style penalty","frequency_penalty":"OpenAI-style penalty"},"input_schema":{"type":"object","properties":{"image":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a picture to read; the Python client uploads a path - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"images":{"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}]},"maxItems":4,"description":"several pictures, instead of image - JPEG, PNG, WEBP or GIF; 15 MB of files in all"},"video":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"media_id":{"type":"string","pattern":"^med_"}},"required":["media_id"]},{"type":"object","properties":{"execution":{"type":"string","pattern":"^exec_"},"item":{"type":"integer","minimum":0}},"required":["execution"]}],"description":"a clip to watch; the Python client uploads a path - H264 or VP9; 15 MB of files in all"},"prompt":{"type":"string","minLength":1,"description":"the question or instruction; or send messages"},"messages":{"type":"array","minItems":1,"items":{"type":"object"},"description":"OpenAI-style [{role, content}], instead of prompt"},"system":{"type":"string","description":"a system prompt"},"max_tokens":{"type":"integer","description":"cap on the answer, reasoning included. Reasoning models think before they answer: too low a cap is spent thinking and the answer is empty","minimum":1},"reasoning_effort":{"enum":["low","medium","high"],"description":"how long a reasoning model thinks first"},"response_format":{"type":"object","description":"{'type': 'json_object'} for JSON"},"temperature":{"type":"number","description":"sampling temperature","minimum":0},"top_p":{"type":"number","description":"nucleus sampling","minimum":0,"maximum":1},"stop":{"description":"a string or strings that end the answer"},"seed":{"type":"integer","description":"sampling seed"},"presence_penalty":{"type":"number","description":"OpenAI-style penalty"},"frequency_penalty":{"type":"number","description":"OpenAI-style penalty"}},"required":[],"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["messages"]}]},"health":{"status":"unknown","recent_calls":0},"example":{"video":"clip.mp4","prompt":"What happens in this clip, and when? Answer as JSON: {\"events\": [{\"start_s\": number, \"end_s\": number, \"what\": str}]}","response_format":{"type":"json_object"},"max_tokens":8000},"accepts_weights":null,"limits":{"image":{"formats":["jpeg","png","webp","gif"]},"video":{"formats":["h264","vp9"]},"total_mb":15,"unmeasured":"not probed yet (added 2026-10-27): the gateway's 15 MB, and the formats its other video models took"},"defaults":{},"pricing":{"units":["tokens_out","tokens_in","tokens_cached"],"per_million_usd":{"tokens_out":0.5,"tokens_in":0.15,"tokens_cached":0.15},"prices":{"tokens_out":{"usd":0.5,"per":"million output tokens","text":"$0.50 per million output tokens"},"tokens_in":{"usd":0.15,"per":"million input tokens","text":"$0.15 per million input tokens"},"tokens_cached":{"usd":0.15,"per":"million cached tokens","text":"$0.15 per million cached tokens"}},"summary":"$0.50 per million output tokens; $0.15 per million input tokens; $0.15 per million cached tokens","priced":true,"cold_start_billed":false,"image":{"tokens_each":1600,"megapixel_cap":null,"note":"An image is billed as input tokens. Larger images are scaled to the cap before counting, so this figure is the most one image can cost."}}}]