Skip to main content
Glama
README.md
 # ComfyMCP Studio

 ComfyMCP Studio is an MCP (Model Context Protocol) server for generating 2D game assets using AI workflows powered by ComfyUI.

 ## What you get

 - **ComfyUI-backed generation**
   - Production-quality SDXL/SD1.5 workflows
 - **High-quality outputs by default**
   - Render at preset resolution (SDXL-native) then downscale for cleaner details
 - **Consistent character animations (img2img)**
   - Generate multiple poses from a single reference image
 - **Viewpoint control with ControlNet (top-down / side / front / 3/4)**
   - Generate top-down assets with stronger camera-angle consistency
 - **Presets for common game styles**
   - Icon, character, tileset, top-down presets, pixel presets
 - **Post-processing**
   - Resize, remove background, add outline
 - **Unity export + batch generation**

 ## Requirements

 - **Python**: 3.10+
 - **ComfyUI**: running locally (default `127.0.0.1:8188`)
 - **Stable Diffusion checkpoint**
   - SDXL recommended (default configured: `sd_xl_base_1.0.safetensors`)
 - **(Optional) ControlNet models**
   - Required only for `generate_with_viewpoint` / `generate_topdown_asset`

 ## Installation

 ```bash
 # Navigate to the project
 cd path/ComfyAI-MCP-GameAssets

 # Create virtual environment
 python -m venv venv
 venv\Scripts\activate

 # Install dependencies
 pip install -r requirements.txt
 ```

 ## Configuration

 Copy `.env.example` to `.env` and configure:

 ```env
 BACKEND_TYPE=comfyui
 COMFYUI_HOST=127.0.0.1
 COMFYUI_PORT=8188
 COMFYUI_CHECKPOINT=sd_xl_base_1.0.safetensors

 OUTPUT_DIR=./output
 UNITY_ASSETS_DIR=C:/Projects/MyGame/Assets
 ```

 ## ComfyUI setup

 - **Start ComfyUI** (example):

 ```bash
 python main.py --listen 0.0.0.0 --port 8188
 ```

 - **Checkpoint**
   - Make sure your checkpoint exists in ComfyUI (example: `ComfyUI/models/checkpoints/`).
   - This server reads `COMFYUI_CHECKPOINT` from `.env`.

 ## ControlNet setup (for viewpoint locking)

 If you use viewpoint tools, you must install a ControlNet model in:
 `ComfyUI/models/controlnet/`

 - **SDXL depth model (example)**
   - `diffusers_xl_depth_full.safetensors`

 Restart ComfyUI after adding models.

 If you see `HTTP 400 Bad Request` when calling `/prompt`, it usually means:
 - The `controlnet_model` name is wrong, or
 - The ControlNet nodes/models are not installed/available.

 ## Run as MCP server (Windsurf)

 Add this to your MCP settings (or copy from `mcp_config.json`):

 ```json
 {
   "mcpServers": {
     "comfymcp-studio": {
       "command": "python",
       "args": ["-m", "server.main"],
       "cwd": "path/ComfyAI-MCP-GameAssets",
       "env": {
         "BACKEND_TYPE": "comfyui",
         "COMFYUI_HOST": "127.0.0.1",
         "COMFYUI_PORT": "8188"
       }
     }
   }
 }
```

## Tools

- **`ping`** - Backend health check
- **`list_available_presets`** - Lists preset names + configs
- **`generate_sprite`** - Single image generation from prompt
- **`generate_icons`** - Batch icons + optional atlas
- **`generate_tileset`** - Tileable tiles by theme
- **`generate_character`** - Character generation (prompt-driven)
- **`generate_character_animations`** - Img2img multi-pose animations from a reference image
- **`generate_with_viewpoint`** - ControlNet depth-guided generation for stable camera angle
- **`generate_topdown_asset`** - Convenience wrapper for top-down assets (prop, character, creature, tile, effect)
- **`process_image`** - Resize / remove background / add outline
- **`create_sprite_atlas`** - Combine images to spritesheet
- **`export_to_unity`** - Export output PNGs into a Unity project folder
- **`batch_generate`** - Batch generation with prompts

## Presets

You can list presets via `list_available_presets`.

### General
- **`default`** - General purpose game asset
- **`icon`** / **`icon_item`** - Game icons
- **`character`** / **`character_portrait`** - Character sprites
- **`tileset`** - Seamless tileable textures
- **`environment`** - Background/environment art
- **`prop`** - Game props (3/4 view)

### Top-down (ControlNet)
- **`topdown_prop`** - Top-down props
- **`topdown_character`** - Top-down characters
- **`topdown_creature`** - Top-down creatures/enemies
- **`topdown_tile`** - Top-down tiles

### Effects & UI
- **`effect`** / **`magic_effect`** - VFX and spell effects
- **`ui_button`** / **`ui_frame`** - UI elements

### Creatures
- **`creature`** - Fantasy creatures/monsters

### Style-specific
- **`handpainted`** - Hand-painted art style
- **`flat_ui`** - Flat design UI
- **`isometric`** - Isometric game assets
- **`pixel_art`** / **`pixel_character`** - Pixel art style
- **`pixel_16`** / **`pixel_32`** / **`pixel_64`** - Specific pixel sizes

## Testing

### Quick smoke test

```bash
python test_generate.py --list-presets
python test_generate.py --preset icon --size 256 --steps 20 --seed 42 --save
```

### ControlNet viewpoint tests

```bash
# Top-down prop (depth ControlNet)
python test_controlnet.py --tests prop --size 512 --strength 0.95 --save

# Top-down character (wrapper tool)
python test_controlnet.py --tests character --size 512 --strength 1.0 --save

# Multi-view for the same object
python test_controlnet.py --tests multi --views topdown,side,front,3/4 --size 512 --strength 0.90 --save
```

### Character animation tests (img2img)

```bash
# Requires a local reference image
python test_character_animation.py --ref path\\to\\reference.png --poses idle,walking,attacking --denoise 0.35 --seed 42 --save
```

## Output

 Generated images are saved under `OUTPUT_DIR` when you call tools with `save_to_file=true`.
 Typical folders:

 - **`output/controlnet/`**
 - **`output/icons/`**
 - **`output/characters/`**
 - **`output/tilesets/`**

 ## Troubleshooting

 - **`HTTP 400 Bad Request` from ComfyUI `/prompt`**
   - Check ControlNet model file exists in `ComfyUI/models/controlnet/`
   - Verify the exact filename passed as `controlnet_model`
   - Restart ComfyUI after installing models
 - **Results still not top-down**
   - Increase `control_strength` (try `0.90` to `1.0`)
   - Use `preset=topdown_character/topdown_prop`
 - **Duplicated/fragmented weapons/armor**
   - Add explicit constraints to prompt: `single character`, `one sword`, `one shield`

 ## License

 MIT

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have distinct purposes targeting different asset types or workflows (e.g., generate_sprite vs generate_tileset vs generate_character). However, generate_character and generate_character_animations have some overlap in generating character poses, though their descriptions clarify that the latter uses img2img for identity consistency. generate_with_viewpoint and generate_topdown_asset also share similar functionality, but the latter is described as a convenience wrapper.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structure (e.g., generate_sprite, create_sprite_atlas, export_to_unity). The naming is predictable and readable throughout the set, with no mixing of conventions or inconsistent verb styles.

Tool Count5/5

13 tools is well-scoped for a game asset generation server. Each tool serves a specific purpose in the asset creation pipeline, from generation (e.g., generate_sprite, generate_tileset) to processing (process_image) and export (export_to_unity). The count supports comprehensive workflows without being overwhelming.

Completeness5/5

The toolset provides complete coverage for game asset generation workflows. It includes generation tools for various asset types (sprites, characters, icons, tilesets), batch operations, post-processing (process_image), export functionality (export_to_unity), sprite atlas creation, and utility tools (list_available_presets, ping). There are no obvious gaps for the stated domain.

Maintenance

ActivityInactive
ResponsivenessNo issues