# Тест-кейсы: Скилл `image-gen` --- created: 2026-05-24 --- ## TC-01: Базовая генерация — один объект, дефолтная модель **Запрос пользователя:** «сгенерируй фото блондинки» **Ожидаемое поведение:** 1. Агент матчит шаблон `blonde_woman` 2. Промпт = `base(blonde_woman)` + качественные усилители из шаблона 3. Модель: `recraft/recraft-v4.1-pro` (дефолт) 4. Aspect ratio: 9:16 (дефолт) 5. Negative prompt из `params/models.md` 6. Картинка отправлена в TG с подписью: `🎨 Model: recraft/recraft-v4.1-pro | 📝 Блондинка` 7. Агент спрашивает: «Сохранить в избранное?» **Проверка:** картинка в Telegram, вертикальная ✅ --- ## TC-02: Объект + локация **Запрос:** «сгенерируй фото блондинки в парке» **Ожидаемое поведение:** 1. Матчит: `blonde_woman` + `park` 2. Промпт = `base(blonde_woman)` + `base(park)` + merged контекст 3. Дефолтная модель, 9:16 **Проверка:** на фото — блондинка на фоне парка ✅ --- ## TC-03: Объект + локация + стиль **Запрос:** «сгенерируй портрет блондинки в парке» **Ожидаемое поведение:** 1. Матчит: `blonde_woman` + `park` + стиль `portrait` 2. Промпт = `base(blonde_woman)` + `base(park)` + `style(portrait)` 3. Aspect ratio: остаётся 9:16 (портрет вертикальный — ок) **Проверка:** мягкий боке, 85mm-look, блондинка в парке ✅ --- ## TC-04: Явное указание модели **Запрос:** «сгенерируй фото блондинки через recraft-v4» **Ожидаемое поведение:** 1. Модель: `recraft/recraft-v4` (явно указана) 2. Остальное — дефолты **Проверка:** подпись содержит `recraft-v4`, не `recraft-v4.1-pro` ✅ --- ## TC-05: Мульти-модель — группа v4.1 **Запрос:** «сгенерируй блондинку через все модели v4.1» **Ожидаемое поведение:** 1. `--model group:all_v4.1` → разворачивается в 4 модели 2. Один и тот же промпт отправляется в каждую модель 3. В TG приходят 4 картинки, каждая с подписью своей модели **Проверка:** 4 фото в TG с разными моделями в подписи ✅ --- ## TC-06: Мульти-модель — все recraft **Запрос:** «сгенерируй через все модели recraft» **Ожидаемое поведение:** 1. `--model group:all` → 7 моделей 2. 7 картинок в TG **Проверка:** 7 фото, все с разными моделями ✅ --- ## TC-07: Несколько вариантов от одной модели **Запрос:** «сгенерируй 3 варианта фото блондинки» **Ожидаемое поведение:** 1. `--count 3`, дефолтная модель 2. 3 картинки с одного промпта (разный seed) 3. Каждая отправлена отдельно в TG **Проверка:** 3 фото в TG, одна и та же модель в подписи ✅ --- ## TC-08: Нестандартные детали без шаблона **Запрос:** «сгенерируй фото гор на закате» **Ожидаемое поведение:** 1. Нет шаблона для "горы" — агент использует детали из запроса напрямую 2. Промпт = перевод запроса на английский + quality enhancers 3. Не падает с ошибкой **Проверка:** горы на закате, нет артефактов ✅ --- ## TC-09: Горизонтальный формат **Запрос:** «сгенерируй горизонтальное фото пляжа» **Ожидаемое поведение:** 1. Слово "горизонтальное" → aspect ratio `16:9` 2. Промпт матчит шаблон `beach` **Проверка:** фото горизонтальное (landscape) ✅ --- ## TC-10: Квадратный формат **Запрос:** «сгенерируй квадратное фото кафе» **Ожидаемое поведение:** 1. "квадратное" → aspect ratio `1:1` 2. Шаблон `cafe` **Проверка:** квадратное фото ✅ --- ## TC-11: Сохранение в избранное **Запрос:** «сгенерируй блондинку в лесу» → Картинка отправлена → Агент: «Сохранить в избранное?» **Ответ:** «да» **Ожидаемое поведение:** 1. В `params/favorites.md` добавлена запись: - дата, краткое описание, модель, полный промпт, negative prompt **Проверка:** запись появилась в `params/favorites.md` ✅ --- ## TC-12: Negative prompt работает **Запрос:** «сгенерируй фото девушки в полный рост» **Ожидаемое поведение:** 1. Negative prompt включён: `deformed limbs, distorted hands, extra fingers...` 2. Руки и ноги выглядят нормально **Проверка:** нет деформаций рук/ног ✅ (субъективная оценка) --- ## TC-13: A2E.ai провайдер **Запрос:** «сгенерируй фото блондинки через a2e» **Ожидаемое поведение:** 1. `--provider a2e` 2. Вызывается A2E API (не OpenRouter) 3. Картинка сохранена и отправлена в TG **Проверка:** картинка пришла, в подписи видно что это A2E ✅ --- ## TC-14: Кинематографический стиль **Запрос:** «сгенерируй кинематографическое фото города ночью» **Ожидаемое поведение:** 1. Стиль `cinematic` + шаблон `city` + детали "ночью" (night) 2. Промпт: `cinematic shot, dramatic lighting, city at night...` **Проверка:** ночной город, кинематографический вид ✅ --- ## TC-15: Несуществующий шаблон + несуществующий стиль **Запрос:** «сгенерируй фото дракона в стиле акварели» **Ожидаемое поведение:** 1. Нет шаблона "дракон", нет стиля "акварель" 2. Агент переводит запрос на английский напрямую: `dragon, watercolor style...` 3. Не падает, генерирует **Проверка:** фото дракона в акварельном стиле ✅ --- ## TC-16: Граничный случай — очень короткий запрос **Запрос:** «сгенерируй» **Ожидаемое поведение:** 1. Агент уточняет: «Что именно сгенерировать?» 2. Не вызывает скрипт с пустым промптом **Проверка:** агент задал уточняющий вопрос ✅ --- ## TC-17: Граничный случай — запрос на английском **Запрос:** «generate photo of blonde in a park» **Ожидаемое поведение:** 1. Скилл триггерится на английский запрос тоже 2. Матчит `blonde_woman` + `park` **Проверка:** сгенерировано нормально ✅ --- ## Чеклист для финальной приёмки | TC | Описание | Статус | |----|----------|--------| | TC-01 | Базовая генерация | ⬜ | | TC-02 | Объект + локация | ⬜ | | TC-03 | Объект + локация + стиль | ⬜ | | TC-04 | Явная модель | ⬜ | | TC-05 | Группа all_v4.1 | ⬜ | | TC-06 | Все модели | ⬜ | | TC-07 | 3 варианта | ⬜ | | TC-08 | Без шаблона | ⬜ | | TC-09 | Горизонтальный | ⬜ | | TC-10 | Квадратный | ⬜ | | TC-11 | Избранное | ⬜ | | TC-12 | Negative prompt | ⬜ | | TC-13 | A2E провайдер | ⬜ | | TC-14 | Кино стиль | ⬜ | | TC-15 | Нет шаблона/стиля | ⬜ | | TC-16 | Пустой запрос | ⬜ | | TC-17 | Запрос на английском | ⬜ |