generate_image_from_text
Create custom images from text descriptions using AI image generation. Convert your ideas into visual content by providing descriptive prompts.
Instructions
Generate an image based on the given text prompt using the configured image provider.
Args:
prompt: User's text prompt describing the desired image to generate
model_type: Optional model type for Google provider ("gemini" or "imagen").
If not specified, uses the default from GOOGLE_MODEL env var.
Returns:
Path to the generated image file using the configured provider's image generation capabilities
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model_type | No | ||
| prompt | Yes |
Implementation Reference
- The main handler function for the 'generate_image_from_text' tool, decorated with @mcp.tool() for registration. It handles prompt processing, provider selection, image generation, and returns the saved image path.@mcp.tool() async def generate_image_from_text(prompt: str, model_type: Optional[str] = None) -> str: """Generate an image based on the given text prompt using the configured image provider. Args: prompt: User's text prompt describing the desired image to generate model_type: Optional model type for Google provider ("gemini" or "imagen"). If not specified, uses the default from GOOGLE_MODEL env var. Returns: Path to the generated image file using the configured provider's image generation capabilities """ try: provider = get_image_provider() if not provider.supports_generation(): return f"Error: {provider.get_name()} provider does not support image generation" logger.info(f"Generating image with {provider.get_name()} provider") logger.info(f"User prompt: {prompt}") if model_type: logger.info(f"Model type specified: {model_type}") # Prepare the optimized prompt for the provider optimized_prompt = await prepare_prompt_for_provider(prompt, provider, model_type) # Generate the image using the provider with optional model_type kwargs = {} if model_type and provider.get_name() == "google": kwargs['model_type'] = model_type _, saved_path, remote_url = await provider.generate_image(optimized_prompt, **kwargs) logger.info(f"Image generated and saved to: {saved_path}") # Prepare response with remote URL if available response = f"Image saved to: {saved_path}" if remote_url: response += f"\nRemote URL: {remote_url}" return response except Exception as e: error_msg = f"Error generating image: {str(e)}" logger.error(error_msg) return error_msg
- src/universal_image_generator_mcp/server.py:204-204 (registration)The @mcp.tool() decorator registers the generate_image_from_text function as an MCP tool.@mcp.tool()
- Helper function to prepare and optimize the user prompt for the specific image provider, including translation and template application.async def prepare_prompt_for_provider(user_prompt: str, provider: ImageProvider, model_type: Optional[str] = None) -> str: """Prepare and optimize the prompt for the specific provider. Args: user_prompt: The original user prompt provider: The image provider to use model_type: Optional model type (for Google provider) Returns: Optimized prompt for the provider """ # Translate the prompt to the provider's preferred language translated_prompt = await translate_prompt_for_provider(user_prompt, provider) # For Google provider, determine effective model type if provider.get_name() == "google": effective_model_type = model_type or os.environ.get("GOOGLE_MODEL", "gemini") # For Imagen, use the direct translated prompt without templates if effective_model_type.lower() == "imagen": logger.info(f"Using direct translated prompt for Imagen: {translated_prompt}") return translated_prompt # For Bailian provider, use direct translated prompt without templates if provider.get_name() == "bailian": logger.info(f"Using direct translated prompt for Bailian: {translated_prompt}") return translated_prompt # Apply provider-specific prompt templates for language models if provider.get_name() == "zhipuai": # Use Chinese-optimized prompt for ZhipuAI return get_chinese_image_generation_prompt(translated_prompt) else: # Use English prompt for Google Gemini return get_image_generation_prompt(translated_prompt)
- Helper function to get or lazily initialize the image provider based on environment variables.def get_image_provider() -> ImageProvider: """Get or initialize the image provider.""" global image_provider if image_provider is None: try: image_provider = get_provider_from_env() logger.info(f"Initialized {image_provider.get_name()} provider") logger.info(f"Supports generation: {image_provider.supports_generation()}") logger.info(f"Supports transformation: {image_provider.supports_transformation()}") except Exception as e: logger.error(f"Failed to initialize image provider: {e}") logger.error("Please set IMAGE_PROVIDER environment variable to 'google', 'zhipuai', or 'bailian'") raise return image_provider