Впровадження генерування зображень з штучним інтелектом (DALL-E) в мобільному додатку
DALL-E 3 через OpenAI API — найпростіший постачальник для інтеграції генерування зображень. Один POST-запит, URL у відповіді, завантаження зображення. Складність полягає не в самому API, а в UX: генерування займає 5–15 секунд, і цей час потрібно використати розумно. Плюс prompt engineering, що безпосередньо впливає на якість результату.
API: базова інтеграція
struct DALLERequest: Codable {
let model: String
let prompt: String
let n: Int
let size: String
let quality: String
let style: String
let responseFormat: String
enum CodingKeys: String, CodingKey {
case model, prompt, n, size, quality, style
case responseFormat = "response_format"
}
}
func generate(prompt: String) async throws -> URL {
let request = DALLERequest(
model: "dall-e-3",
prompt: prompt,
n: 1,
size: "1024x1024",
quality: "standard",
style: "vivid",
responseFormat: "url"
)
var urlRequest = URLRequest(url: URL(string: "https://api.openai.com/v1/images/generations")!)
urlRequest.httpMethod = "POST"
urlRequest.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.httpBody = try JSONEncoder().encode(request)
let (data, _) = try await URLSession.shared.data(for: urlRequest)
let response = try JSONDecoder().decode(ImageGenerationResponse.self, from: data)
return URL(string: response.data[0].url)!
}
Параметри DALL-E 3:
-
size:1024x1024,1792x1024(альбомна орієнтація),1024x1792(портретна орієнтація) -
quality:standard(швидше, дешевше) абоhd(детальніше) -
style:vivid(насичений, контрастний) абоnatural(фотореалістичний) -
response_format:url(посилання дійсне 60 хвилин) абоb64_json(base64 одразу)
DALL-E 3 не підтримує n > 1 — лише одне зображення за запит.
UX під час генерування
5–15 секунд очікування без зворотного зв'язку — погана UX. Варіанти:
Анімований плейсхолдер — skeleton або анімований градієнт на місці майбутнього зображення. Користувач розуміє, що щось відбувається.
Смуга прогресу з етапами — не можна показати реальний прогрес (API не передає потік), але можна показати анімований псевдопрогрес: «Аналізуємо запит → Генеруємо → Завершуємо». Візуально ефективно.
Попередній перегляд промпту — під час генерування показуємо переробленій промпт від DALL-E. API повертає revised_prompt — фактичний опис, який використала модель. Це цікаво для користувача і заповнює час очікування.
// revised_prompt приходить у відповіді
let revisedPrompt = response.data[0].revisedPrompt
// Показуємо його в UI, поки зображення завантажується
promptLabel.text = revisedPrompt
Кешування та зберігання
Згенеровані зображення необхідно зберігати. URL-адреси з відповіді живуть 60 хвилин — після цього 404. Завантажуй і кешуй одразу після генерування.
// Android: завантаження та збереження через Coil
suspend fun downloadAndCache(imageUrl: String, localKey: String): File {
val request = ImageRequest.Builder(context)
.data(imageUrl)
.diskCacheKey(localKey)
.build()
val result = imageLoader.execute(request)
// Coil автоматично зберігає на диск
return File(context.cacheDir, "dalle_${localKey}.jpg")
}
Для довгострокового зберігання — зберігай у MediaStore (Android) або Photos (iOS) на запит користувача. Автоматичне збереження без явної дії користувача порушує директиви App Store.
Prompt engineering для мобільного UI
Якість DALL-E 3 істотно залежить від промпту. Для користувацьких додатків:
Обгортка системного промпту — перед відправкою на API додай користувацький текст стандартними інструкціями:
let enhancedPrompt = """
\(userPrompt)
Style: high quality, detailed, professional photography or illustration.
Avoid text, watermarks, blurry elements.
"""
DALL-E 3 сам переписує промпт (revised_prompt), але завдання стилю допомагає уникнути випадкових варіацій.
Політика контенту. DALL-E 3 відхиляє промпти з насильством, оголеністю, реальними людьми за іменами. Відповідь — 400 з code: content_policy_violation. На клієнті — показуй користувачам зрозуміле повідомлення, не технічний код помилки.
Варіації та редагування
DALL-E 2 (не 3) підтримує:
-
/v1/images/variations— варіації існуючого зображення -
/v1/images/edits— редагування з маскою (inpainting)
DALL-E 3 цих ендпоінтів не має. Якщо потрібне редагування — або DALL-E 2, або Stable Diffusion через Replicate/FAL.
Терміни
Генерування з базовим UI (текстове поле + кнопка + відображення результату) — 2–3 дні. Повноцінна галерея з історією, збереженням, спільним доступом, варіаціями — 8–12 днів.







