FAL.ai model catalog access — image, video, audio, 3D, LoRA training, and more via fal-ai/ and bytedance/ and wan/ endpoints. Activate when the user configures any nebula node that routes through FAL (kling, sora, veo, flux, seedance, wan, luma, pixverse, ltx, moonvalley, hunyuan3d, recraft, nano-banana via FAL, and 30+ others), when the user mentions a fal-ai/ slug, or when they ask which FAL model to use for a task. Entry point for 160 curated per-model skills + category overviews at `.agents/skills/fal/`.
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
FAL.ai model catalog access — image, video, audio, 3D, LoRA training, and more via fal-ai/ and bytedance/ and wan/ endpoints. Activate when the user configures any nebula node that routes through FAL (kling, sora, veo, flux, seedance, wan, luma, pixverse, ltx, moonvalley, hunyuan3d, recraft, nano-banana via FAL, and 30+ others), when the user mentions a fal-ai/ slug, or when they ask which FAL model to use for a task. Entry point for 160 curated per-model skills + category overviews at `.agents/skills/fal/`.
FAL Skill
When to use
User configures any FAL-backed nebula node (see the full mapping below)
User asks "which FAL model for X" or mentions a specific fal-ai/* or bytedance/* or wan/* slug
User asks about FAL pricing, rate limits, or endpoint schemas
Codex is building a graph with a FAL-backed node and needs exact parameter names and valid ranges
Universal FAL conventions
All FAL endpoints (there are 1,312+ models on the platform, 160 curated here) share the same API shape:
Auth:Authorization: Key <FAL_KEY> header. Our backend uses FAL_KEY. Some models also accept native-provider keys (e.g. BFL_API_KEY for Flux, GOOGLE_API_KEY for Veo) — nebula handlers prefer native when set, fall back to FAL.
Two base URLs:https://fal.run/{endpoint_id} (sync, for fast models) and https://queue.fal.run/{endpoint_id} (queue, for slow/long-running models). Nebula's fal_universal.py handler uses queue for everything since most models benefit from async.
Queue flow:
POST https://queue.fal.run/{endpoint_id} with JSON body → returns {"request_id": "...", "status_url": "...", "response_url": "..."}
Poll GET {status_url} until "status": "COMPLETED" (states: IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED)
GET {response_url} to fetch the result
Standard status codes:200 (sync success or poll OK) · 401 (bad key) · 402 (insufficient credit) · 422 (invalid params) · 429 (rate limit).
Output shape varies by model type but follows conventions:
3D mesh: {"model_glb": {"url": "..."}} or {"model_mesh": {"url": "..."}}
URL tokens expire. Response URLs include signed ?Expires= params. Download promptly.
Nebula node → FAL endpoint map
The source of truth for this routing is backend/execution/sync_runner.py. Each nebula node id on the left is implemented as a FAL-universal wrapper that defaults endpoint_id to the slug on the right.
Routing note: Some nebula nodes have two handlers (direct + FAL) with a routing param selecting which. The dual-param convention (sharedParams, falParams, directParams) comes from that — falParams only apply when routed through FAL.
How to use this skill
When the user configures or builds with a FAL-backed node:
Find the endpoint in the table above.
Open the matching skill file in skills/ for that model.
Use its Input parameters section as the source of truth for valid params, defaults, and ranges.
Use its When to use / Don't use / Alternatives section to decide if it's the right model.
Use its Prompting best practices section (most skills have one) to craft the input.
When the user asks about a FAL model not in the table above:
Check skills/fal-ai__*.md for a direct file matching the slug (file naming: fal-ai__ prefix, __ for /, .md suffix — so fal-ai/foo/bar → fal-ai__foo__bar.md).
If no file exists, fetch live: https://fal.ai/models/{slug}/llms.txt via WebFetch. That's FAL's LLM-friendly spec.
Mention to the user that this model isn't currently a curated nebula node — they can use fal-universal with the slug.
Category overviews
Browse all 160 skills by category: categories/{category}.md. Categories available:
FAL doesn't publish public rate-limit numbers. Empirically:
Sync endpoints (fal.run/...) are usage-billed per-request, often with per-second rate limits documented per model.
Queue endpoints handle bursts but a single request still blocks on queue position.
Each model's skill file has a Pricing section with exact $/image, $/second-of-video, or $/credit figures.
Universal prompting guidance
The bundle's skill files each have a "Prompting best practices" section. High-leverage universal patterns across FAL models:
Narrative > keyword soup — full prose descriptions beat comma-separated tags on every FAL image model (Flux, Nano Banana, Imagen, Recraft, Seedream, Ideogram).
Quote dialogue in video prompts — Veo, Sora 2, Kling all parse quoted strings as speech. SFX as plain text.
Specify camera terms explicitly — "dolly," "pan," "POV," "tracking shot," "extreme close-up" work across Veo 3.1, Kling v3, Seedance 2.
Put reference images first in multi-image prompts — most models prioritize the first reference.
Seeds are reproducibility, not style-transfer — fixing a seed preserves a generation, not a style. For style transfer use model-specific image_prompt or reference_image_urls params.
Source note + staleness
Bundle copied into this repo from the project reference docs on 2026-04-17.
Master bundle has a sync_fal_models.py script that can refresh skills against FAL's live API (uses fal.ai/api/models + per-model llms.txt + OpenAPI). Re-run it in the vault when you want fresh data, then re-copy into this project.
For any specific parameter that feels stale, fetch https://fal.ai/models/{slug}/llms.txt to verify — that's the canonical LLM-friendly source.