Реализация бота с генерацией изображений (AI) в мобильном приложении
Генерация изображений на мобильном — это всегда серверная задача. Stable Diffusion на устройстве технически возможна на современных iPhone (Core ML) и флагманских Android, но время генерации 30–60 секунд и перегрев делают это непригодным для продакшн-приложения. Работаем через API.
Выбор генеративной модели
DALL-E 3 (OpenAI). Хорошо понимает сложные текстовые описания, строго следует промпту. Цены фиксированные за изображение. Качество высокое, особенно для реалистичных сцен и иллюстраций. Ограничение: нельзя делать портреты реальных людей, строгая модерация.
Stable Diffusion через Replicate / Modal / Runpod. Open-source модель, запускается на арендованных GPU. Огромная гибкость: LoRA-адаптеры для стилизации, ControlNet для контроля композиции, инпейнтинг. Дешевле DALL-E на больших объёмах. Модели: SDXL, Flux.1, SD 3.5.
Midjourney API. Официального API нет — только через unofficial wrapper или Discord-интеграцию. Не рекомендуем для продакшна из-за нестабильности.
Ideogram / Recraft. Хорошая работа с текстом на изображениях (логотипы, постеры) — у DALL-E и SD с этим традиционно проблемы.
Асинхронная генерация: обязательный паттерн
Генерация занимает 3–15 секунд в зависимости от модели и сложности. Мобильный клиент не может держать HTTP-соединение открытым — таймаут сети или переключение в фон прервёт запрос.
Правильный паттерн: polling или WebSocket.
Polling:
POST /generate → { "task_id": "abc123", "status": "queued" }
GET /tasks/abc123 → { "status": "processing", "progress": 40 }
GET /tasks/abc123 → { "status": "done", "image_url": "..." }
WebSocket / SSE: сервер пушит обновления по мере готовности.
На Android — WorkManager для фоновых запросов с polling, чтобы генерация продолжалась даже если пользователь свернул приложение. На iOS — URLSession background configuration.
// iOS: фоновая загрузка результата
let config = URLSessionConfiguration.background(withIdentifier: "image.generation")
let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
func pollTaskStatus(taskId: String) {
var components = URLComponents(string: "\(baseURL)/tasks/\(taskId)")!
let task = session.dataTask(with: components.url!) { [weak self] data, _, _ in
guard let result = try? JSONDecoder().decode(GenerationTask.self, from: data!) else { return }
if result.status == "done" {
self?.downloadAndDisplay(url: result.imageUrl!)
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self?.pollTaskStatus(taskId: taskId)
}
}
}
task.resume()
}
Промпт-инжиниринг в мобильном боте
Пользователи мобильного приложения пишут короткие запросы: «нарисуй кошку», «логотип для кофейни». Это плохие промпты для генерации. Бот должен обогащать их перед отправкой в модель.
Два подхода:
LLM-расширение промпта. GPT-4o mini берёт пользовательский запрос и превращает в развёрнутый промпт с деталями стиля, освещения, настроения.
PROMPT_ENHANCER = """
Ты помогаешь улучшать промпты для генерации изображений.
Возьми краткое описание и расширь его до детального промпта.
Добавь стиль, освещение, настроение. Ответ только на английском —
это язык Stable Diffusion.
Максимум 200 слов.
"""
Параметрический UI. Пользователь выбирает стиль (реализм / аниме / масло / акварель) через кнопки, затем пишет описание. Стиль добавляется к промпту программно. Проще, предсказуемее.
Negative prompt и модерация
Для Stable Diffusion negative prompt снижает артефакты. Базовый: blurry, low quality, deformed, extra limbs, watermark. Для детских/семейных приложений добавляем фильтрацию контента в negative prompt и safety checker на серверной стороне.
Перед отправкой пользовательского запроса — OpenAI Moderation API или собственный фильтр. Отклонённые запросы логируются.
UI для генерации
Процесс генерации должен быть визуально интересным, а не просто спиннером:
- Анимированный placeholder в виде progressbar или shimmer эффекта
- Показ этапов: «Анализирую запрос → Генерирую → Обрабатываю»
- После готовности — плавное появление изображения (fade in / reveal animation)
Результат: кнопки «Скачать», «Поделиться», «Сгенерировать ещё», «Изменить промпт». Галерея предыдущих генераций в рамках сессии.
Варианты и редактирование
DALL-E 3 поддерживает inpainting — замену части изображения. Stable Diffusion через img2img позволяет итерировать по базовому изображению. Для mobile UI это означает инструмент выделения области (маска) поверх изображения — аналог стирательной резинки.
Процесс работы
Выбор генеративного API под задачу и стиль приложения.
Серверная часть: очередь задач, асинхронная генерация, хранение результатов.
Промпт-обогащение через LLM.
Мобильный UI с анимацией прогресса и галереей.
Тестирование с реальными пользовательскими запросами, настройка модерации.
Ориентиры по срокам
Базовый бот с DALL-E 3 / Replicate API — 1 неделя. С вариацией стилей, img2img, промпт-инжинирингом и галереей — 3–4 недели.







