이미지당 표면적인 가격은 첫 번째 필터링 기준으로 적합하지 않습니다. 명목 요금이 동일한 두 모델이라도 참조 이미지 허용 여부, 마스크 편집 지원 여부, 출력 크기 선택 방식, 그리고 과금 단위가 요청당인지 토큰당인지에 따라 다를 수 있습니다. 먼저 기능별로 후보를 걸러낸 다음, 자체 프롬프트를 기반으로 채택된 출력물당 비용을 비교하세요.
이 글은 이미지 생성 API를 위한 선택 프레임워크입니다. 여기서는 비디오가 아닌 이미지 생성을 다룹니다. 파이프라인에 두 가지가 모두 필요한 경우 동일한 비동기 및 과금 메커니즘이 적용되지만, 비디오는 이 글의 범위를 벗어납니다.
1단계: 지원되는 작업(Operation) 확인
첫 번째 선별 단계는 작업 방식입니다. 텍스트만으로 생성하는 엔드포인트는 마스크 편집을 수행할 수 없으며, 인페인팅(inpainting)용으로 구축된 모델은 일반적인 프롬프트-이미지 변환 작업에 적합하지 않습니다.
TokenLab에서 생성과 편집은 일반적으로 서로 다른 엔드포인트를 사용합니다:
| 필요한 작업 | 엔드포인트 | 참고 |
|---|---|---|
| 텍스트-이미지 변환 (Text-to-image) | POST /v1/images/generations |
프롬프트만으로 요청을 시작함 |
| 이미지-이미지 변환 (Image-to-image) / 참조 기반 생성 | POST /v1/images/generations |
operation: "image-to-image"와 참조 URL을 허용하는 모델 |
| 마스크 또는 멀티파트(multipart) 편집 | POST /v1/images/edits |
편집 흐름이 문서화된 모델 |
| 기존 이미지의 변형(Variation) | POST /v1/images/variations |
이미 변형(variations) 형태를 사용하는 연동 환경을 위함 |
| 작업 상태 확인 | GET /v1/tasks/{id} |
생성 응답이 task_id, status: "pending" 또는 poll_url을 반환하는 경우 |
결정 표는 이미지 생성 가이드를 참조하고, 요청 필드는 이미지 생성(Create Image) 및 이미지 편집(Edit Image) 레퍼런스를 참조하세요.
한 가지 라우팅 규칙에서 유독 많은 실패가 발생합니다: Nano Banana 참조 이미지 요청(nano-banana-2, nano-banana-pro)은 /v1/images/edits가 아니라 operation: "image-to-image" 및 image_urls와 함께 /v1/images/generations로 전송해야 합니다. 반대로, gpt-image-2 편집은 /v1/images/edits에 속하며, 여기서는 멀티파트 image 업로드, JSON image_url / image_urls, 그리고 최대 16개의 소스 이미지를 포함하는 images[] 참조를 허용합니다.
현재 TokenLab 카탈로그의 유용한 분류는 다음과 같습니다:
- 생성 및 편집 모두 지원:
flux-2-klein-4b,flux-2-klein-9b,flux-2-pro,flux-2-flex,flux-2-max,flux-kontext-pro,flux-kontext-max,gemini-3-pro-image,gemini-3.1-flash-image,nano-banana-2,nano-banana-2-lite,nano-banana-pro,gpt-image-2,gpt-image-2.5-flare,gpt-image-2.5-sunburst,grok-imagine-image,grok-imagine-image-quality,grok-imagine-image-2.0,qwen-image-2.0,qwen-image-2.0-pro,qwen-image-3.0,seedream-4.0,seedream-4.5,seedream-5.0,seedream-5.0-lite,seedream-5.0-pro,vidu-image-lite,vidu-image-pro. - 텍스트-이미지 변환 전용:
flux-1-dev,flux-pro-1.1,flux-pro-1.1-ultra,sd3.5-medium,sd3.5-large,sd3.5-large-turbo,sd3.5-flash,stable-image-core,stable-image-ultra,z-image,z-image-turbo,kling-image,kling-omni-image,hy-image-lite. - 전문 편집 도구:
stability-inpaint,stability-control-sketch,stability-control-structure,stability-style-guide,stability-upscale-fast,stability-upscale-conservative,image-upscaler,image-background-remover,flux-pro-1.0-fill,qwen-image-edit.
모델 제품군 단위가 아닌 개별 모델 단위로 지원 작업을 확인하세요. GET /v1/models?recommended_for=image는 현재 권장되는 모델 세트를 반환하며, 모델 조회(Get a Model) 레퍼런스에서는 특정 ID가 허용하는 작업을 알려주는 supported_operations 필드를 확인할 수 있습니다.
2단계: 모델이 참조 이미지를 받는 방식 확인
참조 이미지 처리는 연동 과정에서 오류가 가장 많이 발생하는 부분입니다. 필드 이름은 서로 호환되지 않습니다:
image_url— 단일 참조 이미지.image_urls— JSON 형식의 하나 이상의 참조 이미지.reference_image_urls— 기본 입력과 참조를 분리하는 모델을 위한 추가 참조 이미지.image— 비공개이거나 헤더로 보호되는 소스 이미지를 위한 멀티파트 파일 업로드.image_url또는file_id를 포함하는images[]— 편집 흐름 형태이며,/v1/images/generations에서는 허용되지 않습니다.
API 레퍼런스에 명시된, 설계 시 고려해야 할 제약 조건은 다음과 같습니다:
- 원격 참조는 자격 증명(credentials)이나 프래그먼트(fragments)가 포함되지 않은 공개
http/httpsURL이어야 하며, localhost, 사설 또는 예약된 IP 대역으로 확인(resolve)되어서는 안 됩니다. 각 리다이렉트는 다시 검사됩니다. - URL로 가져오는 이미지: 이미지당 50 MiB, 요청당 총합 200 MiB(마스크 포함), 가져오기 타임아웃 30s, 최대 3회 리다이렉트. 가져온 페이로드는 실제 PNG, JPEG 또는 WebP여야 합니다.
- 소스 이미지 개수 제한은 모델마다 다릅니다:
gpt-image-2는 최대 16개를 허용합니다. 문서화된 3개 입력 이미지 제한은grok-imagine-image및grok-imagine-image-quality(3개 초과 시400 too_many_images로 실패함)에 구체적으로 적용되며,grok-imagine-image-2.0에 대해서는 문서화되어 있지 않습니다. mask는 소스 이미지와 동일한 크기(dimensions)를 가진 50 MiB 미만의 PNG여야 합니다.
소스 이미지가 비공개인 경우, 만료되는 서명된 URL(signed URL)을 전달하는 대신 멀티파트 업로드나 /v1/files 참조를 사용하도록 계획하세요. 처리가 시작되기 전에 만료되는 서명된 URL은 생성 실패가 아니라 거부된 입력으로 처리됩니다.
3단계: 단순한 모델 이름이 아닌 출력 제어 옵션 비교
동일한 등급의 두 모델이라도 완전히 다른 크기 및 품질 제어 옵션을 제공할 수 있습니다. 이를 기반으로 UI를 구축하기 전에 선택자(selector) 규약을 먼저 확인하세요.
| 제어 옵션 | 확인 사항 |
|---|---|
size |
OpenAI 스타일 제품군은 auto 또는 WIDTHxHEIGHT를 허용합니다. gpt-image-2의 경우, 가로세로 크기는 16의 배수여야 하고, 가장 긴 변은 최대 3840px, 장축/단축 비율은 최대 3:1, 총 픽셀 수는 655,360에서 8,294,400 사이여야 합니다 |
aspect_ratio |
Google 이미지 제품군과 Grok Imagine은 1:1, 16:9, 9:16, 3:2, 2:3 및 유사한 값을 사용합니다 |
resolution |
gemini-3.1-flash-image, gemini-3-pro-image, nano-banana-2, nano-banana-pro는 1k, 2k, 4k를 지원하는 반면, nano-banana-2-lite는 1k만 지원합니다. Grok Imagine은 1k 및 2k를 지원합니다 |
quality |
GPT Image 모델은 auto, low, medium, high를 사용합니다. 다른 모델은 다른 값을 사용할 수 있습니다 |
n |
요청당 이미지 수이며, 모델에 따라 다릅니다 |
response_format |
url 또는 b64_json. 비동기 작업은 요청된 형식과 관계없이 URL을 반환합니다 |
background, output_format, output_compression |
gpt-image-2에 대해 문서화되어 있으며, transparent는 지원되지 않습니다 |
async |
gpt-image-2 및 공식 FLUX/BFL 이미지 모델에서 지원됩니다 |
문서화되지 않은 필드를 전송하는 것은 결코 무해하지 않습니다. 예를 들어, input_fidelity는 현재 gpt-image-2에서 지원되는 필드가 아니며 400 unsupported_parameter를 반환합니다. 다른 모델에서도 지원되지 않는 필드를 전송하면 비슷하게 실패합니다. 전체 필드 목록은 이미지 생성(Create Image) 레퍼런스에 있습니다.
4단계: 비교하기 전에 과금 단위 파악
토큰당 과금 모델을 이미지당 과금 모델과 마치 동일한 단위인 것처럼 비교하면 비용 비교가 잘못될 수 있습니다.
gpt-image-2는 토큰 단위로 가격이 책정됩니다. TokenLab은 텍스트 입력, 이미지 입력, 보고된 캐시 입력 및 이미지 출력 토큰에 대한 제작사의 사용량 분류를 따르며, 고정된 이미지당 과금 모델로 청구되지 않습니다.- 다른 대부분의 이미지 모델은 요청당, 이미지당 또는 모델 페이지에 표시된 기타 단위로 가격이 책정됩니다.
실질적인 결과: gpt-image-2의 경우 출력 토큰 양이 달라지기 때문에, 동일한 명목 설정에서 동일한 프롬프트를 사용하더라도 해상도, 품질 및 프롬프트 자체에 따라 비용이 달라질 수 있습니다. 라우팅 규칙을 확정하기 전에 먼저 측정하세요.
가격표를 하드코딩하기보다는 요청 시점에 현재 과금 단위와 가격을 읽어오세요:
- 과금 및 가격 책정(Billing and pricing)에서는 요금 청구, 예상 비용 및 비동기 예약이 작동하는 방식을 설명합니다.
- 모델 조회(Get a Model)는 단일 모델에 대한
tokenlab.pricing및tokenlab.pricing_unit을 반환합니다. - 모델 목록 조회(List Models)는
tokenlab.pricing,tokenlab.capabilities,tokenlab.deliveryAvailability가 포함된 카탈로그를 반환합니다. - 모델 페이지(Models page)에서는 웹 탐색을 통해 동일한 정보를 확인할 수 있습니다.
TokenLab 가격 열의 대시(-) 기호는 해당 모델이 무료라는 뜻이 아니라, 현재 해당 모델에 대해 제공 가능한 TokenLab Verified 오퍼가 없음을 의미합니다. Official 공급이 있는 모델은 여전히 Official 또는 Auto 전달(delivery) 옵션을 통해 이용할 수 있습니다.
5단계: 동기식 흐름과 작업(Task) 기반 흐름 중 결정
고해상도 이미지 요청은 1분 가까이 걸리거나 그 이상 소요될 수 있습니다. 동기식 호출의 경우 HTTP 클라이언트 타임아웃을 최소 120s로 설정하거나, 작업(task) 흐름을 사용하세요.
- 완성된 이미지 대신
task_id와poll_url을 받으려면gpt-image-2또는 공식 FLUX/BFL 이미지 모델에async: true를 전송하세요. - 모델을 항상 동기식이거나 항상 비동기식인 것으로 하드코딩하지 마세요. 생성 응답을 확인하여
status: "pending",task_id또는poll_url이 포함되어 있다면 반환된poll_url을 따르세요. - 상태 값은
pending,processing,completed,failed입니다. 작업이 실패한 경우에도 상태 조회가 성공하면 HTTP 200을 반환하므로 HTTP 코드가 아닌status필드를 사용하세요. - 비동기 이미지 결과는 URL로 반환됩니다. 원시
b64_json이 필요한 경우 동기식 요청을 사용하세요. - 몇 초마다 폴링(polling)하고 종료 상태(terminal status)에 도달하면 중지하세요. 생성된 이미지의 HTTP(S) 결과 URL은 미디어 사본으로 30일 동안 보관될 수 있습니다. 각 항목의 상태와
expires_at은media_retention.items에서 확인하세요.
자세한 내용은 비동기 작업 및 폴링 가이드와 이미지 상태 조회(Get Image Status) 레퍼런스에 있습니다.
재시도는 단순한 지연 시간(latency) 위험을 넘어 과금 위험을 수반합니다. 타임아웃 후 생성 요청을 재시도하면 두 번째 작업이 생성되고 이중으로 요금이 청구될 수 있습니다. request_id, task_id 및 모든 billing_transaction_id를 저장하고, 재시도하기 전에 작업이 이미 생성되었는지 확인하세요.
6단계: 자체 프롬프트 세트로 평가
이 글에는 공급업체 중립적인 품질 순위가 포함되어 있지 않으며, 마케팅 문구에서 그러한 순위를 가져와서도 안 됩니다. 실제 워크로드에 대한 측정을 통해 선택의 타당성을 입증하세요:
- 실제로 입력받는 주제, 스타일, 지시문 형태 등 프로덕션 분포를 반영하는 고정된 프롬프트 세트를 구성하세요. 일반적인 데모 프롬프트로는 모델 간의 차이를 변별할 수 없습니다.
- 동일한 설정에서 후보 모델들에 대해 동일한 세트를 실행하고, 재시도를 포함한 요청당 생성 시간을 기록하세요.
- 샘플을 눈대중으로만 보지 말고, 자동화된 방식이든 인간 리뷰 패널이든 고정된 평가 기준(rubric)으로 출력물의 점수를 매기세요.
- 생성된 이미지당 비용이 아니라 채택된(accepted) 이미지당 비용을 계산하세요. 사용 가능한 출력물 하나를 얻기 위해 두 번의 시도가 필요한 저렴한 모델은 결코 더 저렴한 것이 아닙니다.
- 제품이 지연 시간에 민감하다면 평균값이 아닌 백분위수(percentiles)를 기록하세요. 사용자가 체감하는 것은 꼬리 지연 시간(tail latency)이기 때문입니다.
- 공급자나 목표 해상도를 변경할 때는 과금 단위와 모델 동작이 모두 달라질 수 있으므로 비교 평가를 다시 실행하세요.
채택된 이미지당 비용은 귀하의 워크로드에서 더 비싼 모델이 그 요금만큼의 가치가 있는지 답해주는 유일한 지표입니다.
요청 예시
다음은 측정된 결과가 아니라 생성 호출 형태를 보여주는 예시입니다. aspect_ratio와 resolution을 제공하는 모델을 사용합니다.
curl https://api.tokenlab.sh/v1/images/generations \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
"aspect_ratio": "16:9",
"resolution": "2k"
}'
해당 응답이 status: "pending"으로 돌아오면 이를 실패로 처리하지 말고 반환된 poll_url을 폴링하세요.
모델 접근 방식은 API 형식에 따라 일관되지 않습니다. TokenLab은 Chat Completions, Responses, Anthropic Messages 및 Gemini 요청 형태를 허용하며, 특정 모델은 이 중 일부만 지원할 수 있습니다. 기존 클라이언트를 재사용하기 전에 모델의 tokenlab.accepted_request_formats를 확인하세요 — API 형식(API formats)을 참조하세요.
이 글의 한계
- 이 글에는 어떠한 이미지 모델에 대해서도 독립적인 품질 벤치마크, 지연 시간 측정치 또는 처리량(throughput) 수치가 포함되어 있지 않습니다. 해부학적 표현, 텍스트 렌더링 또는 사실주의(photorealism)에 대한 공급업체의 포지셔닝은 사실로 재현되지 않습니다.
- 가격은 인용되지 않았습니다. 이미지 모델의 과금 단위는 서로 다르고 변동되므로, 모델 페이지 또는
GET /v1/models/{model}에서 현재 값을 확인하세요. - 모델 가용성은 전달(delivery) 옵션 및 워크스페이스에 따라 다릅니다.
tokenlab.deliveryAvailability는 구성된 지원 여부를 설명하며, 요청이 실행될 때 확인되는 실시간 가용성을 보장하지는 않습니다. - 공개 리전 제한 사항이 적용됩니다.
관련 문서
출처
- https://docs.tokenlab.sh/guides/image-generation2026-09-27 기준 확인
- https://docs.tokenlab.sh/api-reference/images/create-image2026-09-27 기준 확인
- https://docs.tokenlab.sh/api-reference/images/edit-image2026-09-27 기준 확인
- https://docs.tokenlab.sh/api-reference/models/get-model2026-09-27 기준 확인
- https://docs.tokenlab.sh/guides/billing2026-09-27 기준 확인
- https://docs.tokenlab.sh/api-reference/models/list-models2026-09-27 기준 확인
- https://tokenlab.sh/models
- https://docs.tokenlab.sh/guides/async-jobs-polling2026-09-27 기준 확인



