NanoBanana Pro Edit
Редактирование изображений использует тот же Gemini API (generateContent), что и генерация в NanoBanana Pro. Вы отправляете в запросе исходное изображение + инструкцию по правке и получаете отредактированное изображение в ответе. См. документацию Gemini: Image editing.
Эндпоинт: тот же, что и для генерации: POST https://aiberm.com/v1beta/models/gemini-3-pro-image-preview:generateContent.
Главное: поместите часть с изображением (inlineData) и текстовую часть (инструкцию по правке) в contents; задайте generationConfig.responseModalities как ["TEXT", "IMAGE"], чтобы получить отредактированное изображение; результат читайте из candidates[0].content.parts → inline_data.
Пример кода
В Python используется snake_case; в REST/cURL — camelCase. Смысл тот же.
1from google import genai2from google.genai import types3from PIL import Image4from io import BytesIO5 6base_url = "https://aiberm.com"7api_key = "YOUR_API_KEY"8model = "gemini-3-pro-image-preview"9output_file = "edited.png"10 11image_path = "original.png"12edit_prompt = "Add a stylish top hat to this image, keep the rest unchanged."13 14client = genai.Client(15 api_key=api_key,16 http_options=types.HttpOptions(api_version="v1beta", base_url=base_url),17)18image = Image.open(image_path)19 20response = client.models.generate_content(21 model=model,22 contents=[edit_prompt, image],23 config=types.GenerateContentConfig(24 response_modalities=["TEXT", "IMAGE"],25 ),26)27 28for part in response.parts:29 if part.text is not None:30 print(part.text)31 elif part.inline_data is not None:32 Image.open(BytesIO(part.inline_data.data)).save(output_file)33 print(f"Saved edited image: {output_file}")Редактирование и генерация
| Генерация (NanoBanana Pro) | Редактирование (эта страница) | |
|---|---|---|
contents | Только текст (описание изображения, которое нужно создать) | Изображение + текст (как именно править) |
generationConfig.imageConfig | Обязательно (соотношение сторон, 1K/2K/4K) | Для правки необязательно |
responseModalities | ["IMAGE"] или ["TEXT","IMAGE"] | Обычно ["TEXT","IMAGE"] |
Эндпоинт и аутентификация те же; отличаются только contents и то, передаёте ли вы imageConfig. Остальные параметры см. в NanoBanana Pro.
Несколько изображений
Поместите несколько частей с изображениями в contents.parts (по одному inlineData на изображение), затем одну текстовую часть с инструкцией. Модель использует все изображения и инструкцию, чтобы получить результат (например, «перенести объект с первого изображения на фон второго»).
Python: передайте несколько объектов изображений и один текст в contents.
image1 = Image.open("photo.png")
image2 = Image.open("background.png")
response = client.models.generate_content(
model=model,
contents=["Place the person from the first image onto the background of the second.", image1, image2],
config=types.GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]),
)
cURL: в contents[0].parts добавьте по одному inlineData на изображение, затем один text.
"contents": [{
"parts": [
{ "inlineData": { "mimeType": "image/png", "data": "<BASE64_IMAGE1>" }},
{ "inlineData": { "mimeType": "image/png", "data": "<BASE64_IMAGE2>" }},
{ "text": "Place the person from the first image onto the background of the second." }
]
}]
Использование URL изображения
API принимает только inlineData (base64) или fileData (через File API); URL изображений напрямую не принимаются. Если изображение доступно по URL, сначала скачайте его, затем включите в запрос.
Python: скачайте изображение по URL и передайте его в SDK (SDK закодирует его при необходимости).
import requests
from io import BytesIO
image_url = "https://example.com/photo.jpg"
resp = requests.get(image_url)
image = Image.open(BytesIO(resp.content))
response = client.models.generate_content(
model=model,
contents=["Add a top hat to this image.", image],
config=types.GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]),
)
cURL: скачайте изображение по URL, преобразуйте в base64 и поместите результат в inlineData.data.