Skip to main content
Glama
demo_improvements.py6.52 kB
#!/usr/bin/env python """ Demo script showcasing Aseprite MCP improvements. This script demonstrates: - Configuration management - Error handling - Logging - Batch processing - Palette management """ import asyncio import sys from pathlib import Path # Add parent directory to path for imports sys.path.insert(0, str(Path(__file__).parent.parent)) from aseprite_mcp.core.config import AsepriteConfig, get_config, set_config from aseprite_mcp.core.logging import get_logger, Timer from aseprite_mcp.tools import canvas, drawing, palette, batch, export async def demo_configuration(): """Demonstrate configuration management.""" print("\n=== Configuration Demo ===") # Get default configuration config = get_config() print(f"Default log level: {config.log_level}") print(f"Max canvas size: {config.canvas.max_width}x{config.canvas.max_height}") # Create custom configuration custom_config = AsepriteConfig( log_level="DEBUG", canvas={"max_width": 5000, "max_height": 5000}, batch={"max_parallel_jobs": 2} ) # Save configuration config_file = Path("custom_config.json") custom_config.save_to_file(config_file) print(f"Saved config to {config_file}") # Load configuration loaded_config = AsepriteConfig.load_from_file(config_file) print(f"Loaded config - Log level: {loaded_config.log_level}") # Clean up config_file.unlink() async def demo_error_handling(): """Demonstrate improved error handling.""" print("\n=== Error Handling Demo ===") # Try to create canvas with invalid dimensions result = await canvas.create_canvas(-100, 200, "test.aseprite") print(f"Invalid dimensions result: {result}") # Try to access non-existent file result = await drawing.draw_line("non_existent.aseprite", 0, 0, 100, 100) print(f"Non-existent file result: {result}") # Try invalid color result = await drawing.draw_pixels("test.aseprite", [ {"x": 10, "y": 10, "color": "INVALID"} ]) print(f"Invalid color result: {result}") async def demo_logging(): """Demonstrate logging capabilities.""" print("\n=== Logging Demo ===") # Get logger logger = get_logger("demo") # Different log levels logger.debug("Debug message", extra_data="test") logger.info("Info message", operation="demo") logger.warning("Warning message", code="W001") # Performance logging with Timer with Timer("expensive_operation", custom_field="demo"): # Simulate work await asyncio.sleep(0.1) # Log operation logger.log_operation("create_sprite", "demo.aseprite", width=100, height=100) # Log error try: raise ValueError("Demo error") except Exception as e: logger.log_error("Demo error occurred", e, "demo_operation") async def demo_palette_management(): """Demonstrate palette management tools.""" print("\n=== Palette Management Demo ===") # Create a test sprite await canvas.create_canvas(32, 32, "palette_demo.aseprite") # Apply preset palette result = await palette.apply_preset_palette("palette_demo.aseprite", "gameboy") print(f"Apply preset result: {result}") # Get palette info result = await palette.get_palette_info("palette_demo.aseprite") print(f"Palette info: {result[:200]}...") # Truncate for readability # Create custom palette custom_colors = ["FF0000", "00FF00", "0000FF", "FFFF00", "FF00FF", "00FFFF"] result = await palette.create_palette("palette_demo.aseprite", custom_colors) print(f"Custom palette result: {result}") # Clean up Path("palette_demo.aseprite").unlink(missing_ok=True) async def demo_batch_processing(): """Demonstrate batch processing capabilities.""" print("\n=== Batch Processing Demo ===") # Create test directory and files test_dir = Path("batch_test") test_dir.mkdir(exist_ok=True) output_dir = Path("batch_output") output_dir.mkdir(exist_ok=True) # Create test sprites for i in range(3): await canvas.create_canvas( 100 + i * 50, 100 + i * 50, str(test_dir / f"sprite_{i}.aseprite") ) # Batch resize result = await batch.batch_resize( str(test_dir), str(output_dir), scale=0.5, file_pattern="*.aseprite" ) print(f"Batch resize result:\n{result}") # Batch export result = await batch.batch_export( str(test_dir), str(output_dir), format="png", scale=2.0 ) print(f"\nBatch export result:\n{result}") # Clean up import shutil shutil.rmtree(test_dir) shutil.rmtree(output_dir) async def demo_lua_builder(): """Demonstrate Lua builder usage.""" print("\n=== Lua Builder Demo ===") from aseprite_mcp.core.lua_builder import LuaBuilder # Build a complex script builder = LuaBuilder() builder.create_sprite(200, 200) builder.add_comment("Create gradient effect") builder.begin_transaction() # Create gradient builder.for_loop("y", 0, 199) builder.for_loop("x", 0, 199) # Calculate color based on position builder.add_line("local intensity = math.floor((x + y) / 2 * 255 / 199)") builder.add_line("local color = Color{r=intensity, g=intensity, b=255-intensity, a=255}") builder.add_line("app.fgColor = color") builder.draw_pixel("x", "y") builder.end_loop() builder.end_loop() builder.end_transaction() builder.save_sprite("gradient_demo.aseprite") # Show generated script script = builder.build() print("Generated Lua script:") print(script[:500] + "..." if len(script) > 500 else script) # Clean up Path("gradient_demo.aseprite").unlink(missing_ok=True) async def main(): """Run all demos.""" print("Aseprite MCP Improvements Demo") print("==============================") try: await demo_configuration() await demo_error_handling() await demo_logging() await demo_palette_management() await demo_batch_processing() await demo_lua_builder() print("\n✅ All demos completed successfully!") except Exception as e: print(f"\n❌ Demo failed: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(main())

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/ext-sakamoro/AsepriteMCP'

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