
Генерация картинок
Генерирует картинки по описанию — иконки, иллюстрации, обои, логотипы, аватары, концепт-арт, фото-стиль. Помогает составить промпт, подобрать стиль, размер и соотношение сторон, делает один вариант или серию и собирает галерею. Применяйте для «сгенерировать картинку», «нарисовать логотип/аватар/обои», «нейросеть фото». Не подходит для ретуши существующих фото — только генерация с нуля.
SKILL.md
Генерация изображений
Создаём готовое изображение по описанию — от одной иконки до серии вариантов. Это закрывает запросы «сгенерировать картинку», «нейросеть фото», «нарисуй логотип/аватар/обои»: пользователь получает не совет, а готовую картинку (и ссылку на неё).
Когда использовать
- «сгенерируй картинку / нарисуй / сделай изображение»
- иконки, иллюстрации, обои, логотипы, аватары, открытки, постеры
- концепт-арт, персонажи, визуалы для постов и презентаций
- «покажи, как это могло бы выглядеть» — визуализация идеи
Когда НЕ использовать
- Ретушь/изменение существующей фотографии (убрать фон, изменить лицо) — здесь только генерация с нуля.
- Анализ картинки (что на ней, прочитать текст, описать) — MCP
analyze_image/ocr, без отдельного навыка. - Видео или «оживить» фото — навык
video-gen.
Что на выходе
- Ссылка на изображение — стабильная, переотданная (срок жизни исходных ссылок ограничен, поэтому инструмент возвращает постоянный URL).
- Серия вариантов (по запросу) — собрана в HTML-галерею для удобного выбора.
- Промпт и параметры — что использовалось, чтобы можно было повторить или варьировать.
Инструменты
| Задача | Инструмент |
|---|---|
| Генерация | MCP generate_image (~0,015 $/за запрос) |
| Проверить результат («то ли это») | MCP analyze_image |
| Найти референс/стиль | MCP web_search, web_reader |
| Собрать серию в галерею | Node-хелпер scripts/build-gallery.js |
| Сохранить файлы | встроенные write |
MCP-инструменты серверные и кросс-платформенные. Node вшит в приложение — работает на Windows. Без bash/curl.
Рабочий процесс
Шаг 1. Уточнить замысел (по одному вопросу)
Что рисуем, зачем (иконка/пост/презентация/печать), стиль, настроение, предпочтительный цвет/палитра. Для логотипа — название и дух бренда; для персонажа — описание; для обоев — ориентация экрана.
Шаг 2. Собрать промпт
Хороший промпт = объект + стиль + композиция + освещение + палитра + настроение. Конкретнее:
- Объект: что в кадре, детально («минималистичный лис, сидящий, силуэт»).
- Стиль: flat-иллюстрация / акварель / 3D-рендер / фотореализм / line-art / пиксель-арт / оригами.
- Композиция: крупный план / по центру / вид сбоку / симметрия / негативное пространство.
- Освещение: мягкое / контровой / студийный свет / закатное.
- Палитра: 2–3 цвета («тёплые оранжевый и кремовый на тёмно-синем»).
- Настроение: спокойно / энергично / уютно / футуристично.
Без текста на картинке — текст модель пишет плохо; надписи добавляются отдельно. Добавляйте негативные ограничения, если важно («без людей», «без текста», «без рамки»).
Шаг 3. Размер и соотношение
Выбирайте под цель (точные доступные размеры уточняйте у инструмента generate_image):
- Квадрат (≈1024×1024 / 1280×1280) — иконки, аватары, логотипы, посты.
- Альбом (≈1280×720) — слайды презентации, баннеры, обложки.
- Портрет (≈720×1280) — истории, постеры, обои телефона.
Шаг 4. Сгенерировать и сверить
Вызовите generate_image. При необходимости оцените результат через analyze_image («соответствует ли промпту, нет ли артефактов»). Не получилось — скорректируйте промпт (конкретизируйте стиль/композицию) и повторите.
Шаг 5. Серия и галерея (опционально)
Для «дай 3–5 вариантов» — сгенерируйте серию с небольшими вариациями промпта, затем соберите их в галерею:
- Соберите JSON:
{ "title": "...", "images": [ {"url": "...", "caption": "..."} ] }. node scripts/build-gallery.js --input gallery.json --out gallery.html.
Если scripts/build-gallery.js отсутствует — пересоздайте из исходника в конце этого файла.
Шаг 6. Доставка
Отдайте ссылку(и) на изображение, при серии — путь к gallery.html, и промпт для повторного использования. Предложите вариации (другой стиль/палитра).
Антипаттерны
- Размытый замысел («красивая картинка») → уточните объект, стиль, назначение.
- Текст в промпте («надпись Sale 50%») → текст не получится; делайте изображение, надпись — отдельно.
- Слишком много в одном кадре → разбейте на несколько картинок.
- Не сказали пропорции → подиум/слайд/телефон дают разные кадрирования; уточните назначение.
- Молчать про стоимость — каждая генерация ~0,015 $; для серии предупредите пользователя о количестве.
Исходник хелпера
Полный исходник scripts/build-gallery.js. Файл уже поставляется с навыком; блок — для пересоздания при отсутствии. Держите копии синхронно.
#!/usr/bin/env node
"use strict";
// build-gallery.js — assemble a self-contained HTML gallery from JSON. No deps.
// node scripts/build-gallery.js --input gallery.json --out gallery.html
// JSON: { "title":"...", "images":[ {"url":"...","caption":"..."} ] }
const fs = require("fs");
function args(argv){const a={input:null,out:null};for(let i=2;i<argv.length;i++){if(argv[i]==="--input"||argv[i]==="-i")a.input=argv[++i];else if(argv[i]==="--out"||argv[i]==="-o")a.out=argv[++i];}return a;}
function esc(s){return String(s==null?"":s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");}
function readIn(p){return p?fs.readFileSync(p,"utf-8"):fs.readFileSync(0,"utf-8");}
const A=args(process.argv);
let spec;try{spec=JSON.parse(readIn(A.input));}catch(e){process.stderr.write("JSON error: "+e.message+"\n");process.exit(1);}
const imgs=Array.isArray(spec.images)?spec.images:[];
const cards=imgs.map(i=>`<figure class="card"><img src="${esc(i.url)}" alt="${esc(i.caption||"")}">${i.caption?`<figcaption>${esc(i.caption)}</figcaption>`:""}</figure>`).join("\n");
const html=`<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${esc(spec.title||"Галерея")}</title>
<style>*{box-sizing:border-box}body{margin:0;background:#0f1115;color:#f4f6fb;font-family:-apple-system,"Segoe UI",Roboto,Arial,sans-serif}h1{padding:24px;text-align:center}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;padding:24px}.card{margin:0;background:#16181d;border:1px solid #222633;border-radius:12px;overflow:hidden}.card img{width:100%;display:block}.card figcaption{padding:10px 14px;font-size:14px;color:#aab2c5}</style></head>
<body><h1>${esc(spec.title||"Галерея")}</h1><div class="grid">${cards}</div></body></html>`;
if(A.out){fs.writeFileSync(A.out,html,"utf-8");console.error("Готово: "+A.out);}else{process.stdout.write(html);}
Ресурсы (1)
scripts/