Skip to main content
Glama

create_gradient_png

Generate PNG images of custom gradients for design projects. Specify gradient type, colors, dimensions, and effects to create visual assets.

Instructions

Generate high-quality PNG images of gradients with various styles and effects

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gradientYes
dimensionsYesImage dimensions [width, height] in pixels
resolutionNoImage resolution in DPI
formatNoPNG format typepng32
qualityNoImage quality levelstandard
effectsNoVisual effects to apply

Implementation Reference

  • Primary handler function that validates input using Joi schema, validates colors, generates SVG gradient, creates light/dark PNG variants using dualBackgroundPNGGenerator, saves files via enhancedFileOutputManager, and returns structured FileBasedToolResponse or ErrorResponse.
    async function createGradientPng( params: unknown ): Promise<FileBasedToolResponse | ErrorResponse> { const startTime = Date.now(); try { // Initialize file output manager await enhancedFileOutputManager.initialize(); // Validate parameters const { error, value } = gradientPngSchema.validate(params); if (error) { return createErrorResponse( 'create_gradient_png', 'INVALID_PARAMETERS', `Invalid parameters: ${error.details.map(d => d.message).join(', ')}`, startTime, { details: error.details, suggestions: [ 'Check the parameter format', 'Ensure all required fields are provided', ], } ); } const validatedParams = value as GradientPngParams; // Validate colors const invalidColors: string[] = []; validatedParams.gradient.colors.forEach((colorStr, index) => { try { const color = colord(colorStr); if (!color.isValid()) { invalidColors.push(`${colorStr} at index ${index}`); } } catch { invalidColors.push(`${colorStr} at index ${index}`); } }); if (invalidColors.length > 0) { return createErrorResponse( 'create_gradient_png', 'INVALID_COLOR_FORMAT', `Invalid colors found: ${invalidColors.join(', ')}`, startTime, { details: { invalidColors }, suggestions: [ 'Use valid color formats like #FF0000, rgb(255,0,0), or hsl(0,100%,50%)', ], } ); } // Generate dual background PNGs const pngResult = await generateGradientPng(validatedParams); // Save files using enhanced file output manager const visualizationResult = await enhancedFileOutputManager.saveDualPNGVisualization( pngResult.lightBuffer, pngResult.darkBuffer, { toolName: 'create_gradient_png', description: `${validatedParams.gradient.type} gradient with ${validatedParams.gradient.colors.length} colors`, customName: `gradient-${validatedParams.gradient.type}`, dimensions: pngResult.dimensions, resolution: validatedParams.resolution || 150, colorSpace: 'sRGB', parameters: validatedParams as unknown as Record<string, unknown>, } ); const data: GradientPngData = { gradient_type: validatedParams.gradient.type, dimensions: validatedParams.dimensions, resolution: validatedParams.resolution || 150, light_file_size: pngResult.lightBuffer.length, dark_file_size: pngResult.darkBuffer.length, total_file_size: pngResult.lightBuffer.length + pngResult.darkBuffer.length, color_count: validatedParams.gradient.colors.length, }; const executionTime = Date.now() - startTime; return createFileBasedSuccessResponse( 'create_gradient_png', data, executionTime, visualizationResult, { colorSpaceUsed: 'sRGB', accessibilityNotes: [ 'Light background variant optimized for light themes', 'Dark background variant optimized for dark themes', ], recommendations: [ 'Use high resolution (300+ DPI) for print applications', 'Linear gradients work best for backgrounds', 'Light variant works best on light backgrounds', 'Dark variant works best on dark backgrounds', 'Consider adding subtle effects for enhanced visual appeal', ], } ); } catch (error) { logger.error('Error generating gradient PNG', { error: error as Error }); const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; const errorCode = errorMessage.includes('memory limits') || errorMessage.includes('exceeds') ? 'MEMORY_LIMIT_ERROR' : 'PNG_GENERATION_ERROR'; return createErrorResponse( 'create_gradient_png', errorCode, errorMessage, startTime, { details: { error: errorMessage, }, suggestions: [ 'Check gradient parameters and dimensions', 'Ensure sufficient memory is available', 'Try reducing image dimensions or resolution', ], } ); } }
  • ToolHandler definition including the JSON Schema for input validation (parameters object) and reference to the handler function.
    export const createGradientPngTool: ToolHandler = { name: 'create_gradient_png', description: 'Generate high-quality PNG images of gradients with various styles and effects', parameters: { type: 'object', properties: { gradient: { type: 'object', properties: { type: { type: 'string', enum: ['linear', 'radial', 'conic'], description: 'Type of gradient', }, colors: { type: 'array', items: { type: 'string' }, minItems: 2, maxItems: 20, description: 'Array of colors for the gradient', }, positions: { type: 'array', items: { type: 'number', minimum: 0, maximum: 100 }, description: 'Optional positions for color stops (0-100)', }, angle: { type: 'number', minimum: 0, maximum: 360, default: 90, description: 'Angle for linear gradients (degrees)', }, center: { type: 'array', items: { type: 'number', minimum: 0, maximum: 100 }, minItems: 2, maxItems: 2, default: [50, 50], description: 'Center point for radial/conic gradients [x, y]', }, shape: { type: 'string', enum: ['circle', 'ellipse'], default: 'circle', description: 'Shape for radial gradients', }, }, required: ['type', 'colors'], }, dimensions: { type: 'array', items: { type: 'number', minimum: 100, maximum: 20000 }, minItems: 2, maxItems: 2, description: 'Image dimensions [width, height] in pixels', }, resolution: { type: 'number', enum: [72, 150, 300, 600], default: 150, description: 'Image resolution in DPI', }, format: { type: 'string', enum: ['png', 'png24', 'png32'], default: 'png32', description: 'PNG format type', }, quality: { type: 'string', enum: ['draft', 'standard', 'high', 'ultra'], default: 'standard', description: 'Image quality level', }, effects: { type: 'array', items: { type: 'string', enum: ['noise', 'texture', 'border', 'shadow'], }, default: [], description: 'Visual effects to apply', }, }, required: ['gradient', 'dimensions'], }, handler: createGradientPng, };
  • Registration of the createGradientPngTool (imported from './create-gradient-png') into the central ToolRegistry singleton.
    toolRegistry.registerTool(createPalettePngTool); toolRegistry.registerTool(createGradientPngTool); toolRegistry.registerTool(createColorComparisonPngTool);
  • Internal Joi schema used for runtime validation of input parameters within the handler.
    const gradientPngSchema = Joi.object({ gradient: Joi.object({ type: Joi.string().valid('linear', 'radial', 'conic').required(), colors: Joi.array().items(Joi.string()).min(2).max(20).required(), positions: Joi.array().items(Joi.number().min(0).max(100)).optional(), angle: Joi.number().min(0).max(360).default(90), center: Joi.array() .items(Joi.number().min(0).max(100)) .length(2) .default([50, 50]), shape: Joi.string().valid('circle', 'ellipse').default('circle'), }).required(), dimensions: Joi.array() .items(Joi.number().integer().min(100).max(20000)) .length(2) .required(), resolution: Joi.number().valid(72, 150, 300, 600).default(150), format: Joi.string().valid('png', 'png24', 'png32').default('png32'), quality: Joi.string() .valid('draft', 'standard', 'high', 'ultra') .default('standard'), effects: Joi.array() .items(Joi.string().valid('noise', 'texture', 'border', 'shadow')) .default([]), });
  • Helper function to generate light and dark PNG buffers from gradient SVG content using external PNG generator.
    async function generateGradientPng(params: GradientPngParams): Promise<{ lightBuffer: Buffer; darkBuffer: Buffer; dimensions: [number, number]; }> { const { gradient, dimensions, quality = 'standard', effects = [] } = params; // Create base SVG content (gradients don't need background modification) const svgContent = createGradientSvg(gradient, dimensions, effects); // Generate dual background PNGs const result = await dualBackgroundPNGGenerator.generateDualPNG( svgContent, dimensions, { lightBackground: '#ffffff', darkBackground: '#1a1a1a', intelligentTextColor: true, quality, } ); // Validate visual quality const qualityCheck = await dualBackgroundPNGGenerator.validateVisualQuality( result.lightBuffer, result.darkBuffer, dimensions ); if (!qualityCheck.valid) { logger.warn('PNG quality validation issues detected', { issues: qualityCheck.issues, }); } return { lightBuffer: result.lightBuffer, darkBuffer: result.darkBuffer, dimensions, }; }

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/keyurgolani/ColorMcp'

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