fal.ai Generation
Direct access to fal.ai's full model catalog (1,000+ models) using the user's own API key. The built-in image_generate tool routes through the Nous gateway and is pinned to whatever model the user configured (currently FLUX 2 Klein — a generalist that leans illustration/render, weak for strict anime). For anything model-specific, call fal.ai directly.
Auth
FAL_KEY lives in ~/.hermes/.env (line FAL_KEY=...). Parse it like ~/cheonma/scripts/fal_generate.py does. Header: Authorization: Key <FAL_KEY>.
Core call pattern (no SDK needed, stdlib only)
POST https://fal.run/<model-id> with JSON payload (model-specific params).
- Response is usually the finished result synchronously (image gens ~10–60s). If it returns
request_id instead, poll GET https://fal.run/<model-id>/requests/<id> until status == COMPLETED.
- Result media are CDN URLs under
*.fal.media — download to ~/Downloads/ (user convention: VisualOutput→SaveToDownloads).
- Always record and report the returned
seed for reproducibility.
Use scripts/fal_txt2img.py in this skill for text-to-image instead of hand-writing the HTTP each time.
Workflow
- Survey models first — the user expects a shortlist with a recommendation before rendering, not an immediate generate. Present 3–5 candidates with a one-line why/why-not each (see
references/model-catalog.md).
- Confirm or pick the top recommendation, then render.
- QA the output with vision before presenting; flag missed traits honestly and offer targeted re-rolls (same seed for composition, fresh seed for variety, or batch of 4).
Model selection (quick map — full notes in references/model-catalog.md)
- Anime / stylized illustration:
fal-ai/bytedance/seedream/v4.5/text-to-image (top pick — excellent multi-trait prompt adherence, ~$0.04/img, ~17s) > Z-Image Turbo (fast/cheap, weaker detail) > Qwen-Image > Nano Banana Pro (polished digital-art lean, less "anime").
- Anime via LoRA:
fal-ai/krea-2/turbo/lora or fal-ai/flux-lora with a style LoRA. User's curated LoRA skins (incl. open-sky-anime) live in the SKINS dict of ~/cheonma/scripts/fal_generate.py.
- Photoreal / flagship: FLUX.1/2 Pro, GPT-Image 1.5, Imagen 4.
- Multi-panel layouts / character sheets / structured documents: Nano Banana Pro (top pick — best instruction-following for complex layouts) > GPT-Image 1.5 (best text) > Seedream 4.5 (cheapest). See
references/character-sheet-model-rankings.md.
- Editing: FLUX Kontext Pro, Nano Banana 2 Edit, Seedream (unified gen+edit).
- Upscale / bg removal / caption: SeedVR2, Topaz, ESRGAN / BiRefNet, Bria RMBG / Florence-2.
- Video / audio: Veo 3.1, Kling, Sora 2, LTX-2 / Chatterbox, MiniMax Speech, ElevenLabs Music (per-second or per-video billing).
- Text-to-music (score a video edit):
fal-ai/elevenlabs/music via FAL_KEY — no local GPU needed (audiocraft/heartmula need CUDA). Queue endpoint, force_instrumental, $0.80/output-minute rounded up. Full schema, pricing, action-sports build→breakdown→drop prompting, and scripts/fal_music.py in references/elevenlabs-music.md. Generate the track FIRST, then energy-map it (see the ai-video-generation skill).
Model performance for character rendering (session-verified 2026-07)
Tested models: FLUX Pro Ultra v1.1, Ideogram V3, Recraft V4, Seedream 4.5, GPT-Image 1.5, Nano Banana Pro, FLUX.2 Pro, Recraft V4 Pro
| Use case |
Best model |
Why |
| Complex character specs (wings, multi-part anatomy) |
Ideogram V3 |
Best prompt adherence — nailed 2-pair wings when others failed |
| Group shots (4+ distinct characters) |
Seedream 4.5 |
Only model that kept all 5 characters distinct in one frame |
| Photorealistic portraits |
Recraft V4 or FLUX Pro Ultra |
Recraft = gritty/cinematic; FLUX = heroic fantasy |
| Anime style |
Seedream 4.5 |
By design, excellent cel-shaded aesthetic |
| Multi-panel character sheets |
Nano Banana Pro |
Only model delivering ALL panels with clean text + consistency (8/10). See references/character-sheet-model-rankings.md |
| Character sheet text/labels |
GPT-Image 1.5 |
Best typography (9.5/10), crisp serif labels, no garbling |
| Character sheet budget iteration |
Seedream 4.5 |
Cheapest (~$0.03), most complete layout, but text typos + hair inconsistency |
Character sheet 6-model shootout (2026-07-29):
- 🥇 Nano Banana Pro — 8/10 (complete layout, clean text, strong consistency, 25s)
- 🥈 GPT-Image 1.5 — 7.5/10 (best text, missing eye panel, 52s)
- 🥉 Seedream 4.5 — 7.5/10 (complete but typos + hair conflicts, 25s)
- Recraft V4 Pro — 7/10 (garbled label, 3 conflicting sword designs, 24s)
- FLUX.2 Pro — 6.5/10 (ignored multi-panel brief, only front/back + palette, 34s)
- Ideogram V3 — 5.5/10 (garbled captions, missing palette/stats, 16s)
Key insight: Strong single-image models (FLUX.2 Pro, Ideogram V3) fail at structured multi-panel layouts. Nano Banana Pro's instruction-following is what makes it win for character sheets. Recommended workflow: draft with Seedream (cheap) → finalize with Nano Banana Pro or GPT-Image 1.5.
Group shot reality: 5+ distinct characters in one frame is hard for most models. Seedream was the only one that got all 5 identifiable. FLUX and Ideogram dropped to 4 or merged characters. Consider per-character renders + composite if strict accuracy needed.
Payload format differences (verified endpoints)
Each model uses different parameter names — don't assume uniformity:
# FLUX Pro Ultra v1.1
{"prompt": "...", "image_size": {"width": 1024, "height": 1536}, "num_images": 1, "scheduler": "k_euler"}
# Ideogram V3
{"prompt": "...", "resolution": "1024x1536"} # string format, not dict
# Recraft V4 / V4 Pro
{"prompt": "...", "image_size": {"width": 1024, "height": 1536}} # dict format
# Seedream 4.5
{"prompt": "...", "image_size": {"width": 1024, "height": 1536}} # dict format
# GPT-Image 1.5
{"prompt": "...", "image_size": "1536x1024"} # STRING, not dict! Only accepts: "1024x1024", "1536x1024", "1024x1536"
# Nano Banana Pro
{"prompt": "...", "image_size": {"width": 1536, "height": 1024}} # dict format
# FLUX.2 Pro
{"prompt": "...", "image_size": {"width": 1536, "height": 1024}} # dict format
Endpoint patterns:
fal-ai/flux-pro/v1.1-ultra ✅
fal-ai/ideogram/v3 ✅ (NOT /v3/text-to-image)
fal-ai/recraft/v4/text-to-image ✅ (NOT /v4)
fal-ai/recraft/v4/pro/text-to-image ✅
fal-ai/bytedance/seedream/v4.5/text-to-image ✅
fal-ai/gpt-image-1.5 ✅ — 422 if image_size is a dict; must be string
fal-ai/nano-banana-pro ✅
fal-ai/flux-2-pro ✅
Batch rendering workflow
For 10+ images, foreground execute_code hits the 300s timeout. Use background process:
# Write script to /tmp, run with background=true + notify_on_complete=true
terminal("python3 /tmp/batch_render.py", background=True, notify_on_complete=True, timeout=600)
Typical throughput: ~15-20s per image. 24 images ≈ 6-8 minutes total.
Troubleshooting Authentication & 403 Errors
When encountering 403 Forbidden errors during image generation:
Read the error body FIRST — a 403 is not always a key problem. If the JSON
detail reads "User is locked. Reason: Exhausted balance. Top up your balance at fal.ai/dashboard/billing.", the account BALANCE is empty — the key is valid
and nothing is misconfigured. Diagnose with a tiny probe (a minimal payload
returns the JSON detail instantly, no generation cost):
curl -s -X POST "https://fal.run/fal-ai/bytedance/seedream/v4.5/text-to-image" \
-H "Authorization: Key $(grep '^FAL_KEY' ~/.hermes/.env | cut -d'=' -f2-)" \
-H "Content-Type: application/json" -d '{"prompt":"x","num_images":1}'
On exhausted balance: don't burn retries (the lock is account-wide and persists
until billing is resolved at fal.ai/dashboard/billing). Route work elsewhere —
Suno web UI for music, local ComfyUI/HeartMuLa, or the gateway image_generate
tool. The gateway image_generate bills through the Nous subscription, NOT the
FAL_KEY balance, so it keeps working for image work when direct fal.run calls
are locked. Ask the user to top up before relying on fal.ai again.
Verify API Key Scope: If the detail is NOT an exhausted-balance lock, ensure
your FAL_KEY has access to the specific model you're using. Check https://fal.ai/docs/api-reference/platform-apis/authentication for required scopes.
Test Key Validity: Run this diagnostic command:
curl -H "Authorization: Key $(grep '^FAL_KEY' ~/.hermes/.env | cut -d'=' -f2-)" https://fal.run/fal-ai/bytedance/seedream/v4.5/text-to-image -I
Should return 200 OK. A 403 means the key lacks model access.
Model-Specific Access: Some models require additional permissions (e.g., "image generation" scope). Check the model's documentation on fal.ai.
Common Fixes:
- Regenerate API key with proper scopes
- Wait 5-10 minutes for key propagation
- Use fallback models that don't require premium access
- Check for key expiration (fal.ai keys don't expire but can be revoked)
Debug Workflow:
- First: Check
~/.hermes/.env for valid FAL_KEY
- Second: Test key with curl command above
- Third: Try model access verification via browser at https://fal.ai/models
- Fourth: Consult skill's
references/model-catalog.md for model-specific permissions
Character sheet / reference sheet workflow
User keeps prompt templates at ~/character designs/ (original ChatGPT template + fal-optimized version). Test renders go under ~/character designs/model-test-*/ with filenames labeled by model.
Prompt adaptation for fal.ai models:
- Front-load layout structure — early tokens carry more weight on fal models
- Convert negation to positive directives ("show X" not "no Y") — Seedream especially mishandles negation
- Use explicit spatial language ("top left", "stacked vertically", "side by side") for panel placement
- Consolidate redundant quality tokens ("8k" + "ultra-high detail" → pick one; dilution hurts)
Recommended sizes: Landscape sheet 1536×1024 or 1920×1440; portrait 1440×1920; square 1536×1536.
3-model comparison test: Use scripts/character_sheet_test.py — renders the same prompt on GPT-Image 1.5, Ideogram V3, and Seedream 4.5 sequentially, saves labeled PNGs to an output dir. Run via background terminal (~2–3 min total).
See references/character-sheet-prompts.md for the full original and optimized prompt templates.
Prompt-Craft Pitfalls (Updated)
- Body types need explicit weight language. "Plump" alone collapses to standard anime proportions — write "soft round belly, full hips, thick thighs, plump figure" and avoid hourglass-implying words. (Confirmed: Seedream 4.5 rendered "plump" as merely voluptuous without this.)
- Multi-trait specificity works on Seedream 4.5 — split-tone hair ("left half jet black, right half snow white") and heterochromia ("one amber-orange eye, one sapphire-blue eye") landed cleanly when spelled out spatially.
- Keep suggestive-but-tasteful phrasing ("draped off shoulders, tastefully hinting at curves") to stay inside safety checkers; Seedream's
enable_safety_checker defaults true.
- Seedream
image_size accepts {"width": W, "height": H} in the 1280–4096 range per side; 1440×1920 is a good portrait default (2.8MP).
Support files
references/model-catalog.md — condensed fal.ai coverage: top models per category, calling patterns (run/subscribe/submit/stream/realtime), pricing normalization.
references/character-sheet-model-rankings.md — 6-model shootout results for character sheets: per-model QA notes, scores, payload quirks, recommended workflow.
references/character-sheet-prompts.md — original ChatGPT character sheet prompt + fal-optimized variant with model-specific notes and recommended sizes.
scripts/fal_txt2img.py — CLI: --model --prompt --width --height --seed --out; handles sync result or request_id polling; downloads image.
scripts/character_sheet_test.py — 3-model comparison runner (GPT-Image 1.5, Ideogram V3, Seedream 4.5) for character sheets; saves labeled PNGs to an output dir.
scripts/fal_music.py — CLI text-to-music via fal-ai/elevenlabs/music (queue submit→poll→download): --prompt --length-ms --out --instrumental --format. See references/elevenlabs-music.md.
Related skills
Sibling provider umbrellas: comfyui (local/cloud ComfyUI pipelines), higgsfield-generate (Higgsfield credits/MCP). Route: quick gateway render → built-in image_generate; specific fal.ai model or LoRA → this skill; full pipeline control → comfyui; Higgsfield account features → higgsfield-*.
1---2name: fal-ai-generation3description: Generate images, video, and audio via fal.ai Model APIs directly using the user's FAL_KEY — model selection, sync/queue call pattern, LoRA endpoints, pricing. Use when the built-in image_generate tool (gateway-pinned to FLUX 2 Klein) is a poor fit for the brief, when the user asks for a specific fal.ai model, or for anime/stylized/LoRA/upscale/background-removal work on fal.ai.4---5
6# fal.ai Generation
7
8Direct access to fal.ai's full model catalog (1,000+ models) using the user's own API key. The built-in `image_generate` tool routes through the Nous gateway and is pinned to whatever model the user configured (currently FLUX 2 Klein — a generalist that leans illustration/render, weak for strict anime). For anything model-specific, call fal.ai directly.
9
10## Auth
11
12`FAL_KEY` lives in `~/.hermes/.env` (line `FAL_KEY=...`). Parse it like `~/cheonma/scripts/fal_generate.py` does. Header: `Authorization: Key <FAL_KEY>`.
13
14## Core call pattern (no SDK needed, stdlib only)
15
161. `POST https://fal.run/<model-id>` with JSON payload (model-specific params).
172. Response is usually the finished result synchronously (image gens ~10–60s). If it returns `request_id` instead, poll `GET https://fal.run/<model-id>/requests/<id>` until `status == COMPLETED`.
183. Result media are CDN URLs under `*.fal.media` — download to `~/Downloads/` (user convention: VisualOutput→SaveToDownloads).
194. Always record and report the returned `seed` for reproducibility.
20
21Use `scripts/fal_txt2img.py` in this skill for text-to-image instead of hand-writing the HTTP each time.
22
23## Workflow
24
251. **Survey models first** — the user expects a shortlist with a recommendation before rendering, not an immediate generate. Present 3–5 candidates with a one-line why/why-not each (see `references/model-catalog.md`).
262. Confirm or pick the top recommendation, then render.
273. QA the output with vision before presenting; flag missed traits honestly and offer targeted re-rolls (same seed for composition, fresh seed for variety, or batch of 4).
28
29## Model selection (quick map — full notes in references/model-catalog.md)
30
31- **Anime / stylized illustration:** `fal-ai/bytedance/seedream/v4.5/text-to-image` (top pick — excellent multi-trait prompt adherence, ~$0.04/img, ~17s) > Z-Image Turbo (fast/cheap, weaker detail) > Qwen-Image > Nano Banana Pro (polished digital-art lean, less "anime").
32- **Anime via LoRA:** `fal-ai/krea-2/turbo/lora` or `fal-ai/flux-lora` with a style LoRA. User's curated LoRA skins (incl. `open-sky-anime`) live in the SKINS dict of `~/cheonma/scripts/fal_generate.py`.
33- **Photoreal / flagship:** FLUX.1/2 Pro, GPT-Image 1.5, Imagen 4.
34- **Multi-panel layouts / character sheets / structured documents:** Nano Banana Pro (top pick — best instruction-following for complex layouts) > GPT-Image 1.5 (best text) > Seedream 4.5 (cheapest). See `references/character-sheet-model-rankings.md`.
35- **Editing:** FLUX Kontext Pro, Nano Banana 2 Edit, Seedream (unified gen+edit).
36- **Upscale / bg removal / caption:** SeedVR2, Topaz, ESRGAN / BiRefNet, Bria RMBG / Florence-2.
37- **Video / audio:** Veo 3.1, Kling, Sora 2, LTX-2 / Chatterbox, MiniMax Speech, ElevenLabs Music (per-second or per-video billing).
38- **Text-to-music (score a video edit):** `fal-ai/elevenlabs/music` via FAL_KEY — no local GPU needed (audiocraft/heartmula need CUDA). Queue endpoint, `force_instrumental`, $0.80/output-minute rounded up. Full schema, pricing, action-sports build→breakdown→drop prompting, and `scripts/fal_music.py` in `references/elevenlabs-music.md`. Generate the track FIRST, then energy-map it (see the `ai-video-generation` skill).
39
40## Model performance for character rendering (session-verified 2026-07)
41
42**Tested models:** FLUX Pro Ultra v1.1, Ideogram V3, Recraft V4, Seedream 4.5, GPT-Image 1.5, Nano Banana Pro, FLUX.2 Pro, Recraft V4 Pro
43
44| Use case | Best model | Why |
45|----------|-----------|-----|
46| Complex character specs (wings, multi-part anatomy) | **Ideogram V3** | Best prompt adherence — nailed 2-pair wings when others failed |
47| Group shots (4+ distinct characters) | **Seedream 4.5** | Only model that kept all 5 characters distinct in one frame |
48| Photorealistic portraits | **Recraft V4** or **FLUX Pro Ultra** | Recraft = gritty/cinematic; FLUX = heroic fantasy |
49| Anime style | **Seedream 4.5** | By design, excellent cel-shaded aesthetic |
50| **Multi-panel character sheets** | **Nano Banana Pro** | Only model delivering ALL panels with clean text + consistency (8/10). See `references/character-sheet-model-rankings.md` |
51| Character sheet text/labels | **GPT-Image 1.5** | Best typography (9.5/10), crisp serif labels, no garbling |
52| Character sheet budget iteration | **Seedream 4.5** | Cheapest (~$0.03), most complete layout, but text typos + hair inconsistency |
53
54**Character sheet 6-model shootout (2026-07-29):**
551. 🥇 Nano Banana Pro — 8/10 (complete layout, clean text, strong consistency, 25s)
562. 🥈 GPT-Image 1.5 — 7.5/10 (best text, missing eye panel, 52s)
573. 🥉 Seedream 4.5 — 7.5/10 (complete but typos + hair conflicts, 25s)
584. Recraft V4 Pro — 7/10 (garbled label, 3 conflicting sword designs, 24s)
595. FLUX.2 Pro — 6.5/10 (ignored multi-panel brief, only front/back + palette, 34s)
606. Ideogram V3 — 5.5/10 (garbled captions, missing palette/stats, 16s)
61
62**Key insight:** Strong single-image models (FLUX.2 Pro, Ideogram V3) fail at structured multi-panel layouts. Nano Banana Pro's instruction-following is what makes it win for character sheets. Recommended workflow: draft with Seedream (cheap) → finalize with Nano Banana Pro or GPT-Image 1.5.
63
64**Group shot reality:** 5+ distinct characters in one frame is hard for most models. Seedream was the only one that got all 5 identifiable. FLUX and Ideogram dropped to 4 or merged characters. Consider per-character renders + composite if strict accuracy needed.
65
66## Payload format differences (verified endpoints)
67
68Each model uses different parameter names — don't assume uniformity:
69
70```python
71# FLUX Pro Ultra v1.1
72{"prompt": "...", "image_size": {"width": 1024, "height": 1536}, "num_images": 1, "scheduler": "k_euler"}
73
74# Ideogram V3
75{"prompt": "...", "resolution": "1024x1536"} # string format, not dict
76
77# Recraft V4 / V4 Pro
78{"prompt": "...", "image_size": {"width": 1024, "height": 1536}} # dict format
79
80# Seedream 4.5
81{"prompt": "...", "image_size": {"width": 1024, "height": 1536}} # dict format
82
83# GPT-Image 1.5
84{"prompt": "...", "image_size": "1536x1024"} # STRING, not dict! Only accepts: "1024x1024", "1536x1024", "1024x1536"
85
86# Nano Banana Pro
87{"prompt": "...", "image_size": {"width": 1536, "height": 1024}} # dict format
88
89# FLUX.2 Pro
90{"prompt": "...", "image_size": {"width": 1536, "height": 1024}} # dict format
91```
92
93**Endpoint patterns:**
94- `fal-ai/flux-pro/v1.1-ultra` ✅
95- `fal-ai/ideogram/v3` ✅ (NOT `/v3/text-to-image`)
96- `fal-ai/recraft/v4/text-to-image` ✅ (NOT `/v4`)
97- `fal-ai/recraft/v4/pro/text-to-image` ✅
98- `fal-ai/bytedance/seedream/v4.5/text-to-image` ✅
99- `fal-ai/gpt-image-1.5` ✅ — **422 if image_size is a dict; must be string**
100- `fal-ai/nano-banana-pro` ✅
101- `fal-ai/flux-2-pro` ✅
102
103## Batch rendering workflow
104
105For 10+ images, foreground `execute_code` hits the 300s timeout. Use background process:
106
107```python
108# Write script to /tmp, run with background=true + notify_on_complete=true
109terminal("python3 /tmp/batch_render.py", background=True, notify_on_complete=True, timeout=600)
110```
111
112Typical throughput: ~15-20s per image. 24 images ≈ 6-8 minutes total.
113
114## Troubleshooting Authentication & 403 Errors
115
116When encountering 403 Forbidden errors during image generation:
117
1180. **Read the error body FIRST — a 403 is not always a key problem.** If the JSON
119 `detail` reads `"User is locked. Reason: Exhausted balance. Top up your balance
120 at fal.ai/dashboard/billing."`, the account BALANCE is empty — the key is valid
121 and nothing is misconfigured. Diagnose with a tiny probe (a minimal payload
122 returns the JSON detail instantly, no generation cost):
123 ```bash
124 curl -s -X POST "https://fal.run/fal-ai/bytedance/seedream/v4.5/text-to-image" \
125 -H "Authorization: Key $(grep '^FAL_KEY' ~/.hermes/.env | cut -d'=' -f2-)" \
126 -H "Content-Type: application/json" -d '{"prompt":"x","num_images":1}'
127 ```
128 On exhausted balance: don't burn retries (the lock is account-wide and persists
129 until billing is resolved at fal.ai/dashboard/billing). Route work elsewhere —
130 Suno web UI for music, local ComfyUI/HeartMuLa, or the gateway `image_generate`
131 tool. **The gateway `image_generate` bills through the Nous subscription, NOT the
132 FAL_KEY balance**, so it keeps working for image work when direct fal.run calls
133 are locked. Ask the user to top up before relying on fal.ai again.
134
1351. **Verify API Key Scope**: If the detail is NOT an exhausted-balance lock, ensure
136 your FAL_KEY has access to the specific model you're using. Check https://fal.ai/docs/api-reference/platform-apis/authentication for required scopes.
137
1382. **Test Key Validity**: Run this diagnostic command:
139 ```bash
140 curl -H "Authorization: Key $(grep '^FAL_KEY' ~/.hermes/.env | cut -d'=' -f2-)" https://fal.run/fal-ai/bytedance/seedream/v4.5/text-to-image -I
141 ```
142 Should return 200 OK. A 403 means the key lacks model access.
143
1443. **Model-Specific Access**: Some models require additional permissions (e.g., "image generation" scope). Check the model's documentation on fal.ai.
145
1464. **Common Fixes**:
147 - Regenerate API key with proper scopes
148 - Wait 5-10 minutes for key propagation
149 - Use fallback models that don't require premium access
150 - Check for key expiration (fal.ai keys don't expire but can be revoked)
151
1525. **Debug Workflow**:
153 - First: Check `~/.hermes/.env` for valid FAL_KEY
154 - Second: Test key with curl command above
155 - Third: Try model access verification via browser at https://fal.ai/models
156 - Fourth: Consult skill's `references/model-catalog.md` for model-specific permissions
157
158## Character sheet / reference sheet workflow
159
160User keeps prompt templates at `~/character designs/` (original ChatGPT template + fal-optimized version). Test renders go under `~/character designs/model-test-*/` with filenames labeled by model.
161
162**Prompt adaptation for fal.ai models:**
163- Front-load layout structure — early tokens carry more weight on fal models
164- Convert negation to positive directives ("show X" not "no Y") — Seedream especially mishandles negation
165- Use explicit spatial language ("top left", "stacked vertically", "side by side") for panel placement
166- Consolidate redundant quality tokens ("8k" + "ultra-high detail" → pick one; dilution hurts)
167
168**Recommended sizes:** Landscape sheet 1536×1024 or 1920×1440; portrait 1440×1920; square 1536×1536.
169
170**3-model comparison test:** Use `scripts/character_sheet_test.py` — renders the same prompt on GPT-Image 1.5, Ideogram V3, and Seedream 4.5 sequentially, saves labeled PNGs to an output dir. Run via background terminal (~2–3 min total).
171
172See `references/character-sheet-prompts.md` for the full original and optimized prompt templates.
173
174## Prompt-Craft Pitfalls (Updated)
175
176- **Body types need explicit weight language**. "Plump" alone collapses to standard anime proportions — write "soft round belly, full hips, thick thighs, plump figure" and avoid hourglass-implying words. (Confirmed: Seedream 4.5 rendered "plump" as merely voluptuous without this.)
177- **Multi-trait specificity works on Seedream 4.5** — split-tone hair ("left half jet black, right half snow white") and heterochromia ("one amber-orange eye, one sapphire-blue eye") landed cleanly when spelled out spatially.
178- Keep suggestive-but-tasteful phrasing ("draped off shoulders, tastefully hinting at curves") to stay inside safety checkers; Seedream's `enable_safety_checker` defaults true.
179- Seedream `image_size` accepts `{"width": W, "height": H}` in the 1280–4096 range per side; ~1440×1920 is a good portrait default (~2.8MP).
180
181## Support files
182
183- `references/model-catalog.md` — condensed fal.ai coverage: top models per category, calling patterns (run/subscribe/submit/stream/realtime), pricing normalization.
184- `references/character-sheet-model-rankings.md` — 6-model shootout results for character sheets: per-model QA notes, scores, payload quirks, recommended workflow.
185- `references/character-sheet-prompts.md` — original ChatGPT character sheet prompt + fal-optimized variant with model-specific notes and recommended sizes.
186- `scripts/fal_txt2img.py` — CLI: `--model --prompt --width --height --seed --out`; handles sync result or request_id polling; downloads image.
187- `scripts/character_sheet_test.py` — 3-model comparison runner (GPT-Image 1.5, Ideogram V3, Seedream 4.5) for character sheets; saves labeled PNGs to an output dir.
188- `scripts/fal_music.py` — CLI text-to-music via `fal-ai/elevenlabs/music` (queue submit→poll→download): `--prompt --length-ms --out --instrumental --format`. See `references/elevenlabs-music.md`.
189
190## Related skills
191
192Sibling provider umbrellas: `comfyui` (local/cloud ComfyUI pipelines), `higgsfield-generate` (Higgsfield credits/MCP). Route: quick gateway render → built-in image_generate; specific fal.ai model or LoRA → this skill; full pipeline control → comfyui; Higgsfield account features → higgsfield-*.