$npx -y skills add affaan-m/ECC --skill fal-ai-mediaUnified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.
| 1 | # fal.ai Media Generation |
| 2 | |
| 3 | Generate images, videos, and audio using fal.ai models via MCP. |
| 4 | |
| 5 | ## When to Activate |
| 6 | |
| 7 | - User wants to generate images from text prompts |
| 8 | - Creating videos from text or images |
| 9 | - Generating speech, music, or sound effects |
| 10 | - Any media generation task |
| 11 | - User says "generate image", "create video", "text to speech", "make a thumbnail", or similar |
| 12 | |
| 13 | ## MCP Requirement |
| 14 | |
| 15 | fal.ai MCP server must be configured. Add to `~/.claude.json`: |
| 16 | |
| 17 | ```json |
| 18 | "fal-ai": { |
| 19 | "command": "npx", |
| 20 | "args": ["-y", "fal-ai-mcp-server"], |
| 21 | "env": { "FAL_KEY": "YOUR_FAL_KEY_HERE" } |
| 22 | } |
| 23 | ``` |
| 24 | |
| 25 | Get an API key at [fal.ai](https://fal.ai). |
| 26 | |
| 27 | ## MCP Tools |
| 28 | |
| 29 | The fal.ai MCP provides these tools: |
| 30 | - `search` — Find available models by keyword |
| 31 | - `find` — Get model details and parameters |
| 32 | - `generate` — Run a model with parameters |
| 33 | - `result` — Check async generation status |
| 34 | - `status` — Check job status |
| 35 | - `cancel` — Cancel a running job |
| 36 | - `estimate_cost` — Estimate generation cost |
| 37 | - `models` — List popular models |
| 38 | - `upload` — Upload files for use as inputs |
| 39 | |
| 40 | --- |
| 41 | |
| 42 | ## Image Generation |
| 43 | |
| 44 | ### Nano Banana 2 (Fast) |
| 45 | Best for: quick iterations, drafts, text-to-image, image editing. |
| 46 | |
| 47 | ``` |
| 48 | generate( |
| 49 | model_name: "fal-ai/nano-banana-2", |
| 50 | input: { |
| 51 | "prompt": "a futuristic cityscape at sunset, cyberpunk style", |
| 52 | "image_size": "landscape_16_9", |
| 53 | "num_images": 1, |
| 54 | "seed": 42 |
| 55 | } |
| 56 | ) |
| 57 | ``` |
| 58 | |
| 59 | ### Nano Banana Pro (High Fidelity) |
| 60 | Best for: production images, realism, typography, detailed prompts. |
| 61 | |
| 62 | ``` |
| 63 | generate( |
| 64 | model_name: "fal-ai/nano-banana-pro", |
| 65 | input: { |
| 66 | "prompt": "professional product photo of wireless headphones on marble surface, studio lighting", |
| 67 | "image_size": "square", |
| 68 | "num_images": 1, |
| 69 | "guidance_scale": 7.5 |
| 70 | } |
| 71 | ) |
| 72 | ``` |
| 73 | |
| 74 | ### Common Image Parameters |
| 75 | |
| 76 | | Param | Type | Options | Notes | |
| 77 | |-------|------|---------|-------| |
| 78 | | `prompt` | string | required | Describe what you want | |
| 79 | | `image_size` | string | `square`, `portrait_4_3`, `landscape_16_9`, `portrait_16_9`, `landscape_4_3` | Aspect ratio | |
| 80 | | `num_images` | number | 1-4 | How many to generate | |
| 81 | | `seed` | number | any integer | Reproducibility | |
| 82 | | `guidance_scale` | number | 1-20 | How closely to follow the prompt (higher = more literal) | |
| 83 | |
| 84 | ### Image Editing |
| 85 | Use Nano Banana 2 with an input image for inpainting, outpainting, or style transfer: |
| 86 | |
| 87 | ``` |
| 88 | # First upload the source image |
| 89 | upload(file_path: "/path/to/image.png") |
| 90 | |
| 91 | # Then generate with image input |
| 92 | generate( |
| 93 | model_name: "fal-ai/nano-banana-2", |
| 94 | input: { |
| 95 | "prompt": "same scene but in watercolor style", |
| 96 | "image_url": "<uploaded_url>", |
| 97 | "image_size": "landscape_16_9" |
| 98 | } |
| 99 | ) |
| 100 | ``` |
| 101 | |
| 102 | --- |
| 103 | |
| 104 | ## Video Generation |
| 105 | |
| 106 | ### Seedance 1.0 Pro (ByteDance) |
| 107 | Best for: text-to-video, image-to-video with high motion quality. |
| 108 | |
| 109 | ``` |
| 110 | generate( |
| 111 | model_name: "fal-ai/seedance-1-0-pro", |
| 112 | input: { |
| 113 | "prompt": "a drone flyover of a mountain lake at golden hour, cinematic", |
| 114 | "duration": "5s", |
| 115 | "aspect_ratio": "16:9", |
| 116 | "seed": 42 |
| 117 | } |
| 118 | ) |
| 119 | ``` |
| 120 | |
| 121 | ### Kling Video v3 Pro |
| 122 | Best for: text/image-to-video with native audio generation. |
| 123 | |
| 124 | ``` |
| 125 | generate( |
| 126 | model_name: "fal-ai/kling-video/v3/pro", |
| 127 | input: { |
| 128 | "prompt": "ocean waves crashing on a rocky coast, dramatic clouds", |
| 129 | "duration": "5s", |
| 130 | "aspect_ratio": "16:9" |
| 131 | } |
| 132 | ) |
| 133 | ``` |
| 134 | |
| 135 | ### Veo 3 (Google DeepMind) |
| 136 | Best for: video with generated sound, high visual quality. |
| 137 | |
| 138 | ``` |
| 139 | generate( |
| 140 | model_name: "fal-ai/veo-3", |
| 141 | input: { |
| 142 | "prompt": "a bustling Tokyo street market at night, neon signs, crowd noise", |
| 143 | "aspect_ratio": "16:9" |
| 144 | } |
| 145 | ) |
| 146 | ``` |
| 147 | |
| 148 | ### Image-to-Video |
| 149 | Start from an existing image: |
| 150 | |
| 151 | ``` |
| 152 | generate( |
| 153 | model_name: "fal-ai/seedance-1-0-pro", |
| 154 | input: { |
| 155 | "prompt": "camera slowly zooms out, gentle wind moves the trees", |
| 156 | "image_url": "<uploaded_image_url>", |
| 157 | "duration": "5s" |
| 158 | } |
| 159 | ) |
| 160 | ``` |
| 161 | |
| 162 | ### Video Parameters |
| 163 | |
| 164 | | Param | Type | Options | Notes | |
| 165 | |-------|------|---------|-------| |
| 166 | | `prompt` | string | required | Describe the video | |
| 167 | | `duration` | string | `"5s"`, `"10s"` | Video length | |
| 168 | | `aspect_ratio` | string | `"16:9"`, `"9:16"`, `"1:1"` | Frame ratio | |
| 169 | | `seed` | number | any integer | Reproducibility | |
| 170 | | `image_url` | string | URL | Source image for image-to-video | |
| 171 | |
| 172 | --- |
| 173 | |
| 174 | ## Audio Generation |
| 175 | |
| 176 | ### CSM-1B (Conversational Speech) |
| 177 | Text-to-speech with natural, conversational quality. |
| 178 | |
| 179 | ``` |
| 180 | generate( |
| 181 | model_name: "fal-ai/csm-1b", |
| 182 | input: { |
| 183 | "text": "Hello, welcome to the demo. Let me show you how this works.", |
| 184 | "speaker_id": 0 |
| 185 | } |
| 186 | ) |
| 187 | ``` |
| 188 | |
| 189 | ### ThinkSound (Video-to-Audio) |
| 190 | Generate matching audio from video content. |
| 191 | |
| 192 | ``` |
| 193 | generate( |
| 194 | model_name: "fal-ai/thinksound", |
| 195 | input: { |
| 196 | "video_url": "<video_url>", |
| 197 | "prompt": "ambient forest sounds with birds chirping" |
| 198 | } |
| 199 | ) |
| 200 | ``` |
| 201 | |
| 202 | ## |