Інтеграція AI-генерації зображень у мобільний додаток
У проекті з'являється задача: дати користувачам можливість генерувати зображення за текстовим описом. Ви пробуєте Midjourney — він швидко видає якісні результати, але офіційного API немає. Всі сторонні обгортки порушують умови використання Discord. Без чіткої архітектури інтеграція перетворюється на зоопарк костилів. Ми стикалися з цим не раз і виробили підхід: не використовувати неофіційні рішення в продакшні або, якщо клієнт наполягає, робити це з чіткими застереженнями.
Який API для AI генерації зображень обрати для продакшну?
Розглянемо три основні варіанти. Якість генерації у всіх висока, але стабільність та юридична чистота відрізняються кардинально.
| Параметр | Midjourney Proxy (useapi.net) | Flux Pro (FAL.ai) | Ideogram v2 |
|---|---|---|---|
| Якість | Висока (MJ v6) | Висока (на рівні MJ v6) | Висока (художні стилі, відмінний текст) |
| Стабільність | Низька (порушує ToS, ризик бану) | Висока (офіційний API, SLA) | Висока (офіційний API) |
| Час генерації | 60–180 сек | 5–15 сек | 10–20 сек |
| Юридична чистота | Ризиковано | Чисто | Чисто |
Flux Pro в 12 разів швидший за Midjourney проксі
Для продакшну Flux Pro — best in class. Він генерує зображення за 5–15 секунд, а Midjourney через проксі потребує до трьох хвилин. Різниця в 12 разів, і це без урахування простоїв через блокування акаунтів. Крім того, Flux Pro дозволяє налаштовувати кроки інференсу, guidance scale та ratio — гнучкість, якої Midjourney не дає. Офіційна документація FAL.ai підтверджує підтримку синхронного та асинхронного режимів.
Як інтегрувати Flux Pro на Swift?
Приклад інтеграції Flux Pro через FAL.ai:
- Отримайте API ключ на fal.ai після реєстрації.
- Налаштуйте мережу — додайте URLSession або Alamofire у проект.
- Створіть сервіс (див. код нижче) для відправки POST-запиту.
- Обробіть відповідь — декодуйте JSON з URL зображення.
- Відобразіть результат у SwiftUI Image або UIImageView.
struct FalFluxService {
private let baseURL = "https://fal.run/fal-ai/flux-pro"
func generate(prompt: String) async throws -> URL {
var request = URLRequest(url: URL(string: baseURL)!)
request.httpMethod = "POST"
request.setValue("Key \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"prompt": prompt,
"image_size": "square_hd",
"num_inference_steps": 28,
"guidance_scale": 3.5,
"num_images": 1,
"enable_safety_checker": true
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
let response = try JSONDecoder().decode(FalResponse.self, from: data)
return URL(string: response.images[0].url)!
}
}
Midjourney проксі: код на Kotlin (якщо клієнт наполягає)
Якщо клієнт наполягає саме на Midjourney, використовуємо проксі-сервіси типу useapi.net. Приклад на Kotlin:
class MidjourneyProxyService(private val apiKey: String) {
private val client = OkHttpClient.Builder()
.readTimeout(300, TimeUnit.SECONDS)
.build()
suspend fun imagine(prompt: String): String = withContext(Dispatchers.IO) {
val body = JSONObject().apply {
put("prompt", prompt)
}.toString().toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("https://api.useapi.net/v2/jobs/imagine")
.header("Authorization", "Bearer $apiKey")
.post(body)
.build()
val response = client.newCall(request).execute()
val json = JSONObject(response.body!!.string())
json.getString("jobid")
}
suspend fun getResult(jobId: String): MidjourneyResult? = withContext(Dispatchers.IO) {
val request = Request.Builder()
.url("https://api.useapi.net/v2/jobs/?jobid=$jobId")
.header("Authorization", "Bearer $apiKey")
.get()
.build()
val response = client.newCall(request).execute()
val json = JSONObject(response.body!!.string())
when (json.optString("status")) {
"completed" -> {
val attachments = json.getJSONArray("attachments")
MidjourneyResult.Success(attachments.getJSONObject(0).getString("url"))
}
"failed" -> MidjourneyResult.Failed(json.optString("error"))
else -> null
}
}
}
Midjourney генерує сітку 2x2 зображення. Після отримання результату користувач може вибрати один варіант (upscale) або запросити варіації. Це додаткові API-виклики (/v2/jobs/button з action U1–U4 або V1–V4).
Що входить в роботу
Ми надаємо інтеграцію «під ключ»:
- Вибір оптимального AI-сервісу під ваші задачі
- Реалізація API-клієнта з обробкою помилок та retry
- UI для введення промпта, відображення результату (з анімацією завантаження)
- Підтримка upscale, варіацій, збереження в галерею
- Документація по використанню та налаштуванню
- Тестування на реальних пристроях
- Підтримка протягом місяця після здачі
Скільки коштує інтеграція AI-генерації?
Інтеграція проксі-API (useapi.net) з polling та базовим UI — 4–6 днів, вартістю від $2000. Flux/Ideogram з нативним API, upscale/variations, галерея — 10–14 днів, від $5000. Економія до 40% бюджету досягається завдяки кешуванню результатів. Вартість розраховується індивідуально в залежності від складності та стеку. Оцінимо проект за 1–2 дні.
Організація черги запитів та кешування
Генерація зображень — ресурсоємна операція. Щоб додаток залишався чуйним, задачі ставляться в чергу. На стороні сервера використовуємо Redis + Bull (Node.js) або Laravel Queues (PHP): кожен запит отримує jobId, статус якого клієнт опитує через polling кожні 2–3 секунди. При успіху URL зображення кешується в CDN (Cloudflare R2 або S3), щоб повторні запити одного промпта віддавалися миттєво без платного API-виклику. На мобільному клієнті показуємо анімацію shimmer-завантаження — користувач бачить, що процес іде. Тайм-аут 5 хвилин з автоматичним retry 3 рази гарантує стійкість до тимчасових збоїв AI-сервісу. Такий підхід знижує навантаження на API та економить до 40% бюджету при активній користувацькій базі. Додатково, ми реалізуємо сховище історії генерацій — користувач може повернутися до попередніх промптів і повторно використовувати вдалі варіанти без повторного виклику API. Історія зберігається локально в CoreData (iOS) або Room (Android), синхронізується з сервером через background sync, що забезпечує доступ до генерацій без підключення до інтернету.
Наш досвід та компетенції
Ми більше 5 років займаємося мобільною розробкою, реалізували 50+ проектів з інтеграцією AI-сервісів. В портфоліо — додатки з генерацією зображень, обробкою природної мови та комп'ютерним зором. Глибоке розуміння як клієнтської, так і серверної частини гарантує надійне рішення.
Якщо вам потрібна AI-генерація в мобільному додатку — отримайте консультацію або надішліть технічне завдання на оцінку. Зв'яжіться з нами — оцінимо проект за 1–2 дні.







