---
name: meme-maker
description: >
  Создаёт мемы-картинки под идею/тезис пользователя: подбирает подходящий популярный шаблон (Drake, Distracted Boyfriend, This is Fine, Galaxy Brain, Spongebob Imagination, Two Buttons, DiCaprio Cheers и ещё 20+), формулирует конкретные русские надписи, рисует через Nano Banana 2 (Google Gemini) по MCP-серверу `nanobanana`. Поддерживает опциональный авторский голос-профиль и нейтральный режим по умолчанию.
  Use when пользователь пишет: «сделай мем», «мем про X», «мем для канала», «мем на тему», «нарисуй мем», «придумай мем», «хочу мем», «мем-картинка», «meme-maker», «/meme-maker».
  Do NOT use for обычных картинок без мем-формата, рекламных креативов с ЦА и УТП, презентаций из слайдов, PDF-гайдов, обложек постов без мем-шаблона.
---

# meme-maker — конструктор мемов-картинок

Скилл превращает сырую мысль («вышел новый ChatGPT и DeepSeek, а я на Claude и спокоен») в готовую картинку в узнаваемом мем-формате с русскими надписями. Работает только с мем-шаблонами — обычные иллюстрации, обложки и баннеры не его задача.

---

## Шаг 0 — Активация (one-time setup)

**Этот шаг выполняется один раз при первом запуске скилла. Если активация уже пройдена — пропускай и переходи к Шагу 1.**

### 0.1. Проверка MCP-сервера

Скилл рисует через MCP-сервер `nanobanana` (пакет `@ycse/nanobanana-mcp` на npm). Проверь, доступны ли в текущей сессии инструменты:

- `mcp__nanobanana__gemini_generate_image`
- `mcp__nanobanana__gemini_edit_image`
- `mcp__nanobanana__clear_conversation`

Если они есть — переходи к проверке 0.3. Если их нет — иди к 0.2 (установка).

### 0.2. Установка MCP-сервера

Скажи пользователю буквально:

> Скиллу нужен MCP-сервер `nanobanana` для рисования через Gemini (Nano Banana 2). Сейчас он не подключён. Чтобы его поставить, нужно:
>
> 1. **Получить API-ключ Google AI Studio** (бесплатный с лимитами):
>    - Открой [https://aistudio.google.com/apikey](https://aistudio.google.com/apikey)
>    - Залогинься Google-аккаунтом, нажми **Create API key**, скопируй строку вида `AIza...`
>
> 2. **Добавить MCP в Claude Code.** Запусти в терминале:
>
>    ```bash
>    claude mcp add nanobanana --env GOOGLE_AI_API_KEY=ВСТАВЬ_СВОЙ_КЛЮЧ -- npx -y @ycse/nanobanana-mcp@latest
>    ```
>
>    Замени `ВСТАВЬ_СВОЙ_КЛЮЧ` на ключ из шага 1.
>
> 3. **Перезапусти Claude Code** (закрой и открой сессию заново), чтобы MCP подгрузился.
>
> 4. Когда вернёшься, напиши «готово» — я проверю и продолжу.

После «готово» — повторно проверь наличие инструментов `mcp__nanobanana__*`. Если их по-прежнему нет, попроси пользователя выполнить `claude mcp list` и прислать вывод — там видно ошибки запуска сервера.

### 0.3. Проверка папки вывода

По умолчанию мемы сохраняются в `~/Downloads/memes/`. Создай папку, если её нет:

```bash
mkdir -p ~/Downloads/memes
```

Если пользователь хочет другую папку — спроси один раз и запомни в рамках сессии.

### 0.4. (Опционально) Авторский голос-профиль

Скилл по умолчанию работает в **нейтральном режиме** — общечеловеческий юмор, без узких отсылок.

Если у пользователя есть свой авторский голос (для блога, телеграм-канала, личного бренда), он может один раз заполнить файл `references/voice_profile.example.md` (скопировав в `references/voice_profile.md`) и сказать «используй мой голосовой профиль». Тогда скилл будет читать его перед формулировкой подписей. Если файла нет — работаем нейтрально, не дёргаем пользователя.

### 0.5. Готово

После прохождения 0.1–0.3 скажи: «Готов рисовать мемы. Дай идею — я соберу 5–7 шаблонов с готовыми подписями, ты выберешь, что рисовать».

---

## Базовое правило: сначала список, потом генерация

Никогда не рисуй сразу, даже если идея кажется очевидной. Сценарий всегда двухэтапный: **(1) подбор 5–7 шаблонов с готовыми русскими надписями → (2) генерация только тех, что пользователь выбрал**. Причина — каждая генерация стоит времени и API-квоты; мем-шаблоны взаимозаменяемы, и пользователь хочет сравнивать варианты текстов, а не картинки постфактум.

Исключение: если пользователь явно сказал «нарисуй сразу все» или «не спрашивай, рисуй» — рисуй все подобранные.

## Поток работы

### Шаг 1 — Парсинг идеи

Пользователь даёт мысль. Извлеки структуру:

- **Противопоставление** (что vs что): старое/новое, хайп/спокойствие, усилие/лень, ожидание/реальность, чужой/свой выбор
- **Количество элементов**: 2 (бинарное — подходит Drake, Distracted Boyfriend, Two Buttons), 3–4 (подходят Galaxy Brain, Expanding Brain, Trade Offer), 1 спокойный vs хаос (This is Fine, Spongebob Imagination, DiCaprio Cheers)
- **Эмоциональный вектор**: ирония, сарказм, самоирония, торжество, усталость
- **Кто герой**: пользователь лично (от первого лица), абстрактный персонаж, индустрия

Если мысль непонятна — задай одно уточняющее, но без лишних переспросов. Обычно хватает одной реплики.

### Шаг 2 — Подбор шаблонов

Прочитай `references/meme_catalog.md` и выбери **5–7 шаблонов**, которые ложатся на структуру идеи. Критерий матчинга в каталоге: поле «Подходит для». Не предлагай шаблоны, которые не подходят по форме (например, не предлагай Two Buttons под идею с тремя элементами).

Для каждого выбранного шаблона **сразу сформулируй конкретные русские надписи** — не «подпись 1 / подпись 2», а готовый текст в нужном тоне (см. Шаг 5 про голос).

### Шаг 3 — Покажи список пользователю

Формат вывода:

```
1. **Drake (Hotline Bling)** — три панели: отвергает, отвергает, одобряет.
   - «Новый ChatGPT»
   - «Новый DeepSeek»
   - «Claude»

2. **Distracted Boyfriend (инверсия)** — парень с девушкой Claude не оборачивается на двух в красном.
   - Девушка: «Claude»
   - Две в красном: «Новая ChatGPT», «Новая DeepSeek»

...
```

Короткое описание композиции + готовые подписи. **Не рисуй.** В конце спроси: «Какие берём? Номер(а), "все", "все кроме X", или хочешь докрутить подписи?»

### Шаг 4 — Ожидание выбора

Пользователь указывает: `1`, `1 и 3`, `все`, `все кроме 5`, `второй, но текст резче`. Если пользователь хочет докрутить — сформулируй новые варианты текста, покажи, и только после подтверждения — рисуй.

### Шаг 5 — Голос подписей

**По умолчанию — нейтральный режим.** Общечеловеческий юмор, короткие фразы (2–12 слов на плашку), без узкой терминологии и привязки к конкретным брендам/продуктам. Спокойная ирония, самоирония с достоинством. Без мата, без политики, без прямых наездов на живых людей.

**Авторский голос-профиль** — если пользователь подключил `references/voice_profile.md` (см. Шаг 0.4) и просит «в моём голосе», читай этот файл и формулируй подписи в указанном тоне.

Режим определяется на Шаге 2 (до формулировки подписей), не после.

### Шаг 6 — Конфигурация генерации

**Модель:** Nano Banana 2 через MCP (`mcp__nanobanana__gemini_generate_image`). Это единственный движок, который скилл использует из коробки — он хорошо тянет узнаваемые мем-шаблоны (Drake, DiCaprio, Spongebob) и кириллический текст.

**conversation_id:** каждый мем — в своей `conversation_id`, чтобы контексты не смешивались. Формат: `meme-<slug>`, например `meme-drake`, `meme-boyfriend`.

**aspect_ratio:** `1:1` по умолчанию (универсальный квадрат для соцсетей). Если пользователь просит сторис — `9:16`, баннер — `16:9`.

**output_path:** `~/Downloads/memes/meme_<slug>.png` (или путь, который пользователь задал в 0.3). Slug — короткий и осмысленный.

### Шаг 7 — Генерация

Читай `references/prompting_rules.md` — там промпт-скелеты под каждый шаблон и общие правила. Ключевое:

- Промпт **всегда на английском**, русский текст в двойных кавычках + `in Russian Cyrillic letters, bold sans-serif`.
- Spatial-композиция литерально: `TOP PANEL`, `BOTTOM PANEL`, `LEFT SIDE`, `HOLDING mug WITH "Claude" ON IT`.
- **Все выбранные мемы рисуются параллельно** — одним сообщением, несколько tool calls сразу.

### Шаг 8 — Показ результата

Выведи пути к файлам и покажи картинки inline через Read-tool (в IDE с поддержкой превью рендерятся). По каждому мему — короткий комментарий: что получилось, что поплыло в тексте, нужна ли перегенерация.

### Шаг 9 — Итерация

Пользователь может сказать: «первый вариант — но подпись последней панели другая», «в boyfriend поменяй платье на синее», «сгенери ещё раз — текст у второго смазался».

- **Перегенерация в той же сессии:** повторный `gemini_generate_image` с тем же `conversation_id` и доработанным промптом (Nano Banana держит контекст внутри conversation, картинка останется узнаваемой).
- **Полный рестарт:** `mcp__nanobanana__clear_conversation` с этим `conversation_id`, потом заново.
- **Правка только текста:** используй `gemini_edit_image` с тем же `conversation_id` и инструкцией «keep composition, replace text X with Y».

## Типичные ошибки

- **Рисовать сразу, без списка.** Пользователь хочет видеть 5–7 текстовых вариантов до того, как потрачены вызовы API.
- **«Подпись 1», «Подпись 2».** В списке всегда **готовый русский текст**, не плейсхолдеры.
- **Забыл `in Russian Cyrillic letters`.** Результат — латиница или транслит на картинке.
- **Один `conversation_id` на все мемы.** Контексты смешиваются, Spongebob начинает держать кружку Drake. Каждому мему — свой id.
- **Предложил Drake под тему, где нет «отверг vs одобрил».** Шаблон должен матчиться структурой, иначе мем разваливается.
- **Пустил мем с политикой, обсценкой или прямым наездом на живых людей.** Это запрещено и в нейтральном, и в авторском режиме.
- **Пропустил Шаг 0 при первом запуске.** Без MCP `nanobanana` скилл не нарисует ничего — обязательно проверь активацию.

## Справочные материалы

| Файл | Назначение |
|------|-----------|
| `references/meme_catalog.md` | Каталог 18+ мемных шаблонов: формат, роли, под какие идеи, риски модерации. Расширяемый. |
| `references/prompting_rules.md` | Правила промптов: английский, Russian Cyrillic, spatial-layout, промпт-скелеты под каждый шаблон. |
| `references/voice_profile.example.md` | Шаблон для авторского голоса-профиля. Скопируй в `voice_profile.md` и заполни под свой бренд/канал/тон. Опционально. |
