Skip to main content
Glama

generate_character

Create character sprites with multiple poses for game development using AI workflows. Specify character descriptions, poses, and style presets to generate 2D game assets.

Instructions

Generate character sprites with optional multiple poses.

Args: description: Character description (e.g., "a knight in silver armor") poses: List of poses to generate (e.g., ["idle", "walking", "attacking"]) preset: Style preset to use (default: character). Options: character, character_portrait, pixel_character width: Sprite width in pixels height: Sprite height in pixels seed: Base seed for reproducibility (each pose gets seed+index) steps: Override generation steps (higher = better quality but slower) save_to_file: Whether to save images to disk Returns: JSON with base64 images for each pose

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
descriptionYes
posesNo
presetNocharacter
widthNo
heightNo
seedNo
stepsNo
save_to_fileNo

Implementation Reference

  • The @mcp.tool()-decorated handler function implementing the 'generate_character' tool. Generates character sprites in specified poses using AI backend, handles presets, resizing, and returns JSON with base64 images or file paths.
    @mcp.tool() async def generate_character( description: str, poses: List[str] = None, preset: str = "character", width: int = 256, height: int = 512, seed: Optional[int] = None, steps: Optional[int] = None, save_to_file: bool = True ) -> str: """Generate character sprites with optional multiple poses. Args: description: Character description (e.g., "a knight in silver armor") poses: List of poses to generate (e.g., ["idle", "walking", "attacking"]) preset: Style preset to use (default: character). Options: character, character_portrait, pixel_character width: Sprite width in pixels height: Sprite height in pixels seed: Base seed for reproducibility (each pose gets seed+index) steps: Override generation steps (higher = better quality but slower) save_to_file: Whether to save images to disk Returns: JSON with base64 images for each pose """ if poses is None: poses = ["idle"] desc_lower = description.lower() if preset == "character" and any( k in desc_lower for k in ( "top-down", "top down", "topdown", "overhead", "stardew", ) ): preset = "topdown_character" preset_config = get_preset(preset) gen_steps = steps or preset_config.steps render_width = width render_height = height should_downscale = (width < preset_config.default_width) or (height < preset_config.default_height) if should_downscale: render_width = preset_config.default_width render_height = preset_config.default_height characters = [] for i, pose in enumerate(poses): prompt = f"{description}, {pose} pose" full_prompt = f"{preset_config.prompt_prefix}{prompt}{preset_config.prompt_suffix}" gen_seed = (seed + i) if seed is not None else None image_bytes = await backend.generate_image( prompt=full_prompt, negative_prompt=preset_config.negative_prompt, width=render_width, height=render_height, seed=gen_seed, steps=gen_steps, cfg_scale=preset_config.cfg_scale, sampler=preset_config.sampler, scheduler=preset_config.scheduler ) if should_downscale: resample = Image.Resampling.NEAREST if preset.startswith("pixel") else Image.Resampling.LANCZOS image_bytes = resize_image(image_bytes, width, height, resample=resample) char_data = { "index": i, "pose": pose, "image_base64": image_to_base64(image_bytes), "width": width, "height": height } if save_to_file: output_dir = ensure_directory(OUTPUT_DIR / "characters") fname = generate_filename(prefix=f"char_{pose}") file_path = output_dir / fname file_path.write_bytes(image_bytes) char_data["file_path"] = str(file_path) characters.append(char_data) return json.dumps({ "success": True, "description": description, "count": len(characters), "characters": characters }, indent=2)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuannguyen14/ComfyAI-MCP-GameAssets'

If you have feedback or need assistance with the MCP directory API, please join our Discord server