Skip to main content

Generating and Editing images

See Live Demo built using these code snippets

New: Watermark removal demo

import { GoogleGenerativeAI } from "@google/generative-ai";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp",
generationConfig: {
responseModalities: ["text", "image"],
},
});

const prompt = 'Hi, can you create a 3d rendered image of a pig ' +
'with wings and a top hat flying over a happy ' +
'futuristic scifi city with lots of greenery?';

const result = await model.generateContent({
contents: [{ role: "user", parts: [{ text: prompt }] }],
});

result.response.candidates[0].content.parts.forEach(part => {
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
const img = document.createElement('img');
img.src = `data:${part.inlineData.mimeType};base64,${part.inlineData.data}`;
document.body.appendChild(img);
}
});

Edit an image

Image Editing Example
const genAI = new GoogleGenerativeAI(apiKey);
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp",
generationConfig: {
responseModalities: ["text", "image"],
},
});

const base64Data = result.split(',')[1];
const byteCharacters = atob(base64Data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], { type: result.split(';')[0].split(':')[1] });

const buffer = await blob.arrayBuffer();
const base64 = btoa(
new Uint8Array(buffer).reduce((data, byte) => data + String.fromCharCode(byte), '')
);

const response = await model.generateContent([
"Remove the lemons from the image",
{
inlineData: {
mimeType: blob.type,
data: base64
}
}
]);

response.response.candidates[0].content.parts.forEach(part => {
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
setResult(`data:${part.inlineData.mimeType};base64,${part.inlineData.data}`);
}
});