quote_generation
Quote a generation
Price a request exactly, and compare it to the balance, without creating anything. target picks the room: image, clip, voice (the generate_voiceover arguments), music (the generate_music brief) or guided (a guided recipe). Takes the same arguments as the matching generate tool.
To price a whole plan — a voice-over and the clips it drives, say — pass requests instead: up to 20 of the same objects, each with its own target. The answer is one line per request, the total and whether the balance covers it; a line that cannot run says why and the rest still price.
An avatar clip whose reference audio already exists is priced at that audio's length. Use only the account's existing entitlements: when a plan does not fit, explain it without offering purchases.
Scope
generation.write— Makes, edits, imports, shares and deletes media in the account.
Behaviour
- Read-only
- Reads the caller's own account and changes nothing.
- Stays in the account
- Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.
- Idempotent
- Calling it again with the same arguments has no further effect.
Inputs
targetstring · optionalone of "image", "clip", "voice", "music", "guided"
promptstring · optionalat most 4000 characters
idempotency_keystring · optionalOptional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused.
at least 1 character · at most 128 characters
modelstring · optionalone of "seedream-5-lite", "nano-banana-2.1", "nano-banana-2", "gpt-image-2.5-flare", "gpt-image-2.5-sunburst", "gpt-image-2", "nano-banana-2-lite", "seedream-5-pro", "flux-schnell", "flux-2-flex", "flux-2-pro", "flux-2-max", "recraft-v4.1-svg", "recraft-v4.1-pro-svg", "p-image", "grok-imagine-image", "grok-imagine-image-quality", "krea-3", "qwen-image-3-pro", "soul-2", "seedance-2.5", "seedance-2.0", "seedance-2.0-fast", "seedance-2.0-mini", "grok-imagine-video-1.5", "veo-3.1", "veo-3.1-fast", "veo-3.1-lite", "gemini-omni-1.1", "kling-v3-omni-video", "kling-v3-video", "happyhorse-1.0", "wan-3", "wan-3-prime", "gen-4.5", "p-video", "p-video-2", "flux-3", "minimax-h3-max", "p-video-avatar", "p-video-animate", "p-video-replace", "omni-human-1.5", "kling-avatar-v2", "kling-v3-motion-control", "sync-lipsync-2", "kling-lip-sync", "genjutsu-motion-transfer", "genjutsu-object-swap", "elevenlabs-tts", "eleven-v4", "gemini-3.1-flash-tts", "kokoro-82m", "minimax-speech-2.8-hd", "inworld-tts-2", "minimax-music-2.6", "eleven-music"
aspect_ratiostring · optionalone of "1:1", "1:2", "1:4", "1:8", "2:1", "2:3", "3:2", "3:4", "4:1", "4:3", "4:5", "5:4", "8:1", "9:16", "16:9", "21:9", "adaptive"
settingstring · optionalpresetsobject · optionalfields: style, motion, lighting, framing
recreate_ofstring · optionaluuid
referencesarray of object (type: "upload") or object (type: "generation") · optionalThe pictures this generation can see — uploads and generations alike, in the shape list_media returns. This is the only field that carries image data into the model. The selected model’s reference capacity applies (list_models).
subjectsarray of string · optionalNames or ids of the account's Subjects (list_subjects). The server supplies each one's face and description — seated against the model's capacity — so do not also attach pictures of them.
at most 4 items
refined_fromstring · optionalLineage only — this records that the new image is the next version of that one, and carries NO pixels. Put the same generation in `references` or the model sees no picture. Prefer edit_image, which sets both from one id; reach for this only to hand-assemble a refine edit_image cannot express.
uuid
runs_onstring · optionalWho pays: "credits", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose.
one of "credits", "replicate", "fal", "siray", "runware", "higgsfield", "sunra", "comfy"
duration_seconds-1 or integer · optionalresolutionstring · optionalone of "360p", "480p", "720p", "768p", "1080p", "4K"
generate_audioboolean · optionalfirst_frameobject (type: "upload") or object (type: "generation") · optionallast_frameobject (type: "upload") or object (type: "generation") · optionalreference_imagesarray of object (type: "upload") or object (type: "generation") · optionalat most 30 items
reference_videosarray of object (type: "upload") or object (type: "generation") · optionalThe video this clip is driven by — a source performance to copy, or the take a mouth is re-synced in. Uploads and clips you generated alike, in the shape list_media returns.
at most 10 items
reference_audiosarray of object (type: "upload") or object (type: "generation") · optionalat most 10 items
recipe_idstring · optionaluuid
creative_promptstring · optionalat most 4000 characters
inputsarray of object · optionalat most 6 items
choicesobject · optionalmodel_idstring · optionalone of "seedream-5-lite", "nano-banana-2.1", "nano-banana-2", "gpt-image-2.5-flare", "gpt-image-2.5-sunburst", "gpt-image-2", "nano-banana-2-lite", "seedream-5-pro", "flux-schnell", "flux-2-flex", "flux-2-pro", "flux-2-max", "recraft-v4.1-svg", "recraft-v4.1-pro-svg", "p-image", "grok-imagine-image", "grok-imagine-image-quality", "krea-3", "qwen-image-3-pro", "soul-2", "seedance-2.5", "seedance-2.0", "seedance-2.0-mini", "seedance-2.0-fast", "grok-imagine-video-1.5", "veo-3.1", "veo-3.1-fast", "veo-3.1-lite", "gemini-omni-1.1", "kling-v3-omni-video", "kling-v3-video", "happyhorse-1.0", "wan-3", "wan-3-prime", "gen-4.5", "p-video", "p-video-2", "flux-3", "minimax-h3-max", "p-video-avatar", "p-video-animate", "p-video-replace", "omni-human-1.5", "kling-avatar-v2", "kling-v3-motion-control", "kling-lip-sync", "sync-lipsync-2", "genjutsu-motion-transfer", "genjutsu-object-swap", "elevenlabs-tts", "eleven-v4", "gemini-3.1-flash-tts", "kokoro-82m", "minimax-speech-2.8-hd", "inworld-tts-2", "reel-music-1", "minimax-music-2.6", "eleven-music"
textstring · optionalat least 1 character · at most 4000 characters
subjectstring · optionalat least 1 character · at most 120 characters
voicestring · optionalat least 1 character · at most 120 characters
style_promptstring · optionalat most 4000 characters
language_codestring · optionalat least 2 characters · at most 35 characters
speednumber · optional≥ 0.1 · ≤ 5
emotionstring · optionalone of "auto", "neutral", "happy", "sad", "angry", "fearful", "disgusted", "surprised", "calm"
lyricsstring · optionalat least 1 character · at most 3500 characters
is_instrumentalboolean · optionalrequestsarray of object · optionalat least 1 item · at most 20 items
Example call
A tools/call request with the required arguments only, each a placeholder read off the schema. Replace them before sending.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "quote_generation",
"arguments": {}
}
}Input schema
As the server sends it in tools/list.
{
"type": "object",
"properties": {
"target": {
"type": "string",
"enum": [
"image",
"clip",
"voice",
"music",
"guided"
]
},
"prompt": {
"type": "string",
"maxLength": 4000
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused."
},
"model": {
"type": "string",
"enum": [
"seedream-5-lite",
"nano-banana-2.1",
"nano-banana-2",
"gpt-image-2.5-flare",
"gpt-image-2.5-sunburst",
"gpt-image-2",
"nano-banana-2-lite",
"seedream-5-pro",
"flux-schnell",
"flux-2-flex",
"flux-2-pro",
"flux-2-max",
"recraft-v4.1-svg",
"recraft-v4.1-pro-svg",
"p-image",
"grok-imagine-image",
"grok-imagine-image-quality",
"krea-3",
"qwen-image-3-pro",
"soul-2",
"seedance-2.5",
"seedance-2.0",
"seedance-2.0-fast",
"seedance-2.0-mini",
"grok-imagine-video-1.5",
"veo-3.1",
"veo-3.1-fast",
"veo-3.1-lite",
"gemini-omni-1.1",
"kling-v3-omni-video",
"kling-v3-video",
"happyhorse-1.0",
"wan-3",
"wan-3-prime",
"gen-4.5",
"p-video",
"p-video-2",
"flux-3",
"minimax-h3-max",
"p-video-avatar",
"p-video-animate",
"p-video-replace",
"omni-human-1.5",
"kling-avatar-v2",
"kling-v3-motion-control",
"sync-lipsync-2",
"kling-lip-sync",
"genjutsu-motion-transfer",
"genjutsu-object-swap",
"elevenlabs-tts",
"eleven-v4",
"gemini-3.1-flash-tts",
"kokoro-82m",
"minimax-speech-2.8-hd",
"inworld-tts-2",
"minimax-music-2.6",
"eleven-music"
]
},
"aspect_ratio": {
"type": "string",
"enum": [
"1:1",
"1:2",
"1:4",
"1:8",
"2:1",
"2:3",
"3:2",
"3:4",
"4:1",
"4:3",
"4:5",
"5:4",
"8:1",
"9:16",
"16:9",
"21:9",
"adaptive"
]
},
"setting": {
"type": "string"
},
"presets": {
"type": "object",
"properties": {
"style": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "null"
}
]
},
"motion": {
"anyOf": [
{
"$ref": "#/properties/presets/properties/style/anyOf/0"
},
{
"type": "null"
}
]
},
"lighting": {
"anyOf": [
{
"$ref": "#/properties/presets/properties/style/anyOf/0"
},
{
"type": "null"
}
]
},
"framing": {
"anyOf": [
{
"$ref": "#/properties/presets/properties/style/anyOf/0"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"recreate_of": {
"type": "string",
"format": "uuid"
},
"references": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "upload"
},
"upload_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"type",
"upload_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "generation"
},
"generation_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"type",
"generation_id"
],
"additionalProperties": false
}
]
},
"description": "The pictures this generation can see — uploads and generations alike, in the shape list_media returns. This is the only field that carries image data into the model. The selected model’s reference capacity applies (list_models)."
},
"subjects": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"description": "Names or ids of the account's Subjects (list_subjects). The server supplies each one's face and description — seated against the model's capacity — so do not also attach pictures of them."
},
"refined_from": {
"type": "string",
"format": "uuid",
"description": "Lineage only — this records that the new image is the next version of that one, and carries NO pixels. Put the same generation in `references` or the model sees no picture. Prefer edit_image, which sets both from one id; reach for this only to hand-assemble a refine edit_image cannot express."
},
"runs_on": {
"type": "string",
"enum": [
"credits",
"replicate",
"fal",
"siray",
"runware",
"higgsfield",
"sunra",
"comfy"
],
"description": "Who pays: \"credits\", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose."
},
"duration_seconds": {
"anyOf": [
{
"type": "number",
"const": -1
},
{
"type": "integer",
"minimum": 1,
"maximum": 1800
}
]
},
"resolution": {
"type": "string",
"enum": [
"360p",
"480p",
"720p",
"768p",
"1080p",
"4K"
]
},
"generate_audio": {
"type": "boolean"
},
"first_frame": {
"$ref": "#/properties/references/items"
},
"last_frame": {
"$ref": "#/properties/references/items"
},
"reference_images": {
"type": "array",
"items": {
"$ref": "#/properties/references/items"
},
"maxItems": 30
},
"reference_videos": {
"type": "array",
"items": {
"$ref": "#/properties/references/items"
},
"maxItems": 10,
"description": "The video this clip is driven by — a source performance to copy, or the take a mouth is re-synced in. Uploads and clips you generated alike, in the shape list_media returns."
},
"reference_audios": {
"type": "array",
"items": {
"$ref": "#/properties/references/items"
},
"maxItems": 10
},
"recipe_id": {
"type": "string",
"format": "uuid"
},
"creative_prompt": {
"type": "string",
"maxLength": 4000
},
"inputs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slot_key": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"sources": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "upload"
},
"upload_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"type",
"upload_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "generation"
},
"generation_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"type",
"generation_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "subject"
},
"subject_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"type",
"subject_id"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 6
}
},
"required": [
"slot_key",
"sources"
],
"additionalProperties": false
},
"maxItems": 6
},
"choices": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 16
}
]
}
},
"model_id": {
"type": "string",
"enum": [
"seedream-5-lite",
"nano-banana-2.1",
"nano-banana-2",
"gpt-image-2.5-flare",
"gpt-image-2.5-sunburst",
"gpt-image-2",
"nano-banana-2-lite",
"seedream-5-pro",
"flux-schnell",
"flux-2-flex",
"flux-2-pro",
"flux-2-max",
"recraft-v4.1-svg",
"recraft-v4.1-pro-svg",
"p-image",
"grok-imagine-image",
"grok-imagine-image-quality",
"krea-3",
"qwen-image-3-pro",
"soul-2",
"seedance-2.5",
"seedance-2.0",
"seedance-2.0-mini",
"seedance-2.0-fast",
"grok-imagine-video-1.5",
"veo-3.1",
"veo-3.1-fast",
"veo-3.1-lite",
"gemini-omni-1.1",
"kling-v3-omni-video",
"kling-v3-video",
"happyhorse-1.0",
"wan-3",
"wan-3-prime",
"gen-4.5",
"p-video",
"p-video-2",
"flux-3",
"minimax-h3-max",
"p-video-avatar",
"p-video-animate",
"p-video-replace",
"omni-human-1.5",
"kling-avatar-v2",
"kling-v3-motion-control",
"kling-lip-sync",
"sync-lipsync-2",
"genjutsu-motion-transfer",
"genjutsu-object-swap",
"elevenlabs-tts",
"eleven-v4",
"gemini-3.1-flash-tts",
"kokoro-82m",
"minimax-speech-2.8-hd",
"inworld-tts-2",
"reel-music-1",
"minimax-music-2.6",
"eleven-music"
]
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"voice": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"style_prompt": {
"type": "string",
"maxLength": 4000
},
"language_code": {
"type": "string",
"minLength": 2,
"maxLength": 35
},
"speed": {
"type": "number",
"minimum": 0.1,
"maximum": 5
},
"emotion": {
"type": "string",
"enum": [
"auto",
"neutral",
"happy",
"sad",
"angry",
"fearful",
"disgusted",
"surprised",
"calm"
]
},
"lyrics": {
"type": "string",
"minLength": 1,
"maxLength": 3500
},
"is_instrumental": {
"type": "boolean"
},
"requests": {
"type": "array",
"items": {
"type": "object",
"properties": {
"target": {
"$ref": "#/properties/target"
},
"prompt": {
"$ref": "#/properties/prompt"
},
"idempotency_key": {
"$ref": "#/properties/idempotency_key"
},
"model": {
"$ref": "#/properties/model"
},
"aspect_ratio": {
"$ref": "#/properties/aspect_ratio"
},
"setting": {
"$ref": "#/properties/setting"
},
"presets": {
"$ref": "#/properties/presets"
},
"recreate_of": {
"$ref": "#/properties/recreate_of"
},
"references": {
"$ref": "#/properties/references"
},
"subjects": {
"$ref": "#/properties/subjects"
},
"refined_from": {
"$ref": "#/properties/refined_from"
},
"runs_on": {
"$ref": "#/properties/runs_on"
},
"duration_seconds": {
"$ref": "#/properties/duration_seconds"
},
"resolution": {
"$ref": "#/properties/resolution"
},
"generate_audio": {
"$ref": "#/properties/generate_audio"
},
"first_frame": {
"$ref": "#/properties/first_frame"
},
"last_frame": {
"$ref": "#/properties/last_frame"
},
"reference_images": {
"$ref": "#/properties/reference_images"
},
"reference_videos": {
"$ref": "#/properties/reference_videos"
},
"reference_audios": {
"$ref": "#/properties/reference_audios"
},
"recipe_id": {
"$ref": "#/properties/recipe_id"
},
"creative_prompt": {
"$ref": "#/properties/creative_prompt"
},
"inputs": {
"$ref": "#/properties/inputs"
},
"choices": {
"$ref": "#/properties/choices"
},
"model_id": {
"$ref": "#/properties/model_id"
},
"text": {
"$ref": "#/properties/text"
},
"subject": {
"$ref": "#/properties/subject"
},
"voice": {
"$ref": "#/properties/voice"
},
"style_prompt": {
"$ref": "#/properties/style_prompt"
},
"language_code": {
"$ref": "#/properties/language_code"
},
"speed": {
"$ref": "#/properties/speed"
},
"emotion": {
"$ref": "#/properties/emotion"
},
"lyrics": {
"$ref": "#/properties/lyrics"
},
"is_instrumental": {
"$ref": "#/properties/is_instrumental"
}
},
"required": [
"target"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20
}
},
"additionalProperties": false
}Related tools
- generate_voiceover
Start a voice-over generation from text.
- generate_music
Start a music generation from a creative brief.