Game assets with fal
fal runs hundreds of generative models behind one API key. Use it whenever the mod needs something that doesn't exist yet: a weapon sprite, a boss, a unit rendered from 16 angles, a tileable floor, a laser sound, boss music, a voiced line.
Setup (check once per session)
-
Key.
FAL_KEYmust be set (create one at https://fal.ai/dashboard/keys).um falalso reads it from a.envfile (FAL_KEY=...) in the working folder. Never write the key into mod files;um publish checkflags leaked keys. -
MCP. fal's hosted MCP server is
https://mcp.fal.ai/mcpwith headerAuthorization: Bearer $FAL_KEY. The repo pre-configures it for each agent:- Claude Code:
.mcp.json - Codex:
.codex/config.toml - Cursor:
.cursor/mcp.json - VS Code/Copilot:
.vscode/mcp.json - Gemini CLI:
gemini-extension.json
To add it by hand:
- Claude Code:
claude mcp add --transport http fal https://mcp.fal.ai/mcp --header "Authorization: Bearer $FAL_KEY" - Codex (
~/.codex/config.toml):[mcp_servers.fal]withurl = "https://mcp.fal.ai/mcp"andbearer_token_env_var = "FAL_KEY" - anything else: point its MCP config at the URL and header above.
MCP tools:
search_models,recommend_model,get_model_schema,get_pricing,run_model,submit_job/check_job/get_job_result,upload_file,search_docs.
- Claude Code:
-
No fal key? For images,
um comfyuses a local ComfyUI server instead (um comfy status, thenum comfy image "..." --sprite). It has no audio, 3D or video recipes. -
CLI alternatives:
pip install falgivesfal api <endpoint> key=value key:=json; the genmedia CLI (genmedia run ... --json --download) is agent-friendly too.
Which interface
- Discovery (what's the best model for X right now, its inputs, its price): fal MCP
recommend_model/search_models/get_model_schema/get_pricing, orum fal search,um fal schema <endpoint>,um fal price <endpoint>. The catalog changes weekly. The defaults below were current in September 2026; check before a big batch. - Anything that must land on disk (every game asset):
um fal <recipe>. It uploads local inputs, queues, polls, downloads every output file, and appends the endpoint, inputs, seed and request id to<out>/fal_manifest.jsonl, so every asset can be traced and regenerated. - Quick look or one-off where a URL is enough: MCP
run_model.
Recipes (um fal <recipe> --help for options; --model overrides the endpoint; --set k=v passes extra inputs)
| Asset | Command | Default endpoint |
|---|---|---|
| Sprite / icon, transparent background | um fal sprite "<subject, view, style>" --name x | openai/gpt-image-2 (background=transparent) |
| Concept art, key art, backgrounds | um fal image "<prompt>" --aspect 16:9 | fal-ai/nano-banana-2 |
| Consistent variants, extra frames, recolors, same character new pose | um fal edit "<change>" --ref base.png | fal-ai/nano-banana-2/edit |
| Background removal | um fal rmbg in.png | fal-ai/birefnet/v2 |
| Clean pixel art from any image | um fal pixelate in.png --colors 24 | fal-ai/image2pixel |
| Upscale | um fal upscale in.png --factor 2 | fal-ai/seedvr/upscale/image |
| Seamless tiling texture | um fal texture "mossy cobblestone" | fal-ai/z-image/turbo/tiling |
| PBR maps (basecolor, normal, roughness, metalness, height) | um fal pbr "rusted sheet metal" | fal-ai/patina/material |
| Image → textured 3D model (GLB) | um fal model3d concept.png [--engine trellis2|hunyuan|tripo|meshy] | fal-ai/trellis-2 |
| Auto-rig a humanoid, optional animations | um fal rig character.glb --animate | fal-ai/meshy/rigging |
| Sound effect | um fal sfx "plasma rifle shot, punchy" --seconds 1.2 | fal-ai/elevenlabs/sound-effects/v2 |
| Music | um fal music "tense boss battle, chiptune, 150 bpm" --seconds 90 | elevenlabs/music/v2.5 |
| Voice line | um fal voice "You dare challenge me?" --voice-id Adam | fal-ai/elevenlabs/tts/eleven-v3 |
| Trailer / cutscene clip | um fal video still.png "camera orbits the boss" | bytedance/seedance-2.5/image-to-video |
| Anything else | um fal run <endpoint> key=value key:=json [email protected] | any |
Other useful endpoints:
- 3D:
tripo3d/tripo/remeshandfal-ai/meshy/v5/remesh(low-poly, game-ready),fal-ai/trellis-2/retexture. - Motion:
fal-ai/hunyuan-motion(text → motion). - Icons:
fal-ai/recraft/v4.1/text-to-vector(SVG icons). - Video cutouts:
pixelcut/video-background-removal. - Music:
google/lyria-3.5. - Voice:
fal-ai/minimax/speech-2.8-hd.
Prompting game art that fits the game
- Look at the game's own assets first: pixel size, outline, palette, perspective, facing, how busy they are. Put that into a reusable style suffix. For Terraria: "16-bit pixel art game sprite in the style of Terraria, crisp dark outline, limited palette, centered, plain flat white background, no shadow, no text".
- Describe the view and orientation explicitly: "perfectly horizontal side view with the muzzle pointing right" for held weapons, "seen from the side facing left" for enemies, "pointing straight down" for a falling bomb. Engines have conventions (Terraria items point right, NPCs face left) and fixing orientation afterwards costs quality.
- Backgrounds: transparent (gpt-image-2) or a flat colour that
um sprite cutoutcan flood-fill. Avoid gradients, scenery and ground shadows. If a soft shadow sneaks in, use--grey/--keep-topin cutout. - Player / team colour: ask for "bright saturated blue accents" on the parts that should take the
player's colour, then
um sprite team-mask --hue blueturns them into a mask. - Consistency across a set: generate one hero image, then derive the rest with the edit endpoint and the
hero as
--ref("same robot, now firing, muzzle flash"). Don't ask one prompt for a whole sprite sheet; grids come out uneven. - Many angles or frames of the same object: go 3D. Take the concept, run
um fal model3d, thenum render3dfrom the game's camera (asset-pipeline skill). That's how the AoE2 robotaxi got 16 consistent headings × 5 animations. - No text or logos in art unless wanted: models love to add them.
Audio for engines
- The SFX and music endpoints return MP3. Convert to what the engine wants:
ffmpeg -i x.mp3 -ar 44100 x.wav(XNA/tModLoader, most engines);ffmpeg -i x.mp3 -c:a libvorbis -q:a 5 x.ogg(Minecraft, Godot, Unity);- trim silence first:
-af silenceremove=start_periods=1:start_threshold=-50dB.
- Loops:
um fal sfx ... --loop, or ask the music model for a loopable track and crossfade the ends. - Keep SFX short (0.2-2 s) and normalize loudness (
-af loudnorm=I=-16) so they sit with the game's own sounds.
Cost and etiquette
- Price the expensive stuff: before batching 3D, video or long music, check the price
(
um fal price <endpoint>/ MCPget_pricing). For more than about 20 generations or anything video-sized, tell the user the rough cost first. - Iterate cheap: use low quality or resolution while exploring (
--quality low,--res 0.5K), then re-run the winners at full quality with the same prompt (and seed where supported). - Reproducibility: keep
fal_manifest.jsonlwith the assets; it records prompts, seeds and request ids. - Credits: in the mod's README, credit that assets were generated with fal and name the models. Check a model's license page for commercial use.