Skip to main content
Glama

inpaint

Remove or replace elements in an image using a mask and text prompt. Specify mask shape and position to inpaint specific areas, saving results as output files.

Instructions

Inpaint an image using a mask

Input Schema

NameRequiredDescriptionDefault
imageYesInput image path
mask_shapeNoShape of the maskcircle
outputNoOutput filenameinpainted.jpg
positionNoPosition of the maskcenter
promptYesText prompt for inpainting

Input Schema (JSON Schema)

{ "properties": { "image": { "description": "Input image path", "type": "string" }, "mask_shape": { "default": "circle", "description": "Shape of the mask", "enum": [ "circle", "rectangle" ], "type": "string" }, "output": { "default": "inpainted.jpg", "description": "Output filename", "type": "string" }, "position": { "default": "center", "description": "Position of the mask", "enum": [ "center", "ground" ], "type": "string" }, "prompt": { "description": "Text prompt for inpainting", "type": "string" } }, "required": [ "image", "prompt" ], "type": "object" }

Implementation Reference

  • MCP tool handler for 'inpaint': validates arguments, constructs CLI command, spawns Python fluxcli.py with 'inpaint' subcommand, and returns output.
    case 'inpaint': { const args = request.params.arguments as InpaintArgs; // Validate required fields const image = this.validateRequiredString(args.image, 'image'); const prompt = this.validateRequiredString(args.prompt, 'prompt'); const cmdArgs = ['inpaint']; cmdArgs.push('--image', image); cmdArgs.push('--prompt', prompt); if (args.mask_shape) cmdArgs.push('--mask-shape', args.mask_shape); if (args.position) cmdArgs.push('--position', args.position); if (args.output) cmdArgs.push('--output', args.output); const output = await this.runPythonCommand(cmdArgs); return { content: [{ type: 'text', text: output }], }; }
  • src/index.ts:215-250 (registration)
    Registration of the 'inpaint' tool in the MCP server's ListTools response, defining name, description, and JSON inputSchema.
    { name: 'inpaint', description: 'Inpaint an image using a mask', inputSchema: { type: 'object', properties: { image: { type: 'string', description: 'Input image path', }, prompt: { type: 'string', description: 'Text prompt for inpainting', }, mask_shape: { type: 'string', description: 'Shape of the mask', enum: ['circle', 'rectangle'], default: 'circle', }, position: { type: 'string', description: 'Position of the mask', enum: ['center', 'ground'], default: 'center', }, output: { type: 'string', description: 'Output filename', default: 'inpainted.jpg', }, }, required: ['image', 'prompt'], }, }, {
  • TypeScript interface defining the arguments for the inpaint tool, used for type-checking in the handler.
    * Arguments for the inpaint tool */ export interface InpaintArgs { image: string; prompt: string; mask_shape?: MaskShape; position?: MaskPosition; output?: string; }
  • Core inpaint implementation in Python CLI: creates mask, sends to Flux API for inpainting, returns image URL. Called by TS handler.
    def inpaint(self, image_path: str, prompt: str, mask_shape: str = 'circle', position: str = 'center') -> Optional[str]: """Inpaint an image using a mask.""" base_image = Image.open(image_path) mask = self.create_mask(base_image.size, shape=mask_shape, position=position) mask_path = 'temp_mask.jpg' mask.save(mask_path) payload = { "image": self.encode_image(image_path), "mask": self.encode_image(mask_path), "prompt": prompt, "steps": 50, "guidance": 60, "output_format": "jpeg", "safety_tolerance": 2 } response = requests.post( f"{self.base_url}/v1/flux-pro-1.0-fill", json=payload, headers=self.headers ) os.remove(mask_path) task_id = response.json().get('id') if not task_id: return None result = self.get_task_result(task_id) if result and result.get('result', {}).get('sample'): return result['result']['sample'] return None
  • Helper function to create mask image for inpainting based on shape and position.
    def create_mask(self, size: tuple, shape: str = 'rectangle', position: str = 'center') -> Image: """Create a mask for inpainting.""" mask = Image.new('L', size, 0) draw = ImageDraw.Draw(mask) width, height = size if position == 'ground': horizon_y = height * 0.65 y_start = horizon_y - (height * 0.05) points = [ (0, y_start), (0, height), (width, height), (width, y_start) ] draw.polygon(points, fill=255) else: x1 = width * 0.25 y1 = height * 0.25 x2 = width * 0.75 y2 = height * 0.75 if shape == 'rectangle': draw.rectangle([x1, y1, x2, y2], fill=255) else: # circle center = (width // 2, height // 2) radius = min(width, height) // 4 draw.ellipse([center[0] - radius, center[1] - radius, center[0] + radius, center[1] + radius], fill=255) return mask

Other Tools

Related 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