generate_image
Generate or edit images using AI models. Use this for AI-generated visual assets, including branded social cards, banners, posters, product images, and images guided by a saved theme or reference image.
An explicit image-model choice always takes precedence: when the user names GPT Image 2.5, GPT Image 2, Nano Banana, Seedream, or another image model, use generate_image rather than render_html_image. Use render_html_image only when the user explicitly asks to render HTML/CSS, supplies HTML, or requests a deterministic code-based layout.
**Two modes:**
- **Generate** (no image_url): Create an image from a text prompt.
- **Edit** (with image_url): Transform an existing image based on the prompt.
The result renders automatically in an inline widget that polls for completion on its own — the user sees the image without any further action from you. Do NOT call check_job just to display or confirm the result; that only adds redundant round-trips. Call check_job ONLY when YOU need the final image URL for a follow-up step (editing it, reusing it as a reference, saving, or posting it).
Recommended models (pass as the "model" parameter). Prefer Google Nano Banana 2 — it's the top pick for almost everything:
- "image/nano-banana-2" — Google Gemini 3.1 Flash Image. ⭐ DEFAULT & TOP PICK — best all-around balance of quality, intelligence, speed, and cost [generate + edit]
- "image/nano-banana-pro" — Google Gemini 3 Pro Image. Best for complex professional assets, precise multilingual typography, multi-reference compositions, and demanding edits [generate + edit]
- "image/seedream-5-pro" — ByteDance Seedream 5 Pro via Pika. Flagship product/marketing generation and precise edits using up to 10 references; 1K/2K output [generate + edit]
- "image/gpt-image-2.5-flare" — OpenAI GPT Image 2.5 Flare. Fast, high-quality everyday generation and editing [generate + edit]
- "image/gpt-image-2.5-sunburst" — OpenAI GPT Image 2.5 Sunburst. Precision-focused instruction following, text rendering, transparency, and controlled editing [generate + edit]
Default to image/nano-banana-2 as the cost-efficient choice for most work. Use image/gpt-image-2.5-flare for fast OpenAI image work, image/gpt-image-2.5-sunburst for precision-focused generation and tightly controlled edits, image/nano-banana-pro for complex professional assets, or image/seedream-5-pro for premium commercial imagery. Use list_models to discover other available models only when the user asks or the brief requires a capability these models do not cover. Use get_model_params with the selected model ID before passing model-specific parameters.
Chaining rule: if a downstream step depends on this image, you MUST call check_job with the returned job ID until status=completed, then pass the returned permanent image URL to the downstream tool. A queued or in_progress job ID is not a usable media input.
Tips:
- Use the `size` field for output dimensions. Supported values: "1:1" (1080x1080), "4:5" (1080x1350, IG portrait), "5:4" (1350x1080), "9:16" (1080x1920, story/reel), "16:9" (1920x1080, wide). These are normalized for the recommended image models.
- In ChatGPT, call import_chatgpt_media for files already pasted, attached, or generated in the conversation. Call import_media only when the user needs the interactive upload picker. Use the durable Creative Claw URL returned by either tool.
- width/height are still accepted for backwards compatibility but `size` is preferred — different models silently disagree on which dimension param they read, and `size` normalizes for you.
- Set seed for reproducible results
- For editing, strength controls how much to change: 0.0 = barely alter, 1.0 = completely reimagine (default 0.75)
- Models marked [edit only] require image_url. Models marked [generate only] cannot edit.
- Prompt rewriting is off by default. Preserve the user's prompt as written unless they ask for model-specific optimization; then set agentic_prompting=true.
- Use get_model_params to discover model-specific parameters, then pass them via the "extras" field
- extras.image_urls provides additional style/character reference images — NOT for compositing. Every URL must be public/directly fetchable or returned by import_media/import_chatgpt_media. The source image should always be passed via image_url. If you pass extras.image_urls without image_url, the first URL is automatically used as the source image.
- GPT Image 2.5 accepts up to 16 reference images. Keep individual references below the provider upload limit; compress oversized references or use a Nano Banana model when needed.
generate_speech
Generate speech from text with ElevenLabs, Cartesia, or another listed speech model. Returns completed media or a queued job ID that resolves through check_job.
ElevenLabs v3 (model: "speech/elevenlabs-v3") is the default for stock ElevenLabs voices and general speech, including professional narration and expressive delivery. Choose Multilingual v2 (model: "speech/elevenlabs-v2") only with an existing cloned Character voice when a steadier read is preferred, or when the user explicitly requests v2. Do not choose v2 for a stock voice based only on narration style. V2 has no square-bracket audio tags; use punctuation or sparse SSML breaks. Neither model selection creates a Professional Voice Clone; reuse character_id from clone_voice.
Cartesia Sonic (model: "speech/cartesia-sonic") is a first-class option for fast, natural stock or Character speech. Use voice_id for a curated or other public Cartesia voice, or character_id for a private clone. A missing Character provider copy is created lazily from its retained consented source when needed. ElevenLabs and Cartesia are both strong; if one result does not fit, offer a controlled comparison with the other provider instead of silently switching.
Use ElevenLabs unless the user explicitly requests another model or needs a capability it cannot provide. Discover alternatives with list_models only in those cases; check get_model_params for the selected model's supported inputs.
Choose the model explicitly:
- speech/cartesia-sonic: fast natural Cartesia speech. Use voice_id for a stock public voice, or character_id for a private cloned voice. get_model_params returns 40 curated Featured voices and the Cartesia Voice Library URL. If a Character needs a Cartesia provider copy, it is created lazily from the retained consented source. Providers are never substituted silently.
- speech/elevenlabs-v3: the default ElevenLabs model for stock voices and general speech, including narration, explainers, acting, reactions, inline [audio tags], and broader language coverage.
- speech/elevenlabs-v2 (Multilingual v2): choose only when using an existing cloned Character voice for a steadier read, or when the user explicitly requests v2. Do not select v2 for a stock voice merely because the script is corporate, educational, or long-form. This is a speech model, not Professional Voice Cloning (PVC).
- speech/chatterbox: English-only one-off reference-audio voice matching, up to 5,000 characters.
- speech/chatterbox-multilingual: one-off reference-audio voice matching in its 23 listed languages, up to 300 characters. Without audio_url, pass the target language as voice_id. With audio_url, omit voice_id, pass extras.custom_audio_language for the sample, and write the text in the target language. Persian is not supported.
- V2 does NOT support v3 square-bracket performance tags: [calm], [excited], [pause], [laughs] may be spoken aloud or misinterpreted. Use plain text and punctuation; sparse <break time="0.5s" /> pauses up to 3 seconds are supported by v2. V3 supports audio tags but NOT SSML break or phoneme tags. V2 also does not support phoneme tags.
- Settings go in extras.voice_settings; legacy flat extras are accepted, with nested fields taking precedence. Top-level speed overrides nested speed. V2 supports stability, similarity_boost, style, use_speaker_boost and speed (0.7–1.2). V3 supports stability (0 Creative, 0.5 Natural, 1 Robust) and speed; old continuous stability values map to the closest mode. Legacy similarity_boost, style and use_speaker_boost are accepted but ignored for v3.
- V2 example: generate_speech({ model: "speech/elevenlabs-v2", character_id, text: "Welcome to our annual conference.", extras: { voice_settings: { stability: 0.5, similarity_boost: 0.75, style: 0, use_speaker_boost: true, speed: 1 } } }). Reuse the same character_id to compare ElevenLabs and Cartesia; do not replace the source voice to switch models.
- V2 permits 10,000 characters per request. Split long copy at paragraph boundaries; extras.previous_text and extras.next_text supply adjacent context without speaking it. V2 detects language from the text; language_code is not sent to its API. Call get_model_params for the selected model before using settings.
Voice and language:
- generate_speech has no voice_description parameter and never creates a new voice from a prose description. A requested quality such as "young woman" must be satisfied by calling get_model_params and passing a matching existing voice_id.
- For stock ElevenLabs voices, select v3 and call get_model_params for current voice IDs and settings. Select a voice matching the requested language, regional accent, and tone. If the user wants a choice, suggest at most two relevant voices; otherwise choose one. Hale is the default for an unspecified English voice, not a universal language default.
- Omitting voice_id for ElevenLabs selects Hale (dXtC3XhB9GtPusIpNtQx), a smooth, confident American male. Never claim Hale or any returned voice ID was synthesized from the user's prose. When reporting the selected voice, use only its catalog label and description from get_model_params; do not invent a name, biography, gender, accent, or voice description.
- The curated IDs are recommendations, not an allowlist. Users may pass an exact public ElevenLabs Voice Library ID from https://elevenlabs.io/app/voice-library. If it is not yet available in the Creative Claw ElevenLabs collection, the first generation verifies it is public, adds it on demand, and retries once. Private IDs from another account remain unavailable.
- Write the text in the target language; for v3 set extras.language_code (for example, "es" for Spanish). A language code does not guarantee a native regional accent. Use normal spelling and punctuation; audition a short passage before generating a long script when pronunciation matters.
- For Roman Urdu advertising, use v3 with extras.language_code: "ur" and prefer Haseeb (aPfeouerZvEVukwmLSP0), an energetic Hindi/Urdu male voice, over Viraj, whose slow breathy suspense delivery is a poor default for ads. Keep apply_text_normalization at "auto" unless there is a tested reason to disable it. Audition code-switched English terms first; v3 accepts inline IPA wrapped in slashes for a difficult word (for example /nʌld/), but pronunciation remains probabilistic.
Clone and reuse a voice:
- For the user's own voice or a voice they have permission to use, prefer ElevenLabs Instant Voice Cloning with clone_voice. This feature is available after the workspace's first credit purchase.
- Select an existing Character with list_characters or create one with manage_character. Upload a clean 1 to 2 minute voice sample using get_upload_url or import_media with purpose: "voice_clone". Call clone_voice({ character_id, audio_asset_id, consent: true }) after explicit agreement to the voice-cloning terms and privacy notice; cloning replaces any voice already attached to that Character.
- Once cloning succeeds, prefer generate_speech({ model: "speech/elevenlabs-v2", character_id, text }) for steady narration in a supported language. Select v3 explicitly for expressive tags or broader language support, or speech/cartesia-sonic for fast speech with direct emotion and speed controls. Cartesia also accepts any public stock voice_id; get_model_params returns curated choices. Pass character_id to resolve a private provider copy; passing audio_url to generate_speech does not create a reusable clone.
ElevenLabs v3 delivery (this section applies only to model "speech/elevenlabs-v3"):
- Use sparse inline tags such as [whispers], [excited], or [sighs] when needed. For calm Spanish narration, a starting point is extras: { language_code: "es", voice_settings: { stability: 0.5, speed: 0.95 } }.
- Keep each segment under about 3,000 characters. Split long scripts at sentence boundaries; generate separate segments for different speakers and combine approved audio with merge_media. Word timestamps are requested by default.
- For detailed techniques, read the MCP resource creative-claw://guides/speech/elevenlabs-v3 if your client supports resources. This is an AI-readable guide, not a browser URL. The voice catalog and supported settings are available through get_model_params.
Duplicate safety: if the exact same normalized parameters were submitted in this Creative Claw workspace within the last 10 minutes, an active job is reused or a completed result is returned without another provider submission or charge. The fingerprint includes every public top-level parameter and every nested extras value, regardless of model. Set force_new=true only when the user explicitly wants another paid variation from identical parameters.
If the user explicitly selects another speech model, ignore the ElevenLabs settings and tags above. Call get_model_params for that model and use only the parameters and prompting syntax it exposes.
generate_video
Costly operation: prepare or submit an AI video generation using the user's Creative Claw credits. In Strict mode this tool does not submit or charge. It displays the exact request in the embedded UI, where the user must press Generate video manually. In YOLO mode it keeps the historical immediate-submission behavior. Returns an approval request, a completed video, or a job ID for background processing.
Duplicate safety: if the exact same normalized parameters were submitted in this Creative Claw workspace within the last 10 minutes, an active job is reused or a completed result is returned without another provider submission or charge. This never reuses work from another workspace. Set force_new=true only when the user explicitly wants another paid variation from identical parameters.
Video generation is a costly operation that spends the user's Creative Claw credits. The user's persisted video render mode is authoritative and is enforced by generate_video.
In Strict mode, generate_video validates the request and returns an interactive approval card without reserving credits or contacting a provider. The card shows the prompt, references, consequential settings, available balance, and an explicitly labeled cost estimate. The user may edit the prompt and any setting explicitly marked editable in the card, such as generated audio, then must press Generate video in that UI to submit the exact request. When the user changes an editable setting, treat the updated value published by the UI as their current choice if the request is discussed or recreated. When generate_video returns approval_required, explain that nothing has been submitted or charged and stop. Do not call generate_video again, poll while approval is still pending, claim that approval was granted, or invoke the app-only mcp_ui_action on the user's behalf. Preserve the Recovery Job ID from the response. If the widget later supplies final-generation context, use it and continue. If the user later asks for the result or a downstream step needs it and no final context arrived, call check_job with that Recovery Job ID; the server resolves it to the submitted generation job. If the user asks how to let the AI decide when to generate video, tell them to use the mode toggle in the top-right of the widget and switch from Review to Auto. If the current client cannot render the card, tell the user to review it in a supported Creative Claw UI or switch to Auto mode and retry.
In YOLO mode, generate_video preserves the historical behavior and submits immediately. Do not add a separate chat approval ceremony unless the user asks for one. The user can change modes from the control shown on video approval, progress, and result views, or from Account Settings.
Use estimate_generation when the user asks for a quote or when an estimate would help before the final request. Strict mode also calculates its own fresh estimate when generate_video is called. Estimates are not guarantees, and the actual balance and cost are rechecked when the user presses Generate video.
Each Strict approval is single-use and bound to its original references and settings. A changed prompt is saved only through the approval card. A different model, duration, resolution, reference set, retry, variation, edit, extension, or film shot requires a new generate_video request and a new Strict approval. Poll an already submitted job with check_job instead of resubmitting it.
Once submitted, a video generation cannot be canceled. Do not call generate_video for cancellation or with placeholder instructions.
Prompt quality rule: Provide meaningful generation instructions describing at least the visible subject and action. Include camera movement, setting or style, timing, and audio when relevant. Expand a brief user request without changing its intent, and never pass control text or placeholders as the prompt.
Completion behavior depends on the client. If the client visibly displays a live inline status/result and monitors it automatically, do not call check_job only to show or confirm the video. If no live result UI is visible, call check_job until status=completed so the user receives the result. Also call check_job when you need the completed URL for inspection or a downstream tool.
Recommended models (pass as the "model" parameter). Prefer Google Gemini Omni 1.1 Flash — it's the top pick for almost everything:
- "video/gemini-omni-flash" — Google Gemini Omni 1.1 Flash. ⭐ DEFAULT & TOP PICK — generally available multimodal video with native audio; turns text, images, reference images, or a source video into a new/edited clip [text + image + reference + edit]
- "video/minimax-h3-max" — MiniMax H3 Max via fal. Fast 5–15s native-audio video at 480P/768P/1080P with strong prompt adherence, optional first/last frames, and up to 12 image/video/audio references using Image 1 / Video 1 / Audio 1 syntax [text + image + reference-to-video]
- "video/minimax-h3-max-turbo" — MiniMax H3 Max Fast. Faster, lower-cost route for text or literal start/end-frame iteration, with image/video/audio reference-to-video through fal's shared H3 Max reference endpoint [text + image + reference-to-video]
- "video/seedance-2.5" — Seedance 2.5 (ByteDance). Premium native-audio generation, 4–30s at 480p–1080p, optional first/last frames, and up to 50 multimodal references (30 images, 10 videos, 10 audio clips) [text + image + reference-to-video]
- "video/seedance-2.0-mini" — Seedance Mini. Economical native-audio drafts with multimodal references at 480p/720p [text + image + reference-to-video]
Default to video/gemini-omni-flash unless the request specifically calls for another model's specialty. Use Seedance 2.5 for premium long or reference-rich work, Seedance Mini for economical drafts, MiniMax H3 Max for fast cinematic native-audio clips, or H3 Max Fast when lower-cost text/start-frame iteration matters most. For every model, singular image_url means a literal first frame; use image_urls when an image is a reference that should guide the result without becoming frame zero, even if there is only one image.
These are the default recommended choices. Do not call list_models routinely; call it only when the user asks for alternatives or the task requires a capability these recommendations do not cover. After selecting a model, prefer get_model_params before generation for its current modes, parameters, limits, and prompting guidance.
Pass video media fields at the top level. image_url selects image-to-video and is only for a literal first frame. If a supplied image should guide identity, style, character, product, or composition without becoming frame zero, pass it in image_urls, even when there is exactly one reference image. image_url + last_frame_url supplies controlled start and end frames only when get_model_params reports support. image_urls/video_urls/audio_urls are ordered reference-to-video inputs; mention each reference in the prompt using the selected model's syntax from get_model_params. Do not combine literal start/end frames with reference arrays unless get_model_params explicitly reports that combination. character_id supplies an implicit image_url when no explicit image_url is provided. Legacy media fields in extras are normalized without reordering; conflicting duplicates are rejected.
Chaining rule: if a downstream step depends on this video, you MUST call check_job with the returned job ID until status=completed, then pass the returned permanent video URL to the downstream tool. A queued or in_progress job ID is not a usable media input.
Choose one generation mode:
- Text-to-video: provide a prompt without media inputs.
- Image-to-video: provide image_url. It is the literal first frame, and the correct image-to-video endpoint is selected automatically.
- First-to-last-frame: provide image_url + last_frame_url for controlled start/end-frame consistency, but only after get_model_params confirms that the selected model supports this mode.
- Reference-to-video: provide ordered image_urls/video_urls/audio_urls within the selected model's limits. References are best for advanced identity, style, motion, or audio guidance and are not literal first/last frames. Mention each reference in the prompt using the selected model's own guidance. Examples: Seedance uses @Image1/@Video1/@Audio1; Gemini Omni image references use <IMAGE_REF_0>; H3 Max uses Image 1/Video 1/Audio 1. Exact syntax, limits, and supported media types vary, so use get_model_params.
Additional guidance:
- Use the user's wording and intent as the source of truth. You may expand a brief request into a production-ready video prompt without adding new creative choices. Set agentic_prompting=true only when the user asks Creative Claw to perform a model-specific rewrite. Set it explicitly to false when strict wording must also disable provider-native prompt expansion where supported.
- In ChatGPT, call import_chatgpt_media for files already pasted, attached, or generated in the conversation. Call import_media only when the user needs the interactive upload picker. Use the durable Creative Claw URL returned by either tool.
- For edits and reference videos, use get_model_params to verify supported input duration before submitting. Creative Claw also checks known duration limits before charging. If a source is rejected as too long, propose trimming the exact requested time range and disclose the processing cost. Obtain approval for the revised generation before submitting with the trimmed URL. Split, generate, and merge multiple segments only when the user wants the entire long source processed, after estimating the combined cost and obtaining explicit approval for each video generation.
- When animating a still image, explicitly request visible subject and environmental motion. Review the completed clip before describing it as animated; camera movement over a static subject may not satisfy the request.
- Prefer calling get_model_params after choosing a model and before generation. It is the source of truth for supported modes, exact field placement, reference syntax and limits, durations, resolutions, and compatible input combinations.