CreativeClaw
Remote MCP creative studio.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only
What it can do
- Generate Image: Generate or edit images using AI models. **Two modes:** - **Generate** (no image_url): Create an image from a text prompt. - **Edit** (with image_url): Transform an existing image base
- Compare Models: Generate the same image with multiple models side-by-side for comparison. All models receive the same prompt and settings, and results are displayed together in a single view. Use this
- Generate Video: Submit a video generation job using AI models. Returns a job ID immediately — video generation runs in the background (typically 30s–2min). The result renders automatically in an inlin
What data it sees
Do you need an account
No: the server works without sign-in
Remote MCP creative studio. Generate images, video, audio, and 3D inside Claude, ChatGPT, Codex, and OpenClaw. Pay-as-you-go, 100 free credits, no subscription.
Server tool list (46)
Raw names from tools/list. Only developers need these.
| generate_image | Generate or edit images using AI models. **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/nano-banana-lite" — Google Gemini 3.1 Flash Lite Image. Cheapest and fastest Nano Banana model for 1K drafts, bulk variations, and rapid 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/seedream-5-lite" — ByteDance Seedream 5 Lite. Excellent product/marketing imagery and precise edits using up to 10 references; 2K/3K/4K output [generate + edit] - "image/grok-imagine-pro" — xAI Grok Imagine Pro (Quality). High-detail 1K/2K generation, stronger typography, and natural-language edits using up to 3 source images; available through fal and Pika [generate + edit] - "image/gpt-image-2" — OpenAI GPT Image 2.0. Second-best — strong text rendering, 4K output, exceptional prompt adherence [generate + edit] - "image/flux-2-pro" — FLUX.2 Pro. Zero-config professional quality [generate only] - "image/recraft-v3" — Recraft V3. #1 on benchmarks, excellent for design and illustration [generate only] - "image/flux-kontext-max" — FLUX Kontext Max. Best for consistency, typography, and precise edits [edit only] - "image/flux-dev" — FLUX Dev. Cheap and reliable editing [edit only] Default to image/nano-banana-2. Escalate to image/nano-banana-pro for complex professional assets, precise typography, multi-reference compositions, or demanding edits; use image/nano-banana-lite for cheap drafts or bulk iterations, and image/gpt-image-2 as the OpenAI alternative. Use list_models to browse all models. Use get_model_params with any model ID to see available parameters. 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 our top models, including Seedream 5 Lite. - 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. - 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 rejects individual reference files larger than 25 MB. Compress oversized references or use a Nano Banana model, which may accept the same Creative Claw URLs. |
| compare_models | Generate the same image with multiple models side-by-side for comparison. All models receive the same prompt and settings, and results are displayed together in a single view. Use this when the user wants to compare quality, style, or speed across different models before choosing one. All models run in parallel — total time equals the slowest model. Use list_models to discover available image models. |
| generate_video | Submit a video generation job using AI models. Returns a job ID immediately — video generation runs in the background (typically 30s–2min). The result renders automatically in an inline widget that polls for completion on its own — the user sees the video without any further action from you. Do NOT call check_job just to show or confirm the video. Call check_job ONLY when YOU need the final video URL for a follow-up step. 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/grok-imagine-1.5" — xAI Grok Imagine 1.5. Top-tier prompt adherence, native synchronized audio, strong identity preservation, 480p–1080p, and up to 7 image references using <IMAGE_0> tokens [text + image + reference-to-video] - "video/flux-3" — Black Forest Labs FLUX 3 via Pika. Native-audio 5–20s video at 720p/1080p from text or up to 10 ordered/timestamped keyframes; supports source-video extension with operation=extend [text + keyframes + extend] - "video/minimax-h3-max" — MiniMax H3 Max via fal. Fast, inexpensive 5–15s native-audio video at 480p/768p with strong prompt adherence and optional first/last frames [text + image] - "video/minimax-h3" — MiniMax H3. 768p by default or optional 2K, 5–15s, native stereo audio, first/last frames, and up to 12 image/video/audio references; video-only reference mode supports natural-language edits [text + image + reference/edit] - "video/seedance-2.5" — Seedance 2.5 (ByteDance). Premium native-audio generation, 4–30s at 480p/720p, optional first/last frames, and up to 50 multimodal references (30 images, 10 videos, 10 audio clips) [text + image + reference-to-video] - "video/ltx-2.3-fast" — LTX 2.3 Fast. Native-audio text/image video up to 20s; generate_video operations retake, extend, reframe, and audio_to_video route here automatically [text + image + transform] - "video/seedance-2.0-mini" — Seedance 2.0 Mini (ByteDance). Fastest, cheapest Seedance tier, native audio, multi-modal reference-to-video (image+video+audio refs), 480p/720p [text + image + reference-to-video] - "video/veo-3.1" — Google Veo 3.1. Top quality — true 4K, native audio + dialogue. Premium pricing [text + image-to-video] - "video/veo-3.1-fast" — Google Veo 3.1 Fast. Same Veo quality, ~50% cheaper and faster [text + image-to-video] - "video/seedance-2.0" — Seedance 2.0 quality tier — cinematic with native audio, physics, and multi-modal inputs [text + image + reference-to-video] - "video/seedance-2.0-fast" — Seedance 2.0 Fast. Same capabilities, cheaper [text + image-to-video] - "video/happyhorse-1.0" — HappyHorse 1.0 (Alibaba). #1-ranked — joint audio+video, native lip-sync, character consistency via reference images (character1..9). Best for talking/dialogue scenes [text + image + reference-to-video] - "video/kling-3.0-omni" — Kling 3.0 Omni (Kuaishou). Native audio + multi-shot in one call (multi_prompt) + element/character refs (@Element1) + first/last frame. Best for multi-beat sequences [text + image-to-video] - "video/sora-2-pro" — OpenAI Sora 2 Pro. Up to 25s, native audio, character IDs [text + image-to-video] - "video/kling-v3-pro" — Kling v3 Pro. Cinematic visuals, multi-shot, native audio [text + image-to-video] - "video/hailuo-02-pro" — Hailuo-02 Pro. Great physics, director-level camera controls [text + image-to-video] - "video/hailuo-2.3-fast" — Hailuo 2.3 Fast. Cheapest and fastest Hailuo tier for animating a reference image [image-to-video only] - "video/heygen-avatar-4" — HeyGen Avatar 4. Photo → talking avatar with lip-sync, 400+ poses, 100+ voices [image-to-video only] - "video/heygen-agent" — HeyGen Video Agent. Budget talking avatar from text, ~$2/min [text-to-video only] - "video/dreamactor-v2" — DreamActor v2. Character image + driving video → full-body motion, expressions, and lip movement. Use generate_video with operation animate_character [character-animation only] Default to video/gemini-omni-flash unless the request specifically calls for another model's specialty. Use MiniMax H3 Max for low-cost, very fast 480p/768p text or image generation; use standard MiniMax H3 for 2K multimodal reference workflows, Grok Imagine 1.5 for identity-preserving image-reference workflows, Seedance 2.5 for longer ByteDance reference-video workflows, step up to video/veo-3.1 for true 4K, or use video/happyhorse-1.0 for dialogue/talking scenes. Provide image_url to generate video from an image — the model's image-to-video endpoint is used automatically. For FLUX 3 source-video continuation, use model video/flux-3 with operation extend. Other retake/extend/reframe/audio_to_video operations use LTX 2.3 Fast. For DreamActor motion transfer, use operation animate_character. Use list_models to browse all models. Use get_model_params with any model ID to see available parameters. Tips: - Provide image_url to generate video from an image — the correct endpoint is selected automatically - 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. - Provide both image_url + last_frame_url to generate a video transitioning between two frames (Veo 3.1, Kling v3 Pro, MiniMax H3 Max, and MiniMax H3) - Provide image_urls/video_urls/audio_urls for reference-to-video. Grok Imagine 1.5 accepts image_urls only and uses <IMAGE_0>/<IMAGE_1>; Seedance uses @Image1/@Video1/@Audio1; MiniMax H3 references are normalized automatically to fal's Image 1/Video 1/Audio 1 or Pika's @Image1/@Video1/@Audio1 syntax - For FLUX 3 extension, set model to video/flux-3, operation to extend, and pass the source clip as video_urls[0]. Other retake/extend/reframe calls use LTX 2.3 Fast - Set operation to audio_to_video with audio_urls[0], plus either image_url or a prompt; LTX 2.3 Fast is selected automatically - Set operation to animate_character with image_url (or character_id) and the driving performance in video_urls[0]; DreamActor v2 is selected automatically - Duration is model-dependent: Seedance 2.5 accepts integer strings "4" through "30"; Seedance 2.0 and Grok Imagine 1.5 accept whole seconds up to 15; both MiniMax H3 models accept integer strings "5" through "15"; Veo uses "4s"/"6s"/"8s"; older Kling/MiniMax models commonly use "5"/"10" - Resolution is model-dependent: pass the top-level resolution parameter using a value from get_model_params. MiniMax H3 Max defaults to 768P and also supports 480P; standard H3 defaults to 768P and supports 2K - 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. - Use get_model_params to discover model-specific parameters, then pass them via the "extras" field |
| generate_speech | Generate speech audio from text using AI text-to-speech models. Returns a permanent audio URL with an inline audio player. Recommended TTS models (pass as the "model" parameter). Prefer ElevenLabs v3 — it's the top pick for almost everything: - "speech/elevenlabs-v3" — ElevenLabs v3. ⭐ DEFAULT & top pick — industry-leading naturalness, inline [audio tags] for emotion/delivery, voice cloning, 70+ languages. Use this unless there's a specific reason not to. Full guide: creative-claw://guides/speech/elevenlabs-v3 - "speech/minimax-hd" — MiniMax Speech 2.8 HD. Strong alternative, 300+ voices, emotion/speed/pitch control, 30+ languages - "speech/dia-tts" — Dia TTS. Multi-speaker dialogue with [S1]/[S2] tags, nonverbal cues like (laughs), (whispers) - "speech/chatterbox" — Chatterbox. Instant voice cloning from an audio sample. It does not support ElevenLabs [bracketed] tags; use only <laugh>, <chuckle>, <sigh>, <cough>, <sniffle>, <groan>, <yawn>, or <gasp> - "speech/orpheus" — Orpheus TTS. Expressive with emotive tags like <laugh>, <sigh>, <gasp> - "speech/xai-tts" — xAI TTS. Expressive inline/wrapping speech tags, telephony-ready formats (G.711 mu-law/A-law), 20 languages, 5 voices (eve/ara/rex/sal/leo). Full guide: creative-claw://guides/speech/xai-tts - "speech/kokoro" — Kokoro. Cheapest and fastest, clean output, good for testing Default to speech/elevenlabs-v3. Use list_models to browse all models. Use get_model_params with any model ID to see available parameters. Tips: - ElevenLabs v3 (speech/elevenlabs-v3, the default) is the recommended model. Get the most out of it: - Inline [audio tags] shape delivery — drop them anywhere in the text and they're performed, not spoken. Emotion: [excited], [sad], [angry], [sarcastically], [curious], [nervous], [whispers], [shouting]. Non-verbal: [laughs], [chuckles], [sighs], [gasps], [clears throat], [coughs]. Pacing: [slowly], [fast-paced], [pause], [drawn out]. Accent/voice morph: [strong French accent], [pirate voice], [robotic tone]. Use 1 tag per 1–3 sentences — overuse flattens the effect; don't stack tags ([whispers][angry]); stick to known tags (made-up ones are ignored). - Pick a voice_id matching the brief from the curated list (see voice_id param). Omitting it gives Hale (confident American male). For multi-speaker dialogue, make one call per line with a distinct voice_id per character and chain via extras: { previous_text: "<prior line>" } for continuous prosody. - Tune delivery with extras: { voice_settings: { stability, similarity_boost, speed } } — stability 0.3 (Creative, most expressive, best for tags), 0.5 (Natural, default), 0.8 (Robust, may ignore tags). e.g. energetic ad: { stability: 0.3, similarity_boost: 0.7, speed: 1.05 }; calm narration: { stability: 0.5, speed: 0.95 }. - Keep each call under ~3000 chars; chunk long scripts and pass extras: { previous_text, next_text } across chunks. Per-word timestamps are requested automatically (returned in structuredContent) for captions/lip-sync. - Full reference (voice table, tag vocabulary, dialogue & long-form recipes): resource creative-claw://guides/speech/elevenlabs-v3 - For multi-speaker dialogue in a single call, use Dia TTS (speech/dia-tts) with [S1]/[S2] speaker tags and cues like (laughs) - For expressive speech, use Orpheus TTS with tags like <laugh>, <sigh>, <gasp> - For xAI TTS (speech/xai-tts): voices eve/ara/rex/sal/leo. Insert inline cues anywhere in the text — [laugh], [chuckle], [sigh], [breath], [pause], [whisper]. Wrap spans for span-level delivery — <whisper>…</whisper>, <emphasis>…</emphasis>, <slow>…</slow>, <loud>…</loud>. For phone-call/IVR audio pass extras: { output_format: "mulaw", sample_rate: 8000 }. Force a non-English language with extras: { language: "es" } (default is auto). See resource creative-claw://guides/speech/xai-tts for the full reference. - For voice cloning with Chatterbox, pass audio_url pointing to a reference audio sample (public mp3/wav). Never send ElevenLabs [bracketed] tags to Chatterbox; use only its supported angle tags: <laugh>, <chuckle>, <sigh>, <cough>, <sniffle>, <groan>, <yawn>, <gasp>. Known incompatible tags are sanitized server-side. - Use speed to control speech rate (0.5 = half speed, 2.0 = double speed) - Use emotion to set the overall tone (MiniMax models; ElevenLabs uses inline [audio tags] instead) - Use get_model_params with any model ID (e.g. speech/elevenlabs-v3) for the full parameter list |
| transcribe | Transcribe audio or video to text using ElevenLabs Scribe (multilingual, with word-level timestamps and speaker diarization). **Caching:** Results are cached per organization by source URL. Calling `transcribe` with a URL that anyone in your org has already transcribed returns the existing transcript instantly with **no credits charged**. **Inputs (pass exactly one):** - `audio_url` — preferred. In ChatGPT, call `import_chatgpt_media` for an audio file already attached or pasted; call `import_media` only to open the upload picker. Then pass the durable URL. - `video_url` — submitted directly to ElevenLabs when direct Scribe is available; the fal fallback extracts audio server-side. **Google Drive:** Do not pass Google Drive share or download URLs; they are browser flows and are not directly downloadable by Creative Claw. Ask the user to upload the file, then call `import_chatgpt_media` for a file already attached in ChatGPT or `import_media` to open the Creative Claw upload picker. In a local execution environment that already has the file bytes, use `get_upload_url` → PUT → `confirm_upload`. Retry `transcribe` with the permanent Creative Claw URL returned by the upload flow. **Output (returned by check_job once the job completes):** - Inline **basics**: full text, per-speaker formatted text (`formatted_text`), language, duration, speaker count, word count. - Linked **diarization JSON URL** (`diarization_url`) — fetch it for per-word timestamps + speaker IDs. Most use cases only need the inline basics. Returns a job ID — poll `check_job` until status="completed". **Supported formats:** audio — mp3, ogg, wav, m4a, aac. video — mp4, mov, mkv, webm and other formats supported by ElevenLabs. **Pricing:** ~44 credits/hour of audio through direct Scribe v2. A small hold is taken at submit time and reconciled against actual duration on completion. Cache hits cost nothing. |
| isolate_audio | Clean up an audio file using ElevenLabs Voice Isolator — removes background noise, music, and reverb so only the voice remains. **Workflow:** in ChatGPT, call `import_chatgpt_media` for an audio file already attached or pasted; call `import_media` only to open the upload picker. Then pass the durable URL here. Returns a job ID — poll `check_job` until status="completed" to get the cleaned audio URL. **Supported formats:** mp3, wav, m4a, ogg, aac. **Pricing:** 80 credits flat per call, sized from current fal pricing and recent production usage. |
| render_html_image | Render HTML/CSS to a PNG image via headless Chromium. Great for branded graphics (social cards, banners, OG images) — faster and cheaper than generate_image for layout-driven content. **Tailwind CSS:** All Tailwind utility classes work out of the box — no CDN script or stylesheet needed. Just use classes like bg-blue-500, text-white, flex, rounded-xl, shadow-lg directly in your HTML. **Full CSS surface:** flexbox, grid, filter (blur, grayscale, hue-rotate, drop-shadow), mask-image, object-fit, transform, gradients, <style> blocks, class selectors, pseudo-elements, variable fonts (all weights 100-900 + italic). Write HTML like you would for a real browser. **Fonts:** Any web font works — this is a real browser. Load fonts directly in the HTML: `<link rel="stylesheet" href="...">`, `@import url(...)`, or `@font-face`. Works with Google Fonts, Bunny Fonts, Adobe Fonts, your own CDN, etc. For a custom/local font, pass it via inline_images and reference it from `@font-face { src: url('{{my_font}}') format('woff2'); }`. The renderer waits on `document.fonts.ready` before screenshotting, so whatever the page declares is what gets rendered. No default font is injected — be explicit. **Typical cold-render time:** ~1-3s (first render pays the browser cold-start; subsequent renders reuse the browser and complete in ~700ms-1.5s). Concurrency is capped server-side. For reusable layouts, use create_template + render_template instead. |
| render_html_video | Render an HTML/CSS/JS composition to an MP4 video using HyperFrames on Modal.com. **This tool is asynchronous.** It returns immediately with a `jobId` and `status: "queued"`. Rendering typically takes 30–120 s depending on duration and fps. Call `check_job` with the returned `jobId` to poll for completion. Animate elements using GSAP, CSS transitions, or HyperFrames data-* timing attributes. Tailwind CSS works out of the box. Web fonts work via @font-face, @import, or a <link> tag. For audio, add a timed `<audio id="..." src="https://..." data-start="0" data-duration="...">` element. Use an absolute HTTP(S) URL. Inline base64/data/blob URLs, relative paths, and `<source>`-only audio are unsupported. If authored audio is missing or digitally silent in the encoded file, the render fails and is refunded instead of returning a silent video. Common sizes: 1920×1080 (16:9), 1080×1920 (9:16 vertical), 1080×1080 (square). Costs 5 credits per render, independent of duration, fps, and dimensions. A renderer failure, encoded-file dimension mismatch, or authored-audio validation failure is refunded automatically. |
| render_template | Render a saved template one or more times with different parameter values. Returns PNG images. **Multi-variant rendering (the common case):** pass `renders` as an array — each entry is the per-variant modifications. Great for "give me 3 versions of this card with different headlines" or "render this template for X, Y, Z". Up to 4 variants per call. All variants share the same template and size; only `modifications` differs per variant. Charged 4× for 4 variants etc. **Single render:** pass `renders` as a 1-element array. **Looking up the template:** pass either template_id (UUID) or template_name (case-insensitive). If you don't know which template to use, call list_templates first. **How modifications work:** - Pass values keyed by parameter name, e.g. { headline: "Launch day!", hero_image: "https://..." } - Missing parameters fall back to their defaults. Required parameters with no default and no value error out. - Text values are HTML-escaped. image_url values are fetched server-side and inlined as data URIs. - Static assets defined on the template (logos, etc.) are always included. **Failure semantics:** all-or-nothing credit charge. If any variant fails to render, the entire credit charge is refunded. Successful variants are still returned so you can see what worked. |
| remove_background | Remove the background from an image or video using AI. Returns a permanent URL to the result. - For **images**: produces a transparent PNG. Just provide the URL and type=image. - For **videos**: uses BEN v2 AI segmentation with temporal consistency. Supports webm (true alpha) or mp4 output. Video background removal costs 120 credits. Tips: - For videos, webm gives true transparency. mp4 produces black background unless composited. |
| upscale_media | Upscale an image or video to higher resolution using AI. Returns a permanent URL to the upscaled result. **Images** — three models: - **aura** (default): Cheapest and fastest, fixed 4x upscale. Just provide the URL. - **clarity**: Best quality, 1-4x, supports prompt-guided upscaling with creativity/resemblance controls. Uses an 80-credit hold based on current fal megapixel pricing. - **recraft**: Simple crisp upscale, no extra params needed. **Videos** — two models: - **realesrgan** (default): Cheapest, 1-8x scale factor. - **bytedance**: Higher quality with target resolution presets (1080p/2k/4k) and FPS boost. Tips: - For quick/cheap upscaling, just provide media_url and type — defaults handle the rest. - For maximum image quality, use clarity model with a prompt. - For 4K video output, use bytedance model with target_resolution="4k". |
| trim_video | Trim a video to a specific time range. Returns a permanent URL to the trimmed video. Each trim costs 2 credits. Specify start_time and either end_time or duration. If only start_time is given, trims 2 seconds from that point. |
| scale_video | Resize a video to target dimensions. Returns a permanent URL to the scaled video. Great for reformatting video for different platforms (e.g. 16:9 → 9:16 for Reels/TikTok). Tips: - Provide just width or just height to maintain aspect ratio. - Width and height must be even numbers. - Use mode=pad for letterboxing, mode=crop for center-crop. |
| add_subtitles | Auto-transcribe and burn karaoke-style subtitles onto a video. Returns a permanent URL to the subtitled video. Features word-level highlighting (karaoke effect), any Google Font, customizable colors, and bounce animation. Tips: - Use words_per_subtitle=1 for TikTok/Reels style single-word subtitles. - Font size, word grouping, placement, and animation are automatically constrained from the video's dimensions for frame safety. - Default style is Montserrat bold white with purple highlight — looks great on most videos. |
| extract_frames | Extract frames from a video as images. Returns permanent URLs to the extracted frame(s). Modes: - **single**: Extract one frame — first, middle, or last. Great for thumbnails. - **batch**: Extract every Nth frame from the video. Great for storyboards or frame-by-frame analysis. Tips: - Use single mode with position="middle" for a representative thumbnail - For batch mode, frame_interval=12 at 24fps gives roughly 2 frames per second - Lower frame_interval = more frames extracted (higher cost) - Use max_frames to cap the number of extracted frames |
| merge_media | Merge media files together. Returns a permanent URL to the merged output. Operations: - **merge_audio_video**: Combine a video with an audio track (e.g., add narration or music to a video). Provide video_url and audio_url. - **merge_videos**: Concatenate multiple videos back-to-back in order. Provide video_urls array. - **merge_audios**: Concatenate multiple audio files in order. Provide audio_urls array. Common workflow: generate a video with generate_video, generate narration with generate_speech, then merge them with merge_audio_video. Tips: - For merge_audio_video, if the audio is longer than the video (or vice versa), the output length matches the shorter one - Videos being merged should ideally have the same resolution and codec for best results - Use scale_video/trim_video to adjust videos before merging if needed |
| render_html | Display live, interactive HTML directly in the viewer — no screenshot, no image generation, no credits. Tailwind CSS is automatically included, so use utility classes freely. The HTML is rendered in a sandboxed iframe with full CSS support. Use this when you want to **show** something visual to the user rather than generate a static image: - Brand identity boards (colors, typography, logo layouts) - Asset galleries and comparison layouts - Styled previews (quote cards, social posts, landing page mockups) - Data visualizations and dashboards - Any custom HTML presentation Tailwind CSS is injected automatically — just use classes like "flex items-center gap-4 bg-blue-500 text-white rounded-xl p-6". Custom <style> blocks also work for anything beyond Tailwind. For static PNG output (e.g. social cards, OG images), use render_html_image instead. |
| load_image | Load an image from a URL and return it as base64 so you can see it in your context. Use this ONLY when: - The user explicitly asks you to look at / review an image - You need to iterate on a generated image (view it before deciding on edits) - You need to compare before/after versions of an image Do NOT call this automatically after every generate_image call — only when you or the user actually need to see the image to make decisions. The URL alone is usually sufficient to share with the user. |
| list_models | List available AI models, filtered by category or search query. Categories: - "image" — models that generate and/or edit images - "video" — models that generate video from text and/or images - "speech" — text-to-speech models Each model shows its capabilities in brackets: [generate], [edit], [image-to-video]. The returned model ID is what you pass as the "model" parameter to generate_image, generate_video, or generate_speech. |
| get_model_params | Get all available input parameters for a specific AI model. Returns the full schema including parameter names, types, defaults, constraints, and descriptions. Use this to discover model-specific parameters before generation. Many models support custom params beyond the standard ones (prompt, width, height, seed, etc.). Pass discovered params via the "extras" field in generate_image, generate_video, or generate_speech. Example workflow: 1. list_models → find a model 2. get_model_params → see all its parameters 3. generate_image with extras: { "enable_safety_checker": false, "sync_mode": true } This is especially useful for: - Discovering model-specific features (LoRA weights, schedulers, safety toggles, image_size presets, etc.) - Finding the exact parameter names and valid values a model expects - Understanding which parameters are required vs optional |
| check_job | Check the status of a generation job. Returns the current status and, when completed, the permanent media URL. Call this after generate_image or generate_video to poll for results. Typical generation times: - Images: 5–30s - Videos: 30s–2min Statuses: - "queued" — waiting in generation queue - "in_progress" — actively generating - "delayed" — still running, but taking longer than expected - "completed" — done, media URL is available - "failed" — generation failed, error message is available |
| import_media | Open an interactive upload UI for the user to choose images, videos, audio, or fonts from their device. Call this tool when: - The user has local files and wants to choose them through the Creative Claw picker - The user wants to browse for or upload one or more files through the Creative Claw picker - The user wants to upload a reference image for editing or video generation - The user asks to upload or import media files from their device After the user uploads files through the UI, their permanent URLs will be provided. You can then use those URLs with generate_image, generate_video, remove_background, upscale_media, etc. |
| search_assets | Search your media library. Assets are images, videos, audio, and 3D models that were generated, uploaded, or imported — each has a permanent URL, optional name, tags, and description. Filter by type, text query (matches name/description/prompt), tags, name, or source. Results ordered newest-first. Examples: search_assets({}) → recent assets. search_assets({ type: "image", query: "sunset" }) → matching images. search_assets({ tags: ["brand"] }) → tagged assets. |
| update_asset | Organize a media asset by setting its name, tags, or description. Assets are entries in your media library (images, videos, audio, 3D models). - **Name**: Unique per user — lets you reference assets by name instead of ID. - **Tags**: Labels for grouping (e.g. "brand", "logo", "draft"). - **Description**: Free-text description. Examples: update_asset({ id: "...", name: "my-logo", tags: ["brand"] }). Clear name: update_asset({ id: "...", clear_name: true }). |
| delete_asset | Remove an asset from your media library. The asset will no longer appear in search results and its name is freed for reuse. Data is preserved but hidden (soft-delete). |
| upload_asset | Add a media file to your asset library by URL. The server fetches the file and stores it permanently. Returns a permanent URL usable with all other tools. Optionally set name, tags, and description for organization. For large files (>100MB), use get_upload_url instead for a direct upload. |
| get_upload_url | Get a presigned URL for uploading file bytes directly to storage. Use this when the client can read a local file and make the PUT request itself, especially Codex and other local execution environments. Also use it for files too large for URL-based import (>37MB). Do NOT use this for a file already pasted, attached, or generated in a ChatGPT conversation. Use import_chatgpt_media for an existing ChatGPT file, or import_media when the user still needs the interactive picker. Returns a temporary upload URL (valid for 1 hour) and an asset ID. After uploading the file, call confirm_upload with the asset ID to finalize. Workflow: 1. Call get_upload_url to get the upload URL and asset ID 2. Upload the file: curl -X PUT -H "Content-Type: video/mp4" -T /path/to/file.mp4 "<uploadUrl>" 3. Call confirm_upload with the asset ID to verify and activate the asset Example: get_upload_url({ content_type: "video/mp4", type: "video", name: "my-video" }) |
| confirm_upload | Confirm that a file has been uploaded via the presigned URL from get_upload_url. Verifies the file exists in storage and activates the asset so it appears in search results. Call this only after the client successfully uploads local file bytes with the PUT command from get_upload_url. Do not call it after import_chatgpt_media, import_media, or upload_asset; those tools already finalize their assets. Example: confirm_upload({ asset_id: "550e8400-e29b-41d4-a716-446655440000" }) |
| get_theme | Fetch a brand theme. Themes are reusable brand configuration bundles (colors, fonts, logos, product images, etc.) stored as JSON — use them to keep generated media on-brand. Returns the theme's name, default status, and full data. Omit name to get the default theme. |
| update_theme | Create or update a brand theme. Themes store colors, fonts, logos, a markdown `notes` field (voice / audience / tone / do's-and-don'ts), a reference image, and any brand elements used for consistent media generation. Two modes: - **interactive** (`interactive: true`) — opens the visual editor in the chat for the user to drop fonts/colors/logos and click save. Use this for "edit my theme" / "help me set up a brand" style requests. - **direct** — pass `data`, `images`, and/or `set_default` to mutate without UI. Shallow-merges `data` by default; pass `override: true` to replace it entirely. `images` is always replaced. First image becomes the thumbnail. Creates a new theme if the name doesn't exist. First theme auto-becomes default. Examples: - update_theme({ interactive: true }) // create a new theme via the editor - update_theme({ name: "Acme", interactive: true }) // edit "Acme" in the editor - update_theme({ name: "Acme", data: { colors: [{ name: "Brand", hex: "#FF0000" }] } }) - update_theme({ name: "Acme", images: ["https://r2.../hero1.png"] }) |
| list_themes | List all brand themes. Returns each theme's name, default status, and a summary of stored keys (colors, fonts, logos, etc.). The MCP client renders results as a thumbnail carousel — click a card to copy the theme name (or tap the small ID pill to copy the UUID instead). |
| delete_theme | Delete a brand theme (soft-delete). If the deleted theme was the default, the oldest remaining theme is promoted. |
| manage_character | Create or update a Character — a reusable persona with a description, reference image, and optional cloned voice. **To create a character:** 1. Collect name + description (appearance, personality, role) 2. Generate a reference image with generate_image using this prompt template (agentic_prompting: false): "Character reference sheet for [name]: [description]. Four views on a plain white background — front, 3/4 view, side profile, back — same pose, consistent lighting. Full body, head to toe. Clean studio style. No text or labels." 3. Call manage_character({ title, description, image_url }) **To add or replace a cloned voice:** Pass audio_url (a public URL of a voice sample) + consent: true. The voice is cloned via ElevenLabs IVC and attached automatically. Voice sample best practices — share these with the user before they record: - **1–2 minutes is the sweet spot.** Under 30s sounds noticeably worse; over 3min adds nothing. - One clean take beats many mediocre clips — total runtime is all that matters, not number of files. - Quiet room, one speaker, no background music or noise. Phone mic is fine. - Natural conversational tone — the model copies everything: pace, breathing, accent, inflections. **To update any field on an existing character:** Pass id + any fields to change (title, description, image_url, or audio_url for voice). |
| list_characters | List all Characters (reusable personas). Returns each character's id, title, description, whether it has a cloned voice, and its reference image. Pass a character's id as character_id to generate_image / generate_video / generate_speech. The MCP client renders results as a thumbnail carousel — click a card to copy the character ID. |
| delete_character | Delete a Character (soft-delete). If it has a cloned voice, the voice is also removed from ElevenLabs to free the account's voice slot. |
| create_film_project | Start a character-driven film project. Creates the project shell (status "drafting") and opens the film preview. Next: draft a script + shot list and save it with update_film_project, then show it to the user for approval (gate 1) before generating anything. Pass character_ids (from list_characters) for the cast and theme_id for the brand. The character's reference image + cloned voice are used when you later generate storyboards (generate_image with character_id), narration (generate_speech with character_id), and shots (generate_video with character_id). |
| update_film_project | Update a film project: save the script (logline + shots), advance status, attach generated assets, or change the cast/theme. Shots: pass the full `shots` array to replace the shot list (e.g. when first saving the script), OR `patch_shots` to merge changes into existing shots by id (e.g. after generating one shot's storyboard/clip — set its storyboardUrl/clipUrl/status). Each shot: { id, description, prompt?, narration?, storyboardUrl?, clipUrl?, audioUrl?, durationS?, model?, status? }. Status values: drafting → script_ok → storyboard_ok → rendering → preview_ok → final. Set status to reflect approval gates as the user approves. |
| get_film_project | Load a film project and show its preview (cast, script, shots, assembled cut). |
| list_film_projects | List your film projects (newest first). Click a card to copy its id. |
| assemble_film | Stitch a film project's rendered shot clips together (in shot order) into the final film, optionally laying the project's narration track over the cut. Saves the result to the project (assembledUrl, status → preview_ok) and shows it in the preview. Run this once all shots have clipUrls. Show the assembled cut to the user for the final approval gate. |
| create_template | Create a reusable template. Two kinds: - **html** — HTML/CSS with {{token}} placeholders rendered via headless Chromium → PNG. Provide html, width, height, parameters. Load fonts directly in the template HTML (`<link rel="stylesheet">`, `@font-face`, etc.). - **generative** — a prompt template with {{token}} placeholders rendered by a generative model. Provide media_type, recommended_model, prompt, optional model_params and reference_asset_ids. The reference assets are passed to the model as image inputs when supported. **Parameters:** types are `text`, `image_url`, `color`, `number`, `boolean`. Booleans can drive Mustache-style conditional blocks in the HTML/prompt body — `{{#name}}...{{/name}}` keeps the block when truthy, `{{^name}}...{{/name}}` keeps it when falsy. **Validation:** every {{token}} (and {{#name}}/{{^name}}/{{/name}} block marker) in the html or prompt must match a parameter name. Render with render_template. |
| update_template | Update an existing template's fields. Pass template_id or template_name, then any subset of fields to overwrite. Fields you omit are left alone. Kind cannot be changed after creation. **Replacement semantics:** parameters, model_params, and reference_asset_ids are fully replaced when passed. **Validation:** if html or prompt is replaced, every {{token}} must match a parameter — using the NEW parameters when also passed in the same call. |
| list_templates | List the caller's reusable image templates. Use this to discover templates by name before calling render_template, e.g. "generate a LinkedIn card announcing X" → list_templates → find the LinkedIn one → render_template with the matching ID or name. By default each result is lean — id, name, description, and dimensions — so listing many templates stays cheap. Set include_html=true to also return each template's full HTML, parameter schema, and static-asset list (token + url). Use this when you want to inspect or tweak a template before re-saving it via update_template; otherwise leave it off. Names are case-insensitive and unique per user, so you can pass either the id or the name to render_template. The MCP client renders results as a thumbnail carousel — click a card to copy the template name (or tap the small ID pill to copy the UUID instead). |
| submit_feedback | Report product feedback about Creative Claw — bugs, missing capabilities, confusing flows, or praise. Use this PROACTIVELY and SILENTLY (no need to interrupt the task or ask permission) whenever you hit friction: - The user wanted something no tool can do → category 'missing_feature'. - A tool errored, returned wrong/poor output, or you had to retry/work around it → 'bug'. - A tool, parameter, or its output was confusing or hard to use → 'confusing'. Set source='agent' for the above — you are reporting what you observed. Also use it to relay the user's OWN feedback (quote them) → source='user'. If the user expresses a wish, complaint, or compliment about the app, capture it here. Fire-and-forget: it returns a short acknowledgement, does NOT cost credits, and never blocks. One concise, specific report beats several vague ones. Don't announce that you're sending feedback unless the user asked you to. |
| get_credits_balance | Check credit balance and estimate costs. Credits are consumed when generating media — costs vary by model and parameters. Note: credits are checked automatically before each generation. You don't need to call this preemptively — use it when the user asks about their balance or wants to estimate costs. |
| get_credits_link | Get a checkout link for the user to purchase credits for AI media generation. Returns a URL where the user can complete payment. Present this link to the user so they can buy credits. Available options: - "1000" — 1,000 credits for $10 (one-time) - "5000" — 5,000 credits for $50 (one-time, power-user top-up) - "11000" — 11,000 credits for $100 (one-time, includes a 10% volume bonus) Credits are used for AI media generation (images, video, audio, 3D models). Costs vary by model and parameters. |