Update to Batch Banana
Snapshot Oct 29, 2026 · 12:06 UTC · version 1.2.0
Collection source: downloaded plugin package.
Payment or plan references changed
Skill instructions — Now says: | `show_results` | Show chosen jobs (by id) in the results view, such as images made earlier in the conversation. | | `get_profile` | The connected account...
Observed in published text. Live prices and checkout terms have not been verified by this change.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Oct 27, 2026 · 00:58 UTC
1. Call the matching `quote_*` tool with the same fields you will send to the create tool. 2. Tell the user the `creditCost` when the request is large (many images, a long video, an edit over many files) or when they asked about cost. Fo...
Oct 29, 2026 · 12:06 UTC
| `show_results` | Show chosen jobs (by id) in the results view, such as images made earlier in the conversation. | | `get_profile` | The connected account and workspace, so the client can label the connection. | ## Several different ima...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -18,6 +18,8 @@ | `quote_image_generation`, `quote_video_generation`, `quote_image_edit` | Price a request without charging. Returns `creditCost`, `pricingVersion`, `requestHash`. | | `generate_image`, `generate_video`, `edit_image` | Start a paid job. Returns a job. | | `get_generation` | Read a job's status and outputs. The only way to learn when a job finishes. | +| `show_results` | Show chosen jobs (by id) in the results view, such as images made earlier in the conversation. | +| `get_profile` | The connected account and workspace, so the client can label the connection. | | `search_styles` | Find a look in the Batch Banana style library by description, list the library by family, or read chosen styles in full. A style's `slug` goes in `generate_image`'s `style`. | | `search_library` | Find existing work, one result per job, by prompt, kind, model, edit operation, project, or date. Each output has a `fileId`, and each result has the `jobId` that made it. | | `list_projects` | Project ids for `projectId` on creates and on `search_library`. | @@ -32,6 +34,10 @@ Defaults for `generate_image`: `aspectRatio` `1:1`, `numImages` 4 (range 1 to 8). Supported aspect ratios: `21:9`, `16:9`, `4:3`, `3:2`, `5:4`, `1:1`, `4:5`, `3:4`, `2:3`, `9:16`, limited to what the model supports. Ask for fewer images when the user wants one. +## Several different images + +When the user wants several different images, such as four concepts, variations in different styles, or one image per product, make one `generate_image` call with `prompt` as a list of prompts (up to 16), not one call per image. Quote the same list once with `quote_image_generation`. A list makes 1 image per prompt unless `numImages` says otherwise, up to 48 images in all. All prompts in one call share the model, aspect ratio and options. One call keeps every image in one results view; separate calls replace each other's view. + ## Use a style When the user asks for a look (watercolor, claymation, 35mm film, a named style), check the style library before writing the look into the prompt. @@ -43,11 +49,11 @@ ## Quote, then create -1. Call the matching `quote_*` tool with the same fields you will send to the create tool. -2. Tell the user the `creditCost` when the request is large (many images, a long video, an edit over many files) or when they asked about cost. For a small single request, go ahead. +1. Quote only when the user asks about cost, or before a video or a large request (many images, an edit over many files). Call the matching `quote_*` tool with the same fields you will send to the create tool, and tell the user the `creditCost`. For a small image request, skip the quote and create directly. 3. Call the create tool with: - a new `idempotencyKey` for each distinct request, for example a UUID. Reuse the same key only when retrying the exact same request after a network error or timeout; that returns the original job instead of charging again. - `expectedCreditCost` set to the quoted `creditCost`. + The create returns the first job plus `requestCreditCost`, the total charged for the whole request, and `jobIds` when it made several jobs. Report `requestCreditCost` as the cost. - `projectId` when the user names a project (from `list_projects`). Errors from a create: @@ -60,7 +66,7 @@ A create returns a job with `status` `pending` or `processing` and `pollAfterMs`. -1. Wait `pollAfterMs`, then call `get_generation` with the job `id`. +1. Wait `pollAfterMs`, then call `get_generation` with the job `id`. When the create returned `jobIds`, poll each of them. 2. Repeat until `status` is `completed` or `failed`. If the response keeps saying `processing`, lengthen the wait between calls, up to about 15 seconds. Images usually finish within a minute. Videos can take several minutes. 3. Tell the user the job is running rather than going silent during long waits. @@ -70,7 +76,9 @@ - `source.url`: the original file exactly as the provider produced it. - `fileId`: use as `referenceFileIds`, `startFrameFileId`, or an `edit_image` `fileIds` entry. -Never embed outputs with Markdown image syntax (``). Clients that support it already show them in the Batch Banana results view, so describe the result in a sentence instead. Elsewhere, share the URLs as plain links. Every output is also in the user's Batch Banana library. +Never embed outputs with Markdown image syntax (``), and never add images from other sources. Clients that support it already show them in the Batch Banana results view, so describe the result in a sentence instead. Elsewhere, share the URLs as plain links. Every output is also in the user's Batch Banana library. + +To show work made earlier, find it with `search_library` or use the job ids you already have, then call `show_results` with those ids. ## Build on existing work @@ -100,7 +108,11 @@ ## Out of credits -`INSUFFICIENT_CREDITS` means the connected workspace does not have enough credits for the request. Tell the user how many credits the request needs (from the quote) and that the workspace is short. Suggest a cheaper option if one exists: fewer images, a `fast` tier model, a lower resolution, or a shorter video. If they want to add credits, point them to their account on batchbanana.com. Plans are described at https://batchbanana.com/#pricing. Do not push upgrades. +When a refusal carries a message for the user, relay that message as written, without the error code. + +`INSUFFICIENT_CREDITS` means the connected workspace does not have enough credits for the request. Tell the user how many credits the request needs (from the quote) and that the workspace is short. Suggest a cheaper option if one exists: fewer images, a `fast` tier model, a lower resolution, or a shorter video. Plans and prices are described at https://batchbanana.com/pricing. Do not push upgrades or name plans. + +`EMAIL_NOT_VERIFIED` means the account's email address isn't verified yet. Tell the user to open the verification link in the email from Batch Banana, then try the request again. Don't mention credits. ## Sign-in errors
Full technical diff · 1 changed fields
changed /skill_md_contents
"---\nname: batch-banana\ndescription: Generate images and video, and edit images, with the Batch Banana MCP tools. Use when the user asks to create, edit, upscale, remove a background from, or find an image or video, asks for an image in a named look or style, or asks what a generation would cost.\n---\n\n# Batch Banana\n\nBatch Banana runs image generation, video generation, and image edits at third-party model providers and stores every output in the user's workspace library. Every create spends the connected workspace's credits. Quotes, catalog reads, and library reads are free.\n\n## Tools\n\n| Tool | Use |\n| --- | --- |\n| `list_models` | Image and video models with `tier`, `creditCost`, and `billingUnit` (`output` or `second`). Optional `mediaType`: `image` or `video`. |\n| `describe_model` | One model's options, resolution choices, and capabilities. Send every option under `options`, keyed by its `key`, including `options.resolution`. |\n| `list_edit_operations` | Edit operations with cost, `requiresPrompt`, reference image range, and `sourceArity`. |\n| `describe_edit_operation` | One operation's `params`. |\n| `quote_image_generation`, `quote_video_generation`, `quote_image_edit` | Price a request without charging. Returns `creditCost`, `pricingVersion`, `requestHash`. |\n| `generate_image`, `generate_video`, `edit_image` | Start a paid job. Returns a job. |\n| `get_generation` | Read a job's status and outputs. The only way to learn when a job finishes. |\n| `search_styles` | Find a look in the Batch Banana style library by description, list the library by family, or read chosen styles in full. A style's `slug` goes in `generate_image`'s `style`. |\n| `search_library` | Find existing work, one result per job, by prompt, kind, model, edit operation, project, or date. Each output has a `fileId`, and each result has the `jobId` that made it. |\n| `list_projects` | Project ids for `projectId` on creates and on `search_library`. |\n| `get_file` | URLs, size, and dimensions of one file. |\n| `import_image` | Turn a public `https` image URL into a file id. |\n\n## Pick a model\n\n1. Call `list_models` with the media type you need. Match the user's request to `tier` (`fast`, `standard`, `premium`) and cost. Use the `id` field, never the display name.\n2. Call `describe_model` before setting anything beyond `prompt`, `aspectRatio`, and `numImages`. Only send options the model lists.\n3. If the user names a model, find it in `list_models`. If it is not there, say so and offer the closest match.\n\nDefaults for `generate_image`: `aspectRatio` `1:1`, `numImages` 4 (range 1 to 8). Supported aspect ratios: `21:9`, `16:9`, `4:3`, `3:2`, `5:4`, `1:1`, `4:5`, `3:4`, `2:3`, `9:16`, limited to what the model supports. Ask for fewer images when the user wants one.\n\n## Use a style\n\nWhen the user asks for a look (watercolor, claymation, 35mm film, a named style), check the style library before writing the look into the prompt.\n\n1. Call `search_styles` with `query` describing the look. It returns the closest styles first, one line each, and the results view shows each style's example images. Read the note in the answer: it says how close the matches are.\n2. Pass the chosen `slug` as `style` to `quote_image_generation` and `generate_image`. The server adds the style's reference images and description, so the prompt describes only the subject.\n3. The model must take reference images. Check `describe_model` when unsure. Your own `referenceFileIds` still work alongside a style.\n4. When nothing fits, write the look into the prompt instead. Style search covers Batch Banana's library of styles, not the user's own work; `search_library` finds that.\n\n## Quote, then create\n\n1. Call the matching `quote_*` tool with the same fields you will send to the create tool.\n2. Tell the user the `creditCost` when the request is large (many images, a long video, an edit over many files) or when they asked about cost. For a small single request, go ahead.\n3. Call the create tool with:\n - a new `idempotencyKey` for each distinct request, for example a UUID. Reuse the same key only when retrying the exact same request after a network error or timeout; that returns the original job instead of charging again.\n - `expectedCreditCost` set to the quoted `creditCost`.\n - `projectId` when the user names a project (from `list_projects`).\n\nErrors from a create:\n- `PRICE_CHANGED`: the price moved since the quote. Quote again, tell the user the new cost, and create with a new key.\n- `IDEMPOTENCY_CONFLICT`: the key was used for a different request. Use a new key.\n- `INVALID_ARGUMENT`: read the message, fix the field (often an option the model does not support), and retry.\n- `RATE_LIMITED`: wait, then retry once with the same key.\n\n## Poll until the job finishes\n\nA create returns a job with `status` `pending` or `processing` and `pollAfterMs`.\n\n1. Wait `pollAfterMs`, then call `get_generation` with the job `id`.\n2. Repeat until `status` is `completed` or `failed`. If the response keeps saying `processing`, lengthen the wait between calls, up to about 15 seconds. Images usually finish within a minute. Videos can take several minutes.\n3. Tell the user the job is running rather than going silent during long waits.\n\nWhen `status` is `completed`, `outputs` holds one entry per image or video:\n- `url`: full resolution. Images are delivered as WebP.\n- `thumbnailUrl`: 384px preview, images only.\n- `source.url`: the original file exactly as the provider produced it.\n- `fileId`: use as `referenceFileIds`, `startFrameFileId`, or an `edit_image` `fileIds` entry.\n\nNever embed outputs with Markdown image syntax (``). Clients that support it already show them in the Batch Banana results view, so describe the result in a sentence instead. Elsewhere, share the URLs as plain links. Every output is also in the user's Batch Banana library.\n\n## Build on existing work\n\n- `search_library` with `query` (2 characters or more) searches prompts by relevance. Without `query` it lists the newest first. Each result is one job with its outputs, cost, model, and references.\n- Filter with `kind`, `model`, `operation`, `createdAfter` and `createdBefore`, `projectId`, or `mediaType`. Edits and imports have no prompt, so find them by `kind` or `operation`, not `query`. The date filters do not combine with `query`.\n- A page can come back short while `nextCursor` is set, especially with `model` or `operation` filters. Pass `nextCursor` back as `cursor` until it is null.\n- An output's `fileId` works as a reference image for generation or as a source for `edit_image`.\n- A result's `jobId` works with `get_generation` to see the whole batch it came from.\n- To use an image from the web, call `import_image` with its public `https` URL and an `idempotencyKey`, then use the returned `file.id`. Generation and edit tools take file ids, never URLs.\n\n## Edit images\n\n1. Get file ids from `search_library`, a previous job's `outputs`, or `import_image`.\n2. Call `list_edit_operations` and pick the operation. Check `requiresPrompt` and the reference image range. Call `describe_edit_operation` when you need its `params`.\n3. Quote with `quote_image_edit`. Many images cost the per-image price times the count.\n4. Call `edit_image` with `operation`, `fileIds`, any `prompt`, `params`, or `referenceFileIds`, a new `idempotencyKey`, and `expectedCreditCost`.\n5. Poll by `sourceArity`:\n - `each`: one job per image. Poll every id in `jobIds`.\n - `one` or `all`: one job, which may hold many outputs.\n6. `then` runs one follow-up operation on every output, for example remove the background, then make stickers. Poll a job of the first request until `followUp` appears, then poll each id in `followUp.jobIds`. If every job of the first request failed, there is no follow-up; stop polling.\n\n## Failures and refusals\n\n- A job with `status` `failed` carries `error.message`. Credits for a failed job are refunded automatically. Tell the user the job failed, give the reason, and say the credits were returned.\n- Model providers refuse prompts and images that break their content policies, such as sexual content. Batch Banana does not screen prompts before generation, so a refusal shows up as a failed job. Do not reword a refused request to get around the provider's policy.\n- Decline before calling any tool when the request is for sexual content, for a realistic image of a real private person without their consent, or for an image meant to deceive people into thinking it is real.\n\n## Out of credits\n\n`INSUFFICIENT_CREDITS` means the connected workspace does not have enough credits for the request. Tell the user how many credits the request needs (from the quote) and that the workspace is short. Suggest a cheaper option if one exists: fewer images, a `fast` tier model, a lower resolution, or a shorter video. If they want to add credits, point them to their account on batchbanana.com. Plans are described at https://batchbanana.com/#pricing. Do not push upgrades.\n\n## Sign-in errors\n\n`UNAUTHENTICATED` or `NOT_AUTHORIZED` means the connection is missing, expired, or was revoked in workspace settings. Ask the user to reconnect Batch Banana in their client. Do not ask for passwords or API keys.\n"
"---\nname: batch-banana\ndescription: Generate images and video, and edit images, with the Batch Banana MCP tools. Use when the user asks to create, edit, upscale, remove a background from, or find an image or video, asks for an image in a named look or style, or asks what a generation would cost.\n---\n\n# Batch Banana\n\nBatch Banana runs image generation, video generation, and image edits at third-party model providers and stores every output in the user's workspace library. Every create spends the connected workspace's credits. Quotes, catalog reads, and library reads are free.\n\n## Tools\n\n| Tool | Use |\n| --- | --- |\n| `list_models` | Image and video models with `tier`, `creditCost`, and `billingUnit` (`output` or `second`). Optional `mediaType`: `image` or `video`. |\n| `describe_model` | One model's options, resolution choices, and capabilities. Send every option under `options`, keyed by its `key`, including `options.resolution`. |\n| `list_edit_operations` | Edit operations with cost, `requiresPrompt`, reference image range, and `sourceArity`. |\n| `describe_edit_operation` | One operation's `params`. |\n| `quote_image_generation`, `quote_video_generation`, `quote_image_edit` | Price a request without charging. Returns `creditCost`, `pricingVersion`, `requestHash`. |\n| `generate_image`, `generate_video`, `edit_image` | Start a paid job. Returns a job. |\n| `get_generation` | Read a job's status and outputs. The only way to learn when a job finishes. |\n| `show_results` | Show chosen jobs (by id) in the results view, such as images made earlier in the conversation. |\n| `get_profile` | The connected account and workspace, so the client can label the connection. |\n| `search_styles` | Find a look in the Batch Banana style library by description, list the library by family, or read chosen styles in full. A style's `slug` goes in `generate_image`'s `style`. |\n| `search_library` | Find existing work, one result per job, by prompt, kind, model, edit operation, project, or date. Each output has a `fileId`, and each result has the `jobId` that made it. |\n| `list_projects` | Project ids for `projectId` on creates and on `search_library`. |\n| `get_file` | URLs, size, and dimensions of one file. |\n| `import_image` | Turn a public `https` image URL into a file id. |\n\n## Pick a model\n\n1. Call `list_models` with the media type you need. Match the user's request to `tier` (`fast`, `standard`, `premium`) and cost. Use the `id` field, never the display name.\n2. Call `describe_model` before setting anything beyond `prompt`, `aspectRatio`, and `numImages`. Only send options the model lists.\n3. If the user names a model, find it in `list_models`. If it is not there, say so and offer the closest match.\n\nDefaults for `generate_image`: `aspectRatio` `1:1`, `numImages` 4 (range 1 to 8). Supported aspect ratios: `21:9`, `16:9`, `4:3`, `3:2`, `5:4`, `1:1`, `4:5`, `3:4`, `2:3`, `9:16`, limited to what the model supports. Ask for fewer images when the user wants one.\n\n## Several different images\n\nWhen the user wants several different images, such as four concepts, variations in different styles, or one image per product, make one `generate_image` call with `prompt` as a list of prompts (up to 16), not one call per image. Quote the same list once with `quote_image_generation`. A list makes 1 image per prompt unless `numImages` says otherwise, up to 48 images in all. All prompts in one call share the model, aspect ratio and options. One call keeps every image in one results view; separate calls replace each other's view.\n\n## Use a style\n\nWhen the user asks for a look (watercolor, claymation, 35mm film, a named style), check the style library before writing the look into the prompt.\n\n1. Call `search_styles` with `query` describing the look. It returns the closest styles first, one line each, and the results view shows each style's example images. Read the note in the answer: it says how close the matches are.\n2. Pass the chosen `slug` as `style` to `quote_image_generation` and `generate_image`. The server adds the style's reference images and description, so the prompt describes only the subject.\n3. The model must take reference images. Check `describe_model` when unsure. Your own `referenceFileIds` still work alongside a style.\n4. When nothing fits, write the look into the prompt instead. Style search covers Batch Banana's library of styles, not the user's own work; `search_library` finds that.\n\n## Quote, then create\n\n1. Quote only when the user asks about cost, or before a video or a large request (many images, an edit over many files). Call the matching `quote_*` tool with the same fields you will send to the create tool, and tell the user the `creditCost`. For a small image request, skip the quote and create directly.\n3. Call the create tool with:\n - a new `idempotencyKey` for each distinct request, for example a UUID. Reuse the same key only when retrying the exact same request after a network error or timeout; that returns the original job instead of charging again.\n - `expectedCreditCost` set to the quoted `creditCost`.\n The create returns the first job plus `requestCreditCost`, the total charged for the whole request, and `jobIds` when it made several jobs. Report `requestCreditCost` as the cost.\n - `projectId` when the user names a project (from `list_projects`).\n\nErrors from a create:\n- `PRICE_CHANGED`: the price moved since the quote. Quote again, tell the user the new cost, and create with a new key.\n- `IDEMPOTENCY_CONFLICT`: the key was used for a different request. Use a new key.\n- `INVALID_ARGUMENT`: read the message, fix the field (often an option the model does not support), and retry.\n- `RATE_LIMITED`: wait, then retry once with the same key.\n\n## Poll until the job finishes\n\nA create returns a job with `status` `pending` or `processing` and `pollAfterMs`.\n\n1. Wait `pollAfterMs`, then call `get_generation` with the job `id`. When the create returned `jobIds`, poll each of them.\n2. Repeat until `status` is `completed` or `failed`. If the response keeps saying `processing`, lengthen the wait between calls, up to about 15 seconds. Images usually finish within a minute. Videos can take several minutes.\n3. Tell the user the job is running rather than going silent during long waits.\n\nWhen `status` is `completed`, `outputs` holds one entry per image or video:\n- `url`: full resolution. Images are delivered as WebP.\n- `thumbnailUrl`: 384px preview, images only.\n- `source.url`: the original file exactly as the provider produced it.\n- `fileId`: use as `referenceFileIds`, `startFrameFileId`, or an `edit_image` `fileIds` entry.\n\nNever embed outputs with Markdown image syntax (``), and never add images from other sources. Clients that support it already show them in the Batch Banana results view, so describe the result in a sentence instead. Elsewhere, share the URLs as plain links. Every output is also in the user's Batch Banana library.\n\nTo show work made earlier, find it with `search_library` or use the job ids you already have, then call `show_results` with those ids.\n\n## Build on existing work\n\n- `search_library` with `query` (2 characters or more) searches prompts by relevance. Without `query` it lists the newest first. Each result is one job with its outputs, cost, model, and references.\n- Filter with `kind`, `model`, `operation`, `createdAfter` and `createdBefore`, `projectId`, or `mediaType`. Edits and imports have no prompt, so find them by `kind` or `operation`, not `query`. The date filters do not combine with `query`.\n- A page can come back short while `nextCursor` is set, especially with `model` or `operation` filters. Pass `nextCursor` back as `cursor` until it is null.\n- An output's `fileId` works as a reference image for generation or as a source for `edit_image`.\n- A result's `jobId` works with `get_generation` to see the whole batch it came from.\n- To use an image from the web, call `import_image` with its public `https` URL and an `idempotencyKey`, then use the returned `file.id`. Generation and edit tools take file ids, never URLs.\n\n## Edit images\n\n1. Get file ids from `search_library`, a previous job's `outputs`, or `import_image`.\n2. Call `list_edit_operations` and pick the operation. Check `requiresPrompt` and the reference image range. Call `describe_edit_operation` when you need its `params`.\n3. Quote with `quote_image_edit`. Many images cost the per-image price times the count.\n4. Call `edit_image` with `operation`, `fileIds`, any `prompt`, `params`, or `referenceFileIds`, a new `idempotencyKey`, and `expectedCreditCost`.\n5. Poll by `sourceArity`:\n - `each`: one job per image. Poll every id in `jobIds`.\n - `one` or `all`: one job, which may hold many outputs.\n6. `then` runs one follow-up operation on every output, for example remove the background, then make stickers. Poll a job of the first request until `followUp` appears, then poll each id in `followUp.jobIds`. If every job of the first request failed, there is no follow-up; stop polling.\n\n## Failures and refusals\n\n- A job with `status` `failed` carries `error.message`. Credits for a failed job are refunded automatically. Tell the user the job failed, give the reason, and say the credits were returned.\n- Model providers refuse prompts and images that break their content policies, such as sexual content. Batch Banana does not screen prompts before generation, so a refusal shows up as a failed job. Do not reword a refused request to get around the provider's policy.\n- Decline before calling any tool when the request is for sexual content, for a realistic image of a real private person without their consent, or for an image meant to deceive people into thinking it is real.\n\n## Out of credits\n\nWhen a refusal carries a message for the user, relay that message as written, without the error code.\n\n`INSUFFICIENT_CREDITS` means the connected workspace does not have enough credits for the request. Tell the user how many credits the request needs (from the quote) and that the workspace is short. Suggest a cheaper option if one exists: fewer images, a `fast` tier model, a lower resolution, or a shorter video. Plans and prices are described at https://batchbanana.com/pricing. Do not push upgrades or name plans.\n\n`EMAIL_NOT_VERIFIED` means the account's email address isn't verified yet. Tell the user to open the verification link in the email from Batch Banana, then try the request again. Don't mention credits.\n\n## Sign-in errors\n\n`UNAUTHENTICATED` or `NOT_AUTHORIZED` means the connection is missing, expired, or was revoked in workspace settings. Ask the user to reconnect Batch Banana in their client. Do not ask for passwords or API keys.\n"
Full snapshot data
{
"description": "Generate images and video, and edit images, with the Batch Banana MCP tools. Use when the user asks to create, edit, upscale, remove a background from, or find an image or video, asks for an image in a named look or style, or asks what a generation would cost.",
"included_files": [],
"name": "batch-banana",
"skill_md_contents": "---\nname: batch-banana\ndescription: Generate images and video, and edit images, with the Batch Banana MCP tools. Use when the user asks to create, edit, upscale, remove a background from, or find an image or video, asks for an image in a named look or style, or asks what a generation would cost.\n---\n\n# Batch Banana\n\nBatch Banana runs image generation, video generation, and image edits at third-party model providers and stores every output in the user's workspace library. Every create spends the connected workspace's credits. Quotes, catalog reads, and library reads are free.\n\n## Tools\n\n| Tool | Use |\n| --- | --- |\n| `list_models` | Image and video models with `tier`, `creditCost`, and `billingUnit` (`output` or `second`). Optional `mediaType`: `image` or `video`. |\n| `describe_model` | One model's options, resolution choices, and capabilities. Send every option under `options`, keyed by its `key`, including `options.resolution`. |\n| `list_edit_operations` | Edit operations with cost, `requiresPrompt`, reference image range, and `sourceArity`. |\n| `describe_edit_operation` | One operation's `params`. |\n| `quote_image_generation`, `quote_video_generation`, `quote_image_edit` | Price a request without charging. Returns `creditCost`, `pricingVersion`, `requestHash`. |\n| `generate_image`, `generate_video`, `edit_image` | Start a paid job. Returns a job. |\n| `get_generation` | Read a job's status and outputs. The only way to learn when a job finishes. |\n| `show_results` | Show chosen jobs (by id) in the results view, such as images made earlier in the conversation. |\n| `get_profile` | The connected account and workspace, so the client can label the connection. |\n| `search_styles` | Find a look in the Batch Banana style library by description, list the library by family, or read chosen styles in full. A style's `slug` goes in `generate_image`'s `style`. |\n| `search_library` | Find existing work, one result per job, by prompt, kind, model, edit operation, project, or date. Each output has a `fileId`, and each result has the `jobId` that made it. |\n| `list_projects` | Project ids for `projectId` on creates and on `search_library`. |\n| `get_file` | URLs, size, and dimensions of one file. |\n| `import_image` | Turn a public `https` image URL into a file id. |\n\n## Pick a model\n\n1. Call `list_models` with the media type you need. Match the user's request to `tier` (`fast`, `standard`, `premium`) and cost. Use the `id` field, never the display name.\n2. Call `describe_model` before setting anything beyond `prompt`, `aspectRatio`, and `numImages`. Only send options the model lists.\n3. If the user names a model, find it in `list_models`. If it is not there, say so and offer the closest match.\n\nDefaults for `generate_image`: `aspectRatio` `1:1`, `numImages` 4 (range 1 to 8). Supported aspect ratios: `21:9`, `16:9`, `4:3`, `3:2`, `5:4`, `1:1`, `4:5`, `3:4`, `2:3`, `9:16`, limited to what the model supports. Ask for fewer images when the user wants one.\n\n## Several different images\n\nWhen the user wants several different images, such as four concepts, variations in different styles, or one image per product, make one `generate_image` call with `prompt` as a list of prompts (up to 16), not one call per image. Quote the same list once with `quote_image_generation`. A list makes 1 image per prompt unless `numImages` says otherwise, up to 48 images in all. All prompts in one call share the model, aspect ratio and options. One call keeps every image in one results view; separate calls replace each other's view.\n\n## Use a style\n\nWhen the user asks for a look (watercolor, claymation, 35mm film, a named style), check the style library before writing the look into the prompt.\n\n1. Call `search_styles` with `query` describing the look. It returns the closest styles first, one line each, and the results view shows each style's example images. Read the note in the answer: it says how close the matches are.\n2. Pass the chosen `slug` as `style` to `quote_image_generation` and `generate_image`. The server adds the style's reference images and description, so the prompt describes only the subject.\n3. The model must take reference images. Check `describe_model` when unsure. Your own `referenceFileIds` still work alongside a style.\n4. When nothing fits, write the look into the prompt instead. Style search covers Batch Banana's library of styles, not the user's own work; `search_library` finds that.\n\n## Quote, then create\n\n1. Quote only when the user asks about cost, or before a video or a large request (many images, an edit over many files). Call the matching `quote_*` tool with the same fields you will send to the create tool, and tell the user the `creditCost`. For a small image request, skip the quote and create directly.\n3. Call the create tool with:\n - a new `idempotencyKey` for each distinct request, for example a UUID. Reuse the same key only when retrying the exact same request after a network error or timeout; that returns the original job instead of charging again.\n - `expectedCreditCost` set to the quoted `creditCost`.\n The create returns the first job plus `requestCreditCost`, the total charged for the whole request, and `jobIds` when it made several jobs. Report `requestCreditCost` as the cost.\n - `projectId` when the user names a project (from `list_projects`).\n\nErrors from a create:\n- `PRICE_CHANGED`: the price moved since the quote. Quote again, tell the user the new cost, and create with a new key.\n- `IDEMPOTENCY_CONFLICT`: the key was used for a different request. Use a new key.\n- `INVALID_ARGUMENT`: read the message, fix the field (often an option the model does not support), and retry.\n- `RATE_LIMITED`: wait, then retry once with the same key.\n\n## Poll until the job finishes\n\nA create returns a job with `status` `pending` or `processing` and `pollAfterMs`.\n\n1. Wait `pollAfterMs`, then call `get_generation` with the job `id`. When the create returned `jobIds`, poll each of them.\n2. Repeat until `status` is `completed` or `failed`. If the response keeps saying `processing`, lengthen the wait between calls, up to about 15 seconds. Images usually finish within a minute. Videos can take several minutes.\n3. Tell the user the job is running rather than going silent during long waits.\n\nWhen `status` is `completed`, `outputs` holds one entry per image or video:\n- `url`: full resolution. Images are delivered as WebP.\n- `thumbnailUrl`: 384px preview, images only.\n- `source.url`: the original file exactly as the provider produced it.\n- `fileId`: use as `referenceFileIds`, `startFrameFileId`, or an `edit_image` `fileIds` entry.\n\nNever embed outputs with Markdown image syntax (``), and never add images from other sources. Clients that support it already show them in the Batch Banana results view, so describe the result in a sentence instead. Elsewhere, share the URLs as plain links. Every output is also in the user's Batch Banana library.\n\nTo show work made earlier, find it with `search_library` or use the job ids you already have, then call `show_results` with those ids.\n\n## Build on existing work\n\n- `search_library` with `query` (2 characters or more) searches prompts by relevance. Without `query` it lists the newest first. Each result is one job with its outputs, cost, model, and references.\n- Filter with `kind`, `model`, `operation`, `createdAfter` and `createdBefore`, `projectId`, or `mediaType`. Edits and imports have no prompt, so find them by `kind` or `operation`, not `query`. The date filters do not combine with `query`.\n- A page can come back short while `nextCursor` is set, especially with `model` or `operation` filters. Pass `nextCursor` back as `cursor` until it is null.\n- An output's `fileId` works as a reference image for generation or as a source for `edit_image`.\n- A result's `jobId` works with `get_generation` to see the whole batch it came from.\n- To use an image from the web, call `import_image` with its public `https` URL and an `idempotencyKey`, then use the returned `file.id`. Generation and edit tools take file ids, never URLs.\n\n## Edit images\n\n1. Get file ids from `search_library`, a previous job's `outputs`, or `import_image`.\n2. Call `list_edit_operations` and pick the operation. Check `requiresPrompt` and the reference image range. Call `describe_edit_operation` when you need its `params`.\n3. Quote with `quote_image_edit`. Many images cost the per-image price times the count.\n4. Call `edit_image` with `operation`, `fileIds`, any `prompt`, `params`, or `referenceFileIds`, a new `idempotencyKey`, and `expectedCreditCost`.\n5. Poll by `sourceArity`:\n - `each`: one job per image. Poll every id in `jobIds`.\n - `one` or `all`: one job, which may hold many outputs.\n6. `then` runs one follow-up operation on every output, for example remove the background, then make stickers. Poll a job of the first request until `followUp` appears, then poll each id in `followUp.jobIds`. If every job of the first request failed, there is no follow-up; stop polling.\n\n## Failures and refusals\n\n- A job with `status` `failed` carries `error.message`. Credits for a failed job are refunded automatically. Tell the user the job failed, give the reason, and say the credits were returned.\n- Model providers refuse prompts and images that break their content policies, such as sexual content. Batch Banana does not screen prompts before generation, so a refusal shows up as a failed job. Do not reword a refused request to get around the provider's policy.\n- Decline before calling any tool when the request is for sexual content, for a realistic image of a real private person without their consent, or for an image meant to deceive people into thinking it is real.\n\n## Out of credits\n\nWhen a refusal carries a message for the user, relay that message as written, without the error code.\n\n`INSUFFICIENT_CREDITS` means the connected workspace does not have enough credits for the request. Tell the user how many credits the request needs (from the quote) and that the workspace is short. Suggest a cheaper option if one exists: fewer images, a `fast` tier model, a lower resolution, or a shorter video. Plans and prices are described at https://batchbanana.com/pricing. Do not push upgrades or name plans.\n\n`EMAIL_NOT_VERIFIED` means the account's email address isn't verified yet. Tell the user to open the verification link in the email from Batch Banana, then try the request again. Don't mention credits.\n\n## Sign-in errors\n\n`UNAUTHENTICATED` or `NOT_AUTHORIZED` means the connection is missing, expired, or was revoked in workspace settings. Ask the user to reconnect Batch Banana in their client. Do not ask for passwords or API keys.\n"
}SHA-256 of public snapshot: 0fd7cff69f2dfea564daf82e8f3dece89cca73023e074f022ba973baa914eef0