---
name: fal-ai-generation
description: Generate and edit images, create video, audio, 3D assets or material maps through fal.ai MCP or the Python queue client. Use for fal model discovery, reference uploads, generation, recovery and local delivery.
---

# fal.ai generation

Turn the user's brief and supplied references into downloaded, reviewed assets.
Use the connected fal.ai MCP when available. The included Python helper handles
local uploads and queue recovery when MCP cannot access the local filesystem.
This skill and its relative resources can be copied into another project.

## Choose the operation

Distinguish concept exploration, faithful editing, reference-sheet preparation,
motion generation, mesh generation and material creation. Preserve a selected
provider, model, accepted image, pose, camera and requested output count.
An edit changes the requested feature; it does not redesign the whole asset.

When no model is selected, call `recommend_model` with the actual task. Then read
`get_model_schema` for the exact endpoint. Similar display names on different
providers are not interchangeable endpoint IDs. Inspect pricing for the planned
batch, especially video or 3D; use existing task authorization without asking
again for already-approved work. Defaults in an old script are not a model choice.

Read [MCP calls](references/mcp-workflow.md) for parameter examples and recovery.
Read [prompting and review](references/prompting-and-review.md) for concept,
reference-edit and material decisions. Read [setup](references/setup.md) when
connecting another machine. Each recipient uses their own account and credentials.

## Run and retain the job

1. Inspect the selected input files. Upload only the references needed for the
   requested task. A hosted MCP cannot read a local Windows path: use the upload
   helper or a client-side upload tool, then pass the resulting URL.
2. Prepare inputs from the live schema. Fields such as `image_urls`, `image_url`,
   `aspect_ratio`, `image_size`, `resolution` and duration differ by endpoint.
   Do not pass every model the same argument object. Do not add web search,
   background removal, extra views or video unless they serve this task.
3. Prefer `submit_job` for long operations; `run_model` is convenient for images.
   Immediately save endpoint, request ID, returned status/result URLs and the
   input parameters in the task directory. `processing` is normal, not failure.
4. Continue with `check_job`, then `get_job_result` when complete. Prefer the
   canonical URLs returned by the service. A wait timeout does not authorize a
   duplicate submission. A terminal result can still contain a provider error.
   If submission returned no ID, inspect request history before trying again.
5. Download the outputs before relying on a CDN link. Inspect each requested
   asset, preserve rejected takes with their reasons, and make the chosen result
   easy to open and download. Record technical completion separately from visual
   acceptance. A generated mesh still needs its own rig/topology/export checks.

Keep the prompt, source filenames or hashes, model ID, request ID, local outputs
and review verdict together. Credentials and raw signed links do not belong in a
shareable report. In Mr. Mak, use the current Workspace card and its shared image
viewer; elsewhere use the recipient's requested output directory.

## Included tools and examples

- [Queue helper](scripts/fal_job.py): `--help`, upload, submit, status and result
  download. One receipt per job; an existing receipt blocks another submission.
- [Python dependencies](scripts/requirements.txt).
- [Concept input](examples/concept.json) and [edit input](examples/edit.json):
  neutral requests, with no private artwork or working account URLs.
- [Example task](examples/WALKTHROUGH.md): a non-spending rehearsal followed by
  the commands for an explicitly requested generation.

Resolve these paths against this skill directory. Run `--help` or `submit
--dry-run` to check installation without a generation. Runtime keys come from
the environment or an explicitly selected `.env`; never print their values.
