스크린샷을 받아 에러를 설명해 주는 기능이나 영수증을 읽는 기능을 붙이려면 "이미지를 그대로 보낼지, 줄여서 보낼지, 글자만 뽑아서 보낼지"를 먼저 정해야 해요. 결론부터 말하면 비전 API 비용은 단가보다 이미지가 몇 토큰으로 바뀌느냐가 더 크게 좌우해요. 대부분의 서비스는 긴 변 1280px 안팎으로 줄여 보내는 것을 기본값으로 두고, 작은 글씨나 좌표가 중요한 화면만 원본 해상도로, 숫자 몇 개만 필요한 일은 싼 모델로 추출한 뒤 텍스트로 넘기는 편이 맞아요.
같은 1920×1080 스크린샷이라도 설정에 따라 173토큰부터 2,691토큰까지 15배 넘게 벌어져요. 세 회사의 공식 규칙과 2026년 10월 27일 가격표로 직접 계산한 숫자로 방식별 비용·지연·품질을 비교해요.
이미지 토큰 계산 규칙 — 회사별로 무엇이 다른가
비전 API는 이미지를 그대로 받지 않고 정해진 크기의 칸(패치)으로 나눠 그 수만큼 입력 토큰으로 청구해요. 규칙이 회사마다 달라서 같은 그림이 다른 값이 돼요.
- Claude: Anthropic 비전 문서에 따르면 28×28px 칸 하나가 토큰 하나예요. 식은
⌈가로/28⌉ × ⌈세로/28⌉. 4.7 이후 모델은 고해상도 등급이라 긴 변 2,576px·4,784토큰까지 줄이지 않고, 그 밖의 모델은 1,568px·1,568토큰이 한도예요. - OpenAI: OpenAI 이미지 입력 문서에서 gpt-5.x 계열은 32×32px 칸 수에 모델별 배수(gpt-5.6·5.5·5.4 는 1.2)를 곱해요.
detail을low로 주면 512×512 안으로 줄여요. gpt-4o·4.1 같은 옛 모델은 512px 타일 방식이라 계산이 달라요. - Gemini: Gemini media_resolution 문서에서 Gemini 3·4 모델은 크기와 상관없이 단계별 근삿값을 써요. low 280, medium 560, high 1,120, ultra_high 2,240토큰이고, 지정하지 않으면 1,120이에요.
- 직접 띄우는 오픈 모델: LLaVA-1.5 는 336×336으로 맞춰 항상 576토큰, Qwen2-VL 은 transformers 의 smart_resize 규칙대로 가로세로를 28의 배수로 맞춘 뒤 28px 칸 하나를 토큰 하나로 써요.
Claude 와 Qwen2-VL 이 같은 2,691인 건 둘 다 28px 칸 하나를 토큰 하나로 쓰기 때문이에요. Gemini 는 크기가 커져도 토큰이 늘지 않는 대신, 큰 이미지를 얼마나 줄여 보는지 공개하지 않아요.
1920×1080 한 장은 몇 토큰 — 설정별 직접 계산
Claude 는 문서의 참조 구현을 그대로 돌렸고, OpenAI 는 2048px·2,500칸 한도 안이라 줄지 않는 경우만 넣었어요.
긴 변을 1920에서 1280으로 줄이면 Claude·OpenAI 모두 토큰이 55% 줄어요. 변 길이가 2/3이면 칸 수는 (2/3)² ≈ 44%만 남거든요. 필요한 영역만 잘라 보내면 원본 해상도를 유지하면서 84% 줄어요. 에러 팝업이나 영수증 합계 칸처럼 위치가 정해진 일이면 크롭이 품질·비용 모두 유리해요.
이미지 1,000장 비용 — 2026년 10월 가격표로 계산
이미지 토큰에 각 회사 표준 입력 단가를 곱한 값이에요. 단가는 Anthropic 가격표, OpenAI 가격표, Gemini API 가격표에서 2026-10-27에 확인했어요.
| 모델 | 입력 단가($/100만) | 출력 단가($/100만) | 원본 1,000장 | 줄였을 때 1,000장 |
|---|---|---|---|---|
| Claude Sonnet 5.5 | 2.00 | 10.00 | $5.38 | $2.39 (1280px) |
| gpt-5.6-terra | 2.00 | 12.00 | $4.90 | $2.21 (1280px) |
| Gemini 3.8 Flash | 0.75 | 3.75 | $0.84 | $0.21 (low) |
| Claude Haiku 5.5 | 0.10 | 0.50 | $0.27 | $0.12 (1280px) |
| gpt-5.6-luna | 0.20 | 1.20 | $0.49 | $0.22 (1280px) |
| Gemini 3.5 Flash-Lite | 0.30 | 2.50 | $0.34 | $0.08 (low) |
가격에는 기한이 붙은 것도 있어요. Gemini 3.8 Flash 는 2026년 12월 31일까지 입력 $0.75·출력 $3.75이고 2027년 1월 1일부터 두 배($1.50·$7.50)라고 가격표에 적혀 있어요. 그러면 원본 1,000장 비용도 $0.84에서 $1.68이 돼요. Claude Haiku 5.5 는 프롬프트가 10만 토큰을 넘으면 단가가 5배($0.50)로 올라가니, 이미지를 수십 장 한 번에 넣는 요청은 따로 계산해야 해요. 세 회사 모두 Batch API 로 보내면 입력·출력이 50% 할인돼요.
방식별 비교 — 원본·리사이즈·크롭·2단계 추출·자체 호스팅
실제 요청에는 이미지 외에 지시문과 답변이 붙어요. 아래는 지시문 200토큰, 답변 300토큰(생각 토큰 포함)을 가정하고 요청 10만 건의 총비용을 계산한 예시예요. 토크나이저마다 같은 글이 다른 토큰 수가 되니 이 가정은 비교용이에요. 한국어 지시문이 몇 토큰인지는 한국어 LLM 토큰 비용 비교에서 직접 세는 법을 볼 수 있어요.
2단계 추출은 Claude Haiku 5.5 에 이미지와 짧은 지시(100토큰)를 주고 글자 400토큰을 뽑게 한 뒤, Sonnet 5.5 에는 그 텍스트와 질문(600토큰)만 넘겨 300토큰 답을 받는 구성이에요. 건당 $0.00048 + $0.0042 = $0.00468로, Sonnet 에 원본 이미지를 바로 보내는 $0.00878보다 47% 싸요.
| 방식 | 비용 | 첫 응답 지연 | 품질 | 잘 맞는 일 |
|---|---|---|---|---|
| 원본 해상도 그대로 | 가장 높음 | 이미지 토큰만큼 프리필이 길어짐 | 작은 글씨·좌표에 가장 유리 | 화면 조작, 빽빽한 문서 |
| 긴 변 1280px 리사이즈 | 원본의 약 45% | 짧아짐 | 일반 글씨는 대개 충분 | 범용 기본값 |
| 필요한 영역만 크롭 | 원본의 약 16% | 가장 짧음 | 잘린 영역 밖은 못 봄 | 고정 양식, 특정 패널 |
| low 설정(OpenAI·Gemini) | 원본의 7~25% | 짧아짐 | 글씨가 뭉개짐 | 분류·태깅·장면 설명 |
| 2단계 추출 | 큰 모델 직접 대비 약 53% | 호출 두 번이 이어져 늘어남 | 추출 단계에서 빠진 정보는 복구 불가 | 금액·코드·번호 읽기 |
| 자체 호스팅 | GPU 시간 단가에 좌우 | 하드웨어에 좌우 | 모델에 따라 차이 큼 | 외부 전송 불가 데이터 |
지연은 직접 재지 않았지만, 입력이 길수록 첫 토큰이 늦어지는 프리필 구조는 같아서 이미지 토큰이 줄면 그 몫의 처리 시간도 줄어요. Anthropic 문서도 지연을 줄이려면 업로드 전에 직접 리사이즈하라고 권해요. 전송 크기도 지연에 들어가요. base64 로 넣으면 원본 바이트보다 약 33% 커지는데, 이유는 Base64 용도와 33% 증가 원리에 정리돼 있어요. 실제 크기는 Base64 인코더에 넣어 보면 바로 나와요.
품질은 무엇으로 가늠하나 — 줄였을 때 글자 높이
품질 점수는 작업마다 달라 남의 벤치마크를 그대로 믿기 어려워요. 대신 계산할 수 있는 지표가 하나 있어요. 원본에서 16px 높이였던 글자가 모델이 보는 이미지에서 몇 px이 되는가예요.
| 설정 | 축소 비율 | 16px 글자의 높이 |
|---|---|---|
| Claude 고해상도 등급·OpenAI high 원본 | 1.00 | 16px |
| Claude 표준 등급(1456×819로 축소) | 0.76 | 12.1px |
| Qwen2-VL max_pixels 상한 지정(1316×728) | 0.69 | 11.0px |
| 긴 변 1280px 리사이즈 | 0.67 | 10.7px |
| LLaVA-1.5(짧은 변 336) | 0.31 | 5.0px, 가로 44% 잘림 |
| OpenAI detail low(512×288) | 0.27 | 4.3px |
글자가 몇 px 남아야 읽히는지는 글꼴·압축·모델마다 달라서 정해진 기준은 없어요. 다만 4~5px까지 줄어드는 low 설정은 "무엇이 찍혔나"에는 충분해도 에러 코드나 금액 읽기에는 위험해요. 표는 감을 잡는 기준이니, 서비스 이미지 50~100장으로 설정별 정답률을 재서 정해요.
상황별 추천 — 어떤 방식을 고를까
- 고객 문의 스크린샷 분석: 긴 변 1280px 리사이즈가 기본이에요. 에러 메시지 영역을 클라이언트가 알면 그 부분만 크롭해 원본 해상도로 보내요.
- 영수증·송장 번호 읽기: 숫자 몇 개만 필요하니 2단계 추출이 싸요. 추출 결과를 정해진 JSON 형식으로 받으면 다음 단계가 단단해져요.
- 화면 조작 에이전트, 빽빽한 표: 원본 해상도가 필요해요. Claude 는 4.7 이후 모델, OpenAI 는 high 이상, Gemini 는 high 나 ultra_high 를 써요.
- 사진 분류·태깅 대량 처리: Gemini low 나 OpenAI detail low 에 Batch API 를 함께 쓰면 가장 싸요.
- 의료·금융처럼 이미지를 내보낼 수 없을 때: Qwen2-VL 같은 오픈 모델을 직접 띄워요. 이때는 토큰이 돈 대신 GPU 메모리로 청구돼요. Qwen2-VL-7B 공개 config(28층, KV 헤드 4개, 헤드 차원 128, bf16)로 계산하면 토큰 하나의 KV 캐시가 56KiB라서 1920×1080 한 장(2,691토큰)이 147MiB를 차지해요.
max_pixels로 1,222토큰에 묶으면 67MiB예요. 동시 요청 수로 바꾸는 계산은 vLLM KV 캐시 용량 계산과 같은 방식이에요.
흔한 실수 — 비용이 예상보다 커지는 이유
단가만 비교한다. 입력 단가가 같은 $2여도 같은 이미지가 Claude 2,691, OpenAI 2,448토큰이라 이미지 비용이 10% 달라요. 비교는 "단가 × 내 이미지의 토큰 수"로 해요.
OpenAI 의 low 가 항상 싸다고 생각한다. OpenAI 문서에 따르면 gpt-5.4 계열의 low 는 2048px·6,144칸 예산을 써서 high(2,500칸)보다 비쌀 수 있어요. gpt-5.2·gpt-4.1-mini 도 low·high·auto 가 같은 예산을 써요. 모델을 바꿀 때마다 그 모델의 detail 규칙을 다시 확인해요.
대화가 길어질 때 이미지가 매 턴 다시 청구된다는 걸 놓친다. API 는 매 요청에 대화 전체를 다시 보내니, 첫 턴의 이미지도 매 턴 입력 토큰으로 잡혀요. Sonnet 5.5 에서 2,691토큰 이미지 하나로 5턴 대화를 하면 이미지 몫만 13,455토큰, $0.027이에요. 프롬프트 캐싱을 켜면 첫 기록(1.25배)과 네 번의 캐시 적중(0.05배)으로 $0.0078까지 내려가 71% 줄어요.
서버 리사이즈에 맡기고 좌표를 원본 기준으로 쓴다. Claude 표준 등급은 1920×1080을 1456×819로 줄여 보고 그 좌표로 답해요. Claude 좌표 문서는 업로드 전에 직접 줄이거나, 이미지 블록에 "oversized_image": "error" 를 넣어 몰래 줄어드는 일을 오류로 바꾸라고 안내해요.
모델을 바꾸면 비용이 조용히 바뀐다. Claude 를 표준 등급 모델에서 4.7 이후 모델로 올리면 같은 1920×1080이 1,560토큰에서 2,691토큰으로 늘어요. 3840×2160은 1,560에서 4,784토큰, 약 3배예요. 모델 업그레이드 PR 에는 이미지 토큰 수 비교를 같이 넣어요.
도입 체크리스트
- 서비스에 실제로 들어오는 이미지 해상도 분포를 뽑아요. 평균이 아니라 상위 10%까지 봐요.
- 후보 모델마다 그 분포로 이미지 토큰 수를 계산해요. 아래 함수가 공식 규칙 그대로예요.
- 이미지 50~100장과 정답을 만들어 원본·1280px·크롭·low 설정별 정답률을 재요.
- 정답률이 허용 범위 안인 가장 싼 설정을 고르고, 기본 리사이즈를 클라이언트나 서버 앞단에 넣어요.
- 같은 이미지를 여러 번 묻는 흐름이면 캐싱, 실시간이 아니면 Batch API 를 켜요.
- 응답의 usage 로 실제 입력 토큰을 기록해 계산값과 맞는지 매주 확인해요.
import math
def claude_tokens(w, h, max_edge=2576, max_tokens=4784):
# 28px 칸 하나 = 1토큰, 한도를 넘으면 비율을 지키며 줄임 (고해상도 등급 기본값)
t = lambda a, b: math.ceil(a / 28) * math.ceil(b / 28)
fits = lambda a, b: math.ceil(a/28)*28 <= max_edge and math.ceil(b/28)*28 <= max_edge and t(a, b) <= max_tokens
if fits(w, h):
return t(w, h)
lo, hi, r = 1, w, w / h
while lo + 1 < hi:
mid = (lo + hi) // 2
lo, hi = (mid, hi) if fits(mid, max(round(mid / r), 1)) else (lo, mid)
return t(lo, max(round(lo / r), 1))
def openai_patch_tokens(w, h, mult=1.2):
# gpt-5.x high 기준, 2048px·2,500칸 안에 들어오는 이미지만
return math.ceil(math.ceil(w / 32) * math.ceil(h / 32) * mult)
GEMINI = {"low": 280, "medium": 560, "high": 1120, "ultra_high": 2240}
for w, h in [(1920, 1080), (1280, 720), (800, 400)]:
print(f"{w}x{h}: Claude {claude_tokens(w, h)} / OpenAI {openai_patch_tokens(w, h)} / Gemini 기본 {GEMINI['high']}")
1920x1080: Claude 2691 / OpenAI 2448 / Gemini 기본 1120
1280x720: Claude 1196 / OpenAI 1104 / Gemini 기본 1120
800x400: Claude 435 / OpenAI 390 / Gemini 기본 1120
표준 등급 Claude 모델이면 max_edge=1568, max_tokens=1568 을 넘겨요. 월 전송량은 데이터 용량 변환기로 어림해요.
자주 묻는 질문
이미지 한 장은 보통 몇 토큰인가요?
규칙에 따라 달라요. 1920×1080 스크린샷 기준으로 Claude 4.7 이후 모델은 2,691, OpenAI gpt-5.6 high 는 2,448, Gemini 3·4 기본 설정은 약 1,120토큰이에요. 1000×1000 사진은 Claude 에서 1,296토큰이에요.
이미지를 줄이면 정확도가 얼마나 떨어지나요?
작업에 따라 달라서 일률적인 숫자는 없어요. 긴 변 1280px로 줄이면 16px 글자가 10.7px이 돼 일반 글씨는 대개 읽히지만, 아주 작은 글씨나 좌표가 중요한 일에서는 차이가 날 수 있어요. 서비스 이미지 50~100장으로 직접 비교하는 게 가장 확실해요.
Gemini 는 큰 이미지를 보내도 토큰이 늘지 않나요?
Gemini 3·4 모델은 media_resolution 단계별 근삿값(low 280, medium 560, high 1,120, ultra_high 2,240)을 써서 이미지가 커져도 토큰은 거의 그대로예요. 대신 큰 이미지를 얼마나 줄여서 보는지 공개하지 않으니, 작은 글씨가 중요하면 high 와 ultra_high 를 직접 비교해 봐요.
OCR 을 먼저 돌리고 텍스트만 보내는 게 늘 싼가요?
글자 몇 개만 필요할 때는 싸요. 이 글의 예시 가정에서는 Sonnet 에 원본을 보내는 것보다 47% 쌌어요. 하지만 그림의 배치나 색, 추출 단계가 놓친 정보는 다음 단계에서 다시 볼 수 없고, 호출이 두 번이라 응답이 늦어져요.
오픈 모델을 직접 띄우면 이미지 비용이 0인가요?
토큰 요금 대신 GPU 메모리와 시간이 들어요. Qwen2-VL-7B 에서 1920×1080 한 장은 KV 캐시 147MiB를 차지해요. max_pixels 로 이미지 토큰 상한을 거는 게 첫 번째 조정이에요.
정리
- 비전 API 비용은 "입력 단가 × 이미지 토큰 수"이고, 토큰 수 차이가 단가 차이보다 커요. 1920×1080 한 장이 173~2,691토큰까지 벌어져요.
- 긴 변 1280px 리사이즈가 범용 기본값(토큰 55% 감소), 영역이 정해져 있으면 크롭(84% 감소), 숫자 몇 개만 필요하면 2단계 추출(예시에서 47% 절감)이에요.
- 원본 해상도는 작은 글씨·좌표·빽빽한 표에만 쓰고, 멀티턴은 캐싱, 비실시간은 Batch 할인을 같이 봐요. 단가는 2026-10-27 기준이니 도입 전에 가격표를 다시 확인해요.
더 깊이 읽기
이 글은 실무에서 판단할 때 필요한 것 위주로 정리했어요. 같은 주제의 내부 동작 원리는 devboi 기술 블로그의 멀티모달 LLM 원리 — 이미지가 토큰이 되는 과정(LLaVA·ViT)에서 도식과 코드로 단계별로 풀었어요.