Реалізація бота з генерацією зображень (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 немає — тільки через неофіційний 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()
}
Prompt-інженеринг у мобільному боті
Користувачі мобільного додатка пишуть короткі запити: «нарисуй кота», «логотип для кав'ярні». Це погані промпти для генерації. Бот повинен збагачувати їх перед відправленням до моделі.
Два підходи:
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 дозволяє ітерувати за базовим зображенням. Для мобільного UI це означає інструмент виділення області (маска) поверх зображення — як гумка.
Процес впровадження
Вибір генеративного API під завдання та стиль додатка.
Серверна частина: очередь завдань, асинхронна генерація, зберігання результатів.
Prompt-збагачення через LLM.
Мобільний UI з анімацією прогресу та галереєю.
Тестування з реальними користувацькими запитами, налаштування модерації.
Часові орієнтири
Базовий бот з DALL-E 3 / Replicate API — 1 тиждень. Зі варіаціями стилів, img2img, prompt-інженерингом та галереєю — 3–4 тижні.







