| name | risovalshchik |
| description | Универсальный рисовальщик — генерирует изображения через Nano Banana 2 (Google Gemini) или GPT Image 2 (OpenAI). При активации спрашивает у пользователя, через какую модель рисовать, затем выполняет генерацию с сохранением в ~/Downloads/images. Use when пользователь пишет «нарисуй», «сгенери изображение», «сгенерируй картинку», «сделай картинку», «нарисуй картинку», «сделай изображение», «нужна картинка», «нарисовать», «generate image», «рисовальщик», «/risovalshchik». Также покрывает режим серии: «серия картинок», «несколько кадров в одном стиле», «пошагово», «преемственность», «процесс», «N кадров для рецепта/инструкции/гайда», «кадры с одной тарелкой/фоном/посудой». Do NOT use for рекламных креативов с пропиской ЦА и текстов объявлений (→ ad-creative-kesha), презентаций из нескольких слайдов (→ presentation-builder), вёрстки PDF-гайдов (→ guide-builder-tg). Если пользователь явно просит «картинку для поста / сторис / обложку канала / один баннер» без этих контекстов — это risovalshchik.
|
Рисовальщик
Быстрый доступ к двум лучшим моделям генерации изображений: Nano Banana 2 (Google, через MCP) и GPT Image 2 (OpenAI, через скрипт). Без обёртки жанра — просто рисует то, что попросили.
Базовое правило
При активации всегда спрашивай, через какую модель рисовать, если пользователь не указал явно в запросе. Не выбирай сам — это осознанный выбор пользователя.
Исключения (можно не спрашивать):
- В запросе прямо указано «через Nano Banana», «нанобанан», «Gemini» → Nano Banana 2
- В запросе указано «через GPT», «через ChatGPT», «GPT Image», «OpenAI», «ChatGPT Images», «DALL-E» (устарел, уходит 12 мая 2026) → GPT Image 2
- Нужен качественный текст на картинке (надписи, логотипы, меню, инфографика) → предложи GPT Image 2 с обоснованием
Поток работы
1. Спросить модель и параметры
Покажи короткое меню:
Через что рисуем?
[1] Nano Banana Pro / 2 (Google, gemini-3-pro-image-preview) — быстрее, дешевле,
Thinking-ядро разруливает spatial/физику, до 14 reference-картинок,
уверенно рендерит текст (в т.ч. кириллицу).
[2] GPT Image 2 (OpenAI) — 2K-разрешение, нативный прозрачный фон, чуть точнее
на длинных текстах и мелком кегле, до 16 reference в edits.
Формат: 1:1 / 9:16 / 16:9 (если не указали — 1:1)
Количество: 1 вариант (если нужно больше — скажите)
Если пользователь уже дал промпт полностью — после ответа сразу запускай генерацию, не переспрашивай детали.
2. Доработать промпт (тихо, если нужно)
Базовые правила (обе модели):
- Промт всегда на английском — независимо от языка пользователя. Качество заметно выше.
- Текст на картинке — в двойных кавычках + явно указан язык:
"ПРИВЕТ" in Russian Cyrillic letters, bold sans-serif, white, centered. Без Russian Cyrillic модель нарисует латиницу даже при русском запросе.
- Сложные сцены — описывай spatial-отношения буквально:
cat TO THE LEFT of vase, book BEHIND both.
- Камера (lens/aperture/DOF) — только для фотореализма. Для иллюстраций/инфографики — не упоминать.
- Negatives — естественным языком:
No text except title. No extra fingers. Не Stable-Diffusion-синтаксис.
Если промпт пользователя — короткая фраза типа «нарисуй кота в шляпе», разверни её до рабочего промпта по шаблону из references/prompting.md:
[Subject + adjectives] doing [action] in [location]. [Composition].
[Lighting]. [Style]. [Text with exact wording if any]. [Constraints].
Не спрашивай разрешения — просто разверни и покажи итоговый промпт одной строкой на английском перед вызовом. Если пользователь уже дал развёрнутый промпт (3+ предложения с деталями) — используй как есть, только проверь, что язык текста на картинке явно указан.
3. Генерация
Вариант А: Nano Banana 2
1. (опционально) mcp__nanobanana__set_aspect_ratio — если нужно не 1:1
2. mcp__nanobanana__gemini_generate_image с параметрами:
- prompt: финальный промпт
- (для itérerации с референсом используй gemini_edit_image)
Для нескольких вариантов — вызови gemini_generate_image подряд несколько раз. MCP держит conversation — повторные правки идут к той же сессии. Чтобы начать с нуля — mcp__nanobanana__clear_conversation.
Вариант Б: GPT Image 2
python3 ~/.claude/skills/risovalshchik/scripts/generate_gpt_image.py \
--prompt "<финальный промпт>" \
--size <1024x1024|1024x1536|1536x1024|2048x2048|1536x2048|2048x1536> \
--n <1..10> \
--quality high
Маппинг размеров:
1:1 → 1024x1024 (стандарт) или 2048x2048 (2K, только gpt-image-2)
9:16 / 2:3 портрет → 1024x1536 или 1536x2048
16:9 / 3:2 ландшафт → 1536x1024 или 2048x1536
auto — модель сама выберет оптимальное
2K-размеры работают только на gpt-image-2. Если стоит fallback на gpt-image-1 — возьми 1024-ряд.
Дополнительные флаги:
--transparent — прозрачный фон (автоматически PNG)
--reference <path> — итерация по существующему изображению (можно несколько --reference)
--output-format jpeg|webp — если не нужен PNG
Скрипт читает OPENAI_API_KEY из .env в корне скилла. Сохраняет в ~/Downloads/images/gpt_<timestamp>_<N>.png и печатает JSON с путями и usage.
4. Показать результат
Выведи пути к файлам и покажи сами картинки в чате через Read-tool (VSCode отрендерит inline):
Готово:
- ~/Downloads/images/gpt_20260423_143052_1.png
Если пользователь сказал «ещё вариант» / «сделай темнее» / «поменяй X»:
- Nano Banana — просто вызови
gemini_generate_image или gemini_edit_image в той же сессии
- GPT Image 2 — запусти снова с доработанным промптом; для ref-итерации передай предыдущий файл через
--reference
Режим серии (несколько кадров в одном стиле)
Используется, когда нужно сделать несколько кадров с преемственностью: одна и та же тарелка/посуда/фон/свет/ракурс на всех картинках. Типовые сценарии: пошаговый рецепт, инструкция, мини-сториборд для поста, серия для PDF-гайда, шаги обучающего процесса.
Когда активировать режим серии
Триггеры в запросе пользователя:
- «серия картинок / серия кадров / несколько кадров»
- «в одном стиле / с одной тарелкой / тот же фон / преемственность»
- «пошагово / процесс / шаги приготовления»
- «N кадров для рецепта / инструкции / гайда»
- Пользователь дал ≥3 описаний кадров одной темы
Если пользователь просит «один кадр» или однократную картинку — это обычный одиночный поток, режим серии не нужен.
Поток серии (Nano Banana — рекомендация по умолчанию)
Шаг 1. Спросить модель. Покажи короткое меню моделей (как в обычном потоке), но с пометкой:
Для серии в одном стиле РЕКОМЕНДУЕТСЯ Nano Banana 2:
у неё есть session с накопленной историей и edit-режим от референса —
это и есть несущая конструкция преемственности.
GPT Image 2 для серии работает, но стиль может дрейфовать
(см. раздел «Серия на GPT Image 2» ниже).
Если пользователь не возражает — Nano Banana.
Шаг 2. Стилевой паспорт серии. Если пользователь не дал — спроси одним блоком:
- Slug темы (станет именем
conversation_id и подпапки в ~/Downloads/images/)
- Количество кадров и краткое описание каждого
- Опорные элементы: фон/поверхность, посуда/предметы, свет, ракурс, палитра
- Внешние референсы (фото товара/упаковки/предмета — опционально)
Если что-то очевидно из контекста — не переспрашивай, просто зафиксируй и покажи паспорт пользователю одним абзацем для подтверждения.
Шаг 3. Очистить сессию.
mcp__nanobanana__clear_conversation с conversation_id = <slug>
Это критично: хвосты от прошлой задачи уведут серию в сторону.
Шаг 4. Эталонный кадр (Кадр 1).
mcp__nanobanana__gemini_generate_image с параметрами:
- conversation_id: <slug>
- prompt: полный стилевой паспорт + содержание первого кадра (на английском)
- reference_images: [внешние референсы, если есть]
- output_path: ~/Downloads/images/<slug>/01-<краткое-описание>.png
Покажи эталон через Read и спроси: «Стиль/посуда/свет устраивают, или поправить эталон?» Если правки — gemini_edit_image с image_path: "last", и только после OK по эталону двигайся дальше. Эталон — это паспорт всей серии; если он кривой, серия будет кривой.
Шаг 5. Кадры 2…N. Каждый следующий кадр через gemini_edit_image, всегда от первого эталона (history:0), не от предыдущего:
mcp__nanobanana__gemini_edit_image с параметрами:
- conversation_id: <slug>
- image_path: "history:0" ← фиксируем эталон, не дрейфуем
- edit_prompt: <якорный блок> + <содержание кадра N>
- reference_images: ["history:0", <доп. референс если нужен>]
- output_path: ~/Downloads/images/<slug>/0N-<описание>.png
Якорный блок промпта (обязательный префикс в edit_prompt каждого не-эталонного кадра):
Maintain exact same scene as the reference image: same [crockery/posuda],
same [tabletop/background], same lighting setup, same camera angle,
same color palette. Now show: <содержание кадра>. <уточнения>.
Перечисляй конкретно что сохранять (тарелка цвета слоновой кости, дубовая столешница, мягкий боковой свет слева, ракурс ¾ сверху). Общие фразы вроде «in the same style» модель интерпретирует слабо и плывёт.
Если меняется ракурс (например с ¾ на top-down) — явно: "Switch to top-down view, but keep the exact same wooden tabletop, same crockery, same lighting".
Если для конкретного кадра нужен дополнительный референс (упаковка товара, предмет) — передай его через reference_images вместе с "history:0", чтобы модель видела и эталон сцены, и новый объект.
Каждый кадр показывай через Read сразу после генерации — пользователь должен видеть прогресс серии.
Продакт-плейсмент с кириллической этикеткой
Самая болевая точка серии — точная кириллица на упаковке клиентского продукта. Nano Banana системно галлюцинирует русский текст: первая буква может перевернуться, слог пропасть, буква пере-нарисоваться (типичный пример — слово «МЯКОТЬ» рендерится как «РЯКОТЬ» из 5 итераций подряд, никакие усиления промпта не помогают). GPT Image 2 точнее на тексте, но разрушает преемственность сцены.
Стандартный протокол серии с продактом
-
Подробно проработать серию ДО генерации. Кадр за кадром обсудить с пользователем: что в кадре, в каком ракурсе, со светом, нужна ли упаковка, и если да — крупно или фоном. Количество кадров с упаковкой не лимитировано жёстко — определяется логикой сюжета (часто это эталон-mise-en-place + один процессный кадр «продукт в действии», но бывают серии где упаковка нужна только на одном кадре или, наоборот, на четырёх). Главное — пользователь и ассистент явно проговаривают для каждого кадра.
-
Проверить библиотеку доноров ~/.claude/skills/risovalshchik/donors/. Если для нужного бренда там уже есть «золотой кадр» (например brand-product.png) — переходи сразу к шагу 4 с этим донором.
-
Если донора нет — создать студийного донора СНАЧАЛА. Это изолированный кадр упаковки, который потом будет источником правильной этикетки для всей серии. Делай 3–5 пробных генераций упаковки на нейтральном фоне (тёплое дерево / мрамор / льняная скатерть, top-down или фронтальный вертикальный кадр), останавливайся как только получишь идеально читаемую кириллику. Сохрани этот кадр в ~/.claude/skills/risovalshchik/donors/<brand>-<product>.png. Имя файла — нижний регистр через дефис, без пробелов и кириллицы. Обнови таблицу в donors/README.md.
-
Эталон серии — gemini_edit_image от донора, заменяя всё кроме упаковки на нужную сцену mise en place (см. шаблон package-preservation ниже). Дальше серия идёт от этого эталона как обычно.
-
Кадры с упаковкой внутри серии — каждый делается через gemini_edit_image от того же донора (image_path = path/to/donor.png), а не от эталона. Это гарантирует, что упаковка на каждом таком кадре — побитово та же самая, без галлюцинаций.
-
Кадры без упаковки — обычная схема серии: edit от history:0 (эталона) с якорным блоком.
Главный приём — «package preservation» через edit: взять кадр (донор или сцену с уже корректной упаковкой) и использовать его как image_path с явной инструкцией «keep the package EXACTLY as it is, do NOT redraw the label, replace EVERYTHING ELSE with...».
Шаблон промпта package-preservation:
CRITICAL: keep the [Brand] cardboard/jar/bottle package EXACTLY as it is
in this input image — same position, same size, same label, same Cyrillic
text on the label (every letter must remain identical: [list of words]).
DO NOT redraw the package, DO NOT regenerate its label, DO NOT touch its text.
The package is a fixed, untouched element.
Replace EVERYTHING ELSE in the scene with: <описание новой композиции>.
Это работает потому, что Nano Banana при edit относится к содержимому изображения как к набору фиксированных объектов — если попросить «не трогай», она реально оставляет пиксели нетронутыми, а перерисовывает только обозначенные области.
Когда нужно изменить РАЗМЕР упаковки (например, в эталоне она крупнее, чем хочется в кадре) — это рискованный шаг: при resize модель часто пере-рендерит этикетку и кириллица плывёт. Стратегия:
- Сначала попробовать
edit с явной инструкцией «scale down by ~1/3 but reproduce the label PIXEL-PERFECT, every letter identical, only scale changes». В 60% случаев получается.
- Если поплыло — повторить с другой формулировкой, например явно перечислить буквы и форму М как «triangle shape», П как «vertical bars with horizontal top».
- Если 2–3 итерации не помогли — fallback на PIL-композит: вырезать чистую упаковку из удачного кадра серии, программно отресайзить и наклеить на нужный кадр поверх кривой версии. См. подсекцию ниже.
PIL-композит как последний рубеж (когда Nano Banana не справляется):
Источник чистой упаковки лучше брать из самой серии (например, кадр финальной подачи, где упаковка случайно попала идеально), а не из исходного PDF/студийного фото клиента. Причина — упаковка из серии уже:
- В нужном top-down/¾ ракурсе
- В тёплом свете сцены
- С естественной тенью на дереве
Алгоритм:
- Color-mask чистой упаковки на исходном кадре (инверсия маски тёплого деревянного фона:
R−G > 15 AND R−B > 25) → bbox + alpha
- Color-mask кривой упаковки на целевом кадре (то же)
- Resize чистой в bbox целевой с сохранением аспекта
- Paste с alpha
Известные подводные камни PIL-композита: при первой попытке часто торчат ободки старой упаковки, потому что bbox недостаточно покрывает тень/контур. Решение — не делать заливку фоном (получается чёрный квадрат), а наклеивать чистую RGBA-упаковку точно поверх старой, в bbox с лёгким padding 4–6 px.
OpenAI inpaint с маской — альтернатива PIL для замены упаковки на одном кадре: создаёшь маску opaque-везде/transparent-над-упаковкой, передаёшь в images/edits endpoint OpenAI с двумя референсами (целевой кадр + чистая упаковка). Модель меняет только маскированную область. Цена — OpenAI всё равно пере-сжимает кадр в свой формат и часть деталей сцены вне маски слегка дрейфует (типичные потери: вышивка на полотенце исчезает, мелкие миски перерасставляются).
Вариативность серии: ракурсы и свет
Серии из 6–8 кадров с одинаковым top-down ракурсом и одинаковым лучиком света слева сверху ВЫГЛЯДЯТ КАК AI. Это безошибочно опознаётся даже неподготовленным глазом — слишком регулярно, слишком студийно, слишком одинаково.
Чтобы серия читалась как фотосессия, а не как генерация:
- Ракурсы микшировать: 2–3 кадра top-down (mise en place, нанесение соуса на пиццу — там top-down уместен), 2 кадра ¾ overhead (~30–45° от вертикали — для активных моментов: раскатка, моцарелла, готовое блюдо), 1 кадр eye-level или near-eye-level (~10–15° над горизонтом — драматичный финал, например пицца перед открытой печью)
- Направление света варьировать: на одном кадре — мягкий рассеянный без направленности, на другом — направленный справа, на третьем — тёплый бэклайт. Всегда явно прописывать в edit_prompt:
"Lighting: soft diffused natural daylight, even across the frame, NO bright sunbeam streak" или "warm directional light coming from the RIGHT side" или "warm dramatic side-lighting from an off-frame oven glow".
- «Лучик солнца слева сверху» — типичный «отпечаток» сгенерированной серии. Если на эталоне он есть — на каждом edit-кадре явно отрицать:
"NO bright sunbeam streak, NO single light beam across the table".
- «Человеческие» детали — добавлять по одному на кадр: руки повара (предплечья) в активных моментах, бокал вина в фоне, базиликовый лист «случайно» на столе, мука рассыпана живописно, капля масла рядом с кувшином, скомканное полотенце. Это маркеры «живой кухни», без них серия выглядит как 3D-визуализация.
- Небольшое перерасставление окружения — между кадрами одни и те же предметы можно слегка двигать (полотенце переехало в другой угол, добавилась вторая разделочная доска, появился штопор). Это имитирует «процесс готовки», а не «съёмка одной и той же декорации».
При этом базовые опорные элементы (тип столешницы, цветовая палитра, посуда основная) должны оставаться — иначе серия развалится. Меняй только то, что в реальной фотосессии меняется естественно: ракурс, свет, мелкие props.
Шаг 6. Финал серии. Список всех файлов + контрольная таблица:
| # | Кадр | Файл |
|---|------|------|
| 1 | Эталон: раскладка ингредиентов | 01-spread.png |
| 2 | Нарезка soffritto | 02-chop.png |
| ... | ... | ... |
Серия на GPT Image 2 (fallback-путь)
Используй только если: нужен 2K-резолюшн, критична читаемость кириллических надписей на упаковках/вывесках в кадре, или пользователь специально попросил OpenAI.
Особенности:
- Нет
conversation / накопленной истории — каждый вызов независимый
- Нет режима
edit — --reference работает как стилевая подсказка, а не жёсткая фиксация сцены
- На сильно меняющемся содержимом возможен дрейф посуды/фона
Жёсткие правила:
- Эталон — без референсов, по полному промпту:
python3 .../generate_gpt_image.py --prompt "<полный стилевой паспорт + кадр 1>" \
--size 2048x1536 --quality high \
--output ~/Downloads/images/<slug>/01-<описание>.png
- Каждый последующий кадр — всегда
--reference 01.png (от эталона, не от предыдущего):
python3 .../generate_gpt_image.py \
--prompt "<якорный блок> Now show: <кадр N>" \
--reference ~/Downloads/images/<slug>/01-<описание>.png \
--size 2048x1536 --quality high \
--output ~/Downloads/images/<slug>/0N-<описание>.png
Брать референсом предыдущий кадр нельзя — ошибки накапливаются и серия плывёт через 3–4 шага.
- Якорный блок промпта (тот же шаблон, что и для Nano Banana):
Reproduce exactly the scene from the reference image: same crockery,
same wooden tabletop, same lighting, same camera angle, same color palette.
Only the food/contents on the plate changes. Now show: <кадр N>.
- При сильном изменении содержимого (например с раскладки сырых ингредиентов на готовое блюдо в тарелке) предупреди пользователя: «GPT Image 2 может пере-рисовать посуду; если критична преемственность — лучше переключиться на Nano Banana». Решение за пользователем.
Выбор модели для серии — таблица
| Критерий | Nano Banana 2 | GPT Image 2 |
|---|
| Та же тарелка/посуда между кадрами | ✅ держит хорошо (через history:0) | ⚠️ держит средне |
| Тот же фон/свет | ✅ | ⚠️ |
| Кириллический текст на упаковке/вывеске | ⚠️ иногда плывёт | ✅ точнее |
| 2K-разрешение | ❌ | ✅ |
| Прозрачный фон | ❌ | ✅ |
| Накопленная сессия / история | ✅ | ❌ |
Дефолт для серии — Nano Banana 2. GPT Image 2 — только когда есть конкретное обоснование (2K, точный текст, требование заказчика).
Готовые стилевые пресеты (быстрый старт)
Если пользователь говорит «в моём стиле» или «как меловая презентация» — применяй готовые модификаторы стиля из references/prompting.md:
- Меловой blackboard — для обложек ТГ-постов технического толка
- Paper sketchnote — для лёгких, «человечных» постов
- Corporate clean — для деловых материалов
- Photoreal — для личных постов, travelогов
Что делать, если запрос лежит на границе с другим скиллом
- Пользователь просит «креатив для Директа» с описанием ЦА и УТП → передай в ad-creative-kesha (там полный цикл, включая модерацию)
- Пользователь просит «презу из 8 слайдов» → передай в presentation-builder
- Пользователь просит «обложку для презы» (одна картинка) → это risovalshchik, можно рисовать
- Пользователь просит «картинку для поста про X» → это risovalshchik
Типичные ошибки
- Не спросил модель, выбрал сам — почти всегда неправильно, кроме явных триггеров выше. Спроси.
- Написал промт по-русски — качество обеих моделей заметно ниже на русском промте. Промт всегда разворачивай на английский, даже если запрос на русском.
- Русский текст на картинке без явного языка — промт
the sign says "ПРИВЕТ" без указания in Russian Cyrillic letters почти гарантированно нарисует латиницу. Всегда кавычки + язык.
- Забыл сбросить conversation Nano Banana — накапливается контекст от прошлой задачи, картинка уходит в сторону. Перед новой независимой задачей —
clear_conversation.
- Показал только пути, не открыл картинки — пользователь хочет видеть результат сразу. Читай через Read-tool после генерации.
Ошибки специфично для режима серии
- Не зафиксировал эталон через
history:0, а брал last → каждый следующий кадр копирует предыдущий, мелкие сдвиги накапливаются и серия плывёт через 3–4 кадра. Всегда history:0 от первого эталонного кадра.
- Якорный блок промпта без конкретики — фразы «in the same style» / «keep consistent» модель интерпретирует слабо. Перечисляй буквально: «same off-white ceramic plate, same oak tabletop, same soft daylight from the left, same ¾ overhead angle».
- Поехал генерить кадры до подтверждения эталона → если эталон криво — серия криво. Эталон утверждается отдельно, ДО кадров 2…N.
- Смешал две серии в одной сессии → используй разные
conversation_id для каждой темы. Пример: bolognese-series, не дефолтный default.
- Меняешь ракурс без явного указания — если кадр 1 был ¾ сверху, а кадру 4 нужен top-down, в edit_prompt должно быть прямо: «Switch to top-down view, but keep the exact same wooden tabletop, same crockery, same lighting».
- На GPT Image 2 взял референсом предыдущий кадр, а не эталон → ошибки накапливаются, к 4-му кадру тарелка/фон уже другие. Всегда
--reference 01-эталон.png.
- Пытался "усилить" промпт описанием каждой кириллической буквы (П — вертикальные палки с горизонтальной перекладиной, М — треугольник и т.д.) → не работает. Nano Banana всё равно галлюцинирует на «МЯКОТЬ». Не трать итерации — переходи на package-preservation через edit от удачного кадра, или PIL-композит, или OpenAI inpaint.
- Не зафиксировал освещение явно в edit_prompt → на каждом кадре наследуется лучик света слева сверху от эталона, серия выглядит как AI. Каждый edit-промпт должен содержать строку
"Lighting: <описание> NO bright sunbeam streak" или явно описывать другое направление света для этого кадра.
- Серия из 6 одинаковых top-down кадров → читается как генерация даже при идеальном свете. Всегда мешай ракурсы (top-down + ¾ + eye-level), это базовое правило фотосессии, а не опциональное украшение.
- Resize упаковки одной командой "make it smaller" → модель пере-рендерит этикетку, кириллица плывёт. Всегда добавляй
"reproduce the label PIXEL-PERFECT, every letter identical, ONLY scale changes" и будь готов к 2–3 итерациям.
Troubleshooting
ERROR: OPENAI_API_KEY не найден → проверь .env в ~/.claude/skills/risovalshchik/.env. Если файла нет — попроси у пользователя ключ.
HTTPError 401 от OpenAI → ключ протух или отозван. Попроси новый.
HTTPError 403 ... "must be verified" → OpenAI требует Organization Verification. По доке это "may need" — требование срабатывает выборочно: зависит от возраста аккаунта и биллинга. Сначала попробуй напрямую — если взлетело, верификация уже пройдена раньше. Если 403 всё-таки вылез — скрипт автоматически попробует gpt-image-1, но и он в доке указан как verification-gated, так что и он может упасть. Решение единое: https://platform.openai.com/settings/organization/general → Verify Organization (Persona, паспорт/ID). Занимает ~5 минут.
HTTPError 400 content_policy_violation → промпт триггерит модерацию. Переформулируй мягче или предложи Nano Banana.
HTTPError 400 invalid size при 2048x* → либо твой tier ещё не получил 2K, либо после fallback работает gpt-image-1, который 2K не держит. Используй 1024-ряд.
HTTPError 400 model_not_found при gpt-image-2 → модель не прокачена для твоей организации. См. Organization Verification выше.
- Nano Banana возвращает «безопасный fallback» (абстракция вместо конкретики) → тоже модерация, но у Google. Попробуй переформулировать, убрать упоминания реальных людей/брендов.
- Картинка не показывается inline в VSCode → используй Read-tool на файле, расширение умеет отображать PNG/JPEG.
dall-e-2 / dall-e-3 вернули 404 или deprecated-ошибку → эти модели отозваны 12 мая 2026. Переключись на gpt-image-2 или gpt-image-1.