Реалізація AI-генерації зображень (Midjourney API) у мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація AI-генерації зображень (Midjourney API) у мобільному додатку
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Впровадження генерування зображень з штучним інтелектом (Midjourney API) в мобільному додатку

Midjourney не має офіційного публічного API — це перше, що потрібно зрозуміти. Всі «Midjourney API» на ринку — це або неофіційні обгортки над Discord-ботом (MidJourney API proxy), або альтернативні постачальники з порівнянною якістю (Ideogram, Leonardo.ai). Вибір підходу залежить від вимог до стабільності та юридичної чистоти.

Варіанти інтеграції

Неофіційні проксі

Сервіси типу useapi.net, midjourney-api.thenextleg.io, imaginesoftware.io надають REST API поверх своїх Discord-акаунтів з Midjourney. Технічно працює, але:

  • Порушує ToS Midjourney (ризик бану акаунту)
  • Нестабільність при оновленнях Discord/Midjourney
  • Немає SLA
  • Результати залежать від версії бота постачальника

Для прототипів і внутрішніх інструментів — прийнято. Для продакшену — ризиковано.

Альтернативи з порівнянною якістю

Ideogram v2 — якість, порівнянна з Midjourney для художніх стилів, плюс чудовий текст всередину зображень (слабке місце MJ). Офіційний API.

Leonardo.ai — багата бібліотека стилів, ControlNet, motion (відео). Офіційний API.

Flux (FAL.ai) — Flux Pro/Ultra від Black Forest Labs, якість на рівні MJ v6, офіційний API через FAL.

Для більшості продукту завдань Flux Pro на FAL — найкращий вибір: стабільний API, висока якість, прийнятні ціни.

Інтеграція через прокси API (useapi.net)

Якщо клієнт наполягає саме на Midjourney:

class MidjourneyProxyService(private val apiKey: String) {
    private val client = OkHttpClient.Builder()
        .readTimeout(300, TimeUnit.SECONDS) // MJ генерує до 3–4 хвилин
        .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") // Отримуємо jobid для polling
    }

    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 U1U4 або V1V4).

Інтеграція Flux через FAL.ai (рекомендований підхід)

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)!
    }
}

FAL повертає результати синхронно (або через чергу при навантаженні). Затримка Flux Pro — 5–10 секунд для square_hd.

Параметри промпту Midjourney

Якщо працюєш з MJ через прокси, промпти мають специфічний синтаксис:

portrait photo of astronaut in forest --ar 3:4 --v 6 --style raw --stylize 100

--ar — aspect ratio (16:9, 3:4, 1:1) --v 6 — версія моделі --style raw — менш стилізований результат --stylize 0–1000 — ступінь стилізації (250 за замовчуванням) --no text, watermark — негативний промпт --seed 12345 — відтворюваність

З звичайними API (Ideogram, FAL) ці параметри передаються як нативні поля запиту.

UX при тривалому генеруванні

Midjourney через прокси: 60–180 секунд. Flux: 5–15 секунд.

Для тривалого очікування — polling кожні 5 секунд з анімованим індикатором. Не частіше: постачальники можуть обмежувати при частих запитах. Показуй витрачений час («Генеруємо... 45 сек»), це зменшує тривогу користувача.

Терміни

Інтеграція прокси API (useapi.net або аналог) з polling і базовим UI — 4–6 днів. Flux/Ideogram з нативним API, upscale/variations, галерея — 10–14 днів.