Генерация картинок нейросетями: как я делаю изображения для маркетплейсов и сайтов
Почему YandexART, а не Midjourney
Протестировал три генератора: Midjourney, Kandinsky, YandexART. Остановился на последнем:
| Критерий | Midjourney | Kandinsky | YandexART |
|---|---|---|---|
| Цена | $10-30/мес | 2-5 ₽/изобр | ~0.70 ₽/изобр |
| API | ⛔ Discord-only | ✅ REST API | ✅ REST API (Yandex Cloud) |
| Качество | 🔥🔥🔥 | 🔥🔥 | 🔥🔥🔥 |
| Скорость | 30-60 сек | 10-20 сек | 5-15 сек |
| Русский язык | Средне | Хорошо | Отлично (промпты на русском) |
Главный плюс YandexART: промпты на русском работают лучше, чем на английском. Для русского контента это решающий фактор. Midjourney требует английский и живёт в Discord — API не сделать.
API: одна функция для всего
YandexART доступен через тот же endpoint что Alice и YandexGPT — ai.api.cloud.yandex.net/v1/responses. Меняем модель на yandex-art/latest.
<?php
// yandexart_generate.php — генерация картинки через API
function generateImage(string $prompt, string $outputPath): bool {
$apiKey = getenv("YANDEX_API_KEY");
$folderId = getenv("YANDEX_FOLDER_ID");
$body = json_encode([
"model" => "yandex-art/latest",
"messages" => [
["role" => "user", "text" => $prompt]
],
"generation_options" => [
"aspect_ratio" => "16:9", // или 1:1, 4:3, 9:16
"mime_type" => "image/png",
"width" => 1280,
"height" => 720,
],
]);
$ch = curl_init("https://ai.api.cloud.yandex.net/v1/responses");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: Api-Key " . $apiKey,
"x-folder-id: " . $folderId,
],
CURLOPT_TIMEOUT => 90,
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
// Ответ содержит base64-изображение
$base64 = $data["result"]["image"] ?? "";
if ($base64) {
file_put_contents($outputPath, base64_decode($base64));
return true;
}
return false;
}
// Использование
generateImage(
"Товарная фотография кроссовок на белом фоне, студийный свет, вид сбоку",
"/var/www/images/sneakers_side.png"
);
Промпты: искусство, а не магия
Промпт для генерации — это 80% результата. Плохой промпт = мусорная картинка. Вот моя формула промпта:
[ТИП ИЗОБРАЖЕНИЯ] [ОБЪЕКТ] на [ФОН], [СТИЛЬ], [ОСВЕЩЕНИЕ], [РАКУРС], [ДЕТАЛИ]
Примеры рабочих промптов:
| Задача | Промпт | Результат |
|---|---|---|
| Товарное фото | Товарная фотография серебряного кольца с сапфиром на белом фоне, студийный свет, макросъёмка, вид сверху, ювелирное качество | 🔥🔥🔥 |
| Баннер для статьи | Абстрактная иллюстрация нейронной сети, тёмно-синий фон, светящиеся соединения, минимализм, 16:9 | 🔥🔥🔥 |
| Инфографика | Современный офис с роботами и людьми, светлый интерьер, пастельные тона, широкая перспектива, чистое изображение | 🔥🔥 |
Что убивает качество:
- Размытые промпты: «сделай красиво» — пиздец, а не промпт
- Слишком много объектов: «кошка, собака, машина, город, закат» — генератор сходит с ума
- Противоречия: «ночное освещение, яркое солнце» — выбери что-то одно
Я очищаю промпты через YandexGPT 5.1 перед отправкой — модель вычленяет суть и убирает мусор. Это даёт +30% к качеству.
Масштабирование: генерация пачками
Для статей и лендингов нужно не 1 изображение, а 5-10. Писать промпты руками — долго. Автоматизация:
<?php
// batch_generate.php — пачка картинок по теме
function batchGenerate(string $topic, int $count = 5): array {
$results = [];
// Вариации промптов для одной темы
$variations = [
"обложка статьи" => "Иллюстрация-обложка на тему «{$topic}», современный стиль, 16:9, насыщенные цвета",
"инфографика" => "Инфографика на тему «{$topic}», чистый дизайн, пастельные тона, 4:3",
"абстракция" => "Абстрактная композиция «{$topic}», тёмный фон, светящиеся элементы, 16:9",
"реализм" => "Реалистичное изображение «{$topic}», естественное освещение, 4:3",
"минимализм" => "Минималистичная иллюстрация «{$topic}», белый фон, акцентный цвет, 1:1",
];
$i = 0;
foreach ($variations as $type => $prompt) {
if ($i >= $count) break;
$filename = "/var/www/images/" . slugify($topic) . "_" . ($i+1) . ".png";
if (generateImage($prompt, $filename)) {
$results[] = $filename;
}
$i++;
usleep(500_000); // 0.5 сек между запросами
}
return $results;
}
$images = batchGenerate("нейросети в бизнесе", 5);
echo "Сгенерировано: " . count($images) . " из 5\n";
echo "Затраты: " . (count($images) * 0.70) . " ₽\n";
5 картинок для статьи = 3.50 ₽ и 30 секунд. Дизайнер за те же 5 картинок = минимум 2 500 ₽ и 3 дня ожидания.
Модели заработка на генерации картинок
Модель 1: Товарные фото для маркетплейсов
Селлеры на Wildberries и Ozon тратят от 500 ₽ за одно товарное фото. Нейросеть делает 10 фото за 7 ₽.
Услуга: «10 товарных фото для вашего товара — 1 500 ₽». Себестоимость: 7 ₽. Маржа: 99.5%.
Где искать клиентов:
- Чаты селлеров в Telegram
- Биржи фриланса (Kwork, fl.ru)
- Прямой обзвон новых магазинов на WB/Ozon
50 клиентов в месяц × 1 500 ₽ = 75 000 ₽. Затраты: 350 ₽ на API. Чистыми: 74 650 ₽.
Модель 2: Иллюстрации для статей и блогов
Авторы статей, блогеры, контент-менеджеры постоянно ищут картинки. Стоки дорогие, дизайнеры заняты.
Пакет: «10 уникальных иллюстраций для вашего блога — 2 000 ₽». Себестоимость: 7 ₽.
Модель 3: Дизайн лендингов и баннеров
Генерация фоновых изображений, иконок, баннеров для сайтов. Один лендинг требует 3-5 уникальных изображений.
Цена: 3 000 ₽ за комплект визуалов для лендинга. Себестоимость: 3.50 ₽.
Грабли и решения
Пальцы и текст. YandexART (как и все генераторы) плохо рисует руки и текст на изображениях. Решение: не проси людей крупным планом и не вставляй текст в картинку. Текст — отдельно в HTML/CSS.
Однотипность. Если генеришь 20 картинок подряд с одинаковым промптом — они будут похожи. Решение: добавляй вариации в промпт: «вариант 1», «другой ракурс», «альтернативный стиль».
Лимиты API. Бесплатный грант Yandex Cloud — 4 000 ₽. Хватает на ~5 700 картинок. Дальше — копейки. Но если генеришь тысячи в день — подключи платёжку.
Что это значит для вас: Генерация картинок — самый недооценённый способ заработка на нейросетях. 70 копеек за изображение, которое продаётся за 500-3000 ₽. Это не «игрушка с картинками», это производство. Если хотите поставить генерацию на поток — код выше ваш, берите и запускайте.