fal-gamedev

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

2D Game Assets

2D游戏资产

Requires the genmedia CLI (run
genmedia init
once).
Full pipeline for 2D pixel art game assets: character → sprite sheets → background removal → game background. Each recipe is independently invokable, run just the part you need.
Always use
--json
so output is machine-readable. Use
--download
to save files locally. Do not curl URLs manually, use the
--download
flag.

需要安装 genmedia CLI(只需运行一次
genmedia init
)。
2D像素艺术游戏资产完整流程:角色生成 → 精灵表制作 → 背景移除 → 游戏背景生成。每个方案可独立调用,仅运行你需要的环节即可。
请始终使用
--json
参数,确保输出为机器可读格式。使用
--download
参数将文件保存到本地。请勿手动通过curl访问URL,务必使用
--download
标志。

Execution rules, follow these strictly

执行规则,请严格遵守

  1. Each genmedia command = one Bash tool call: issue each
    genmedia run
    and
    genmedia status
    as its own bare tool call. No variable assignments, no pipes, no shell redirects. This keeps every call matching the
    genmedia *
    allowlist so it runs without permission prompts.
  2. Parallel jobs → async: issue each
    genmedia run --async
    as its own separate Bash tool call (not combined into one shell block). All jobs queue and run in parallel on fal's side; total time ≈ slowest single job. After all are fired, poll each with
    genmedia status
    sequentially (not in parallel, one failure must not cancel others).
bash
# Step 1, fire async (each line = its own Bash tool call, returns request_id immediately)
genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_PROMPT" --image_urls "[\"$CHARACTER_URL\"]" --aspect_ratio "1:1" --resolution "1K" --async --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_PROMPT" --image_urls "[\"$CHARACTER_URL\"]" --aspect_ratio "1:1" --resolution "1K" --async --json

# Step 2, poll sequentially (each line = its own Bash tool call)
genmedia status fal-ai/nano-banana-pro/edit <walk_request_id> --result --download ./walk.png --json
genmedia status fal-ai/nano-banana-pro/edit <idle_request_id> --result --download ./idle.png --json
  1. URL source: always read
    downloaded_files[0].url
    from the tool result JSON. This is the correct path for all models (nano, gpt, Bria).
  2. Bria sync: Bria (
    fal-ai/bria/background/remove
    ) has no queue endpoint and does not support
    --async
    . Run it sync. It completes in seconds.
  3. Folder structure: always save into this layout, deriving the character slug from the character description (kebab-case, e.g.
    pirate-carrot
    ):
./game-assets/
<character-slug>/
character.png
sprites/
walk.png
idle.png
attack.png
jump.png
backgrounds/
layer1-sky.png
layer2-midground.png
layer3-foreground.png
Create the folders before downloading (
mkdir -p
). Use this structure even for partial runs (e.g. just one sprite sheet still goes in
sprites/
).
  1. End summary: after all downloads complete, print a summary listing every file path and its CDN URL. Format:
=== Game Assets: pirate-carrot ===
character game-assets/pirate-carrot/character.png
https://...
walk game-assets/pirate-carrot/sprites/walk.png
https://...
  1. 400 on status poll:
    genmedia status --result
    fetches the result once; it does not poll automatically. A 400 with
    "Request is still in progress"
    means the job is still running, wait 10 seconds and retry the exact same
    genmedia status
    call with the same request_id. Do not re-fire the original
    genmedia run --async
    (the job is already running on fal's side). Keep retrying every 10–15 seconds until you get a successful result.

  1. 每个genmedia命令对应一次Bash工具调用:每个
    genmedia run
    genmedia status
    都作为独立的Bash工具调用执行。禁止使用变量赋值、管道或Shell重定向。这样可确保每个调用都符合
    genmedia *
    白名单要求,无需权限提示即可运行。
  2. 并行任务采用异步方式:每个
    genmedia run --async
    都作为独立的Bash工具调用执行(不要合并到一个Shell块中)。所有任务会在fal端排队并并行运行;总耗时≈最慢单个任务的耗时。所有任务触发后,依次轮询每个任务的状态(不要并行轮询,单个任务失败不得取消其他任务)。
bash
# 步骤1:触发异步任务(每行对应一个独立Bash工具调用,立即返回request_id)
genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_PROMPT" --image_urls "[\"$CHARACTER_URL\"]" --aspect_ratio "1:1" --resolution "1K" --async --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_PROMPT" --image_urls "[\"$CHARACTER_URL\"]" --aspect_ratio "1:1" --resolution "1K" --async --json

# 步骤2:依次轮询状态(每行对应一个独立Bash工具调用)
genmedia status fal-ai/nano-banana-pro/edit <walk_request_id> --result --download ./walk.png --json
genmedia status fal-ai/nano-banana-pro/edit <idle_request_id> --result --download ./idle.png --json
  1. URL来源:始终从工具返回的JSON结果中读取
    downloaded_files[0].url
    。这是所有模型(nano、gpt、Bria)的正确路径。
  2. Bria同步执行:Bria(
    fal-ai/bria/background/remove
    )没有队列端点,不支持
    --async
    参数。请同步运行该命令,数秒即可完成。
  3. 文件夹结构:始终按照以下结构保存文件,根据角色描述生成字符slug(短横线分隔,例如
    pirate-carrot
    ):
./game-assets/
<character-slug>/
character.png
sprites/
walk.png
idle.png
attack.png
jump.png
backgrounds/
layer1-sky.png
layer2-midground.png
layer3-foreground.png
下载前先创建文件夹(使用
mkdir -p
)。即使仅运行部分流程(例如仅生成一个精灵表),也需遵循此结构(将文件放入
sprites/
目录)。
  1. 最终总结:所有下载完成后,打印包含每个文件路径及其CDN URL的总结。格式如下:
=== 游戏资产:pirate-carrot ===
character game-assets/pirate-carrot/character.png
https://...
walk game-assets/pirate-carrot/sprites/walk.png
https://...
  1. 状态轮询返回400错误
    genmedia status --result
    仅获取一次结果,不会自动轮询。若返回400错误且提示
    "Request is still in progress"
    ,说明任务仍在运行,请等待10秒后重试完全相同的
    genmedia status
    调用(使用相同的request_id)。请勿重新触发原始的
    genmedia run --async
    任务(任务已在fal端运行)。每隔10-15秒重试一次,直到获取成功结果。

When to use

适用场景

  • Generating a pixel art character from a text description or reference image
  • Creating sprite sheet animations (walk, jump, attack, idle) for a side-scroller
  • Creating isometric RPG sprite sheets (walk, attack, idle across directions)
  • Removing backgrounds from sprite sheets to get transparent PNGs
  • Generating parallax backgrounds (3-layer) for side-scrollers
  • Generating top-down isometric game maps for RPGs
  • 根据文字描述或参考图像生成像素艺术角色
  • 为横版卷轴游戏创建精灵表动画(行走、跳跃、攻击、 idle)
  • 为等距RPG游戏创建精灵表动画(多方向行走、攻击、 idle)
  • 移除精灵表背景以获得透明PNG文件
  • 为横版卷轴游戏生成3层视差背景
  • 为RPG游戏生成俯视等距游戏地图

Models in the stack

技术栈中的模型

  • Nano Banana Pro:
    fal-ai/nano-banana-pro
    , character + background generation; better quality and faster, recommended default
  • Nano Banana Pro Edit:
    fal-ai/nano-banana-pro/edit
    , sprite sheet generation from character image
  • GPT-Image-2:
    openai/gpt-image-2
    , character + background generation; slower than nano, use when user prefers it or wants cheaper output (
    quality=low
    )
  • GPT-Image-2 Edit:
    openai/gpt-image-2/edit
    , sprite sheet generation; slower than nano, requires model-specific walk prompt; use
    quality=low
    for cheaper runs
  • Bria RMBG 2.0:
    fal-ai/bria/background/remove
    , background removal on all sprite sheets

  • Nano Banana Pro
    fal-ai/nano-banana-pro
    ,用于角色和背景生成;质量更高、速度更快,推荐作为默认选择
  • Nano Banana Pro Edit
    fal-ai/nano-banana-pro/edit
    ,基于角色图像生成精灵表
  • GPT-Image-2
    openai/gpt-image-2
    ,用于角色和背景生成;速度慢于nano,当用户偏好该模型或需要低成本输出时使用(设置
    quality=low
  • GPT-Image-2 Edit
    openai/gpt-image-2/edit
    ,用于生成精灵表;速度慢于nano,需要模型特定的行走提示词;使用
    quality=low
    可降低运行成本
  • Bria RMBG 2.0
    fal-ai/bria/background/remove
    ,用于移除所有精灵表的背景

Recipe 1. Generate character

方案1:生成角色

Ask the user: character description (text) or an existing image to convert. Ask model preference:
nano
(default, better quality + faster) or
gpt
(slower; use
quality=low
if user wants cheaper output).
bash
CHARACTER_STYLE_PROMPT="Generate a single character only, centered in the frame on a plain white background. The character should be rendered in detailed 32-bit pixel art style (like PlayStation 1 / SNES era games). Include proper shading, highlights, and anti-aliased edges for a polished look. The character should have well-defined features, expressive details, and rich colors. Show in a front-facing or 3/4 view pose, standing idle, suitable for sprite sheet animation."

IMAGE_TO_PIXEL_PROMPT="Transform this character into detailed 32-bit pixel art style (like PlayStation 1 / SNES era games). IMPORTANT: Must be a FULL BODY shot showing the entire character from head to feet. Keep the character centered in the frame on a plain white background. Include proper shading, highlights, and anti-aliased edges for a polished look. The character should have well-defined features, expressive details, and rich colors. Show in a front-facing or 3/4 view pose, standing idle, suitable for sprite sheet animation. Maintain the character's key features, colors, and identity while converting to pixel art."
询问用户:提供角色描述(文字)或需要转换的现有图像。询问模型偏好:
nano
(默认选项,质量更高、速度更快)或
gpt
(速度较慢;若用户需要低成本输出,可设置
quality=low
)。
bash
CHARACTER_STYLE_PROMPT="Generate a single character only, centered in the frame on a plain white background. The character should be rendered in detailed 32-bit pixel art style (like PlayStation 1 / SNES era games). Include proper shading, highlights, and anti-aliased edges for a polished look. The character should have well-defined features, expressive details, and rich colors. Show in a front-facing or 3/4 view pose, standing idle, suitable for sprite sheet animation."

IMAGE_TO_PIXEL_PROMPT="Transform this character into detailed 32-bit pixel art style (like PlayStation 1 / SNES era games). IMPORTANT: Must be a FULL BODY shot showing the entire character from head to feet. Keep the character centered in the frame on a plain white background. Include proper shading, highlights, and anti-aliased edges for a polished look. The character should have well-defined features, expressive details, and rich colors. Show in a front-facing or 3/4 view pose, standing idle, suitable for sprite sheet animation. Maintain the character's key features, colors, and identity while converting to pixel art."

Text → pixel art character (nano)

文字→像素艺术角色(nano)

genmedia run fal-ai/nano-banana-pro
--prompt "$CHARACTER_STYLE_PROMPT Character: <character_desc>"
--aspect_ratio "1:1" --resolution "1K"
--download ./game-assets/<slug>/character.png --json
genmedia run fal-ai/nano-banana-pro
--prompt "$CHARACTER_STYLE_PROMPT Character: <character_desc>"
--aspect_ratio "1:1" --resolution "1K"
--download ./game-assets/<slug>/character.png --json

Text → pixel art character (gpt)

文字→像素艺术角色(gpt)

genmedia run openai/gpt-image-2
--prompt "$CHARACTER_STYLE_PROMPT Character: <character_desc>"
--image_size "square_hd" --quality "high"
--download ./game-assets/<slug>/character.png --json
genmedia run openai/gpt-image-2
--prompt "$CHARACTER_STYLE_PROMPT Character: <character_desc>"
--image_size "square_hd" --quality "high"
--download ./game-assets/<slug>/character.png --json

Existing image → pixel art (nano), upload source image first, then run edit

现有图像→像素艺术(nano),先上传源图像,再运行编辑命令

genmedia upload /path/to/image.png --json genmedia run fal-ai/nano-banana-pro/edit
--prompt "$IMAGE_TO_PIXEL_PROMPT"
--image_urls "["<uploaded_url_from_above>"]"
--aspect_ratio "1:1" --resolution "1K"
--download ./game-assets/<slug>/character.png --json

Read `downloaded_files[0].url` from the tool result, this is `CHARACTER_URL`, needed for all sprite sheet recipes.

---
genmedia upload /path/to/image.png --json genmedia run fal-ai/nano-banana-pro/edit
--prompt "$IMAGE_TO_PIXEL_PROMPT"
--image_urls "["<uploaded_url_from_above>"]"
--aspect_ratio "1:1" --resolution "1K"
--download ./game-assets/<slug>/character.png --json

从工具结果中读取`downloaded_files[0].url`,这就是`CHARACTER_URL`,所有精灵表方案都需要该URL。

---

Recipe 2. Generate sprite sheets

方案2:生成精灵表

Pass
CHARACTER_URL
from Recipe 1. Choose
--style side
(side-scroller) or
--style iso
(isometric RPG). Choose model:
nano
or
gpt
.
Side-scroller sheets: 4-frame 2×2 grid animations. Covered types:
walk
,
jump
,
attack
,
idle
. Do not generate additional animation types (hurt, death, run, etc.) unless the user explicitly requests them.
Fire all sheets async (each is its own Bash tool call), then poll sequentially:
bash
WALK_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is walking to the right. Top row (frames 1-2): Frame 1 (top-left): Right leg forward, left leg back - stride position. Frame 2 (top-right): Legs close together, passing/crossing - transition. Bottom row (frames 3-4): Frame 3 (bottom-left): Left leg forward, right leg back - opposite stride. Frame 4 (bottom-right): Legs close together, passing/crossing - transition back. Each frame shows a different phase of the walking motion. This creates a smooth looping walk cycle. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."

WALK_PROMPT_GPT="Create a 4-frame pixel art walk cycle sprite sheet of this character. Character orientation (critical): The character is shown in SIDE PROFILE, with their face, chest, and front foot pointing toward the RIGHT edge of the image. The character's back is on the LEFT side of the image. This is the same side-profile orientation used in classic 2D platformers like Super Mario Bros or Mega Man moving rightward across the screen. Arrange the 4 frames in a 2x2 grid on white background. Top row (frames 1-2): Frame 1 (top-left): Front leg (right leg) extended forward toward the right edge of the image, back leg extended behind toward the left edge. Frame 2 (top-right): Legs close together, passing pose. Bottom row (frames 3-4): Frame 3 (bottom-left): Opposite stride, back leg (left leg) now forward toward the right edge. Frame 4 (bottom-right): Legs close together, passing pose. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. All 4 frames must show the character from the SAME side profile angle, facing the RIGHT edge of the image."

JUMP_PROMPT="Create a 4-frame pixel art jump animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is jumping. Top row (frames 1-2): Frame 1 (top-left): Crouch/anticipation - character slightly crouched, knees bent, preparing to jump. Frame 2 (top-right): Rising - character in air, legs tucked up, arms up, ascending. Bottom row (frames 3-4): Frame 3 (bottom-left): Apex/peak - character at highest point of jump, body stretched or tucked. Frame 4 (bottom-right): Landing - character landing, slight crouch to absorb impact. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."

ATTACK_PROMPT="Create a 4-frame pixel art attack animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is performing an attack that fits their design - could be a sword slash, magic spell, punch, kick, or energy blast depending on what suits the character best. Top row (frames 1-2): Frame 1 (top-left): Wind-up/anticipation - character preparing to attack, pulling back weapon or gathering energy. Frame 2 (top-right): Attack in motion - the strike or spell being unleashed. Bottom row (frames 3-4): Frame 3 (bottom-left): Impact/peak - maximum extension of attack, weapon fully swung or spell at full power. Frame 4 (bottom-right): Recovery - returning to ready stance. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right. Make the attack visually dynamic and exciting."

IDLE_PROMPT="Create a 4-frame pixel art idle/breathing animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is standing still but with subtle idle animation. Top row (frames 1-2): Frame 1 (top-left): Neutral standing pose - relaxed stance. Frame 2 (top-right): Slight inhale - chest/body rises subtly, maybe slight arm movement. Bottom row (frames 3-4): Frame 3 (bottom-left): Full breath - slight upward posture. Frame 4 (bottom-right): Exhale - returning to neutral, slight settle. Keep movements SUBTLE - this is a gentle breathing/idle loop, not dramatic motion. Character should look alive but relaxed. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."
传入方案1中的
CHARACTER_URL
。选择
--style side
(横版卷轴)或
--style iso
(等距RPG)。选择模型:
nano
gpt
横版卷轴精灵表:4帧2×2网格动画。支持的类型:
walk
(行走)、
jump
(跳跃)、
attack
(攻击)、
idle
( idle)。除非用户明确要求,否则不要生成其他动画类型(受伤、死亡、奔跑等)。
异步触发所有精灵表任务(每个任务对应一个独立Bash工具调用),然后依次轮询状态:
bash
WALK_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is walking to the right. Top row (frames 1-2): Frame 1 (top-left): Right leg forward, left leg back - stride position. Frame 2 (top-right): Legs close together, passing/crossing - transition. Bottom row (frames 3-4): Frame 3 (bottom-left): Left leg forward, right leg back - opposite stride. Frame 4 (bottom-right): Legs close together, passing/crossing - transition back. Each frame shows a different phase of the walking motion. This creates a smooth looping walk cycle. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."

WALK_PROMPT_GPT="Create a 4-frame pixel art walk cycle sprite sheet of this character. Character orientation (critical): The character is shown in SIDE PROFILE, with their face, chest, and front foot pointing toward the RIGHT edge of the image. The character's back is on the LEFT side of the image. This is the same side-profile orientation used in classic 2D platformers like Super Mario Bros or Mega Man moving rightward across the screen. Arrange the 4 frames in a 2x2 grid on white background. Top row (frames 1-2): Frame 1 (top-left): Front leg (right leg) extended forward toward the right edge of the image, back leg extended behind toward the left edge. Frame 2 (top-right): Legs close together, passing pose. Bottom row (frames 3-4): Frame 3 (bottom-left): Opposite stride, back leg (left leg) now forward toward the right edge. Frame 4 (bottom-right): Legs close together, passing pose. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. All 4 frames must show the character from the SAME side profile angle, facing the RIGHT edge of the image."

JUMP_PROMPT="Create a 4-frame pixel art jump animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is jumping. Top row (frames 1-2): Frame 1 (top-left): Crouch/anticipation - character slightly crouched, knees bent, preparing to jump. Frame 2 (top-right): Rising - character in air, legs tucked up, arms up, ascending. Bottom row (frames 3-4): Frame 3 (bottom-left): Apex/peak - character at highest point of jump, body stretched or tucked. Frame 4 (bottom-right): Landing - character landing, slight crouch to absorb impact. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."

ATTACK_PROMPT="Create a 4-frame pixel art attack animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is performing an attack that fits their design - could be a sword slash, magic spell, punch, kick, or energy blast depending on what suits the character best. Top row (frames 1-2): Frame 1 (top-left): Wind-up/anticipation - character preparing to attack, pulling back weapon or gathering energy. Frame 2 (top-right): Attack in motion - the strike or spell being unleashed. Bottom row (frames 3-4): Frame 3 (bottom-left): Impact/peak - maximum extension of attack, weapon fully swung or spell at full power. Frame 4 (bottom-right): Recovery - returning to ready stance. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right. Make the attack visually dynamic and exciting."

IDLE_PROMPT="Create a 4-frame pixel art idle/breathing animation sprite sheet of this character. Arrange the 4 frames in a 2x2 grid on white background. The character is standing still but with subtle idle animation. Top row (frames 1-2): Frame 1 (top-left): Neutral standing pose - relaxed stance. Frame 2 (top-right): Slight inhale - chest/body rises subtly, maybe slight arm movement. Bottom row (frames 3-4): Frame 3 (bottom-left): Full breath - slight upward posture. Frame 4 (bottom-right): Exhale - returning to neutral, slight settle. Keep movements SUBTLE - this is a gentle breathing/idle loop, not dramatic motion. Character should look alive but relaxed. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames. Character facing right."

Fire all 4 async, each is its own Bash tool call

异步触发4个任务,每个对应独立Bash工具调用

genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$JUMP_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "21:9" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$JUMP_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "21:9" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json

Poll each, each is its own Bash tool call, run sequentially

依次轮询每个任务状态,每个对应独立Bash工具调用

genmedia status fal-ai/nano-banana-pro/edit <walk_request_id> --result --download ./game-assets/<slug>/sprites/walk.png --json genmedia status fal-ai/nano-banana-pro/edit <jump_request_id> --result --download ./game-assets/<slug>/sprites/jump.png --json genmedia status fal-ai/nano-banana-pro/edit <attack_request_id> --result --download ./game-assets/<slug>/sprites/attack.png --json genmedia status fal-ai/nano-banana-pro/edit <idle_request_id> --result --download ./game-assets/<slug>/sprites/idle.png --json
genmedia status fal-ai/nano-banana-pro/edit <walk_request_id> --result --download ./game-assets/<slug>/sprites/walk.png --json genmedia status fal-ai/nano-banana-pro/edit <jump_request_id> --result --download ./game-assets/<slug>/sprites/jump.png --json genmedia status fal-ai/nano-banana-pro/edit <attack_request_id> --result --download ./game-assets/<slug>/sprites/attack.png --json genmedia status fal-ai/nano-banana-pro/edit <idle_request_id> --result --download ./game-assets/<slug>/sprites/idle.png --json

GPT variants: replace fal-ai/nano-banana-pro/edit with openai/gpt-image-2/edit

GPT版本:将fal-ai/nano-banana-pro/edit替换为openai/gpt-image-2/edit

Walk must use WALK_PROMPT_GPT (not WALK_PROMPT)

行走动画必须使用WALK_PROMPT_GPT(而非WALK_PROMPT)

Replace --aspect_ratio with explicit --image_size:

将--aspect_ratio替换为明确的--image_size参数:

1:1 → --image_size "square_hd"

1:1 → --image_size "square_hd"

21:9 → --image_size "{"width": 2688, "height": 1152}"

21:9 → --image_size "{"width": 2688, "height": 1152}"


**Isometric RPG sheets**: 3/4 overhead perspective. Covered types: `walk-down`, `walk-up`, `walk-side`, `attack-down`, `attack-up`, `attack-side`, `idle-iso`. Do not generate additional animation types unless the user explicitly requests them.

> Generate attack-down first, attack-up and attack-side both reference it for style consistency.

```bash
WALK_DOWN_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character walking DOWNWARD (toward the camera) in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. The character is walking toward the viewer (south/down). Top row: Frame 1 (top-left): Left foot forward stride, arms swinging naturally. Frame 2 (top-right): Feet together, passing/transition pose. Bottom row: Frame 3 (bottom-left): Right foot forward stride, arms swinging naturally. Frame 4 (bottom-right): Feet together, passing/transition back. We see the character's front/face. Top-down 3/4 view - we see the top of their head slightly. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames."

WALK_UP_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character walking UPWARD (away from the camera) in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. CRITICAL: ALL 4 frames must show the character from EXACTLY the same angle, their BACK, facing directly away from the camera. Do NOT rotate or twist the character between frames. The ONLY difference between frames should be the leg and arm positions. Top row: Frame 1 (top-left): Left foot forward. BACK VIEW. Frame 2 (top-right): Feet together. BACK VIEW. Bottom row: Frame 3 (bottom-left): Right foot forward. BACK VIEW. Frame 4 (bottom-right): Feet together. BACK VIEW. Use detailed 32-bit pixel art style. Same character design in all frames."

WALK_SIDE_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character WALKING TO THE RIGHT in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. The character is FACING RIGHT and WALKING RIGHT. Top row: Frame 1 (top-left): Right leg forward, left leg back - stride, arms swinging. Frame 2 (top-right): Legs close together, passing - transition. Bottom row: Frame 3 (bottom-left): Left leg forward, right leg back - opposite stride, arms swinging. Frame 4 (bottom-right): Legs close together, passing - transition back. We see the character's RIGHT-facing side profile from a top-down 3/4 overhead angle. Use detailed 32-bit pixel art style. Same character design in all frames."

ATTACK_DOWN_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking DOWNWARD (toward the camera) in a top-down isometric RPG perspective (3/4 overhead view). Arrange the 4 frames in a 2x2 grid on white background. Top row: Frame 1 (top-left): Wind-up/anticipation - preparing to strike. Frame 2 (top-right): Attack in motion - strike unleashed toward camera. Bottom row: Frame 3 (bottom-left): Impact/peak - maximum extension. Frame 4 (bottom-right): Recovery. We see the character's front/face. The attack should fit the character's design. Use detailed 32-bit pixel art style. Make the attack visually dynamic."

ATTACK_UP_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking UPWARD (away from the camera) in a top-down isometric RPG perspective. I've also sent you a reference of the same character's front-facing attack. Use the EXACT SAME attack type, weapon, and visual effects - just show it from behind. Arrange the 4 frames in a 2x2 grid on white background. Top row: Frame 1 (top-left): Wind-up from behind. Frame 2 (top-right): Attack unleashed upward/away. Bottom row: Frame 3 (bottom-left): Impact/peak. Frame 4 (bottom-right): Recovery. We see the character's back. MUST use the same attack style as the reference image. Use detailed 32-bit pixel art style."

ATTACK_SIDE_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking SIDEWAYS (to the right) in a top-down isometric RPG perspective. I've also sent you a reference of the same character's front-facing attack. Use the EXACT SAME attack type, weapon, and visual effects - just show it from the side profile. Arrange the 4 frames in a 2x2 grid on white background. Character faces RIGHT. Top row: Frame 1 (top-left): Wind-up from side, facing right. Frame 2 (top-right): Strike unleashed to the right. Bottom row: Frame 3 (bottom-left): Impact/peak. Frame 4 (bottom-right): Recovery. IMPORTANT: Show the character's SIDE PROFILE facing RIGHT. MUST use the same attack style as the reference image. Use detailed 32-bit pixel art style."

IDLE_ISO_PROMPT="Create a 4-frame pixel art idle/breathing animation sprite sheet of this character in a top-down isometric RPG perspective (3/4 overhead view). Arrange the 4 frames in a 2x2 grid on white background. Character is FACING TOWARD THE CAMERA (south/down). Top row: Frame 1 (top-left): Neutral standing pose, facing down. Frame 2 (top-right): Slight inhale - body rises subtly. Bottom row: Frame 3 (bottom-left): Full breath - slight upward posture. Frame 4 (bottom-right): Exhale - returning to neutral. Keep movements SUBTLE. Use detailed 32-bit pixel art style. Same character design in all frames."

**等距RPG精灵表**:3/4俯视视角。支持的类型:`walk-down`(向下行走)、`walk-up`(向上行走)、`walk-side`(侧向行走)、`attack-down`(向下攻击)、`attack-up`(向上攻击)、`attack-side`(侧向攻击)、`idle-iso`(等距 idle)。除非用户明确要求,否则不要生成其他动画类型。

> 先生成attack-down动画,attack-up和attack-side均参考该动画以保持风格一致性。

```bash
WALK_DOWN_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character walking DOWNWARD (toward the camera) in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. The character is walking toward the viewer (south/down). Top row: Frame 1 (top-left): Left foot forward stride, arms swinging naturally. Frame 2 (top-right): Feet together, passing/transition pose. Bottom row: Frame 3 (bottom-left): Right foot forward stride, arms swinging naturally. Frame 4 (bottom-right): Feet together, passing/transition back. We see the character's front/face. Top-down 3/4 view - we see the top of their head slightly. Use detailed 32-bit pixel art style with proper shading and highlights. Same character design in all frames."

WALK_UP_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character walking UPWARD (away from the camera) in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. CRITICAL: ALL 4 frames must show the character from EXACTLY the same angle, their BACK, facing directly away from the camera. Do NOT rotate or twist the character between frames. The ONLY difference between frames should be the leg and arm positions. Top row: Frame 1 (top-left): Left foot forward. BACK VIEW. Frame 2 (top-right): Feet together. BACK VIEW. Bottom row: Frame 3 (bottom-left): Right foot forward. BACK VIEW. Frame 4 (bottom-right): Feet together. BACK VIEW. Use detailed 32-bit pixel art style. Same character design in all frames."

WALK_SIDE_PROMPT="Create a 4-frame pixel art walk cycle sprite sheet of this character WALKING TO THE RIGHT in a top-down isometric RPG perspective (3/4 overhead view, like a classic top-down RPG). Arrange the 4 frames in a 2x2 grid on white background. The character is FACING RIGHT and WALKING RIGHT. Top row: Frame 1 (top-left): Right leg forward, left leg back - stride, arms swinging. Frame 2 (top-right): Legs close together, passing - transition. Bottom row: Frame 3 (bottom-left): Left leg forward, right leg back - opposite stride, arms swinging. Frame 4 (bottom-right): Legs close together, passing - transition back. We see the character's RIGHT-facing side profile from a top-down 3/4 overhead angle. Use detailed 32-bit pixel art style. Same character design in all frames."

ATTACK_DOWN_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking DOWNWARD (toward the camera) in a top-down isometric RPG perspective (3/4 overhead view). Arrange the 4 frames in a 2x2 grid on white background. Top row: Frame 1 (top-left): Wind-up/anticipation - preparing to strike. Frame 2 (top-right): Attack in motion - strike unleashed toward camera. Bottom row: Frame 3 (bottom-left): Impact/peak - maximum extension. Frame 4 (bottom-right): Recovery. We see the character's front/face. The attack should fit the character's design. Use detailed 32-bit pixel art style. Make the attack visually dynamic."

ATTACK_UP_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking UPWARD (away from the camera) in a top-down isometric RPG perspective. I've also sent you a reference of the same character's front-facing attack. Use the EXACT SAME attack type, weapon, and visual effects - just show it from behind. Arrange the 4 frames in a 2x2 grid on white background. Top row: Frame 1 (top-left): Wind-up from behind. Frame 2 (top-right): Attack unleashed upward/away. Bottom row: Frame 3 (bottom-left): Impact/peak. Frame 4 (bottom-right): Recovery. We see the character's back. MUST use the same attack style as the reference image. Use detailed 32-bit pixel art style."

ATTACK_SIDE_PROMPT="Create a 4-frame pixel art ATTACK animation sprite sheet of this character attacking SIDEWAYS (to the right) in a top-down isometric RPG perspective. I've also sent you a reference of the same character's front-facing attack. Use the EXACT SAME attack type, weapon, and visual effects - just show it from the side profile. Arrange the 4 frames in a 2x2 grid on white background. Character faces RIGHT. Top row: Frame 1 (top-left): Wind-up from side, facing right. Frame 2 (top-right): Strike unleashed to the right. Bottom row: Frame 3 (bottom-left): Impact/peak. Frame 4 (bottom-right): Recovery. IMPORTANT: Show the character's SIDE PROFILE facing RIGHT. MUST use the same attack style as the reference image. Use detailed 32-bit pixel art style."

IDLE_ISO_PROMPT="Create a 4-frame pixel art idle/breathing animation sprite sheet of this character in a top-down isometric RPG perspective (3/4 overhead view). Arrange the 4 frames in a 2x2 grid on white background. Character is FACING TOWARD THE CAMERA (south/down). Top row: Frame 1 (top-left): Neutral standing pose, facing down. Frame 2 (top-right): Slight inhale - body rises subtly. Bottom row: Frame 3 (bottom-left): Full breath - slight upward posture. Frame 4 (bottom-right): Exhale - returning to neutral. Keep movements SUBTLE. Use detailed 32-bit pixel art style. Same character design in all frames."

Fire walk sheets + idle async, each is its own Bash tool call

异步触发行走精灵表和idle动画任务,每个对应独立Bash工具调用

genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_DOWN_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_UP_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_SIDE_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_ISO_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_DOWN_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_UP_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$WALK_SIDE_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$IDLE_ISO_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "1:1" --resolution "1K" --async --json

Poll walk results sequentially

依次轮询行走动画结果

genmedia status fal-ai/nano-banana-pro/edit <walk_down_request_id> --result --download ./game-assets/<slug>/sprites/walk-down.png --json genmedia status fal-ai/nano-banana-pro/edit <walk_up_request_id> --result --download ./game-assets/<slug>/sprites/walk-up.png --json genmedia status fal-ai/nano-banana-pro/edit <walk_side_request_id> --result --download ./game-assets/<slug>/sprites/walk-side.png --json genmedia status fal-ai/nano-banana-pro/edit <idle_iso_request_id> --result --download ./game-assets/<slug>/sprites/idle-iso.png --json
genmedia status fal-ai/nano-banana-pro/edit <walk_down_request_id> --result --download ./game-assets/<slug>/sprites/walk-down.png --json genmedia status fal-ai/nano-banana-pro/edit <walk_up_request_id> --result --download ./game-assets/<slug>/sprites/walk-up.png --json genmedia status fal-ai/nano-banana-pro/edit <walk_side_request_id> --result --download ./game-assets/<slug>/sprites/walk-side.png --json genmedia status fal-ai/nano-banana-pro/edit <idle_iso_request_id> --result --download ./game-assets/<slug>/sprites/idle-iso.png --json

Attack-down sync, needed as reference before firing attack-up and attack-side

同步生成attack-down动画,作为生成attack-up和attack-side的参考

genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_DOWN_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "9:16" --resolution "1K" --download ./game-assets/<slug>/sprites/attack-down.png --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_DOWN_PROMPT" --image_urls "["$CHARACTER_URL"]" --aspect_ratio "9:16" --resolution "1K" --download ./game-assets/<slug>/sprites/attack-down.png --json

Fire attack-up and attack-side async, passing attack-down URL from above result

异步触发attack-up和attack-side任务,传入上述结果中的attack-down URL

genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_UP_PROMPT" --image_urls "["$CHARACTER_URL", "<attack_down_url>"]" --aspect_ratio "9:16" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_SIDE_PROMPT" --image_urls "["$CHARACTER_URL", "<attack_down_url>"]" --aspect_ratio "16:9" --resolution "1K" --async --json
genmedia status fal-ai/nano-banana-pro/edit <attack_up_request_id> --result --download ./game-assets/<slug>/sprites/attack-up.png --json genmedia status fal-ai/nano-banana-pro/edit <attack_side_request_id> --result --download ./game-assets/<slug>/sprites/attack-side.png --json
genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_UP_PROMPT" --image_urls "["$CHARACTER_URL", "<attack_down_url>"]" --aspect_ratio "9:16" --resolution "1K" --async --json genmedia run fal-ai/nano-banana-pro/edit --prompt "$ATTACK_SIDE_PROMPT" --image_urls "["$CHARACTER_URL", "<attack_down_url>"]" --aspect_ratio "16:9" --resolution "1K" --async --json
genmedia status fal-ai/nano-banana-pro/edit <attack_up_request_id> --result --download ./game-assets/<slug>/sprites/attack-up.png --json genmedia status fal-ai/nano-banana-pro/edit <attack_side_request_id> --result --download ./game-assets/<slug>/sprites/attack-side.png --json

GPT variants: replace fal-ai/nano-banana-pro/edit with openai/gpt-image-2/edit

GPT版本:将fal-ai/nano-banana-pro/edit替换为openai/gpt-image-2/edit

Replace --aspect_ratio with explicit --image_size:

将--aspect_ratio替换为明确的--image_size参数:

1:1 → --image_size "square_hd"

1:1 → --image_size "square_hd"

9:16 → --image_size "{"width": 720, "height": 1280}"

9:16 → --image_size "{"width": 720, "height": 1280}"

16:9 → --image_size "{"width": 1280, "height": 720}"

16:9 → --image_size "{"width": 1280, "height": 720}"


---

---

Recipe 3. Remove backgrounds

方案3:移除背景

Bria has no queue endpoint, run sync (no
--async
). Each is its own Bash tool call:
bash
genmedia run fal-ai/bria/background/remove --image_url "<walk_url>" --download ./game-assets/<slug>/sprites/walk-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<jump_url>" --download ./game-assets/<slug>/sprites/jump-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<attack_url>" --download ./game-assets/<slug>/sprites/attack-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<idle_url>" --download ./game-assets/<slug>/sprites/idle-transparent.png --json

Bria没有队列端点,同步运行(不使用
--async
参数)。每个命令对应独立Bash工具调用:
bash
genmedia run fal-ai/bria/background/remove --image_url "<walk_url>" --download ./game-assets/<slug>/sprites/walk-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<jump_url>" --download ./game-assets/<slug>/sprites/jump-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<attack_url>" --download ./game-assets/<slug>/sprites/attack-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<idle_url>" --download ./game-assets/<slug>/sprites/idle-transparent.png --json

Recipe 4. Generate backgrounds

方案4:生成背景

Pipeline note: Layer 1 (sky) and the isometric map only need
CHARACTER_DESC
, no image reference. Fire Layer 1 async immediately after character generation so it runs in parallel while you generate sprite sheets. Layers 2 and 3 are sequential (each needs the previous layer's URL from the tool result).
Side-scroller, 3-layer parallax
bash
undefined
流程说明:第1层(天空)和等距地图仅需
CHARACTER_DESC
,无需图像参考。在生成角色后立即异步触发第1层任务,使其与精灵表生成任务并行运行。第2层和第3层需按顺序生成(每层都需要前一层的URL,来自工具结果)。
横版卷轴3层视差背景
bash
undefined

Layer 1, sky/backdrop. Fire async (no image dep) so it runs in parallel with sprite generation

第1层:天空/背景。异步触发(无图像依赖),与精灵表生成任务并行运行

genmedia run fal-ai/nano-banana-pro
--prompt "Create the SKY/BACKDROP layer for a side-scrolling pixel art game parallax background. This is for a character: <character_desc>. Create an environment that fits this character's world. This is the FURTHEST layer - only sky and very distant elements (distant mountains, clouds, horizon). Style: Pixel art, 32-bit retro game aesthetic. Wide panoramic scene."
--aspect_ratio "21:9" --resolution "1K" --async --json
genmedia run fal-ai/nano-banana-pro
--prompt "Create the SKY/BACKDROP layer for a side-scrolling pixel art game parallax background. This is for a character: <character_desc>. Create an environment that fits this character's world. This is the FURTHEST layer - only sky and very distant elements (distant mountains, clouds, horizon). Style: Pixel art, 32-bit retro game aesthetic. Wide panoramic scene."
--aspect_ratio "21:9" --resolution "1K" --async --json

Poll Layer 1 (after sprite sheets are done), then read its URL from the result

轮询第1层结果(精灵表生成完成后),从结果中读取其URL

genmedia status fal-ai/nano-banana-pro <layer1_request_id> --result --download ./game-assets/<slug>/backgrounds/layer1-sky.png --json
genmedia status fal-ai/nano-banana-pro <layer1_request_id> --result --download ./game-assets/<slug>/backgrounds/layer1-sky.png --json

Layer 2, midground (needs CHARACTER_URL + layer1 URL from above result)

第2层:中层(需要CHARACTER_URL + 上述结果中的layer1 URL)

genmedia run fal-ai/nano-banana-pro/edit
--prompt "Create the MIDDLE layer of a 3-layer parallax background for a side-scrolling pixel art game. I've sent you images of: 1) the character, 2) the sky layer already created. Create the character's ICONIC/CANONICAL location from their story, home village, famous landmarks, signature battlegrounds. Elements should fill the frame from middle down to bottom. Style: Pixel art matching the other images. IMPORTANT: Use a transparent background so this layer can overlay the others."
--image_urls "["<character_url>", "<layer1_url>"]"
--aspect_ratio "21:9" --resolution "1K" --download ./game-assets/<slug>/backgrounds/layer2-midground.png --json
genmedia run fal-ai/nano-banana-pro/edit
--prompt "Create the MIDDLE layer of a 3-layer parallax background for a side-scrolling pixel art game. I've sent you images of: 1) the character, 2) the sky layer already created. Create the character's ICONIC/CANONICAL location from their story, home village, famous landmarks, signature battlegrounds. Elements should fill the frame from middle down to bottom. Style: Pixel art matching the other images. IMPORTANT: Use a transparent background so this layer can overlay the others."
--image_urls "["<character_url>", "<layer1_url>"]"
--aspect_ratio "21:9" --resolution "1K" --download ./game-assets/<slug>/backgrounds/layer2-midground.png --json

Bria bg-remove on layer 2 (sync, no queue endpoint)

使用Bria移除第2层背景(同步运行,无队列端点)

genmedia run fal-ai/bria/background/remove --image_url "<layer2_url>" --download ./game-assets/<slug>/backgrounds/layer2-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<layer2_url>" --download ./game-assets/<slug>/backgrounds/layer2-transparent.png --json

Layer 3, foreground (needs CHARACTER_URL + layer1 URL + layer2-transparent URL from above result)

第3层:前景(需要CHARACTER_URL + layer1 URL + 上述结果中的layer2-transparent URL)

genmedia run fal-ai/nano-banana-pro/edit
--prompt "Create the FOREGROUND layer of a 3-layer parallax background for a side-scrolling pixel art game. I've sent you images of: 1) the character, 2) the sky layer, 3) the middle layer. Create the closest foreground elements (ground, grass, rocks, platforms) that complete the scene. Style: Pixel art matching the other images. IMPORTANT: Use a transparent background so this layer can overlay the others."
--image_urls "["<character_url>", "<layer1_url>", "<layer2_transparent_url>"]"
--aspect_ratio "21:9" --resolution "1K" --download ./game-assets/<slug>/backgrounds/layer3-foreground.png --json
genmedia run fal-ai/nano-banana-pro/edit
--prompt "Create the FOREGROUND layer of a 3-layer parallax background for a side-scrolling pixel art game. I've sent you images of: 1) the character, 2) the sky layer, 3) the middle layer. Create the closest foreground elements (ground, grass, rocks, platforms) that complete the scene. Style: Pixel art matching the other images. IMPORTANT: Use a transparent background so this layer can overlay the others."
--image_urls "["<character_url>", "<layer1_url>", "<layer2_transparent_url>"]"
--aspect_ratio "21:9" --resolution "1K" --download ./game-assets/<slug>/backgrounds/layer3-foreground.png --json

Bria bg-remove on layer 3 (sync, no queue endpoint)

使用Bria移除第3层背景(同步运行,无队列端点)

genmedia run fal-ai/bria/background/remove --image_url "<layer3_url>" --download ./game-assets/<slug>/backgrounds/layer3-transparent.png --json
genmedia run fal-ai/bria/background/remove --image_url "<layer3_url>" --download ./game-assets/<slug>/backgrounds/layer3-transparent.png --json

GPT variant: replace nano endpoints with openai/gpt-image-2 and openai/gpt-image-2/edit

GPT版本:将nano端点替换为openai/gpt-image-2和openai/gpt-image-2/edit

Use --image_size '{"width": 2688, "height": 1152}' for 21:9 with gpt

对于21:9比例,使用--image_size '{"width": 2688, "height": 1152}'参数


**Isometric, single top-down map**

```bash
genmedia run fal-ai/nano-banana-pro \
 --prompt "Create a large, detailed top-down isometric pixel art game world map for a character: $CHARACTER_DESC. Do not place the character on the map. Style: Classic RPG top-down map, 3/4 overhead perspective. Include: winding dirt/stone paths connecting areas, a small body of water, a few buildings or structures that fit the character's world, rocky areas or hills, various terrain types. Single large continuous map image (NOT tiled, NOT a tileset). Complete explorable game world viewed from above. Detailed 32-bit pixel art style. Fill the entire image with map content, no empty borders." \
 --aspect_ratio "1:1" --resolution "1K" \
 --download ./game-assets/<slug>/backgrounds/map.png --json


**等距俯视地图**

```bash
genmedia run fal-ai/nano-banana-pro \
 --prompt "Create a large, detailed top-down isometric pixel art game world map for a character: $CHARACTER_DESC. Do not place the character on the map. Style: Classic RPG top-down map, 3/4 overhead perspective. Include: winding dirt/stone paths connecting areas, a small body of water, a few buildings or structures that fit the character's world, rocky areas or hills, various terrain types. Single large continuous map image (NOT tiled, NOT a tileset). Complete explorable game world viewed from above. Detailed 32-bit pixel art style. Fill the entire image with map content, no empty borders." \
 --aspect_ratio "1:1" --resolution "1K" \
 --download ./game-assets/<slug>/backgrounds/map.png --json

Parameters

参数说明

  • Model:
    nano
    is the default: better quality and faster.
    gpt
    is slower; use it when the user specifically requests it or asks for the cheapest option, in that case set
    --quality "low"
    to significantly reduce cost
  • Walk + gpt-image-2: always use
    WALK_PROMPT_GPT
    , not
    WALK_PROMPT
    . GPT needs explicit side-profile orientation instructions to get the direction right
  • Attack aspect ratio:
    21:9
    (nano) or
    2688×1152
    (gpt) for side-scroller attacks. Isometric attacks:
    9:16
    for down/up,
    16:9
    for side
  • Isometric attack-up and attack-side: always pass
    ATTACK_DOWN_URL
    as second reference image to keep attack style consistent across directions
  • Background layers: generate in order (1 → 2 → 3). Each references previous layers. Layer 1 keeps background; layers 2 and 3 get background-removed
  • 模型
    nano
    为默认选项,质量更高、速度更快。
    gpt
    速度较慢;当用户明确要求该模型或需要最低成本选项时使用,此时设置
    --quality "low"
    可大幅降低成本
  • 行走动画 + gpt-image-2:始终使用
    WALK_PROMPT_GPT
    ,而非
    WALK_PROMPT
    。GPT需要明确的侧视角方向说明才能确保方向正确
  • 攻击动画比例:横版卷轴攻击动画使用
    21:9
    (nano)或
    2688×1152
    (gpt)。等距攻击动画:向下/向上使用
    9:16
    ,侧向使用
    16:9
  • 等距attack-up和attack-side:始终传入
    ATTACK_DOWN_URL
    作为第二张参考图像,以保持不同方向攻击动画的风格一致性
  • 背景层:按顺序生成(1 → 2 → 3)。每层都参考前一层。第1层保留背景;第2层和第3层需移除背景