@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
JavaScript
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