- Brand
- Pollo AI
- Category
- Content & Design
- Primary Subcategory
- Multi-Modal Generative Media Platforms
Integration details
Description
Pollo AI helps users find supported models and voices, generate images, videos, speech, and music, edit existing media, upload generation inputs, and check generation progress from ChatGPT.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Multi-Modal Generative Media Platforms
- Secondary Subcategories
- None listed
- Brand
- Pollo AI
- Access
- Account required
- First tracked
- 2026-09-05
- Tool count
- 58
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Pollo AI
Get updates when Pollo AI’s Discoverability Score or category rank changes.
Competing in ChatGPT Multi-Modal Generative Media Platforms
View Category58 tools agents can invoke
Re-frame an existing video to a different aspect ratio, keeping the subject in frame — the canvas is re-cropped or extended rather than the video being letterboxed. Use it for repurposing a clip between landscape, portrait and square. Default (and the only model today): brand `pollo-ai`, model `resizer`. `input.video` is required and must be **10 seconds or shorter** — longer clips are rejected up front, so trim the source to the segment worth re-framing before submitting. `input.aspectRatio` is the target shape — `16:9` (default), `9:16`, `1:1`, `4:3`, `3:4`, `21:9` or `9:21`. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
reframe_video
Deprecated alias of `reframe_video` — call `reframe_video` instead. Re-frame an existing video to a different aspect ratio, keeping the subject in frame — the canvas is re-cropped or extended rather than the video being letterboxed. Use it for repurposing a clip between landscape, portrait and square. Default (and the only model today): brand `pollo-ai`, model `resizer`. `input.video` is required and must be **10 seconds or shorter** — longer clips are rejected up front, so trim the source to the segment worth re-framing before submitting. `input.aspectRatio` is the target shape — `16:9` (default), `9:16`, `1:1`, `4:3`, `3:4`, `21:9` or `9:21`. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_reframe_video
Create a new voice from a recording of someone's voice, so generate_audio can speak in it. Pass `cloneAudioUrl`, a public or host-authorized HTTPS URL of the reference recording (MP3, M4A or WAV, 10 seconds to 5 minutes, up to 20 MB) — if the user has a local recording, call upload_widget with `mediaType: "audio"` first and use the returned URL. `voiceName` is the label the user will see in their voice library. Cloning costs credits and runs in the background: it does NOT return a generation taskId, so do not call any status tool for it. Instead poll list_voices with `source: "personal"`: the new voice has status `disable` while it is still processing (usually a few minutes), becomes `enable` once usable, or `failed` with a `failMsg` explaining why; a clone still processing after about an hour is marked failed. Only clone a voice the user has the right to use; do not clone a public figure or a third party from a recording the user does not own.
clone_voice
Deprecated alias of `clone_voice` — call `clone_voice` instead. Create a new voice from a recording of someone's voice, so generate_audio can speak in it. Pass `cloneAudioUrl`, a public or host-authorized HTTPS URL of the reference recording (MP3, M4A or WAV, 10 seconds to 5 minutes, up to 20 MB) — if the user has a local recording, call upload_widget with `mediaType: "audio"` first and use the returned URL. `voiceName` is the label the user will see in their voice library. Cloning costs credits and runs in the background: it does NOT return a generation taskId, so do not call any status tool for it. Instead poll list_voices with `source: "personal"`: the new voice has status `disable` while it is still processing (usually a few minutes), becomes `enable` once usable, or `failed` with a `failMsg` explaining why; a clone still processing after about an hour is marked failed. Only clone a voice the user has the right to use; do not clone a public figure or a third party from a recording the user does not own.
pollo_clone_voice
Animate a still character image so it copies the movement of a reference video (motion transfer / action imitation). No platform default: call list_models with `{ type: "motion" }` and pick one (e.g. brand `runway`, model `runway-act-two`). `input.image` (the character to animate) and `input.video` (the motion to imitate) are required on every model. Optional extras differ: `runway/runway-act-two` takes `input.aspectRatio`, the kling and wan models take `input.mode` (`std`/`pro`) and kling also takes `input.prompt`. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
motion_control
Deprecated alias of `motion_control` — call `motion_control` instead. Animate a still character image so it copies the movement of a reference video (motion transfer / action imitation). No platform default: call list_models with `{ type: "motion" }` and pick one (e.g. brand `runway`, model `runway-act-two`). `input.image` (the character to animate) and `input.video` (the motion to imitate) are required on every model. Optional extras differ: `runway/runway-act-two` takes `input.aspectRatio`, the kling and wan models take `input.mode` (`std`/`pro`) and kling also takes `input.prompt`. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_motion_control
Change what is in an existing video from a text instruction — replace or restyle objects, alter the scene, change the look. Use it when the content should change but the clip stays the same length. Several models offer it and there is no platform default: call list_models with `{ type: "video-edit" }` and pick one (e.g. brand `runway`, model `runway-gen-4-aleph`). `input.video` and `input.prompt` are required on every model; some also accept `input.images` as visual references, and several take `input.resolution` / `input.aspectRatio` / `input.duration` — check the model schema for those. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
edit_video
Deprecated alias of `edit_video` — call `edit_video` instead. Change what is in an existing video from a text instruction — replace or restyle objects, alter the scene, change the look. Use it when the content should change but the clip stays the same length. Several models offer it and there is no platform default: call list_models with `{ type: "video-edit" }` and pick one (e.g. brand `runway`, model `runway-gen-4-aleph`). `input.video` and `input.prompt` are required on every model; some also accept `input.images` as visual references, and several take `input.resolution` / `input.aspectRatio` / `input.duration` — check the model schema for those. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_edit_video
Erase subtitles that are burned into the video frames (hard subs) and reconstruct what was behind them. Use it when the text is part of the picture, not a separate subtitle track. Default (and the only model today): brand `pollo-ai`, model `pollo-subtitle-remover`. `input.video` is required. `input.language` is the burned-in subtitle language to erase — `all` (default, covers mixed Chinese/English), `en`, `zh`, `ja`, `ko`, `ar`; it is ignored when `tier` is `advanced`, which always processes every language. `input.tier` is `standard` (default) or `advanced`: `advanced` reconstructs the covered area far more aggressively and costs **substantially** more per 30 seconds, so always run estimate_generation_cost before submitting it. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
remove_video_subtitles
Deprecated alias of `remove_video_subtitles` — call `remove_video_subtitles` instead. Erase subtitles that are burned into the video frames (hard subs) and reconstruct what was behind them. Use it when the text is part of the picture, not a separate subtitle track. Default (and the only model today): brand `pollo-ai`, model `pollo-subtitle-remover`. `input.video` is required. `input.language` is the burned-in subtitle language to erase — `all` (default, covers mixed Chinese/English), `en`, `zh`, `ja`, `ko`, `ar`; it is ignored when `tier` is `advanced`, which always processes every language. `input.tier` is `standard` (default) or `advanced`: `advanced` reconstructs the covered area far more aggressively and costs **substantially** more per 30 seconds, so always run estimate_generation_cost before submitting it. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_remove_video_subtitles
Estimate the generation credits required for the requested output. Returns credit units only and does not submit a generation task.
estimate_generation_cost
Deprecated alias of `estimate_generation_cost` — call `estimate_generation_cost` instead. Estimate the generation credits required for the requested output. Returns credit units only and does not submit a generation task.
pollo_estimate_generation_cost
Make an existing video longer by continuing it. Use it when the user wants more of the same shot, not a different edit of it. No platform default: call list_models with `{ type: "video-extend" }` and pick one. For a video the user supplies, prefer a model that takes a source URL (e.g. brand `pollo-ai`, model `pollo-v2-extender`); `openai`/`sora-2` can only continue a video previously generated on Pollo. Input differs by model — most take a source `input.video` URL and **require `input.resolution`** (`540p`/`720p`/`1080p`); `openai`/`sora-2` instead requires `input.generationId` (a previous Pollo generation) plus `input.prompt`. `input.prompt` describes what happens next (required only on sora) and `input.duration` sets the added length. Check the model schema before composing — omitting a required `resolution` is the most common failure here. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
extend_video
Deprecated alias of `extend_video` — call `extend_video` instead. Make an existing video longer by continuing it. Use it when the user wants more of the same shot, not a different edit of it. No platform default: call list_models with `{ type: "video-extend" }` and pick one. For a video the user supplies, prefer a model that takes a source URL (e.g. brand `pollo-ai`, model `pollo-v2-extender`); `openai`/`sora-2` can only continue a video previously generated on Pollo. Input differs by model — most take a source `input.video` URL and **require `input.resolution`** (`540p`/`720p`/`1080p`); `openai`/`sora-2` instead requires `input.generationId` (a previous Pollo generation) plus `input.prompt`. `input.prompt` describes what happens next (required only on sora) and `input.duration` sets the added length. Check the model schema before composing — omitting a required `resolution` is the most common failure here. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_extend_video
Generate a video. Each successful call submits a new generation task and consumes generation credits. Unless the user names or asks to compare models, use the default brand `bytedance` and model `seedance-2-0` directly; it covers text-to-video, start/end-frame image-to-video, multimodal references, 4-15 second output, and resolutions up to 4K. Call list_models with the selected model and capability type when the user selects another model, provides reference media, or you need its fields or constraints; use type `text2video`, `image2video`, or `ref2video`. `brand`, `model`, and `numOutputs` are top-level tool arguments; generation parameters go inside `input`. For default text-to-video, `input.prompt` is required, while `input.duration` (default `5`), `input.resolution` (default `480p`), `input.aspectRatio` (default `16:9`), and `input.generateAudio` (default `false`) are optional. For image-to-video, put the start-frame URL in `input.image` and an optional end-frame URL in `input.imageTail`; use the listed fields and constraints before constructing `input.refs` for reference-to-video. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each call submits one independent generation task. For several generations at once — different prompts, different inputs, or different models — call generate_video_batch once instead of calling this tool repeatedly: it submits up to 12 tasks together and returns a single card showing them side by side. numOutputs only creates multiple outputs of one identical input; it cannot vary the prompt or the model. Videos take a few minutes. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_video
Deprecated alias of `generate_video` — call `generate_video` instead. Generate a video. Each successful call submits a new generation task and consumes generation credits. Unless the user names or asks to compare models, use the default brand `bytedance` and model `seedance-2-0` directly; it covers text-to-video, start/end-frame image-to-video, multimodal references, 4-15 second output, and resolutions up to 4K. Call list_models with the selected model and capability type when the user selects another model, provides reference media, or you need its fields or constraints; use type `text2video`, `image2video`, or `ref2video`. `brand`, `model`, and `numOutputs` are top-level tool arguments; generation parameters go inside `input`. For default text-to-video, `input.prompt` is required, while `input.duration` (default `5`), `input.resolution` (default `480p`), `input.aspectRatio` (default `16:9`), and `input.generateAudio` (default `false`) are optional. For image-to-video, put the start-frame URL in `input.image` and an optional end-frame URL in `input.imageTail`; use the listed fields and constraints before constructing `input.refs` for reference-to-video. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each call submits one independent generation task. For several generations at once — different prompts, different inputs, or different models — call generate_video_batch once instead of calling this tool repeatedly: it submits up to 12 tasks together and returns a single card showing them side by side. numOutputs only creates multiple outputs of one identical input; it cannot vary the prompt or the model. Videos take a few minutes. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_video
Generate an image. Each successful call submits a new generation task and consumes generation credits. Unless the user names or asks to compare models, use the default brand `openai` and model `gpt-image-2-5` directly; it covers general image generation, text rendering, reference-image editing, and resolutions up to 4K. Call list_models with the selected model and capability type only when you need its fields or constraints; use type `text2image` or `image2image`. `brand`, `model`, and `numOutputs` are top-level tool arguments; generation parameters go inside `input`. For the default model, `input.prompt` is required, while `input.images` accepts up to 16 HTTPS image URLs and `input.aspectRatio` (default `auto`), `input.resolution` (default `1K`, allowed `1K`/`2K`/`4K`), and `input.quality` (default `low`) are optional. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each call submits one independent generation task. For several generations at once — different prompts, different inputs, or different models — call generate_image_batch once instead of calling this tool repeatedly: it submits up to 12 tasks together and returns a single card showing them side by side. numOutputs only creates multiple outputs of one identical input; it cannot vary the prompt or the model. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_image
Deprecated alias of `generate_image` — call `generate_image` instead. Generate an image. Each successful call submits a new generation task and consumes generation credits. Unless the user names or asks to compare models, use the default brand `openai` and model `gpt-image-2-5` directly; it covers general image generation, text rendering, reference-image editing, and resolutions up to 4K. Call list_models with the selected model and capability type only when you need its fields or constraints; use type `text2image` or `image2image`. `brand`, `model`, and `numOutputs` are top-level tool arguments; generation parameters go inside `input`. For the default model, `input.prompt` is required, while `input.images` accepts up to 16 HTTPS image URLs and `input.aspectRatio` (default `auto`), `input.resolution` (default `1K`, allowed `1K`/`2K`/`4K`), and `input.quality` (default `low`) are optional. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each call submits one independent generation task. For several generations at once — different prompts, different inputs, or different models — call generate_image_batch once instead of calling this tool repeatedly: it submits up to 12 tasks together and returns a single card showing them side by side. numOutputs only creates multiple outputs of one identical input; it cannot vary the prompt or the model. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_image
Submit 1-12 independent image generations in one call and get a single card holding all of them, ordered by index. Each jobs[] item takes the same brand, model and input as generate_image and creates exactly one task — add another item for another generation, there is no per-item output count. Give every item a stable index (the scene or variant number): results keep it and the card orders by it. For model selection, defaults and per-model request schemas, follow generate_image — the rules are identical. Credits are preflighted for the whole batch: if the balance cannot cover the sum, nothing is submitted. Use generate_image for a single generation. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits the whole batch and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_image_batch
Deprecated alias of `generate_image_batch` — call `generate_image_batch` instead. Submit 1-12 independent image generations in one call and get a single card holding all of them, ordered by index. Each jobs[] item takes the same brand, model and input as generate_image and creates exactly one task — add another item for another generation, there is no per-item output count. Give every item a stable index (the scene or variant number): results keep it and the card orders by it. For model selection, defaults and per-model request schemas, follow generate_image — the rules are identical. Credits are preflighted for the whole batch: if the balance cannot cover the sum, nothing is submitted. Use generate_image for a single generation. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits the whole batch and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_image_batch
Compose an original song or instrumental track from text. Unless the user names another version, use brand `suno`, model `suno-v5-5` (`suno-v5` and `suno-v4-5plus` are the alternatives; only `suno-v5-5` accepts `input.duration`). Every call produces **two** songs from the same request and the result card shows both; there is no numOutputs. Two modes, chosen by which fields are present. Description mode: only `input.prompt` (required; max 3000 characters in this mode) describing the music, e.g. "warm lo-fi hip hop, rainy night, mellow piano". Lyrics mode: `input.prompt` holds the lyrics themselves (max 5000 characters) **and** you pass both `input.style` (genre / mood / vocal, max 1000) and `input.title` (max 80) — the two must be given together, giving only one is rejected. `input.instrumental: true` drops vocals; `input.negativePrompt` excludes styles; `input.vocalGender` is `m` or `f` (best effort). `input.duration` (10-360 seconds) works only on `suno-v5-5` in lyrics mode. The 0-1 fine-tuning numbers `input.styleWeight`, `input.weirdnessConstraint` and `input.audioWeight` should be left out unless the user asks. For spoken narration use generate_audio instead. `brand` and `model` are top-level tool arguments; song parameters go inside `input`. Call list_models with `{ model, type: "text2music" }` for the exact schema of another version. Before submitting, call account_status and estimate_generation_cost with `type: "text2music"` and the same brand, model and input; submit only when credit.availableCredits is at least discountCost — music is billed per song and the estimate already covers both songs. Each successful call submits one generation task and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_music
Deprecated alias of `generate_music` — call `generate_music` instead. Compose an original song or instrumental track from text. Unless the user names another version, use brand `suno`, model `suno-v5-5` (`suno-v5` and `suno-v4-5plus` are the alternatives; only `suno-v5-5` accepts `input.duration`). Every call produces **two** songs from the same request and the result card shows both; there is no numOutputs. Two modes, chosen by which fields are present. Description mode: only `input.prompt` (required; max 3000 characters in this mode) describing the music, e.g. "warm lo-fi hip hop, rainy night, mellow piano". Lyrics mode: `input.prompt` holds the lyrics themselves (max 5000 characters) **and** you pass both `input.style` (genre / mood / vocal, max 1000) and `input.title` (max 80) — the two must be given together, giving only one is rejected. `input.instrumental: true` drops vocals; `input.negativePrompt` excludes styles; `input.vocalGender` is `m` or `f` (best effort). `input.duration` (10-360 seconds) works only on `suno-v5-5` in lyrics mode. The 0-1 fine-tuning numbers `input.styleWeight`, `input.weirdnessConstraint` and `input.audioWeight` should be left out unless the user asks. For spoken narration use generate_audio instead. `brand` and `model` are top-level tool arguments; song parameters go inside `input`. Call list_models with `{ model, type: "text2music" }` for the exact schema of another version. Before submitting, call account_status and estimate_generation_cost with `type: "text2music"` and the same brand, model and input; submit only when credit.availableCredits is at least discountCost — music is billed per song and the estimate already covers both songs. Each successful call submits one generation task and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_music
Turn text into spoken audio. Two capabilities, pick with `capability`: - `text2speech` (default) — speak the text in a catalog voice. Default brand `minimax`, model `speech-2-8-hd`, which (like `elevenlabs`/`eleven-v3`) **requires `input.voiceId`**: call list_voices first and pass one of its `voiceId` values — never invent a voice id. Note `bytedance`/`seed-audio-1-0` is the exception: on text2speech it takes reference recordings in `input.voiceRefs` and has no `voiceId` field at all, so passing one there is dropped. - `ref2audio` — clone the delivery from a short reference recording instead of a catalog voice: put the recording URL(s) in `input.voiceRefs` (up to 3; WAV/MP3/PCM/OGG, max 10 MB and 30 seconds each). `voiceRefs` is optional in the schema, but omitting it makes ref2audio pointless — it then just reads the text in the model's own default delivery. If the user has a local recording, call upload_widget with `mediaType: "audio"` first. Only brand `bytedance`, model `seed-audio-1-0` offers it today. For a reusable voice the user can pick again later, prefer clone_voice + text2speech instead. Only use recordings of a voice the user has the right to use; do not imitate a public figure or a third party from a recording the user does not own. `capability`, `brand` and `model` are top-level tool arguments; generation parameters go inside `input`, where `input.prompt` (the script to speak) is required. Call list_models with `{ model, type: "<capability>" }` when the user selects another model or you need its exact request schema, prompt length limit or option ranges — the limit differs per model. Before submitting, call account_status and estimate_generation_cost with `type` set to the same capability and the same brand, model and input; submit only when credit.availableCredits is at least discountCost — audio is billed per character, so a long script costs proportionally more. For a song or instrumental music rather than spoken narration, use generate_music instead. Each successful call submits one generation task and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_audio
Deprecated alias of `generate_audio` — call `generate_audio` instead. Turn text into spoken audio. Two capabilities, pick with `capability`: - `text2speech` (default) — speak the text in a catalog voice. Default brand `minimax`, model `speech-2-8-hd`, which (like `elevenlabs`/`eleven-v3`) **requires `input.voiceId`**: call list_voices first and pass one of its `voiceId` values — never invent a voice id. Note `bytedance`/`seed-audio-1-0` is the exception: on text2speech it takes reference recordings in `input.voiceRefs` and has no `voiceId` field at all, so passing one there is dropped. - `ref2audio` — clone the delivery from a short reference recording instead of a catalog voice: put the recording URL(s) in `input.voiceRefs` (up to 3; WAV/MP3/PCM/OGG, max 10 MB and 30 seconds each). `voiceRefs` is optional in the schema, but omitting it makes ref2audio pointless — it then just reads the text in the model's own default delivery. If the user has a local recording, call upload_widget with `mediaType: "audio"` first. Only brand `bytedance`, model `seed-audio-1-0` offers it today. For a reusable voice the user can pick again later, prefer clone_voice + text2speech instead. Only use recordings of a voice the user has the right to use; do not imitate a public figure or a third party from a recording the user does not own. `capability`, `brand` and `model` are top-level tool arguments; generation parameters go inside `input`, where `input.prompt` (the script to speak) is required. Call list_models with `{ model, type: "<capability>" }` when the user selects another model or you need its exact request schema, prompt length limit or option ranges — the limit differs per model. Before submitting, call account_status and estimate_generation_cost with `type` set to the same capability and the same brand, model and input; submit only when credit.availableCredits is at least discountCost — audio is billed per character, so a long script costs proportionally more. For a song or instrumental music rather than spoken narration, use generate_music instead. Each successful call submits one generation task and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_audio
Submit 1-12 independent video generations in one call and get a single card holding all of them, ordered by index. Each jobs[] item takes the same brand, model and input as generate_video and creates exactly one task — add another item for another generation, there is no per-item output count. Give every item a stable index (the scene or variant number): results keep it and the card orders by it. For model selection, defaults and per-model request schemas, follow generate_video — the rules are identical. Credits are preflighted for the whole batch: if the balance cannot cover the sum, nothing is submitted. Use generate_video for a single generation. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits the whole batch and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
generate_video_batch
Deprecated alias of `generate_video_batch` — call `generate_video_batch` instead. Submit 1-12 independent video generations in one call and get a single card holding all of them, ordered by index. Each jobs[] item takes the same brand, model and input as generate_video and creates exactly one task — add another item for another generation, there is no per-item output count. Give every item a stable index (the scene or variant number): results keep it and the card orders by it. For model selection, defaults and per-model request schemas, follow generate_video — the rules are identical. Credits are preflighted for the whole batch: if the balance cannot cover the sum, nothing is submitted. Use generate_video for a single generation. Image inputs must be HTTPS URLs. For a ChatGPT attachment, call upload_attachment first and use its accessURL as the image input. Keep upload_widget as the interactive fallback. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits the whole batch and consumes generation credits. If current entitlements are insufficient, explain only that the generation is unavailable.
pollo_generate_video_batch
Get the available generation credit balance and current subscription entitlements as JSON (data only — renders no UI).
account_status
Deprecated alias of `account_status` — call `account_status` instead. Get the available generation credit balance and current subscription entitlements as JSON (data only — renders no UI).
pollo_account_status
Check generation status (data only — renders no UI) with the `taskId` returned by any generate/edit tool, or a whole batch in one call with `taskIds` (results come back in `tasks[]`, one entry per id). On MCP-Apps hosts you normally do NOT need to call this: the task-status UI polls it itself and updates in place.
get_generation_status
Deprecated alias of `get_generation_status` — call `get_generation_status` instead. Check generation status (data only — renders no UI) with the `taskId` returned by any generate/edit tool, or a whole batch in one call with `taskIds` (results come back in `tasks[]`, one entry per id). On MCP-Apps hosts you normally do NOT need to call this: the task-status UI polls it itself and updates in place.
pollo_get_generation_status
List the supported Pollo creation commands and their presets. `kind: "skill"` commands carry a full creation workflow; `kind: "router"` commands (/story-video, /video-ad, /real-estate, /ugc-video) pick one of the skills listed in `routesTo`. Use when the user wants to browse creation workflows or their intent does not clearly match one command.
list_creation_commands
Deprecated alias of `list_creation_commands` — call `list_creation_commands` instead. List the supported Pollo creation commands and their presets. `kind: "skill"` commands carry a full creation workflow; `kind: "router"` commands (/story-video, /video-ad, /real-estate, /ugc-video) pick one of the skills listed in `routesTo`. Use when the user wants to browse creation workflows or their intent does not clearly match one command.
pollo_list_creation_commands
List Pollo models available for generation. Each row contains the brand, model, capability type, accepted fields, and constraints. Filter by capability type and/or model alias.
list_models
Deprecated alias of `list_models` — call `list_models` instead. List Pollo models available for generation. Each row contains the brand, model, capability type, accepted fields, and constraints. Filter by capability type and/or model alias.
pollo_list_models
List the voices available for generate_audio. Speech generation requires a real voice id — always call this first and pass one of the returned `voiceId` values; never invent, guess or reuse a voice id from memory. Pass `source: 'official'` (default) for the platform voice library, optionally narrowed with language/gender/age/voiceStyle/accent, or `source: 'personal'` for voices this user cloned themselves. Personal voices carry a `status`: `disable` means the clone is still processing (not yet usable — do not treat it as switched off), `enable` means ready to use, `failed` means the clone did not succeed and `failMsg` says why (a clone still not ready after about an hour is marked failed). Only `enable` voices can be passed to generate_audio. The two sources paginate separately, so check both when the user does not say which they want. Use `sampleAudio` to let the user preview a voice before generating.
list_voices
Deprecated alias of `list_voices` — call `list_voices` instead. List the voices available for generate_audio. Speech generation requires a real voice id — always call this first and pass one of the returned `voiceId` values; never invent, guess or reuse a voice id from memory. Pass `source: 'official'` (default) for the platform voice library, optionally narrowed with language/gender/age/voiceStyle/accent, or `source: 'personal'` for voices this user cloned themselves. Personal voices carry a `status`: `disable` means the clone is still processing (not yet usable — do not treat it as switched off), `enable` means ready to use, `failed` means the clone did not succeed and `failMsg` says why (a clone still not ready after about an hour is marked failed). Only `enable` voices can be passed to generate_audio. The two sources paginate separately, so check both when the user does not say which they want. Use `sampleAudio` to let the user preview a voice before generating.
pollo_list_voices
Load the matching Pollo creation workflow before planning, explaining or producing any multi-shot video — a game trailer or game PV, a product or brand ad, an ad remake, a brand film (TVC), a story video or short film, a short drama, or a product showcase video. Follow the returned markdown instead of planning from scratch with the generation tools, even if the user never named a command. Matches: an original product, brand, service or property ad, incl. UGC, try-on, unboxing, before-and-after, tutorial → `/ad-video-creation`; cloning or remaking a reference ad for the user's product → `/ad-video-clone`; placing a product or try-on image into a catalog style and animating it → `/product-showcase-video`; a multi-scene story video, short film or animated story → `/long-video-creation`; a brand commercial film (TVC) of 30 seconds or less → `/tvc-video-creation`; a game trailer, game PV or gameplay-style concept video → `/game-concept-pv-producer`; a vertical short drama or microdrama → `/short-drama-creator`; a story-driven product microdrama or shoppable short → `/product-microdrama-video`. If none clearly fits, call list_creation_commands. A skill command returns its SKILL.md plus `files`, the reference files it links to; read one with `{ command, file: "references/<name>.md" }` when the skill tells you to. A router command returns which skill command to load next.
get_creation_command
Deprecated alias of `get_creation_command` — call `get_creation_command` instead. Load the matching Pollo creation workflow before planning, explaining or producing any multi-shot video — a game trailer or game PV, a product or brand ad, an ad remake, a brand film (TVC), a story video or short film, a short drama, or a product showcase video. Follow the returned markdown instead of planning from scratch with the generation tools, even if the user never named a command. Matches: an original product, brand, service or property ad, incl. UGC, try-on, unboxing, before-and-after, tutorial → `/ad-video-creation`; cloning or remaking a reference ad for the user's product → `/ad-video-clone`; placing a product or try-on image into a catalog style and animating it → `/product-showcase-video`; a multi-scene story video, short film or animated story → `/long-video-creation`; a brand commercial film (TVC) of 30 seconds or less → `/tvc-video-creation`; a game trailer, game PV or gameplay-style concept video → `/game-concept-pv-producer`; a vertical short drama or microdrama → `/short-drama-creator`; a story-driven product microdrama or shoppable short → `/product-microdrama-video`. If none clearly fits, call list_creation_commands. A skill command returns its SKILL.md plus `files`, the reference files it links to; read one with `{ command, file: "references/<name>.md" }` when the skill tells you to. A router command returns which skill command to load next.
pollo_get_creation_command
Open an interactive uploader UI so the user can upload local files and get public HTTPS URLs back. Pass `mediaType` for what the next tool needs: `image` (default) for generation image inputs, `video` for the video editing tools (upscale_video, edit_video, …), `audio` for a voice-cloning reference. Accepted formats and the per-file size cap follow the server guardrails for that media type and are shown in the card; they are not configurable. Pass `maxFiles` to cap how many files the user may upload (e.g. a model that takes a single reference image → maxFiles: 1); video and audio default to 1, images to 9. The user can drop a file from the list before confirming. When they finish and click Continue, the uploader posts the resulting URL(s) into the chat as a user message. Treat that message as file delivery, not as a request to generate: do not call any generation or editing tool from it alone. Tell the user what you received, and if they had already said what they want done, restate it in one line and wait for their go-ahead; if they have not, ask what they want before generating anything. Use this whenever the user wants to work from a local file that is not attached to the conversation — this remote server cannot read local files, so a plain HTTPS URL or this uploader is required. For an image attached to the conversation, call upload_attachment instead. After calling it, just wait for the user to confirm the upload; do not poll or call other tools.
upload_widget
Deprecated alias of `upload_widget` — call `upload_widget` instead. Open an interactive uploader UI so the user can upload local files and get public HTTPS URLs back. Pass `mediaType` for what the next tool needs: `image` (default) for generation image inputs, `video` for the video editing tools (upscale_video, edit_video, …), `audio` for a voice-cloning reference. Accepted formats and the per-file size cap follow the server guardrails for that media type and are shown in the card; they are not configurable. Pass `maxFiles` to cap how many files the user may upload (e.g. a model that takes a single reference image → maxFiles: 1); video and audio default to 1, images to 9. The user can drop a file from the list before confirming. When they finish and click Continue, the uploader posts the resulting URL(s) into the chat as a user message. Treat that message as file delivery, not as a request to generate: do not call any generation or editing tool from it alone. Tell the user what you received, and if they had already said what they want done, restate it in one line and wait for their go-ahead; if they have not, ask what they want before generating anything. Use this whenever the user wants to work from a local file that is not attached to the conversation — this remote server cannot read local files, so a plain HTTPS URL or this uploader is required. For an image attached to the conversation, call upload_attachment instead. After calling it, just wait for the user to confirm the upload; do not poll or call other tools.
pollo_upload_widget
Cut the subject out of a video, leaving a transparent or keyable background. Default (and the only model today): brand `pollo-ai`, model `pollo-video-bg-remover`. `input.video` is required. `input.outputFormat` is `mov` (default — widely supported by editors) or `webm` (carries real alpha transparency). Pick `webm` when the user needs transparency downstream. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
remove_video_background
Deprecated alias of `remove_video_background` — call `remove_video_background` instead. Cut the subject out of a video, leaving a transparent or keyable background. Default (and the only model today): brand `pollo-ai`, model `pollo-video-bg-remover`. `input.video` is required. `input.outputFormat` is `mov` (default — widely supported by editors) or `webm` (carries real alpha transparency). Pick `webm` when the user needs transparency downstream. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_remove_video_background
Cut the subject out of a still image, leaving a transparent or solid-colour background. Default (and the only model today): brand `pollo-ai`, model `pollo-image-bg-remover`. `input.image` is required. `input.backgroundColor` optionally fills the removed background with a solid colour, as a 6-digit hex string **without** the leading `#` (e.g. `FFFFFF`); omit it to get real transparency. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
remove_image_background
Deprecated alias of `remove_image_background` — call `remove_image_background` instead. Cut the subject out of a still image, leaving a transparent or solid-colour background. Default (and the only model today): brand `pollo-ai`, model `pollo-image-bg-remover`. `input.image` is required. `input.backgroundColor` optionally fills the removed background with a solid colour, as a 6-digit hex string **without** the leading `#` (e.g. `FFFFFF`); omit it to get real transparency. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_remove_image_background
Validate and display the generation task owned by the current user. The initial result includes status, input, and prompt; unfinished tasks continue updating in the widget until every output succeeds or fails.
task_status
Deprecated alias of `task_status` — call `task_status` instead. Validate and display the generation task owned by the current user. The initial result includes status, input, and prompt; unfinished tasks continue updating in the widget until every output succeeds or fails.
pollo_task_status
Replace the face in an existing video with a face from a still image. Only swap faces the user has the right to use — do not swap in a public figure or a third party's face. Default: brand `remaker`, model `remaker`. `input.video` (whose face gets replaced) and `input.faceImage` (the new face) are required; `input.faceEnhance` is an optional boolean. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
swap_face
Deprecated alias of `swap_face` — call `swap_face` instead. Replace the face in an existing video with a face from a still image. Only swap faces the user has the right to use — do not swap in a public figure or a third party's face. Default: brand `remaker`, model `remaker`. `input.video` (whose face gets replaced) and `input.faceImage` (the new face) are required; `input.faceEnhance` is an optional boolean. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_swap_face
Translate the speech in an existing video into another language, re-syncing the speaker's lips to the new audio by default. Use it for localising a clip — not for adding subtitles to a video that is already in the target language. Default (and the only model today): brand `pollo-ai`, model `videotranslate`. `input.video` is required and must be an `.mp4` or `.mov` URL no longer than 8 minutes. `input.outputLanguage` is required — the target language name (e.g. `English`, `Japanese`, `Spanish`); over 100 languages are supported and the set is not enumerated, so pass what the user asked for rather than a code. `input.translateAudioOnly` (default false) translates only the audio and leaves the lips untouched. `input.enableCaption` (default false) additionally produces an SRT file. Billing is per second of source video, so run estimate_generation_cost first. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
translate_video
Deprecated alias of `translate_video` — call `translate_video` instead. Translate the speech in an existing video into another language, re-syncing the speaker's lips to the new audio by default. Use it for localising a clip — not for adding subtitles to a video that is already in the target language. Default (and the only model today): brand `pollo-ai`, model `videotranslate`. `input.video` is required and must be an `.mp4` or `.mov` URL no longer than 8 minutes. `input.outputLanguage` is required — the target language name (e.g. `English`, `Japanese`, `Spanish`); over 100 languages are supported and the set is not enumerated, so pass what the user asked for rather than a code. `input.translateAudioOnly` (default false) translates only the audio and leaves the lips untouched. `input.enableCaption` (default false) additionally produces an SRT file. Billing is per second of source video, so run estimate_generation_cost first. Media inputs must be public or host-authorized HTTPS URLs. For an image attached to the conversation, call upload_attachment first and use its accessURL. For any other file that is not already an HTTPS URL (a local file, or a video or audio attachment), call upload_widget first with the matching `mediaType` and use the returned URL. After a successful submission, the returned result updates automatically; do not call any status tool. Each successful call submits one editing task, produces one output and consumes generation credits. If current entitlements are insufficient, explain only that the edit is unavailable.
pollo_translate_video
Pollo AI ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Pollo AI's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Pollo AI alternatives on ChatGPT?
As of 2026-10-22, Pollo AI competes with Ad Army, Arcads, Artlist, Atlas Cloud, Bildy, Cadabra AI, Carat, Clipwave Video & Image Maker and 29 more in ChatGPT Multi-Modal Generative Media Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.