Реалізація AI-генерації зображень у мобільному додатку
Генерація зображень через Stable Diffusion, DALL·E 3 або Midjourney API — завдання, в якому вузьке місце не алгоритм, а UX очікування та керування ресурсами. Запит до cloud-моделі займає 5–30 секунд, on-device генерація на мобілі — 10–60 секунд залежно від моделі та пристрою. Весь цей час користувач повинен розуміти, що відбувається.
Cloud-генерація: DALL·E 3 та Stable Diffusion API
OpenAI Images API (POST /v1/images/generations) — найпростіший шлях. Запит повертає URL зображення або base64. Час відповіді — 8–20 секунд для 1024×1024.
struct ImageGenerationRequest: Encodable {
let model: String // "dall-e-3"
let prompt: String
let n: Int // 1 (dall-e-3 не підтримує > 1)
let size: String // "1024x1024"
let quality: String // "standard" або "hd"
let responseFormat: String // "url" або "b64_json"
enum CodingKeys: String, CodingKey {
case model, prompt, n, size, quality
case responseFormat = "response_format"
}
}
Replicate API дає доступ до Stable Diffusion XL, FLUX та інших open-source моделей. Особливість — асинхронна модель: перший запит повертає prediction ID, потім потрібен polling або webhook. На мобільному клієнті polling кожні 2 секунди з exponential backoff при помилках:
suspend fun pollPrediction(predictionId: String): String {
var delay = 2000L
repeat(15) {
delay(delay)
val result = api.getPrediction(predictionId)
if (result.status == "succeeded") return result.output.first()
if (result.status == "failed") throw GenerationException(result.error)
delay = minOf(delay * 1.5, 8000L).toLong()
}
throw TimeoutException("Generation timed out")
}
On-Device генерація через Core ML
Apple ML Research випустила Stable Diffusion для Apple Silicon. На iPhone 15 Pro / M-серії iPad — ~20 секунд на 512×512, 20 кроків. На iPhone 12 — 60–90 секунд. Модель важить 2–6 ГБ залежно від квантизації.
import StableDiffusion
let pipeline = try StableDiffusionPipeline(
resourcesAt: modelDirectory,
controlNet: [],
configuration: .init()
)
pipeline.loadResources()
var config = StableDiffusionPipeline.Configuration(prompt: userPrompt)
config.stepCount = 20
config.guidanceScale = 7.5
config.seed = UInt32.random(in: 0...UInt32.max)
let images = try pipeline.generateImages(configuration: config) { progress in
DispatchQueue.main.async {
self.generationProgress = Double(progress.step) / Double(progress.stepCount)
}
return true // продовжити генерацію
}
Thermal throttling — реальна проблема. Після 3–4 послідовних генерацій iPhone скидає продуктивність. Рішення: пауза між генераціями, моніторинг ProcessInfo.thermalState, попередження користувача.
На Android on-device Stable Diffusion працює через MediaPipe з LlmInferenceSession або прямо через ONNX Runtime з GPU-делегатом. Підтримка значно гірша, ніж на Apple Silicon — рекомендую cloud-first підхід для Android.
UX під час генерації
Прогрес-бар з реальним значенням (не spinner) — критично для довгих операцій. Stable Diffusion повертає progress.step — використовуйте його. Показуйте проміжні превью (latent-preview) з 5-го кроку — утримує увагу.
Скасування генерації: cloud-запит можна скасувати через URLSessionTask.cancel() або Replicate API POST /predictions/{id}/cancel. On-device — через флаг у callback прогресу.
Збереження в галерею: PHPhotoLibrary.requestAuthorization(for: .addOnly) на iOS. Дозвіл WRITE_EXTERNAL_STORAGE (до Android 9) або MediaStore.Images API. Запитуйте дозвіл тільки при першому збереженні, не при відкритті екрана генерації.
Типові помилки
Порушення content policy — DALL·E 3 відхиляє промпти з насильством, NSFW, контентом знаменитостей. Потрібна валідація промпту перед відправкою (OpenAI Moderation API) та зрозуміле повідомлення про помилку. Не показуйте «Your request was rejected» — поясніть, що саме заборонено.
Пам'ять пристрою: on-device Stable Diffusion потребує 4–6 ГБ RAM у піку. os_proc_available_memory() на iOS показує доступну пам'ять — якщо менше 1 ГБ вільної, краще fallback на cloud.
Процес реалізації
Вибір архітектури (cloud / on-device / hybrid). Інтеграція вибраного API з обробкою async-паттернів (polling / webhook). UX генерації: прогрес, превью, скасування. Зберігання та експорт. Обробка content policy та мережевих помилок. Тестування на різних пристроях — від бюджетних до флагманів.
Орієнтири за часом
Cloud-генерація з базовим UI — 4–6 днів. On-device Stable Diffusion з latent-preview та thermal management — 2–3 тижні.







