agent-sprite-forge-2d-game-assets

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Agent Sprite Forge — 2D Game Asset Generation

Agent Sprite Forge — 2D游戏资源生成

Skill by ara.so — AI Agent Skills collection.
Agent Sprite Forge is a Codex-first 2D game asset workflow where the agent decides the plan, image generation creates the raw visuals, and deterministic scripts turn those visuals into reusable game assets. This skill enables AI agents to generate sprite sheets, layered maps, transparent PNGs, animated GIFs, and engine-ready exports for Godot and Unity.
ara.so提供的技能 — AI Agent技能合集。
Agent Sprite Forge是一款以Codex为核心的2D游戏资源工作流,由Agent制定生成方案,图像生成模块创建原始视觉素材,确定性脚本将这些素材转换为可复用的游戏资源。该技能支持AI Agent生成精灵图、分层地图、透明PNG、动画GIF,以及可直接导入Godot和Unity的导出资源。

What It Does

功能介绍

  • Sprite Sheets: Characters, monsters, props, attacks, spells, projectiles, impacts, idles, walks, and reference-guided variants
  • Layered Maps: Ground-only bases, dressed references, prop packs, transparent props, y-sort placement, collision, zones, and previews
  • Engine Handoff: Godot scenes, editable TileMap layers, separated props, encounter grass, collision bodies, exits, and debug players
  • Local Cleanup: Chroma-key removal, frame extraction, alignment, transparent PNG/GIF export, prop-pack slicing, and QA metadata
  • 精灵图:角色、怪物、道具、攻击特效、法术、投射物、碰撞效果、待机动作、行走动作,以及基于参考图的变体资源
  • 分层地图:纯地面基底、带装饰参考图、道具包、透明道具、Y轴排序布局、碰撞层、区域层和预览图
  • 引擎导出:Godot场景、可编辑TileMap图层、分离的道具、遭遇战草丛、碰撞体、出口和调试玩家
  • 本地处理:绿幕背景移除、帧提取、对齐、透明PNG/GIF导出、道具包切片和QA元数据

Installation

安装步骤

bash
undefined
bash
undefined

Clone the repository

Clone the repository

Install dependencies

Install dependencies

pip install -r requirements.txt
pip install -r requirements.txt

Set up environment variables

Set up environment variables

export OPENAI_API_KEY="your-api-key-here"
export OPENAI_API_KEY="your-api-key-here"

or create .env file

or create .env file

echo "OPENAI_API_KEY=your-api-key-here" > .env
undefined
echo "OPENAI_API_KEY=your-api-key-here" > .env
undefined

Requirements

环境要求

  • Python 3.8+
  • PIL/Pillow for image processing
  • OpenAI API access (for image generation)
  • Optional: Godot 4.x or Unity for engine exports
  • Python 3.8+
  • PIL/Pillow(用于图像处理)
  • OpenAI API访问权限(用于图像生成)
  • 可选:Godot 4.x或Unity(用于引擎导出)

Core Skills

核心功能

1. Generate 2D Sprite Sheets (
$generate2dsprite
)

1. 生成2D精灵图 (
$generate2dsprite
)

Use this skill when you need animated units, playable characters, monsters, props, spell bundles, or projectile/impact effects.
Basic sprite generation:
python
from agent_sprite_forge import SpriteGenerator
当你需要动画单位、可玩角色、怪物、道具、法术套装或投射物/碰撞效果时,可使用此功能。
基础精灵图生成:
python
from agent_sprite_forge import SpriteGenerator

Initialize generator

Initialize generator

sprite_gen = SpriteGenerator()
sprite_gen = SpriteGenerator()

Generate character sprite sheet

Generate character sprite sheet

result = sprite_gen.generate( prompt="samurai warrior walking animation, 4 directions, pixel art style", frames=4, directions=["down", "left", "right", "up"], output_dir="./output/sprites" )
result = sprite_gen.generate( prompt="samurai warrior walking animation, 4 directions, pixel art style", frames=4, directions=["down", "left", "right", "up"], output_dir="./output/sprites" )

Result includes:

Result includes:

- sprite_sheet.png (full sheet)

- sprite_sheet.png (full sheet)

- frames/ (individual PNG frames)

- frames/ (individual PNG frames)

- animations/ (GIF animations per direction)

- animations/ (GIF animations per direction)

- metadata.json (frame info, dimensions, cleanup settings)

- metadata.json (frame info, dimensions, cleanup settings)


**Attack and spell animations:**

```python

**攻击与法术动画:**

```python

Generate spell cast animation

Generate spell cast animation

spell_result = sprite_gen.generate( prompt="fire mage casting fireball spell, side view, 6 frames", frames=6, animation_type="cast", include_projectile=True, output_dir="./output/spells/fireball" )
spell_result = sprite_gen.generate( prompt="fire mage casting fireball spell, side view, 6 frames", frames=6, animation_type="cast", include_projectile=True, output_dir="./output/spells/fireball" )

Generates:

Generates:

- cast_animation.gif

- cast_animation.gif

- projectile_animation.gif

- projectile_animation.gif

- impact_animation.gif (if include_impact=True)

- impact_animation.gif (if include_impact=True)

- transparent PNG frames for each

- transparent PNG frames for each


**Reference-guided variants:**

```python

**基于参考图的变体生成:**

```python

Generate sprite based on reference image

Generate sprite based on reference image

ref_result = sprite_gen.generate_from_reference( reference_image="./refs/crocodile.jpg", prompt="crocodile playing with a stone, 8 frame loop animation", frames=8, preserve_style=True, output_dir="./output/croc_animation" )
undefined
ref_result = sprite_gen.generate_from_reference( reference_image="./refs/crocodile.jpg", prompt="crocodile playing with a stone, 8 frame loop animation", frames=8, preserve_style=True, output_dir="./output/croc_animation" )
undefined

2. Generate 2D Maps (
$generate2dmap
)

2. 生成2D地图 (
$generate2dmap
)

Use this skill for layered RPG maps with ground, props, collision, and engine-ready exports.
Basic layered map generation:
python
from agent_sprite_forge import MapGenerator

map_gen = MapGenerator()
此功能适用于包含地面、道具、碰撞层且可直接导出至引擎的RPG分层地图。
基础分层地图生成:
python
from agent_sprite_forge import MapGenerator

map_gen = MapGenerator()

Generate layered map with prop extraction

Generate layered map with prop extraction

map_result = map_gen.generate_layered_map( prompt="cyberpunk canal district, neon signs, bridges, water", style="hand-painted HD game map", include_props=True, output_dir="./output/maps/cyber_canal" )
map_result = map_gen.generate_layered_map( prompt="cyberpunk canal district, neon signs, bridges, water", style="hand-painted HD game map", include_props=True, output_dir="./output/maps/cyber_canal" )

Generates:

Generates:

- ground_base.png (clean ground layer)

- ground_base.png (clean ground layer)

- dressed_reference.png (fully decorated reference)

- dressed_reference.png (fully decorated reference)

- prop_pack_3x3.png (extracted props grid)

- prop_pack_3x3.png (extracted props grid)

- props/ (individual transparent prop PNGs)

- props/ (individual transparent prop PNGs)

- layered_preview.png (flattened preview)

- layered_preview.png (flattened preview)

- metadata.json (layer info, prop positions)

- metadata.json (layer info, prop positions)


**Godot TileMap export:**

```python

**Godot TileMap导出:**

```python

Generate Godot-ready map project

Generate Godot-ready map project

godot_map = map_gen.generate_godot_map( prompt="forest village with paths, houses, trees, pond", tileset_size=16, # 16x16 tiles map_size=(40, 30), # tiles include_collision=True, include_zones=True, # encounter grass, exits output_dir="./output/godot_maps/forest_village" )
godot_map = map_gen.generate_godot_map( prompt="forest village with paths, houses, trees, pond", tileset_size=16, # 16x16 tiles map_size=(40, 30), # tiles include_collision=True, include_zones=True, # encounter grass, exits output_dir="./output/godot_maps/forest_village" )

Generates:

Generates:

- tileset.png (autotile-ready)

- tileset.png (autotile-ready)

- prop_sheet_3x3.png

- prop_sheet_3x3.png

- scenes/ForestVillage.tscn (editable scene)

- scenes/ForestVillage.tscn (editable scene)

- resources/tileset.tres

- resources/tileset.tres

- resources/prop_atlas.tres

- resources/prop_atlas.tres

- scripts/debug_player.gd

- scripts/debug_player.gd

- collision and area metadata

- collision and area metadata

undefined
undefined

3. Post-Processing and Cleanup

3. 后期处理与优化

Chroma-key background removal:
python
from agent_sprite_forge.processors import BackgroundRemover

remover = BackgroundRemover()
绿幕背景移除:
python
from agent_sprite_forge.processors import BackgroundRemover

remover = BackgroundRemover()

Remove background and export transparent PNG

Remove background and export transparent PNG

clean_sprite = remover.remove_background( input_path="./raw/sprite_sheet.png", chroma_color="#00FF00", # green screen tolerance=30, output_path="./output/sprite_sheet_clean.png" )

**Frame extraction and GIF export:**

```python
from agent_sprite_forge.processors import FrameExtractor, GIFExporter
clean_sprite = remover.remove_background( input_path="./raw/sprite_sheet.png", chroma_color="#00FF00", # green screen tolerance=30, output_path="./output/sprite_sheet_clean.png" )

**帧提取与GIF导出:**

```python
from agent_sprite_forge.processors import FrameExtractor, GIFExporter

Extract frames from sprite sheet

Extract frames from sprite sheet

extractor = FrameExtractor() frames = extractor.extract_frames( sprite_sheet="./output/sprite_sheet_clean.png", frame_width=64, frame_height=64, output_dir="./output/frames" )
extractor = FrameExtractor() frames = extractor.extract_frames( sprite_sheet="./output/sprite_sheet_clean.png", frame_width=64, frame_height=64, output_dir="./output/frames" )

Create animated GIF

Create animated GIF

gif_exporter = GIFExporter() gif_exporter.create_animation( frames_dir="./output/frames", output_path="./output/animation.gif", frame_duration=100, # milliseconds loop=0 # infinite loop )

**Prop pack slicing:**

```python
from agent_sprite_forge.processors import PropPackSlicer

slicer = PropPackSlicer()
gif_exporter = GIFExporter() gif_exporter.create_animation( frames_dir="./output/frames", output_path="./output/animation.gif", frame_duration=100, # milliseconds loop=0 # infinite loop )

**道具包切片:**

```python
from agent_sprite_forge.processors import PropPackSlicer

slicer = PropPackSlicer()

Slice 3x3 prop pack into individual props

Slice 3x3 prop pack into individual props

props = slicer.slice_prop_pack( prop_pack="./output/maps/cyber_canal/prop_pack_3x3.png", grid_size=(3, 3), output_dir="./output/maps/cyber_canal/props", remove_background=True, chroma_color="#FFFFFF" )
props = slicer.slice_prop_pack( prop_pack="./output/maps/cyber_canal/prop_pack_3x3.png", grid_size=(3, 3), output_dir="./output/maps/cyber_canal/props", remove_background=True, chroma_color="#FFFFFF" )

Returns list of prop files with bounding box metadata

Returns list of prop files with bounding box metadata

undefined
undefined

Configuration

配置

Create a
config.yaml
file to set defaults:
yaml
undefined
创建
config.yaml
文件设置默认参数:
yaml
undefined

Image generation settings

Image generation settings

image_generation: model: "dall-e-3" size: "1024x1024" quality: "hd" style: "natural" # or "vivid"
image_generation: model: "dall-e-3" size: "1024x1024" quality: "hd" style: "natural" # or "vivid"

Sprite settings

Sprite settings

sprites: default_frame_count: 4 default_frame_size: [64, 64] background_color: "#00FF00" # chroma key export_formats: ["png", "gif"]
sprites: default_frame_count: 4 default_frame_size: [64, 64] background_color: "#00FF00" # chroma key export_formats: ["png", "gif"]

Map settings

Map settings

maps: default_tile_size: 16 prop_pack_grid: [3, 3] layer_order: ["ground", "props", "collision", "zones"]
maps: default_tile_size: 16 prop_pack_grid: [3, 3] layer_order: ["ground", "props", "collision", "zones"]

Processing

Processing

processing: chroma_tolerance: 30 gif_frame_duration: 100 png_compression: 9
processing: chroma_tolerance: 30 gif_frame_duration: 100 png_compression: 9

Engine exports

Engine exports

godot: version: "4.5" tilemap_layer_enabled: true include_debug_player: true
unity: version: "2022.3" sprite_pixels_per_unit: 16 include_prefabs: true

Load config in Python:

```python
from agent_sprite_forge import load_config

config = load_config("config.yaml")
sprite_gen = SpriteGenerator(config=config)
godot: version: "4.5" tilemap_layer_enabled: true include_debug_player: true
unity: version: "2022.3" sprite_pixels_per_unit: 16 include_prefabs: true

在Python中加载配置:

```python
from agent_sprite_forge import load_config

config = load_config("config.yaml")
sprite_gen = SpriteGenerator(config=config)

Common Patterns

常见使用模式

Full Character Asset Pipeline

完整角色资源管线

python
from agent_sprite_forge import SpriteGenerator, BackgroundRemover, FrameExtractor, GIFExporter

def create_character_assets(character_name, prompt_base):
    """Generate complete character asset set"""
    sprite_gen = SpriteGenerator()
    
    # 1. Generate directional walk animations
    walk_result = sprite_gen.generate(
        prompt=f"{prompt_base}, walking animation, 4 directions",
        frames=4,
        directions=["down", "left", "right", "up"],
        output_dir=f"./output/characters/{character_name}/walk"
    )
    
    # 2. Generate attack animation
    attack_result = sprite_gen.generate(
        prompt=f"{prompt_base}, sword attack, side view",
        frames=6,
        animation_type="attack",
        output_dir=f"./output/characters/{character_name}/attack"
    )
    
    # 3. Generate idle animation
    idle_result = sprite_gen.generate(
        prompt=f"{prompt_base}, idle breathing animation",
        frames=2,
        animation_type="idle",
        output_dir=f"./output/characters/{character_name}/idle"
    )
    
    return {
        "walk": walk_result,
        "attack": attack_result,
        "idle": idle_result
    }
python
from agent_sprite_forge import SpriteGenerator, BackgroundRemover, FrameExtractor, GIFExporter

def create_character_assets(character_name, prompt_base):
    """Generate complete character asset set"""
    sprite_gen = SpriteGenerator()
    
    # 1. Generate directional walk animations
    walk_result = sprite_gen.generate(
        prompt=f"{prompt_base}, walking animation, 4 directions",
        frames=4,
        directions=["down", "left", "right", "up"],
        output_dir=f"./output/characters/{character_name}/walk"
    )
    
    # 2. Generate attack animation
    attack_result = sprite_gen.generate(
        prompt=f"{prompt_base}, sword attack, side view",
        frames=6,
        animation_type="attack",
        output_dir=f"./output/characters/{character_name}/attack"
    )
    
    # 3. Generate idle animation
    idle_result = sprite_gen.generate(
        prompt=f"{prompt_base}, idle breathing animation",
        frames=2,
        animation_type="idle",
        output_dir=f"./output/characters/{character_name}/idle"
    )
    
    return {
        "walk": walk_result,
        "attack": attack_result,
        "idle": idle_result
    }

Usage

Usage

samurai_assets = create_character_assets( "samurai_warrior", "pixel art samurai in blue armor" )
undefined
samurai_assets = create_character_assets( "samurai_warrior", "pixel art samurai in blue armor" )
undefined

RPG Map with Godot Export

带Godot导出的RPG地图

python
from agent_sprite_forge import MapGenerator

def create_rpg_zone(zone_name, description):
    """Generate RPG map zone with Godot export"""
    map_gen = MapGenerator()
    
    # Generate layered map
    map_result = map_gen.generate_godot_map(
        prompt=description,
        tileset_size=16,
        map_size=(40, 30),
        include_collision=True,
        include_zones=True,
        zone_types=["encounter_grass", "exit", "trigger"],
        output_dir=f"./output/maps/{zone_name}"
    )
    
    # Add custom metadata
    map_result.add_metadata({
        "zone_name": zone_name,
        "encounters": ["slime", "bat", "wolf"],
        "exits": [
            {"name": "north_exit", "to": "zone_02"},
            {"name": "south_exit", "to": "zone_00"}
        ]
    })
    
    return map_result
python
from agent_sprite_forge import MapGenerator

def create_rpg_zone(zone_name, description):
    """Generate RPG map zone with Godot export"""
    map_gen = MapGenerator()
    
    # Generate layered map
    map_result = map_gen.generate_godot_map(
        prompt=description,
        tileset_size=16,
        map_size=(40, 30),
        include_collision=True,
        include_zones=True,
        zone_types=["encounter_grass", "exit", "trigger"],
        output_dir=f"./output/maps/{zone_name}"
    )
    
    # Add custom metadata
    map_result.add_metadata({
        "zone_name": zone_name,
        "encounters": ["slime", "bat", "wolf"],
        "exits": [
            {"name": "north_exit", "to": "zone_02"},
            {"name": "south_exit", "to": "zone_00"}
        ]
    })
    
    return map_result

Usage

Usage

forest_zone = create_rpg_zone( "forest_01", "dense forest with winding path, old shrine, mushroom clusters" )
undefined
forest_zone = create_rpg_zone( "forest_01", "dense forest with winding path, old shrine, mushroom clusters" )
undefined

Spell Bundle Generation

法术套装生成

python
def create_spell_bundle(spell_name, element, color_scheme):
    """Generate complete spell asset bundle"""
    sprite_gen = SpriteGenerator()
    
    spell_dir = f"./output/spells/{spell_name}"
    
    # Cast animation
    cast = sprite_gen.generate(
        prompt=f"mage casting {element} spell, {color_scheme} colors, side view",
        frames=6,
        output_dir=f"{spell_dir}/cast"
    )
    
    # Projectile
    projectile = sprite_gen.generate(
        prompt=f"{element} projectile, {color_scheme}, spinning animation",
        frames=4,
        animation_type="projectile",
        output_dir=f"{spell_dir}/projectile"
    )
    
    # Impact
    impact = sprite_gen.generate(
        prompt=f"{element} explosion impact, {color_scheme}, burst effect",
        frames=8,
        animation_type="impact",
        output_dir=f"{spell_dir}/impact"
    )
    
    return {
        "cast": cast,
        "projectile": projectile,
        "impact": impact
    }
python
def create_spell_bundle(spell_name, element, color_scheme):
    """Generate complete spell asset bundle"""
    sprite_gen = SpriteGenerator()
    
    spell_dir = f"./output/spells/{spell_name}"
    
    # Cast animation
    cast = sprite_gen.generate(
        prompt=f"mage casting {element} spell, {color_scheme} colors, side view",
        frames=6,
        output_dir=f"{spell_dir}/cast"
    )
    
    # Projectile
    projectile = sprite_gen.generate(
        prompt=f"{element} projectile, {color_scheme}, spinning animation",
        frames=4,
        animation_type="projectile",
        output_dir=f"{spell_dir}/projectile"
    )
    
    # Impact
    impact = sprite_gen.generate(
        prompt=f"{element} explosion impact, {color_scheme}, burst effect",
        frames=8,
        animation_type="impact",
        output_dir=f"{spell_dir}/impact"
    )
    
    return {
        "cast": cast,
        "projectile": projectile,
        "impact": impact
    }

Usage

Usage

fireball = create_spell_bundle("fireball", "fire", "red and orange") ice_lance = create_spell_bundle("ice_lance", "ice", "blue and white")
undefined
fireball = create_spell_bundle("fireball", "fire", "red and orange") ice_lance = create_spell_bundle("ice_lance", "ice", "blue and white")
undefined

Unity Survivors-like Setup

类幸存者游戏Unity配置

python
from agent_sprite_forge import SpriteGenerator, UnityExporter

def setup_survivors_game(game_name):
    """Generate assets for survivors-like game"""
    sprite_gen = SpriteGenerator()
    unity_export = UnityExporter()
    
    base_dir = f"./output/unity_projects/{game_name}"
    
    # Hero sheets (4 directions)
    hero = sprite_gen.generate(
        prompt="anime hero character, walking animation, 4 directions",
        frames=4,
        directions=["down", "left", "right", "up"],
        output_dir=f"{base_dir}/Assets/Heroes/Hero01"
    )
    
    # Summon/minion sheets
    summons = []
    for i, summon_type in enumerate(["wolf", "eagle", "bear"]):
        summon = sprite_gen.generate(
            prompt=f"spirit {summon_type} companion, idle and attack",
            frames=6,
            output_dir=f"{base_dir}/Assets/Summons/{summon_type}"
        )
        summons.append(summon)
    
    # Enemy sheets
    enemies = []
    for enemy_type in ["slime", "skeleton", "demon"]:
        enemy = sprite_gen.generate(
            prompt=f"{enemy_type} enemy, walk and attack animation",
            frames=4,
            output_dir=f"{base_dir}/Assets/Enemies/{enemy_type}"
        )
        enemies.append(enemy)
    
    # Export Unity-ready structure
    unity_export.export_project(
        assets={
            "hero": hero,
            "summons": summons,
            "enemies": enemies
        },
        output_dir=base_dir,
        include_prefabs=True,
        include_animator_controllers=True
    )
    
    return base_dir
python
from agent_sprite_forge import SpriteGenerator, UnityExporter

def setup_survivors_game(game_name):
    """Generate assets for survivors-like game"""
    sprite_gen = SpriteGenerator()
    unity_export = UnityExporter()
    
    base_dir = f"./output/unity_projects/{game_name}"
    
    # Hero sheets (4 directions)
    hero = sprite_gen.generate(
        prompt="anime hero character, walking animation, 4 directions",
        frames=4,
        directions=["down", "left", "right", "up"],
        output_dir=f"{base_dir}/Assets/Heroes/Hero01"
    )
    
    # Summon/minion sheets
    summons = []
    for i, summon_type in enumerate(["wolf", "eagle", "bear"]):
        summon = sprite_gen.generate(
            prompt=f"spirit {summon_type} companion, idle and attack",
            frames=6,
            output_dir=f"{base_dir}/Assets/Summons/{summon_type}"
        )
        summons.append(summon)
    
    # Enemy sheets
    enemies = []
    for enemy_type in ["slime", "skeleton", "demon"]:
        enemy = sprite_gen.generate(
            prompt=f"{enemy_type} enemy, walk and attack animation",
            frames=4,
            output_dir=f"{base_dir}/Assets/Enemies/{enemy_type}"
        )
        enemies.append(enemy)
    
    # Export Unity-ready structure
    unity_export.export_project(
        assets={
            "hero": hero,
            "summons": summons,
            "enemies": enemies
        },
        output_dir=base_dir,
        include_prefabs=True,
        include_animator_controllers=True
    )
    
    return base_dir

Usage

Usage

game_path = setup_survivors_game("SummonSurvivors")
undefined
game_path = setup_survivors_game("SummonSurvivors")
undefined

API Reference

API参考

SpriteGenerator

SpriteGenerator

python
class SpriteGenerator:
    def generate(
        self,
        prompt: str,
        frames: int = 4,
        directions: list = None,
        animation_type: str = "walk",
        include_projectile: bool = False,
        include_impact: bool = False,
        output_dir: str = "./output"
    ) -> SpriteResult
    
    def generate_from_reference(
        self,
        reference_image: str,
        prompt: str,
        frames: int,
        preserve_style: bool = True,
        output_dir: str = "./output"
    ) -> SpriteResult
python
class SpriteGenerator:
    def generate(
        self,
        prompt: str,
        frames: int = 4,
        directions: list = None,
        animation_type: str = "walk",
        include_projectile: bool = False,
        include_impact: bool = False,
        output_dir: str = "./output"
    ) -> SpriteResult
    
    def generate_from_reference(
        self,
        reference_image: str,
        prompt: str,
        frames: int,
        preserve_style: bool = True,
        output_dir: str = "./output"
    ) -> SpriteResult

MapGenerator

MapGenerator

python
class MapGenerator:
    def generate_layered_map(
        self,
        prompt: str,
        style: str = "hand-painted HD game map",
        include_props: bool = True,
        output_dir: str = "./output"
    ) -> MapResult
    
    def generate_godot_map(
        self,
        prompt: str,
        tileset_size: int = 16,
        map_size: tuple = (40, 30),
        include_collision: bool = True,
        include_zones: bool = True,
        zone_types: list = None,
        output_dir: str = "./output"
    ) -> GodotMapResult
python
class MapGenerator:
    def generate_layered_map(
        self,
        prompt: str,
        style: str = "hand-painted HD game map",
        include_props: bool = True,
        output_dir: str = "./output"
    ) -> MapResult
    
    def generate_godot_map(
        self,
        prompt: str,
        tileset_size: int = 16,
        map_size: tuple = (40, 30),
        include_collision: bool = True,
        include_zones: bool = True,
        zone_types: list = None,
        output_dir: str = "./output"
    ) -> GodotMapResult

BackgroundRemover

BackgroundRemover

python
class BackgroundRemover:
    def remove_background(
        self,
        input_path: str,
        chroma_color: str = "#00FF00",
        tolerance: int = 30,
        output_path: str = None
    ) -> str
python
class BackgroundRemover:
    def remove_background(
        self,
        input_path: str,
        chroma_color: str = "#00FF00",
        tolerance: int = 30,
        output_path: str = None
    ) -> str

GIFExporter

GIFExporter

python
class GIFExporter:
    def create_animation(
        self,
        frames_dir: str,
        output_path: str,
        frame_duration: int = 100,
        loop: int = 0
    ) -> str
python
class GIFExporter:
    def create_animation(
        self,
        frames_dir: str,
        output_path: str,
        frame_duration: int = 100,
        loop: int = 0
    ) -> str

Troubleshooting

故障排除

Background removal leaves artifacts

背景移除残留痕迹

python
undefined
python
undefined

Increase tolerance for better removal

Increase tolerance for better removal

remover.remove_background( input_path="sprite.png", chroma_color="#00FF00", tolerance=50, # Increase from default 30 output_path="sprite_clean.png" )
remover.remove_background( input_path="sprite.png", chroma_color="#00FF00", tolerance=50, # Increase from default 30 output_path="sprite_clean.png" )

Or use edge smoothing

Or use edge smoothing

remover.remove_background( input_path="sprite.png", chroma_color="#00FF00", tolerance=30, smooth_edges=True, edge_blur=2, output_path="sprite_clean.png" )
undefined
remover.remove_background( input_path="sprite.png", chroma_color="#00FF00", tolerance=30, smooth_edges=True, edge_blur=2, output_path="sprite_clean.png" )
undefined

Generated sprites don't align properly

生成的精灵图对齐错误

python
undefined
python
undefined

Use frame alignment processor

Use frame alignment processor

from agent_sprite_forge.processors import FrameAligner
aligner = FrameAligner() aligned_frames = aligner.align_frames( frames_dir="./output/frames", alignment="center", # or "bottom", "top" reference_point="auto", # detect common ground point output_dir="./output/frames_aligned" )
undefined
from agent_sprite_forge.processors import FrameAligner
aligner = FrameAligner() aligned_frames = aligner.align_frames( frames_dir="./output/frames", alignment="center", # or "bottom", "top" reference_point="auto", # detect common ground point output_dir="./output/frames_aligned" )
undefined

Godot export scene not loading

Godot导出场景无法加载

python
undefined
python
undefined

Verify Godot version compatibility

Verify Godot version compatibility

godot_map = map_gen.generate_godot_map( prompt="village map", godot_version="4.5", # Explicit version output_dir="./output/godot_maps/village" )
godot_map = map_gen.generate_godot_map( prompt="village map", godot_version="4.5", # Explicit version output_dir="./output/godot_maps/village" )

Check generated scene file

Check generated scene file

import os assert os.path.exists("./output/godot_maps/village/scenes/Village.tscn")
undefined
import os assert os.path.exists("./output/godot_maps/village/scenes/Village.tscn")
undefined

Image generation quality issues

图像生成质量不佳

python
undefined
python
undefined

Use HD quality and specific style guidance

Use HD quality and specific style guidance

sprite_gen = SpriteGenerator( image_model="dall-e-3", quality="hd", style="vivid" # More saturated colors )
result = sprite_gen.generate( prompt="detailed pixel art character, sharp edges, vibrant colors, 64x64 resolution", frames=4, output_dir="./output/sprites" )
undefined
sprite_gen = SpriteGenerator( image_model="dall-e-3", quality="hd", style="vivid" # More saturated colors )
result = sprite_gen.generate( prompt="detailed pixel art character, sharp edges, vibrant colors, 64x64 resolution", frames=4, output_dir="./output/sprites" )
undefined

GIF animations too large

GIF动画文件过大

python
undefined
python
undefined

Optimize GIF export

Optimize GIF export

gif_exporter = GIFExporter() gif_exporter.create_animation( frames_dir="./output/frames", output_path="./output/animation.gif", frame_duration=100, loop=0, optimize=True, # Enable optimization colors=64, # Reduce color palette (max 256) dither=False # Disable dithering for smaller size )
undefined
gif_exporter = GIFExporter() gif_exporter.create_animation( frames_dir="./output/frames", output_path="./output/animation.gif", frame_duration=100, loop=0, optimize=True, # Enable optimization colors=64, # Reduce color palette (max 256) dither=False # Disable dithering for smaller size )
undefined

Prop extraction misses objects

道具提取遗漏对象

python
undefined
python
undefined

Adjust detection sensitivity

Adjust detection sensitivity

slicer = PropPackSlicer() props = slicer.slice_prop_pack( prop_pack="./props.png", grid_size=(3, 3), output_dir="./output/props", min_object_size=10, # Smaller minimum detection_threshold=128, # Adjust alpha threshold remove_background=True )
undefined
slicer = PropPackSlicer() props = slicer.slice_prop_pack( prop_pack="./props.png", grid_size=(3, 3), output_dir="./output/props", min_object_size=10, # Smaller minimum detection_threshold=128, # Adjust alpha threshold remove_background=True )
undefined

Environment Variables

环境变量

bash
undefined
bash
undefined

Required

Required

export OPENAI_API_KEY="sk-..."
export OPENAI_API_KEY="sk-..."

Optional

Optional

export AGENT_SPRITE_FORGE_OUTPUT_DIR="./my_assets" export AGENT_SPRITE_FORGE_CACHE_DIR="./.cache" export AGENT_SPRITE_FORGE_LOG_LEVEL="INFO" # DEBUG, INFO, WARNING, ERROR
export AGENT_SPRITE_FORGE_OUTPUT_DIR="./my_assets" export AGENT_SPRITE_FORGE_CACHE_DIR="./.cache" export AGENT_SPRITE_FORGE_LOG_LEVEL="INFO" # DEBUG, INFO, WARNING, ERROR

Godot export

Godot export

export GODOT_EXECUTABLE_PATH="/usr/local/bin/godot"
export GODOT_EXECUTABLE_PATH="/usr/local/bin/godot"

Unity export

Unity export

export UNITY_EXECUTABLE_PATH="/Applications/Unity/Hub/Editor/2022.3.0f1/Unity.app/Contents/MacOS/Unity"
undefined
export UNITY_EXECUTABLE_PATH="/Applications/Unity/Hub/Editor/2022.3.0f1/Unity.app/Contents/MacOS/Unity"
undefined

CLI Usage

CLI使用

bash
undefined
bash
undefined

Generate sprite sheet

Generate sprite sheet

python -m agent_sprite_forge sprite
--prompt "knight walking animation"
--frames 4
--directions down,left,right,up
--output ./output/knight
python -m agent_sprite_forge sprite
--prompt "knight walking animation"
--frames 4
--directions down,left,right,up
--output ./output/knight

Generate layered map

Generate layered map

python -m agent_sprite_forge map
--prompt "desert oasis with palm trees"
--include-props
--output ./output/maps/oasis
python -m agent_sprite_forge map
--prompt "desert oasis with palm trees"
--include-props
--output ./output/maps/oasis

Generate Godot map

Generate Godot map

python -m agent_sprite_forge godot-map
--prompt "cave system with crystals"
--tileset-size 16
--map-size 40,30
--output ./output/godot/cave
python -m agent_sprite_forge godot-map
--prompt "cave system with crystals"
--tileset-size 16
--map-size 40,30
--output ./output/godot/cave

Remove background

Remove background

python -m agent_sprite_forge remove-bg
--input ./raw/sprite.png
--output ./clean/sprite.png
--chroma "#00FF00"
--tolerance 30
python -m agent_sprite_forge remove-bg
--input ./raw/sprite.png
--output ./clean/sprite.png
--chroma "#00FF00"
--tolerance 30

Create GIF

Create GIF

python -m agent_sprite_forge make-gif
--frames ./output/frames
--output ./animation.gif
--duration 100
--loop 0
undefined
python -m agent_sprite_forge make-gif
--frames ./output/frames
--output ./animation.gif
--duration 100
--loop 0
undefined