Files
2nd/10_Wiki/Topics/AI_and_ML/API-backed Image Generation Workflow.md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

5.4 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-api-backed-image-generation-work API-backed Image Generation Workflow 10_Wiki/Topics verified self
Image Gen API
Cloud Image Generation
Hosted Diffusion API
none A 0.9 applied
image-generation
api
workflow
diffusion
production
2026-05-10 pending
language framework
Python OpenAI/Replicate/FAL SDKs

API-backed Image Generation Workflow

매 한 줄

"매 prompt → API → asset, GPU 의 X". Hosted endpoint (OpenAI Images, Replicate, FAL, Stability, BFL) 의 호출하여 image asset 를 generate — 매 GPU infra ownership 의 X, 매 per-call cost 의 trade. 2026 production app 의 매 default mode (self-host 의 매 scale-driven decision).

매 핵심

매 hosted vs self-host trade

  • Hosted: 매 zero infra, 매 latest model (FLUX 1.1 Pro Ultra, Imagen 4, gpt-image-1) 즉시 access, 매 per-image $0.02-0.08.
  • Self-host (vLLM/MLX/ComfyUI): 매 fixed GPU cost, 매 high-volume (>100k img/mo) 의 break-even.
  • Break-even: ~50k img/mo @ A100 spot price ($1.5/hr).

매 provider matrix (2026)

  • BFL FLUX 1.1 Pro Ultra: 매 photoreal SOTA, 4MP, $0.06/img.
  • OpenAI gpt-image-1: 매 text rendering best, multimodal edit, $0.04-0.19/img.
  • Google Imagen 4: 매 prompt adherence, $0.04/img.
  • Replicate / FAL: 매 aggregator, 매 100+ model 의 unified API.
  • Stability SD 3.5: 매 open-weight + hosted dual.

매 workflow stage

  1. Prompt construction: template + user input + style tokens.
  2. API call: async, retry, idempotency key.
  3. Polling/webhook: 매 long-running job (>5s) 의 webhook, 매 short job 의 sync.
  4. Asset storage: S3/R2 + CDN, signed URL.
  5. Moderation: pre-prompt filter + post-image NSFW check.

💻 패턴

import fal_client

handler = fal_client.submit(
    "fal-ai/flux-pro/v1.1-ultra",
    arguments={"prompt": "cyberpunk city, neon rain, 8k", "aspect_ratio": "16:9"},
)
# webhook 또는 poll
result = handler.get()  # blocks until done
url = result["images"][0]["url"]

OpenAI gpt-image-1

from openai import OpenAI
client = OpenAI()
resp = client.images.generate(
    model="gpt-image-1",
    prompt="A futuristic library, isometric, soft lighting",
    size="1024x1024",
    quality="high",
    n=1,
)
b64 = resp.data[0].b64_json

Replicate (model marketplace)

import replicate
output = replicate.run(
    "black-forest-labs/flux-1.1-pro-ultra",
    input={"prompt": "...", "aspect_ratio": "21:9", "raw": False},
)
# output: list[FileOutput] — stream to S3

Webhook handler (FastAPI)

@app.post("/webhooks/fal")
async def on_fal(req: Request):
    payload = await req.json()
    if payload["status"] == "OK":
        url = payload["payload"]["images"][0]["url"]
        await store_to_r2(url, key=payload["request_id"])
    return {"ok": True}

Retry + idempotency

import httpx
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
async def gen(prompt: str, idem: str):
    async with httpx.AsyncClient(timeout=120) as c:
        r = await c.post(URL, json={"prompt": prompt}, headers={"Idempotency-Key": idem})
        r.raise_for_status()
        return r.json()

Pre-moderation

def safe_prompt(p: str) -> bool:
    bad = {"nsfw", "gore", "csam"}  # 매 minimal — provider 의 strong filter 의 추가 layer
    return not any(t in p.lower() for t in bad)

Cost meter

COSTS = {"flux-pro-ultra": 0.06, "gpt-image-1-high": 0.19, "imagen-4": 0.04}
def charge(user_id: str, model: str, n: int):
    cost = COSTS[model] * n
    db.execute("UPDATE users SET credit = credit - ? WHERE id = ?", (cost, user_id))

매 결정 기준

상황 Approach
Photoreal hero asset FLUX 1.1 Pro Ultra
Text-in-image (poster, UI) gpt-image-1
Bulk variant (>10k/day) self-host SDXL/SD3.5 + ComfyUI cluster
Prototype / MVP Replicate (zero setup)
Edit / inpaint / multimodal gpt-image-1 또는 FLUX Fill

기본값: FAL FLUX 1.1 Pro Ultra (cost/quality 의 sweet spot 2026).

🔗 Graph

🤖 LLM 활용

언제: 매 product feature (avatar, blog hero, marketing) 의 image gen — 매 launch speed 의 priority. 언제 X: 매 >100k img/mo 의 sustained volume (self-host 의 cheaper), 매 strict on-prem (HIPAA/gov).

안티패턴

  • Sync block 60s+: 매 user request thread 의 block — 매 webhook 또는 background job 의 use.
  • No idempotency: 매 retry 의 duplicate charge — 매 idempotency key 의 always.
  • Raw provider URL serve: 매 expire 24h — 매 own CDN 의 mirror.
  • Skip moderation: 매 brand risk + provider TOS violation.
  • Hard-coded provider: 매 single API 에 lock-in — 매 abstraction layer (e.g. ImageProvider interface).

🧪 검증 / 중복

  • Verified (BFL 2025-10 release notes; OpenAI gpt-image-1 docs 2025; FAL/Replicate pricing 2026-Q1).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — 2026 provider matrix, FAL/FLUX/gpt-image-1 patterns