Skip to main content
Glama

generate

Create images from text prompts using Flux AI models, with customizable aspect ratios and dimensions for visual content generation.

Instructions

Generate an image from a text prompt

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
promptYesText prompt for image generation
modelNoModel to use for generationflux.1.1-pro
aspect_ratioNoAspect ratio of the output image
widthNoImage width (ignored if aspect-ratio is set)
heightNoImage height (ignored if aspect-ratio is set)
outputNoOutput filenamegenerated.jpg

Implementation Reference

  • MCP tool handler for 'generate': validates args, builds CLI command, executes Python fluxcli.py generate, returns output.
    case 'generate': {
        const args = request.params.arguments as GenerateArgs;
        // Validate required fields
        const prompt = this.validateRequiredString(args.prompt, 'prompt');
    
        // Validate optional numeric fields
        const width = this.validateNumber(args.width, 'width', 256, 2048);
        const height = this.validateNumber(args.height, 'height', 256, 2048);
    
        const cmdArgs = ['generate'];
        cmdArgs.push('--prompt', prompt);
        if (args.model) cmdArgs.push('--model', args.model);
        if (args.aspect_ratio) cmdArgs.push('--aspect-ratio', args.aspect_ratio);
        if (width) cmdArgs.push('--width', width.toString());
        if (height) cmdArgs.push('--height', height.toString());
        if (args.output) cmdArgs.push('--output', args.output);
    
        const output = await this.runPythonCommand(cmdArgs);
        return {
            content: [{ type: 'text', text: output }],
        };
    }
  • src/index.ts:131-168 (registration)
    Registration of the 'generate' tool in ListTools response, including name, description, and input schema.
    {
        name: 'generate',
        description: 'Generate an image from a text prompt',
        inputSchema: {
            type: 'object',
            properties: {
                prompt: {
                    type: 'string',
                    description: 'Text prompt for image generation',
                },
                model: {
                    type: 'string',
                    description: 'Model to use for generation',
                    enum: ['flux.1.1-pro', 'flux.1-pro', 'flux.1-dev', 'flux.1.1-ultra'],
                    default: 'flux.1.1-pro',
                },
                aspect_ratio: {
                    type: 'string',
                    description: 'Aspect ratio of the output image',
                    enum: ['1:1', '4:3', '3:4', '16:9', '9:16'],
                },
                width: {
                    type: 'number',
                    description: 'Image width (ignored if aspect-ratio is set)',
                },
                height: {
                    type: 'number',
                    description: 'Image height (ignored if aspect-ratio is set)',
                },
                output: {
                    type: 'string',
                    description: 'Output filename',
                    default: 'generated.jpg',
                },
            },
            required: ['prompt'],
        },
    },
  • TypeScript interface defining the input arguments for the 'generate' tool.
    export interface GenerateArgs {
      prompt: string;
      model?: FluxModel;
      aspect_ratio?: AspectRatio;
      width?: number;
      height?: number;
      output?: string;
    }
  • Helper method to execute the Python CLI script (fluxcli.py) with given arguments, capturing output or error.
    private async runPythonCommand(args: string[]): Promise<string> {
        return new Promise((resolve, reject) => {
            // Validate arguments
            if (!args || args.length === 0) {
                reject(new Error('No command arguments provided'));
                return;
            }
    
            // Use python from virtual environment if available
            const pythonPath = process.env.VIRTUAL_ENV ?
                `${process.env.VIRTUAL_ENV}/bin/python` : 'python3';
    
            const childProcess = spawn(pythonPath, ['fluxcli.py', ...args], {
                cwd: this.fluxPath,
                env: process.env, // Pass through all environment variables
            });
    
            let output = '';
            let errorOutput = '';
    
            childProcess.stdout?.on('data', (data) => {
                output += data.toString();
            });
    
            childProcess.stderr?.on('data', (data) => {
                errorOutput += data.toString();
            });
    
            childProcess.on('error', (error) => {
                reject(new Error(`Failed to spawn Python process: ${error.message}`));
            });
    
            childProcess.on('close', (code) => {
                if (code === 0) {
                    resolve(output);
                } else {
                    reject(new Error(`Flux command failed (exit code ${code}): ${errorOutput}`));
                }
            });
        });
    }
  • Core image generation logic in Python CLI: constructs payload for FLUX API endpoint based on model, submits request, polls for result URL.
    def generate_image(self, prompt: str, model: str = "flux.1.1-pro", width: int = None, height: int = None, aspect_ratio: str = None) -> Optional[str]:
        """Generate an image using any FLUX model."""
        endpoint = {
            "flux.1.1-pro": "/v1/flux-pro-1.1",
            "flux.1-pro": "/v1/flux-pro",
            "flux.1-dev": "/v1/flux-dev",
            "flux.1.1-ultra": "/v1/flux-pro-1.1-ultra",
        }.get(model)
        
        if not endpoint:
            raise ValueError(f"Unknown model: {model}")
        
        # Set default dimensions based on aspect ratio if provided
        if aspect_ratio:
            if aspect_ratio == '1:1':
                width, height = 1024, 1024
            elif aspect_ratio == '4:3':
                width, height = 1024, 768
            elif aspect_ratio == '3:4':
                width, height = 768, 1024
            elif aspect_ratio == '16:9':
                width, height = 1024, 576
            elif aspect_ratio == '9:16':
                width, height = 576, 1024
        else:
            # Use defaults if neither aspect ratio nor dimensions are provided
            width = width or 1024
            height = height or 768
        
        payload = {
            "prompt": prompt,
            "width": width,
            "height": height,
            "aspect_ratio": aspect_ratio if aspect_ratio else None
        }
        response = requests.post(
            f"{self.base_url}{endpoint}",
            json=payload,
            headers=self.headers
        )
        
        task_id = response.json().get('id')
        if not task_id:
            print("Failed to start generation task")
            return None
            
        result = self.get_task_result(task_id)
        if result and result.get('result', {}).get('sample'):
            return result['result']['sample']
        return None

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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/jmanhype/mcp-flux-studio'

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