# Risovalshchik

> Универсальный рисовальщик — генерирует изображения через 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.

- Skill: `timurugulava/risovalshchik` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add timurugulava/risovalshchik`
- Raw SKILL.md: https://api.skillmd.com/api/skills/timurugulava/risovalshchik/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: TimurUgulava (https://skillmd.com/u/timurugulava)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/timurugulava/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](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

```bash
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 точнее на тексте, но разрушает преемственность сцены.

#### Стандартный протокол серии с продактом

1. **Подробно проработать серию ДО генерации.** Кадр за кадром обсудить с пользователем: что в кадре, в каком ракурсе, со светом, нужна ли упаковка, и если да — крупно или фоном. Количество кадров с упаковкой не лимитировано жёстко — определяется логикой сюжета (часто это эталон-mise-en-place + один процессный кадр «продукт в действии», но бывают серии где упаковка нужна только на одном кадре или, наоборот, на четырёх). Главное — пользователь и ассистент явно проговаривают для каждого кадра.

2. **Проверить библиотеку доноров** `~/.claude/skills/risovalshchik/donors/`. Если для нужного бренда там уже есть «золотой кадр» (например `brand-product.png`) — переходи сразу к шагу 4 с этим донором.

3. **Если донора нет — создать студийного донора СНАЧАЛА.** Это изолированный кадр упаковки, который потом будет источником правильной этикетки для всей серии. Делай 3–5 пробных генераций упаковки на нейтральном фоне (тёплое дерево / мрамор / льняная скатерть, top-down или фронтальный вертикальный кадр), останавливайся как только получишь идеально читаемую кириллику. Сохрани этот кадр в `~/.claude/skills/risovalshchik/donors/<brand>-<product>.png`. Имя файла — нижний регистр через дефис, без пробелов и кириллицы. Обнови таблицу в `donors/README.md`.

4. **Эталон серии** — `gemini_edit_image` от донора, заменяя всё кроме упаковки на нужную сцену mise en place (см. шаблон package-preservation ниже). Дальше серия идёт от этого эталона как обычно.

5. **Кадры с упаковкой внутри серии** — каждый делается через `gemini_edit_image` от того же донора (`image_path = path/to/donor.png`), а не от эталона. Это гарантирует, что упаковка на каждом таком кадре — побитово та же самая, без галлюцинаций.

6. **Кадры без упаковки** — обычная схема серии: 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 модель часто пере-рендерит этикетку и кириллица плывёт. Стратегия:

1. Сначала попробовать `edit` с явной инструкцией «scale down by ~1/3 but reproduce the label PIXEL-PERFECT, every letter identical, only scale changes». В 60% случаев получается.
2. Если поплыло — повторить с другой формулировкой, например явно перечислить буквы и форму М как «triangle shape», П как «vertical bars with horizontal top».
3. Если 2–3 итерации не помогли — fallback на PIL-композит: вырезать чистую упаковку из удачного кадра серии, программно отресайзить и наклеить на нужный кадр поверх кривой версии. См. подсекцию ниже.

**PIL-композит как последний рубеж** (когда Nano Banana не справляется):

Источник чистой упаковки лучше брать **из самой серии** (например, кадр финальной подачи, где упаковка случайно попала идеально), а не из исходного PDF/студийного фото клиента. Причина — упаковка из серии уже:
- В нужном top-down/¾ ракурсе
- В тёплом свете сцены
- С естественной тенью на дереве

Алгоритм:
1. Color-mask чистой упаковки на исходном кадре (инверсия маски тёплого деревянного фона: `R−G > 15 AND R−B > 25`) → bbox + alpha
2. Color-mask кривой упаковки на целевом кадре (то же)
3. Resize чистой в bbox целевой с сохранением аспекта
4. 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` работает как стилевая подсказка, а не жёсткая фиксация сцены
- На сильно меняющемся содержимом возможен дрейф посуды/фона

**Жёсткие правила:**

1. **Эталон — без референсов**, по полному промпту:

```bash
python3 .../generate_gpt_image.py --prompt "<полный стилевой паспорт + кадр 1>" \
  --size 2048x1536 --quality high \
  --output ~/Downloads/images/<slug>/01-<описание>.png
```

2. **Каждый последующий кадр — всегда `--reference 01.png` (от эталона, не от предыдущего)**:

```bash
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 шага.

3. **Якорный блок промпта** (тот же шаблон, что и для 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>.
```

4. **При сильном изменении содержимого** (например с раскладки сырых ингредиентов на готовое блюдо в тарелке) предупреди пользователя: «GPT Image 2 может пере-рисовать посуду; если критична преемственность — лучше переключиться на Nano Banana». Решение за пользователем.

### Выбор модели для серии — таблица

| Критерий | Nano Banana 2 | GPT Image 2 |
|---|---|---|
| Та же тарелка/посуда между кадрами | ✅ держит хорошо (через history:0) | ⚠️ держит средне |
| Тот же фон/свет | ✅ | ⚠️ |
| Кириллический текст на упаковке/вывеске | ⚠️ иногда плывёт | ✅ точнее |
| 2K-разрешение | ❌ | ✅ |
| Прозрачный фон | ❌ | ✅ |
| Накопленная сессия / история | ✅ | ❌ |

**Дефолт для серии — Nano Banana 2.** GPT Image 2 — только когда есть конкретное обоснование (2K, точный текст, требование заказчика).

## Готовые стилевые пресеты (быстрый старт)

Если пользователь говорит «в моём стиле» или «как меловая презентация» — применяй готовые модификаторы стиля из [references/prompting.md](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`.

