AIFreeAPI Logo

Примеры кода для генерации изображений в Gemini: JavaScript, Python и cURL

A
19 min readГенерация изображений с ИИ

По состоянию на 22 марта 2026 года safest default для Gemini image generation code — это native Gemini API с `gemini-3.1-flash-image-preview` и явными настройками `imageSize` и `aspectRatio`.

Обложка с примерами кода Gemini image generation, где показаны native API route, JavaScript, Python, cURL и текущий split между Flash Image и Pro.

По состоянию на 22 марта 2026 года safest default для Gemini image generation code — это native Gemini API с gemini-3.1-flash-image-preview. Начинайте с этого маршрута, если только вы заранее не знаете, что вам нужен более дорогой gemini-3-pro-image-preview для text-heavy graphics, infographic assets или premium output, где ошибка на первом драфте обходится слишком дорого.

Этот совет важен потому, что текущий Gemini image stack очень легко неправильно прочитать по page one. Одни результаты говорят о Gemini app, другие об AI Studio, третьи показывают raw API docs, а старые tutorials все еще крутятся вокруг 2.5 image line. Для разработчика правильный первый шаг уже и практичнее: выбрать актуальную image model, запустить один working native request, сохранить одну реальную картинку и только потом решать, меняют ли маршрут editing, Pro или batch mode.

Есть и второй caveat, который лучше вынести наверх. Gemini Apps, AI Studio и Gemini API связаны между собой, но у них нет одного простого free-vs-paid правила. Текущая billing page по-прежнему говорит, что новые аккаунты стартуют с Free tier, но Google в developer post от 26 февраля 2026 года о Nano Banana 2 отдельно пишет: для этой модели в AI Studio нужен paid API key. Если пропустить эту разницу, очень легко дебажить не ту проблему еще до того, как вы вообще убедились, что код возвращает изображение.

Краткое содержание

  • Для нового image-generation кода лучше брать native Gemini API, а не generic compatibility layer. Именно в native route понятнее всего живут imageSize, aspectRatio, multi-turn editing и более богатые image features.
  • В большинстве новых сценариев стартуйте с gemini-3.1-flash-image-preview. Переходите на gemini-3-pro-image-preview, когда текст внутри изображения, infographic quality или premium output реально меняют бизнес-результат.
  • Первый запрос должен быть скучным. Сначала сгенерируйте один файл и сохраните его, а уже потом добавляйте editing, Google Search grounding, batch mode или длинный prompt pipeline.
  • Для Gemini 3 image models важно явно задавать imageSize и aspectRatio. В актуальных docs указаны уровни 512, 1K, 2K, 4K и более широкий набор aspect ratios, чем у legacy 2.5 line.
  • Pricing, paid-key rules, shutdown dates и rate limits нужно считать живыми фактами. Сейчас gemini-2.5-flash-image все еще остается самым дешевым официальным вариантом, но страница deprecations уже ставит ему shutdown date на 2 октября 2026 года.
МаршрутДля чего подходит лучше всегоС какой модели начинатьПочему это правильный defaultГлавный caveat
JavaScript / Node.js native SDKServer-side apps, Next.js API routes, backend workersgemini-3.1-flash-image-previewСамый чистый актуальный SDK path для imageSize, aspectRatio и возврата inline image dataAPI key должен оставаться на сервере
Python native SDKBatch tools, editing workflows, scripts, internal automationgemini-3.1-flash-image-previewСамый удобный текущий path для image iteration и local-file inputsСлишком легко оставить все на уровне скрипта без retries и logging
Raw REST / cURLДебаг, inspection payload, unsupported languagesgemini-3.1-flash-image-previewСамый прямой способ увидеть реальную форму request/responseБольше boilerplate и ручной decode картинки
Premium text-heavy outputПостеры, диаграммы, инфографика, дорогие creative assetsgemini-3-pro-image-previewИмеет смысл, когда quality jump окупает higher priceStandard pricing заметно выше, чем у Flash Image

Если вам сначала нужно разложить по полочкам app, AI Studio и API, а не сразу идти в код, логичнее начать с туториала по генерации изображений в Gemini. Если следующая проблема — не syntax, а cost, полезнее перейти к гайду по pricing для Gemini image generation API. А если вы в реальности решаете задачу image editing, а не text-to-image с нуля, вам ближе guide по Gemini image-to-image editing.

Сначала выберите правильный кодовый маршрут Gemini для изображений

Маршрутная схема с самым быстрым текущим путем Gemini image code для JavaScript, Python, cURL и моментом перехода на Pro.
Маршрутная схема с самым быстрым текущим путем Gemini image code для JavaScript, Python, cURL и моментом перехода на Pro.

Самая дорогая ошибка в этой теме — начать не с того surface. Многие разработчики ищут "Gemini image generation code examples" уже после того, как увидели, как Gemini app создает картинку, или как AI Studio рендерит ее в браузере. Из-за этого API кажется проще, чем он есть на самом деле. Но API не наследует app-side assumptions автоматически. Вам все равно нужно выбрать правильный model ID, понимать billing expectations, уметь обработать response и учитывать quota behavior на уровне проекта.

Для большинства новых integration paths правильный first source — это официальная документация Gemini API image generation and editing. Именно там Google прямо рекомендует Gemini 3.1 Flash Image Preview как текущую основную image model и показывает features, которые реально меняют код: responseModalities, aspectRatio, imageSize, multi-turn editing и image-specific controls. Поэтому в этой статье default path — native Gemini API, а не OpenAI compatibility. Compatibility layer полезен для migration, но не как основной способ понять feature set, который все еще быстро движется.

При этом не каждая Gemini image model заслуживает одинакового статуса. Текущая pricing page говорит намного яснее, чем многие third-party tutorials. gemini-3.1-flash-image-preview — current default lane. gemini-3-pro-image-preview — premium branch. gemini-2.5-flash-image все еще жив и все еще самый дешевый официальный маршрут, но deprecations page уже помечает его shutdown date как 2 октября 2026 года. Поэтому "самый дешевый" и "самый правильный для нового tutorial" — это уже не один и тот же ответ.

Практическое правило остается простым. Если вы пишете новый workflow, начинайте с Flash Image. Если строите posters, charts, infographics или другие assets, где image text quality важна для результата, держите Pro в уме с самого начала. Если же вы все-таки выбираете 2.5 image line ради economics, озвучивайте это как осознанный legacy choice, а не как универсальный default.

Еще один route decision тоже имеет значение. AI Studio может быть удобным testing surface для prompt iteration, но его нельзя принимать за production contract вашего приложения. В Nano Banana 2 post Google прямо говорит о paid API key requirement именно для этого model-in-AI-Studio path. Значит, architecture, logging и quota planning все равно должны строиться вокруг API route, даже если первые prompt experiments вы делаете через UI.

Пример на JavaScript: самый короткий актуальный путь для Node и server-side

Если вы работаете в Next.js, Node.js или любом backend JavaScript environment, самый чистый current path — это @google/genai. Держите client на сервере, считывайте GEMINI_API_KEY из окружения и сохраняйте возвращенный inlineData buffer в файл или object storage.

Это лучший первый пример еще и потому, что он захватывает moving parts, которые чаще всего ломаются позже: актуальное имя пакета, актуальный model ID, explicit image controls и response parsing. Не нужно в первый день строить полный production pipeline. Нужно доказать только одно: одна картинка реально возвращается, сохраняется и соответствует запрошенным размеру и пропорции.

javascript
import { GoogleGenAI } from "@google/genai"; import fs from "node:fs"; const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }); const prompt = ` Create a clean 16:9 product hero image of a matte black travel mug on a light concrete surface. Use soft studio lighting, crisp texture, and calm negative space on the right for marketing copy. `; const response = await ai.models.generateContent({ model: "gemini-3.1-flash-image-preview", contents: prompt, config: { responseModalities: ["IMAGE"], imageConfig: { aspectRatio: "16:9", imageSize: "2K", }, }, }); for (const part of response.candidates[0].content.parts) { if (part.inlineData) { const buffer = Buffer.from(part.inlineData.data, "base64"); fs.writeFileSync("travel-mug-hero.png", buffer); } }

Здесь важны четыре детали. Первая: model name — это gemini-3.1-flash-image-preview, а не старый 2.5-era example. Вторая: responseModalities: ["IMAGE"] заставляет Gemini вернуть картинку без лишнего text output, когда вам не нужны caption или explanation. Docs говорят, что default behavior включает text plus image, и это полезно для conversational editing flows, но для первого "save the file" сценария image-only чище. Третья: полезный Gemini-native control живет в imageConfig. Если output shape важен, лучше сказать это прямо. Четвертая: этот пример должен жить на сервере. Не тащите permanent API key в публичный frontend только потому, что sample выглядит коротким.

После того как это заработало, следующий разумный JavaScript choice — понять, нужен ли вам pure image output или mixed text-plus-image response. Для backend worker image-only обычно проще. Для creator tools, где пользователю полезно видеть объяснение изменений или подсказку следующей итерации, mixed response может быть сильнее. Это одна из недооцененных сторон native Gemini image flow: его можно использовать как conversation, а не просто как fire-and-forget image endpoint.

JavaScript — еще и то место, где команды часто начинают overengineer слишком рано. Ваш первый request не нуждается ни в Google Search grounding, ни в chat state, ни в большом orchestration layer. Самая полезная последовательность скучна: first image, потом editing, потом stored outputs, потом retries, потом quotas, и только потом optional grounding.

Пример на Python: самый удобный текущий путь для редактирования и итераций

Python часто оказывается самым комфортным способом освоить Gemini image generation. Официальные docs понятные, current SDK компактный, а editing patterns ложатся в Python почти естественно. Поэтому Python особенно силен для scripts, content pipelines, batch tooling и внутренних workflows, где нужно не просто один раз получить картинку, а быстро ее дорабатывать.

Главное достоинство Python здесь в том, что он позволяет перейти от generation workflow к editing workflow без смены mental model. Gemini docs показывают и image generation, и image editing через тот же базовый generate_content call, просто с разными input types. Для реальной работы с изображениями это ближе к практике, чем старые text-to-image APIs, где каждое изменение ощущалось как другой продукт.

python
from google import genai from google.genai import types from PIL import Image client = genai.Client() base_image = Image.open("living-room.png") prompt = """ Using the provided image of a living room, change only the blue sofa to a vintage brown leather chesterfield sofa. Keep the pillows, lighting, coffee table, and room layout unchanged. """ response = client.models.generate_content( model="gemini-3.1-flash-image-preview", contents=[prompt, base_image], config=types.GenerateContentConfig( response_modalities=["TEXT", "IMAGE"], image_config=types.ImageConfig( aspect_ratio="4:3", image_size="2K", ), ), ) for part in response.parts: if part.text is not None: print(part.text) elif part.inline_data is not None: image = part.as_image() image.save("living-room-edit.png")

В этом примере за результат отвечают две вещи. Первая — prompt discipline. Если вы хотите local edit, нужно явно защитить элементы, которые не должны меняться. Gemini хорошо следует инструкции, но он не обязан догадаться, что layout, lighting и props должны остаться нетронутыми, если вы этого не сказали. Вторая — base image передается внутри contents рядом с текстом. Именно так и стоит думать о current Gemini image editing: вы даете контекст и просите controlled change, а не переходите в отдельный "edit mode" endpoint.

Здесь же multi-turn workflows становятся полезнее, чем гигантские one-shot prompts. Image-generation docs прямо рекомендуют conversational editing. На практике это важно: хороший production prompt очень часто не самый длинный, а самый последовательный. Вы генерируете initial result, смотрите, что уже хорошо, а потом просите только нужную delta. Если первая версия попала на 80%, дешевле и лучше продолжить ту же нить, чем сносить все и писать еще более раздутый prompt.

Python особенно силен на этих follow-up stages, потому что легко сочетается с asset pipelines, moderation hooks и post-processing, которые у вас уже могут быть. Но именно здесь многие команды делают типичную ошибку: proof of concept удается в notebook или single script, а до production hardening дело не доходит. Если image flow станет частью user-facing продукта, стоит заранее добавить retries, логировать model и image size, и наблюдать usage behavior до того, как этот скрипт превратится в невидимую production infrastructure.

Пример на cURL и raw REST: когда нужен низкоуровневый дебаг или интеграция без SDK

Если SDK кажется слишком "магическим", или если ваш runtime вообще не Python и не Node, raw REST все еще остается лучшим truth source. cURL — не самый эргономичный путь для полноценного приложения, но именно он лучше всего показывает, какую request shape Gemini API ждет на самом деле. Поэтому cURL особенно полезен для debugging model choice, payload serialization, proxy layers и отличий между AI Studio и вашим кодом.

bash
curl -s -X POST \ "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \ -H "x-goog-api-key: $GEMINI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contents": [{ "parts": [ { "text": "Create a 16:9 studio photo of a white sneaker on a soft gray background with crisp side lighting and premium ecommerce styling." } ] }], "generationConfig": { "responseModalities": ["IMAGE"], "imageConfig": { "aspectRatio": "16:9", "imageSize": "2K" } } }'

Смысл держать cURL example под рукой не в красоте. Он нужен, чтобы убрать неопределенность. Если запрос работает в cURL, но ломается в SDK, проблема, скорее всего, в client version, вашем wrapper или response parsing. Если не работает и в cURL, дело ближе к API contract, project billing, rate limits или выбранной model. Это резко ускоряет debugging.

Для unsupported languages или low-dependency environments raw REST тоже остается самым прямым стартом. Вы можете в итоге завернуть этот request в Go, Rust, PHP или внутренний platform layer, но сначала полезно увидеть wire format. cURL заставляет смотреть на generateContent, contents, generationConfig, responseModalities и imageConfig в явном виде. Это помогает и в будущем, когда вам нужно сравнить proxy behavior, объяснить contract команде или написать свой internal wrapper.

Минус очевиден: response decode придется делать руками, и удобства SDK для parts, chats или file inputs исчезают. Поэтому REST здесь выступает как debugging tool и source of truth, но не как главный comfort path.

Редактирование, multi-turn flow и более высокие разрешения, которые реально меняют код

Схема anatomy запроса для Gemini image generation: inputs, responseModalities, aspect ratio, size и multi-turn edit flow.
Схема anatomy запроса для Gemini image generation: inputs, responseModalities, aspect ratio, size и multi-turn edit flow.

Именно здесь Gemini-native image generation по-настоящему уходит вперед от поверхностных tutorial pages. Слишком много статей заканчиваются после одного text-to-image call. Для demo этого достаточно, но в реальном продукте ценность часто лежит не в разовой генерации, а в controlled edits, reference images, output sizing и последовательных уточнениях хорошего частичного результата.

Google current docs сильны именно в этой части. Они не просто показывают одну генерацию, а прямо рекомендуют multi-turn image editing и даже демонстрируют chat-based examples, где сначала создается infographic, а затем на следующем шаге меняется язык текста внутри графики. Это важно не как игрушечный sample, а как смена mental model: Gemini image generation — это не только endpoint, который отдает пиксели. Это conversation-aware visual system, где следующая правка может опираться на уже удачный предыдущий state.

javascript
import { GoogleGenAI } from "@google/genai"; import fs from "node:fs"; const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }); const chat = ai.chats.create({ model: "gemini-3.1-flash-image-preview", config: { responseModalities: ["TEXT", "IMAGE"], }, }); await chat.sendMessage({ message: "Create a vibrant infographic that explains photosynthesis like a colorful kids cookbook.", }); const response = await chat.sendMessage({ message: "Update this infographic to be in Spanish. Do not change any other elements.", config: { responseModalities: ["TEXT", "IMAGE"], imageConfig: { aspectRatio: "16:9", imageSize: "2K", }, }, }); for (const part of response.candidates[0].content.parts) { if (part.inlineData) { fs.writeFileSync( "photosynthesis-es.png", Buffer.from(part.inlineData.data, "base64") ); } }

Именно здесь imageSize и aspectRatio перестают быть trivia. В текущих официальных docs для Gemini 3 image models перечислены 512, 1K, 2K, 4K, а также aspect ratios вроде 16:9, 9:16, 21:9, 4:1 и 1:4. Это уже не мелкая настройка, а реальное production advantage native Gemini request shape. Если вы строите ecommerce assets, slide graphics, app-store artwork, banners или social crops, чем точнее вы задаете output shape на входе, тем меньше пост-обработки потребуется позже.

Pro lane тоже нужно понимать именно здесь, а не как абстрактную роскошь. Текущая pricing page и help page Gemini Apps говорят одно и то же разными словами. Flash Image — current default. Pro — route под более дорогие, text-heavy и premium workloads. То есть Pro не надо делать моделью первого примера, но ее нужно называть прямо, когда задача звучит как poster copy, infographic labels или premium product art.

Есть и еще один capability edge. Текущая pricing page отдельно указывает стоимость Google Search grounding и image-based grounding для Gemini 3 image line, а image docs показывают search-grounded visual flows. Это значит, что часть premium workflows уже устроена не как "prompt in, image out", а как generation с retrieved context. Сила здесь реальна, но это не day-one requirement. Сначала teaching path должен доводить до рабочего базового image request, и только потом добавлять grounding там, где он действительно нужен продукту.

Pricing, batch mode и когда Pro действительно оправдан

Матрица моделей и стоимости для Gemini 3.1 Flash Image Preview, Gemini 3 Pro Image Preview и Gemini 2.5 Flash Image в кодовых примерах.
Матрица моделей и стоимости для Gemini 3.1 Flash Image Preview, Gemini 3 Pro Image Preview и Gemini 2.5 Flash Image в кодовых примерах.

Для статьи с code examples pricing не должен доминировать, но игнорировать его нельзя. Model choice и output resolution — это часть implementation decision, а не просто procurement appendix.

Сейчас pricing page Google дает довольно конкретные сигналы. Gemini 3.1 Flash Image Preview в standard mode стоит примерно $0.045 за 0.5K, $0.067 за 1K, $0.101 за 2K и $0.151 за 4K. Gemini 3 Pro Image Preview стоит примерно $0.134 за 1K или 2K и $0.24 за 4K. Для legacy Gemini 2.5 Flash Image официально все еще указаны около $0.039 в standard и $0.0195 в batch. Это не просто финансовые строки. Они определяют, какие examples вообще стоит показывать читателю как default path.

МодельТекущий статусОфициальный price signalЛучший fit для code examplesО чем предупредить
gemini-3.1-flash-image-previewCurrent default lane, released 26 февраля 2026Около $0.045 на 0.5K, $0.067 на 1K, $0.101 на 2K, $0.151 на 4KЛучший старт для большинства новых features и integrationsPreview label означает более жесткие quotas, чем у stable text models
gemini-3-pro-image-previewCurrent premium lane, released 20 ноября 2025Около $0.134 на 1K/2K и $0.24 на 4KText-heavy graphics, infographics, premium creative assetsPrice jump заметный, так что default делать его не стоит
gemini-2.5-flash-imageLegacy low-cost lane, shutdown scheduled for 2 октября 2026Около $0.039 standard и $0.0195 batchCost-sensitive flows и batch-heavy work, готовая жить с retirement riskЭто уже не future-proof default, даже если строка дешевле

Когда Pro действительно стоит своих денег? Тогда, когда плохой output обходится дороже, чем разница в model price. Это касается posters, diagrams, infographics, branded assets и вообще задач, где image text quality и polished finish важнее throughput. Если же задача — быстрые вариации, ideation, cost-sensitive volume generation, то Flash Image остается намного более сильным default.

Batch mode — второе ценовое решение, которое меняет architecture. Pricing page Google делает economics достаточно очевидной: если нужно сгенерировать много изображений, а delayed turnaround допустим, batch pricing может заметно снизить cost, особенно на legacy 2.5 lane и Flash Image line. Это не меняет shape первого tutorial request, но меняет рекомендации, когда reader уходит от прототипа к scheduled generation jobs или backlog processing.

Именно здесь нужно честно проговорить статус 2.5 image line. Она все еще полезна. Она все еще официальная. Она все еще дешевле. Но если вы публикуете свежую страницу с code examples, вы обязаны назвать ее тем, чем она теперь является: cheap legacy branch с видимым retirement clock, а не главным recommended path для new integrations.

Troubleshooting: частые ошибки в примерах кода для Gemini image generation

Первая ошибка — копировать старый 2.5 image tutorial и предполагать, что он до сих пор описывает лучший старт. Уже нет. Текущие docs, pricing и launch materials все указывают разработчикам на Gemini 3 image line как на базовый current route. Если вы используете gemini-2.5-flash-image, пусть это будет осознанный выбор legacy-cost path, а не случайное падение в старый search result.

Вторая ошибка — воспринимать поведение app, AI Studio и Gemini API как один продуктовый контракт. Это не так. Help page Gemini Apps полезна, чтобы понять Nano Banana 2 и Nano Banana Pro в consumer surface. AI Studio полезен как prompt playground. Но contract, по которому живет ваш код, задает именно API, и official billing plus launch pages достаточно ясно показывают, что paid-key assumptions и quota posture здесь имеют значение.

Третья ошибка — не задавать explicit image controls. Если важна форма результата, ставьте aspectRatio. Если важен размер — imageSize. Не надейтесь, что defaults случайно совпадут с product needs. В image docs Google прямо говорит, что иначе модель может сохранить размеры input image или вернуть square output. Для experiments это терпимо. Для production — слабый default.

Четвертая ошибка — относиться к image generation как к one-shot endpoint, когда реальный workflow просит multi-turn editing. Текущий Gemini image stack особенно силен тогда, когда вы сохраняете контекст удачного partial result и просите точечный delta. Во многих случаях это быстрее, дешевле и контролируемее, чем пытаться переписать гигантский prompt и начать с нуля.

Пятая ошибка — игнорировать project-level quotas. Rate-limits page говорит прямо: limits применяются к проекту, а не к отдельному API key, а requests per day resetятся в полночь по Pacific time. Именно поэтому community discussions регулярно упираются в 429 confusion, хотя человеку кажется, что usage был небольшим. Исправление здесь не в том, чтобы выучить одну цифру с чужого скриншота, а в том, чтобы смотреть на quotas как на live project state и подтверждать их в AI Studio.

Шестая ошибка — считать, что самая дешевая ценовая строка должна стать лучшим default example. Раньше в Gemini image story эта логика еще была спорно допустимой. Сейчас — уже нет. Правильная educational последовательность выглядит так: current default first, cheaper legacy branch second, premium Pro branch third. Это помогает читателю принять хороший первый decision, а не рано оптимизировать узкий cost edge.

Седьмая ошибка — забывать, что все generated images включают SynthID watermark. Это не обязательно ломает workflow, но это реальная характеристика продукта, и серьезная implementation page должна говорить о ней прямо. Если же ваш реальный вопрос уже не "какой sample копировать", а "почему flow перестал работать как раньше", логичнее перейти к разбору, когда в Gemini сбрасываются image limits и к гайду по Gemini image API free tier.

Вывод

Лучшие Gemini image generation code examples в 2026 году — это не самые flashy snippets, а те, что делают следующее implementation decision очевидным.

Начинайте с native Gemini API. Для большинства новых workflows берите gemini-3.1-flash-image-preview. Сначала сохраните одну реальную картинку в JavaScript, Python или cURL, и только потом наращивайте architecture. Как только output shape начинает иметь значение, добавляйте aspectRatio и imageSize явно. Переходите на gemini-3-pro-image-preview только тогда, когда text-heavy, infographic-heavy или premium output действительно меняют outcome. А gemini-2.5-flash-image воспринимайте как дешевую legacy lane, а не как default future path.

Если эти route decisions приняты правильно в самом начале, остальная интеграция обычно становится куда чище. Сложность чаще всего не в коде как таковом, а в том, чтобы довериться правильному current example на правильном surface раньше, чем старые tutorials и смешанные product signals уведут вас в более медленный путь.

Nano Banana Pro

4K Изображение-80%

Google Gemini 3 Pro Image · AI Генерация

Обслужено 100K+ разработчиков
$0.24/изобр.
$0.05/изобр.
Спецпредложение·Стабильный·Alipay/WeChat
Gemini 3
Нативная модель
Прямой доступ
20мс задержка
4K Ultra HD
2048px
30сек генерация
Сверхбыстро
|@laozhang_cn|$0.05 бонус

200+ AI Models API

Jan 2026
GPT-5.2Claude 4.5Gemini 3Grok 4+195
Image
80% OFF
gemini-3-pro-image$0.05

GPT-Image-1.5 · Flux

Video
80% OFF
Veo3 · Sora2$0.15/gen
16% OFF5-Min📊 99.9% SLA👥 100K+