UNPKG

@kinetixarts/craft-it-mcp-server

Version:

Craft IT - Model Context Protocol (MCP) compliant Server for AI-Powered Asset Generation using Gemini

43 lines 1.88 kB
import { GoogleGenAI, Modality } from '@google/genai'; import dotenv from 'dotenv'; dotenv.config(); const GEMINI_API_KEY = process.env.GEMINI_API_KEY; if (!GEMINI_API_KEY) { throw new Error('GEMINI_API_KEY is not set in environment variables'); } const ai = new GoogleGenAI({ apiKey: GEMINI_API_KEY }); export class ImageGenerationService { static async generateImage({ prompt, parameters, output_config, }) { // Compose the prompt with style/parameters if provided let fullPrompt = prompt; if (parameters) { if (parameters.primary_color) { fullPrompt += ` Primary color: ${parameters.primary_color}.`; } if (parameters.style_descriptor) { fullPrompt += ` Style: ${parameters.style_descriptor}.`; } } // Gemini requires responseModalities to include IMAGE const response = await ai.models.generateContent({ model: 'gemini-2.0-flash-preview-image-generation', contents: fullPrompt, config: { responseModalities: [Modality.TEXT, Modality.IMAGE], }, }); if (!response.candidates || !response.candidates[0] || !response.candidates[0].content || !response.candidates[0].content.parts) { throw new Error('No candidates or content returned from Gemini API'); } for (const part of response.candidates[0].content.parts) { if (part.inlineData && part.inlineData.data) { return { base64: part.inlineData.data, mimeType: typeof part.inlineData.mimeType === 'string' ? part.inlineData.mimeType : 'image/png', }; } } throw new Error('No image data returned from Gemini API'); } } //# sourceMappingURL=ImageGenerationService.js.map