Orux AI / 모델 노트
채택 이미지 1장당 비용: 재시도까지 포함한 이미지 API 예산 잡기
이미지 생성 예산은 표시 가격이 아니라 채택 이미지 1장당 비용으로 잡으세요. 6개 모델의 2026년 11월 Credits 가격, 재시도 계산 예시, 모델을 바꿀 수 있는 비동기 Python 클라이언트를 소개합니다.

목차
모델 페이지에 적힌 숫자는 한 번 시도하는 가격입니다. 앱이 실제로 돈을 내는 대상은 채택된 이미지 한 장입니다. 저렴한 모델이 쓸 만한 이미지를 내는 데 두 번이 걸리고, 조금 더 비싼 모델이 한 번에 맞힌다면 표시 가격은 거의 아무것도 알려주지 않습니다. 이 가이드는 Orux AI 6개 모델의 현재 가격을 바탕으로 이미지 생성 예산을 채택 이미지 1장당 비용(cost per accepted image)으로 잡는 방법과, 이 모델들을 하나의 작은 비동기 클라이언트 뒤에 두고 앱을 다시 작성하지 않고도 트래픽을 옮기는 방법을 설명합니다.
아래 가격은 모두 2026-11-04에 Orux AI 모델 페이지에서 확인한 것입니다. 여러 모델이 10월 가격 글의 수치보다 낮아졌으므로, 예전 표 대신 이 표를 사용하세요. 1 Credit = $0.005.
표시 가격이 잘못된 단위인 이유
Orux AI의 이미지 요청은 성공한 이미지 1장 단위로 과금됩니다. FAILED 또는 EXPIRED로 끝난 작업은 과금되지 않습니다. 잘된 것에만 돈을 내는 것처럼 들리지만, "성공"은 모델이 이미지를 반환했다는 뜻이지 그 이미지가 제품에 맞는다는 뜻이 아닙니다. 제품 색이 틀리거나, 글자가 깨지거나, 구도가 어색한 이미지도 성공으로 집계되고 Credits가 차감됩니다.
따라서 실제 예산 공식은 두 부분으로 이루어집니다.
- 시도 1회당 표시 가격: 모델 페이지에서 바로 확인할 수 있습니다.
- 채택 이미지 1장당 시도 횟수: 프롬프트, 검수 기준, 모델에 따라 달라지며 직접 측정해야 합니다.
채택 이미지 1장당 비용 = 표시 가격 × 채택 이미지 1장당 시도 횟수.
100장을 생성해 77장을 채택했다면 채택 이미지 1장당 시도 횟수는 100 ÷ 77 ≈ 1.3입니다. 이 비율은 이미지 예산에서 가장 중요한 숫자인데도 거의 아무도 기록하지 않습니다.
현재 표시 가격(2026-11-04 확인)
| 모델 | 해상도 | 이미지당 표시 가격 | 달러 환산 | 참조 이미지 | 비고 |
|---|---|---|---|---|---|
| Nano Banana 2.1 | 1K / 2K / 4K | 2.281 Cr(1K), 2.667 Cr(2K, 4K) | $0.0114, $0.0133 | 최대 10장 | 화면비 선택지가 가장 많음, 1:8과 8:1 포함 |
| flux-2-pro | 1K만 | 2.67 Cr | $0.0134 | 없음(텍스트 전용) | 1:1만 |
| GPT Image 2.5 Sunburst | 1K / 2K / 4K | 2.667 Cr(모든 크기) | $0.0133 | 최대 16장 | 4K도 1K와 같은 가격 |
| Wan2.7 Image | 1K / 2K | 4.333 Cr(참조 0–9장) | $0.0217 | 최대 9장, 추가 요금 없음 | 화면비 5종 |
| Qwen Image 3.0 Pro | 1K / 2K | 6.667 Cr(1K), 13.33 Cr(2K), 참조 없음 | $0.0333, $0.0667 | 최대 3장, 장당 추가 요금 | 타이포그래피와 포스터 |
| Seedream 5.0 Pro | 1K / 2K | 7.5 Cr(1K), 15 Cr(2K), 참조 없음 | $0.0375, $0.075 | 최대 10장, 장당 추가 요금 | 제품 사진, 인물 |
좌우로 밀어 전체 표를 확인하세요.
읽는 법:
- 이미지당 약 2.3–2.7 Credits인 모델이 세 개 있습니다: Nano Banana 2.1, flux-2-pro, GPT Image 2.5 Sunburst. Wan2.7 Image는 중간입니다. Qwen Image 3.0 Pro와 Seedream 5.0 Pro는 1K에서 약 2.5–3.3배 비싸고, 2K에서는 다시 두 배가 됩니다.
- Nano Banana 2.1, GPT Image 2.5 Sunburst, Wan2.7 Image에서는 참조 이미지가 무료입니다. Qwen Image 3.0 Pro에서 참조 3장을 쓴 1K 이미지는 8.267 Cr($0.0413), Seedream 5.0 Pro에서 참조 10장을 쓴 1K 이미지는 12.5 Cr($0.0625)입니다. 편집 위주 워크플로라면 참조 없는 가격이 아니라 이 행을 사용하세요.
- flux-2-pro는 저렴하지만 제약이 있습니다. Orux AI에서는 현재 1K와 1:1만 지원하고 참조 이미지를 쓸 수 없습니다. 16:9 배너나 편집이 필요하다면 아무리 싸도 선택지가 아닙니다.
계산 예시: 채택 이미지 1장당 비용
아래 시도 횟수는 설명을 위한 가정이며 측정값이 아닙니다. 파일럿 실행 후 직접 얻은 숫자로 바꾸세요.
| 모델(1K, 참조 없음) | 표시 가격 | 시도 1.0회 | 시도 1.3회 | 시도 2.0회 | Seedream 5.0 Pro(1.0회) 대비 손익분기점 |
|---|---|---|---|---|---|
| Nano Banana 2.1 | 2.281 Cr | 2.281 Cr($0.0114) | 2.965 Cr($0.0148) | 4.562 Cr($0.0228) | 3.29회 |
| flux-2-pro | 2.67 Cr | 2.67 Cr($0.0134) | 3.471 Cr($0.0174) | 5.34 Cr($0.0267) | 2.81회 |
| GPT Image 2.5 Sunburst | 2.667 Cr | 2.667 Cr($0.0133) | 3.467 Cr($0.0173) | 5.334 Cr($0.0267) | 2.81회 |
| Wan2.7 Image | 4.333 Cr | 4.333 Cr($0.0217) | 5.633 Cr($0.0282) | 8.666 Cr($0.0433) | 1.73회 |
| Qwen Image 3.0 Pro | 6.667 Cr | 6.667 Cr($0.0333) | 8.667 Cr($0.0433) | 13.334 Cr($0.0667) | 1.12회 |
| Seedream 5.0 Pro | 7.5 Cr | 7.5 Cr($0.0375) | 9.75 Cr($0.0488) | 15 Cr($0.075) | 1.00 |
좌우로 밀어 전체 표를 확인하세요.
마지막 열은 실무적인 질문에 답합니다. 저렴한 모델이 몇 번까지 시도해야, 매번 한 번에 채택되는 Seedream 5.0 Pro와 채택 이미지 1장당 비용이 같아질까요? Nano Banana 2.1은 약 3.3회, Wan2.7 Image는 약 1.7회입니다.
구체적인 시나리오를 보겠습니다. 파일럿 결과가 다음과 같다고 가정합니다.
- 모델 A: Nano Banana 2.1(1K)은 채택되는 제품 사진 1장에 1.3회 시도가 필요합니다.
- 모델 B: Seedream 5.0 Pro(1K)는 1.0회가 필요합니다.
채택 이미지 1,000장 기준:
- 모델 A: 1,000 × 1.3 × 2.281 = 2,965 Credits($14.83)
- 모델 B: 1,000 × 1.0 × 7.5 = 7,500 Credits($37.50)
시도가 30% 더 많아도 모델 A의 비용은 절반에 한참 못 미칩니다. 순위가 뒤집히는 것은 저렴한 모델의 비율이 약 3.3을 넘거나, 거절된 이미지가 Credits 외의 비용을 만들 때뿐입니다.
두 번째 경우가 중요합니다. 거절된 이미지는 모두 확인하는 데 시간이 들고, 사용자용 앱에서는 재시도마다 대기 시간이 늘어납니다. 모든 결과를 사람이 검수한다면 검수 시간이 몇 Credits보다 훨씬 클 수 있습니다. 검수 시간은 팀마다 달라 이 글에서는 수치를 제시하지 않지만, 아래 코드가 시도를 기록하므로 직접 더할 수 있습니다.
재시도 배수가 숨어 있는 세 곳
채택 이미지 1장당 시도 횟수는 모델 품질과 무관한 이유로도 늘어납니다.
- 중복 제출. 워커가 폴링 중 타임아웃되어 같은 작업을 다시 제출하면 성공 두 번에 비용을 낼 수 있습니다. 먼저
task_id를 저장하고, 재제출 대신 폴링을 재개하세요. - 지원하지 않는 파라미터. 모델이 제공하지 않는 화면비나 해상도를 요청하면 제출 전에 거부됩니다. 비용은 들지 않지만 파이프라인이 멈춥니다. 모델별 제한을 설정에 넣어 두면(아래 참고) GPT Image 2.5 Sunburst에서 flux-2-pro로 바꿀 때 1:1 전용 모델에 16:9를 몰래 보내는 일이 없습니다.
- 프롬프트 드리프트. 다른 모델에 맞춘 프롬프트를 그대로 저렴한 모델에 쓰면 채택률이 떨어질 수 있습니다. 실제 트래픽을 옮기기 전에 자신의 프롬프트로 각 모델을 다시 파일럿하세요.
모델 페이지의 기존 공개 예시
아래 다섯 장은 Orux AI 각 모델 페이지에 게시된 기존 공개 예시입니다. 이 글을 위해 생성한 것이 아니며 품질 테스트도 아닙니다. 각 모델 페이지에 기록된 출력 유형을 보여 줄 뿐이며, 프롬프트와 설정은 모델 페이지 기재 내용과 같습니다.

*Nano Banana 2.1 모델 페이지의 기존 공개 예시: "Still alpine lake perfectly reflecting snow-capped peaks and pine trees at sunrise", 1K, 16:9. 이 설정의 표시 가격: 2.281 Credits.*

*flux-2-pro 모델 페이지의 기존 공개 예시: 도자기 화병의 미니멀 스튜디오 제품 사진, 1K, 1:1(현재 제공되는 유일한 크기). 표시 가격: 2.67 Credits.*

*GPT Image 2.5 Sunburst 모델 페이지의 기존 공개 예시: 해 질 녘의 미래 해안 도시, 1K, 16:9. 표시 가격: 모든 해상도에서 2.667 Credits.*

*Qwen Image 3.0 Pro 모델 페이지의 기존 공개 예시: 노을 진 라벤더 밭, 1K, 16:9. 표시 가격: 참조 없이 6.667 Credits.*

*Seedream 5.0 Pro 모델 페이지의 기존 공개 예시: 눈 덮인 오두막 위의 오로라, 1K, 16:9. 표시 가격: 참조 없이 7.5 Credits.*
이 중 네 장이 1K·16:9라는 점에 주목하세요. 바로 하나의 클라이언트로 모델 간 A/B 테스트를 할 수 있는 설정입니다. flux-2-pro는 1:1만 출력하므로 이 비교에 참여할 수 없습니다.
비동기 클라이언트 하나, 모델은 설정으로
6개 모델은 모두 같은 비동기 엔드포인트를 사용합니다. POST https://orux.top/api/v1/tasks에 model과 input 객체를 보내면 HTTP 202와 함께 task_id가 반환됩니다. 그런 다음 상태가 SUCCESS, FAILED, EXPIRED 중 하나가 될 때까지 GET https://orux.top/api/v1/tasks/{id}를 폴링합니다. 모델마다 달라지는 것은 model 문자열과 허용되는 input 값뿐이므로, 모델 선택은 코드가 아니라 설정에 두어야 합니다.
아래 스크립트는 네 가지 일을 합니다. 각 모델의 제한에 맞춰 요청을 검증하고, 제출과 폴링을 하고, 결과를 즉시 저장하며(결과 링크는 임시입니다), 모델별 채택 이미지 1장당 비용을 계산할 수 있도록 시도 장부를 기록합니다. API 키를 만들어 ORUX_API_KEY로 내보내고 requests를 설치하세요.
import json
import os
import sys
import time
import requests
BASE = "https://orux.top/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['ORUX_API_KEY']}"}
# List prices in Credits per successful image, read from model pages on 2026-11-04.
# Keys are (resolution, reference_count) where it matters; refs surcharges omitted
# for Qwen/Seedream except the no-reference rows, so keep image_urls empty for them here.
MODELS = {
"nano-banana-2.1": {"res": {"1K": 2.281, "2K": 2.667, "4K": 2.667},
"ratios": {"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "21:9"},
"max_refs": 10},
"flux-2-pro": {"res": {"1K": 2.67}, "ratios": {"1:1"}, "max_refs": 0},
"gpt-image-2.5-sunburst": {"res": {"1K": 2.667, "2K": 2.667, "4K": 2.667},
"ratios": {"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "21:9"},
"max_refs": 16},
"wan2.7-image": {"res": {"1K": 4.333, "2K": 4.333},
"ratios": {"1:1", "16:9", "9:16", "4:3", "3:4"}, "max_refs": 9},
"qwen-image-3.0-pro": {"res": {"1K": 6.667, "2K": 13.33},
"ratios": {"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"},
"max_refs": 0}, # refs add a surcharge; not modelled here
"seedream-5.0-pro": {"res": {"1K": 7.5, "2K": 15.0},
"ratios": {"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "21:9"},
"max_refs": 0}, # refs add a surcharge; not modelled here
}
# Switch models here (or via env var) without touching the rest of the code.
ACTIVE_MODEL = os.environ.get("ORUX_IMAGE_MODEL", "nano-banana-2.1")
LEDGER = "ledger.jsonl"
def build_input(prompt: str, resolution: str, aspect_ratio: str, refs=None) -> dict:
spec = MODELS[ACTIVE_MODEL]
refs = refs or []
if resolution not in spec["res"]:
raise ValueError(f"{ACTIVE_MODEL} has no {resolution}; options: {list(spec['res'])}")
if aspect_ratio not in spec["ratios"]:
raise ValueError(f"{ACTIVE_MODEL} does not accept {aspect_ratio}")
if len(refs) > spec["max_refs"]:
raise ValueError(f"{ACTIVE_MODEL}: too many reference images for this script")
payload = {"prompt": prompt, "resolution": resolution, "aspect_ratio": aspect_ratio}
if refs:
payload["image_urls"] = refs
return payload
def submit(payload: dict) -> str:
r = requests.post(f"{BASE}/tasks", headers=HEADERS,
json={"model": ACTIVE_MODEL, "input": payload}, timeout=60)
if r.status_code == 402:
sys.exit("Insufficient balance: top up your Credits.")
r.raise_for_status()
return r.json()["task_id"]
def wait(task_id: str, max_wait: int = 900) -> dict:
deadline = time.time() + max_wait
while time.time() < deadline:
time.sleep(5)
r = requests.get(f"{BASE}/tasks/{task_id}", headers=HEADERS, timeout=30)
r.raise_for_status()
task = r.json()
if task["status"] in ("SUCCESS", "FAILED", "EXPIRED"):
return task
raise TimeoutError(f"{task_id} still running: poll again later, do not resubmit")
def log(row: dict) -> None:
with open(LEDGER, "a") as f:
f.write(json.dumps(row) + "\n")
def generate_until_accepted(prompt, resolution="1K", aspect_ratio="1:1", max_attempts=3):
payload = build_input(prompt, resolution, aspect_ratio)
price = MODELS[ACTIVE_MODEL]["res"][resolution]
for attempt in range(1, max_attempts + 1):
task_id = submit(payload)
log({"model": ACTIVE_MODEL, "task_id": task_id, "event": "submitted"})
task = wait(task_id)
if task["status"] != "SUCCESS":
log({"model": ACTIVE_MODEL, "task_id": task_id, "event": task["status"], "credits": 0})
continue
urls = task.get("result") or []
path = f"{task_id}.png"
with open(path, "wb") as f:
f.write(requests.get(urls[0], timeout=120).content) # links expire: save now
ok = input(f"Attempt {attempt}: review {path}. Accept? [y/N] ").strip().lower() == "y"
log({"model": ACTIVE_MODEL, "task_id": task_id, "event": "accepted" if ok else "rejected",
"credits": price})
if ok:
return path
return None
def report() -> None:
stats = {}
with open(LEDGER) as f:
for line in f:
row = json.loads(line)
s = stats.setdefault(row["model"], {"credits": 0.0, "accepted": 0, "attempts": 0})
if row["event"] in ("accepted", "rejected"):
s["attempts"] += 1
s["credits"] += row["credits"]
s["accepted"] += row["event"] == "accepted"
for model, s in stats.items():
if s["accepted"]:
per = s["credits"] / s["accepted"]
print(f"{model}: {s['attempts'] / s['accepted']:.2f} attempts/accepted, "
f"{per:.3f} Cr (${per * 0.005:.4f}) per accepted image")
if __name__ == "__main__":
generate_until_accepted(
"Minimalist studio product photograph of a matte white ceramic vase on a "
"travertine plinth, soft window light, warm beige backdrop, no text.",
resolution="1K", aspect_ratio="1:1")
report()같은 요구 사항으로 두 모델을 비교하려면 ORUX_IMAGE_MODEL=nano-banana-2.1과 ORUX_IMAGE_MODEL=gpt-image-2.5-sunburst로 각각 한 번씩 실행한 뒤 보고서를 확인하세요. 장부는 성공한 이미지만 과금된 것으로 집계하므로 Orux AI의 과금 방식과 일치합니다. FAILED와 EXPIRED 작업은 0 Credits로 기록됩니다.
설계에 대한 참고 사항:
- 가격표는 로컬 추정치입니다. 과금이 아니라 예산을 위한 것입니다. 가격은 바뀔 수 있으니 대량 실행 전에 모델 페이지를 다시 확인하고 숫자를 업데이트하세요.
- Qwen Image 3.0 Pro와 Seedream 5.0 Pro의 참조 이미지 추가 요금은 의도적으로 반영하지 않았습니다. 이 모델들에
image_urls를 추가한다면 모델 페이지에서 참조 장수별 가격을 확인하세요. - 5초마다 폴링하면 충분합니다. 이미지 작업은 몇 분이 걸릴 수 있으므로 웹 요청 안이 아니라 백그라운드 워커에서 실행하세요.
- 수동 채택 확인은 자리표시자입니다. 운영 환경에서는 자동 검사, 검수 대기열, 사용자의 좋아요 등으로 바꿀 수 있습니다. 중요한 것은 모든 채택과 거절을 기록하는 것입니다.
기본 모델과 대체 모델 고르기
실제 시도 비율을 알면 선택은 대부분 산수입니다. 모델 페이지에 근거한 솔직한 트레이드오프:
- Nano Banana 2.1은 이 그룹에서 1K 표시 가격이 가장 낮고, 참조 이미지가 무료이며, 화면비 선택지도 가장 많습니다. 대량 초안용 기본 모델로 적당합니다.
- GPT Image 2.5 Sunburst는 1K, 2K, 4K 모두 2.667 Credits이므로 이 그룹에서 4K 출력을 얻는 가장 저렴한 방법입니다. 참조 이미지는 최대 16장입니다.
- flux-2-pro는 같은 가격대지만 텍스트 전용, 1K, 1:1입니다. 정사각형 소재에만 쓰세요.
- Wan2.7 Image는 위 세 모델보다 시도당 비싸지만 참조 이미지 최대 9장까지 같은 가격이라 편집이 많은 파이프라인에 도움이 됩니다.
- Qwen Image 3.0 Pro와 Seedream 5.0 Pro는 시도당 가장 비싸고 참조 이미지에 추가 요금이 붙습니다. 파일럿에서 저렴한 모델이 여러분의 용도(정확한 글자가 필요한 포스터 등)에 훨씬 많은 재시도를 필요로 한다는 결과가 나올 때만 채택 이미지 1장당 비용에서 앞섭니다.
합리적인 패턴은 저렴한 기본 모델, 기본 모델이 계속 실패하는 작업을 위한 프리미엄 대체 모델, 그리고 표시 가격과 실측 비율을 매달 다시 확인하는 것입니다.
FAQ
채택 이미지 1장당 비용이란 무엇인가요?
채택 이미지 1장당 비용은 시도 1회당 표시 가격에, 남길 이미지 한 장을 얻는 데 필요한 평균 시도 횟수를 곱한 값입니다. 장당 2.281 Credits인 모델에서 1.3장 중 1장을 채택한다면, 채택 이미지 1장당 약 2.965 Credits($0.0148)를 냅니다.
Orux AI에서 실패한 이미지 작업에도 Credits가 드나요?
아니요. 이미지 작업은 SUCCESS로 끝났을 때만 과금되며, FAILED 또는 EXPIRED로 끝난 작업은 과금되지 않습니다. 하지만 성공했는데 거절한 이미지는 과금되므로, 채택 이미지 1장당 시도 횟수가 중요합니다.
이 6개 모델 중 지금 이미지당 가장 저렴한 것은 무엇인가요?
2026-11-04 기준으로 이 그룹에서 표시 가격이 가장 낮은 것은 1K의 Nano Banana 2.1로, 이미지당 2.281 Credits($0.0114)입니다. flux-2-pro(2.67 Cr)와 GPT Image 2.5 Sunburst(2.667 Cr)가 근소한 차이로 뒤따르며, 4K에서는 GPT Image 2.5 Sunburst와 Nano Banana 2.1 모두 2.667 Credits입니다.
코드를 바꾸지 않고 이미지 모델을 바꿀 수 있나요?
네, 모델 이름과 파라미터 제한을 설정에 두면 가능합니다. 여기의 모든 모델은 같은 POST /api/v1/tasks와 GET /api/v1/tasks/{id} 흐름을 쓰며, 차이는 model 문자열과 허용되는 해상도, 화면비, 참조 장수뿐입니다.
채택 이미지 1장당 시도 횟수를 추정하려면 테스트 이미지가 몇 장 필요한가요?
먼저 실제 프롬프트로 모델당 수십 장 규모의 파일럿을 진행하고, 이후 운영 환경에서도 계속 기록하세요. 작은 파일럿으로 대략적인 비율을 얻고, 위 스크립트의 장부가 시간이 지나며 이를 다듬어 줍니다.
더 비싼 모델은 언제 쓸 가치가 있나요?
저렴한 모델에서 측정한 재시도 횟수가 손익분기점을 넘을 때 더 비싼 모델을 쓸 가치가 있습니다. 한 번에 채택되는 Seedream 5.0 Pro를 기준으로 하면 Nano Banana 2.1의 손익분기점은 약 3.3회, Wan2.7 Image는 약 1.7회입니다.
하나의 API로 이 모델들을 사용하세요
채팅·이미지·비디오·오디오 모델을 지원하는 OpenAI 호환 API이며 Credits로 과금됩니다.
관련 글
전체 글 보기 →
이미지 API 가격 비교: 10개 모델의 1K·2K·4K 비용
2026년 10월 29일 Orux 이미지 모델 10개의 장당·100장 Credits, 해상도, 참조 한도와 과거 시간을 비교합니다. Google Standard·Batch와 Alibaba 지역 가격, Qwen Pro 할증을 구분하고 Python 및 유효 이미지당 비용으로 선택합니다.

Gemini API 가격: 12월 인상 전후 요금과 예산
Gemini 4 Argon은 2026년 12월 1일, Flash는 2027년 1월 1일 요금이 바뀝니다. 네 모드와 Nano Banana 2.1 이미지 비용, 월 예산·사고 tokens·캐시를 비교하고 Orux AI Credits 및 Python 예제를 제공합니다.

저가 영상 API 비교: Vidu·Wan·Kling·Seedance
2026년10월29일 후보의 초당·영상당 가격과 입력 조건을 비교합니다. Python 일괄 생성 예제와 기존 영상, Orux가 비싼 경우, fal·공식 가격 재확인, 음성·길이 차이와 반올림·재시작·임시 링크의 한계까지 밝혀 실제 예산과 모델 선택을 돕습니다.