home / skills / vm0-ai / vm0-skills / fal.ai
This skill lets you generate images from text prompts using fal.ai, producing visuals for posts, headers, and illustrations quickly.
npx playbooks add skill vm0-ai/vm0-skills --skill fal.aiReview the files below or copy the command above to add this skill to your agents.
---
name: fal.ai
description: fal.ai AI image generation. Use this skill when you need to use fal, fal.ai, or generate images from text prompts using AI text-to-image models.
vm0_secrets:
- FAL_KEY
---
# fal.ai Image Generator
Use the fal.ai API to **generate images from text prompts**.
> Official docs: `https://fal.ai/docs`
---
## When to Use
Use this skill when you need to:
- **Generate images from text descriptions**
- **Create illustrations or visual content**
- **Generate blog headers, thumbnails, or social media images**
---
## Prerequisites
1. Sign up at [fal.ai](https://fal.ai/)
2. Get your API key from the dashboard
```bash
export FAL_KEY="your-api-key"
```
---
> **Important:** When using `$VAR` in a command that pipes to another command, wrap the command containing `$VAR` in `bash -c '...'`. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.
> ```bash
> bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"'
> ```
## How to Use
### 1. Generate Image (nano-banana-pro - fast)
Write to `/tmp/fal_request.json`:
```json
{
"prompt": "A futuristic city at sunset, cyberpunk style"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 2. Generate Image (flux/schnell - fast)
Write to `/tmp/fal_request.json`:
```json
{
"prompt": "A cute cat eating a cookie"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://fal.run/fal-ai/flux/schnell" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 3. Generate Image (recraft-v3 - high quality)
Write to `/tmp/fal_request.json`:
```json
{
"prompt": "Abstract art, vibrant colors"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://fal.run/fal-ai/recraft-v3" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 4. Generate with Custom Size
Write to `/tmp/fal_request.json`:
```json
{
"prompt": "Mountain landscape",
"image_size": "landscape_16_9"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 5. Download Generated Image
Write to `/tmp/fal_request.json`:
```json
{
"prompt": "A minimalist workspace"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url' | xargs curl -sL -o /tmp/image.png
```
### 6. Pipe Prompt from Echo (JSON escaped)
```bash
echo "A dragon breathing fire, epic fantasy art" | jq -Rs '{prompt: .}' > /tmp/fal_request.json
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 7. Pipe Prompt from File (JSON escaped)
```bash
cat /tmp/prompt.txt | jq -Rs '{prompt: .}' > /tmp/fal_request.json
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
### 8. Pipe with Additional Parameters
```bash
echo "Neon city at night" | jq -Rs '{prompt: ., image_size: "landscape_16_9"}' > /tmp/fal_request.json
bash -c 'curl -s -X POST "https://fal.run/fal-ai/nano-banana-pro" --header "Authorization: Key ${FAL_KEY}" --header "Content-Type: application/json" -d @/tmp/fal_request.json' | jq -r '.images[0].url'
```
---
## Available Models
| Model | Description |
|-------|-------------|
| `nano-banana-pro` | Fast, good quality (recommended) |
| `flux/schnell` | Fast generation |
| `flux-pro` | High quality |
| `recraft-v3` | High quality vector/illustration |
See more at: https://fal.ai/models
---
## Image Sizes
| Size | Aspect Ratio |
|------|--------------|
| `square` | 1:1 |
| `square_hd` | 1:1 (high res) |
| `portrait_4_3` | 4:3 |
| `portrait_16_9` | 16:9 |
| `landscape_4_3` | 3:4 |
| `landscape_16_9` | 9:16 |
---
## Prompt Guidelines
For best results:
1. **Be specific** - Describe the subject clearly
2. **Add style hints** - "modern", "minimalist", "photorealistic", "digital art", "cinematic"
3. **Specify colors/mood** - "blue and purple gradient", "warm tones", "dark and moody"
4. **Keep it concise** - Clear and focused descriptions work better
This skill integrates with fal.ai to generate images from text prompts using fal's text-to-image models. It provides shell-ready examples for sending prompts, selecting models, choosing image sizes, and downloading results. Use it to quickly produce illustrations, thumbnails, or visual assets from concise prompts.
The skill sends JSON payloads containing a prompt (and optional parameters like image_size) to fal.ai model endpoints via authenticated HTTP POST requests. Responses include image URLs that you can extract with jq and download with curl. Multiple model endpoints are shown for fast or high-quality generation and different aspect ratios.
How do I set and use my API key?
Export your key as FAL_KEY (export FAL_KEY="your-api-key") and include Authorization: Key ${FAL_KEY} in curl headers.
Which model should I pick for speed vs quality?
Use nano-banana-pro or flux/schnell for fast results; use flux-pro or recraft-v3 for higher-quality or vector-style outputs.