이 가이드는 Claude에서 이미지를 사용하는 방법을 설명하며, 모범 사례, 코드 예제, 그리고 염두에 두어야 할 제한 사항을 포함합니다.
다음을 통해 Claude의 비전 기능을 사용하세요:
단일 요청에 여러 이미지를 포함할 수 있으며, Claude는 응답을 작성할 때 이를 함께 분석합니다. 이는 이미지를 비교하거나 대조하는 데 유용할 수 있습니다.
메시지 또는 요청당 최대 이미지 수는 다음과 같습니다:
이미지당 최대 크기는 8000x8000 px입니다.
단일 API 요청에 20개를 초과하는 이미지가 포함된 경우, 더 엄격한 이미지별 크기 제한이 적용됩니다. Amazon Bedrock 및 Vertex AI에서는 PDF와 같은 문서 블록도 이 임계값에 포함됩니다. 더 엄격한 제한을 초과하는 이미지는 "many-image requests"를 참조하고 현재 픽셀 제한을 명시하는 메시지가 포함된 invalid_request_error와 함께 거부됩니다. 모든 플랫폼에서 제한을 초과하지 않으려면 각 이미지의 어느 쪽 크기도 2000 px를 초과하지 않도록 크기를 조정하거나, 요청을 20개 이하의 이미지 및 문서 블록으로 유지하세요.
이미지당 최대 크기는 다음과 같습니다:
API는 요청당 최대 600개의 이미지를 지원하지만, 요청 크기 제한(표준 엔드포인트의 경우 32 MB, Amazon Bedrock 및 Vertex AI와 같은 일부 파트너 운영 플랫폼에서는 더 낮음)에 먼저 도달할 수 있습니다. 많은 이미지를 사용하는 경우, Files API로 업로드하고 file_id로 참조하여 요청 페이로드를 작게 유지하는 것을 고려하세요.
Files API를 사용하더라도 크기가 큰 이미지가 많은 요청은 600개 이미지 수에 도달하기 전에 실패할 수 있습니다. 업로드하기 전에 이미지 크기 또는 파일 크기를 줄이세요(예: 다운샘플링). 이미지 크기 평가를 참조하세요.
Claude는 픽셀 대신 패치 단위로 이미지를 봅니다. 각 패치는 이미지의 28×28 픽셀 블록이며, 이를 "visual token"(비주얼 토큰)이라고 합니다. 따라서 이미지는 ⌈width / 28⌉ × ⌈height / 28⌉ 비주얼 토큰을 소비합니다.
Claude가 너무 큰 이미지를 받으면 크기를 조정합니다. 최대 기본 이미지 해상도는 다음과 같습니다:
입력 이미지가 이 기본 해상도보다 크면, 먼저 종횡비를 유지하면서 가능한 최대 크기로 조정됩니다. 크기 조정 여부와 관계없이 모든 이미지는 하단 및 오른쪽 가장자리에 28 픽셀의 배수가 되도록 패딩이 추가됩니다. 정확한 규칙은 Claude가 이미지 크기를 조정하고 패딩하는 방법을 참조하세요.
Claude에게 좌표(점, 바운딩 박스 등)를 출력하도록 요청할 때는 Claude가 보는 크기 조정된 이미지를 기준으로 한 절대 픽셀 좌표가 가장 잘 작동합니다. 이를 처리하는 방법은 좌표 및 바운딩 박스 작업을 참조하세요.
"Latency"(지연 시간)를 최소화하고 좌표 기반 워크플로를 단순화하려면 업로드하기 전에 이미지 크기를 조정하는 것이 좋습니다.
요청에 포함하는 각 이미지는 토큰 사용량에 포함됩니다. 대략적인 비용을 계산하려면 이미지의 비주얼 토큰 수(이미지 크기 평가 참조)에 사용 중인 모델의 토큰당 가격을 곱하세요.
다음은 Claude Sonnet 4.6의 입력 토큰 100만 개당 $3의 토큰당 가격을 기준으로, API의 크기 제약 내에서 다양한 이미지 크기에 대한 토큰화 및 대략적인 비용 예시입니다:
| 이미지 크기 | 토큰 수 | 이미지당 비용 | 1천 개 이미지당 비용 |
|---|---|---|---|
| 200x200 px(0.04 메가픽셀) | 64 | ~$0.00019 | ~$0.19 |
| 1000x1000 px(1 메가픽셀) | 1296 | ~$0.0039 | ~$3.89 |
| 1092x1092 px(1.19 메가픽셀) | 1521 | ~$0.0046 | ~$4.56 |
| 1920x1080 px(2.07 메가픽셀) | 1560 | ~$0.0047 | ~$4.68 |
| 2000x1500 px(3 메가픽셀) | 1564 | ~$0.0047 | ~$4.69 |
| 3840x2160 px(8.29 메가픽셀) | 1560 | ~$0.0047 | ~$4.68 |
마지막 세 이미지는 기본 해상도를 초과하므로 처리 전에 축소됩니다(각각 1456x819 px, 1270x952 px, 1456x819 px로). 이로 인해 토큰 비용이 제한됩니다. 4K 이미지는 1920x1080 이미지와 동일한 크기로 축소되므로 비용이 더 들지 않으며, 추가 해상도는 버려집니다.
Claude Opus 4.7은 고해상도 이미지를 지원하는 최초의 Claude 모델이며, Claude Opus 4.8, Claude Fable 5, Claude Mythos 5 및 이후 모델도 이를 지원합니다. 최대 이미지 해상도는 긴 변 기준 2576 픽셀로, 이전 모델의 1568 px에서 증가했습니다. 이는 비전 중심 워크로드에서 성능 향상을 가능하게 하며, 특히 컴퓨터 사용, 스크린샷 이해 및 문서 분석에 유용합니다.
고해상도 지원은 Claude Opus 4.7 및 이후 모델에서 자동으로 적용되며 베타 헤더나 클라이언트 측 옵트인이 필요하지 않습니다.
Claude Opus 4.7, Claude Opus 4.8, Claude Fable 5 및 Claude Mythos 5의 고해상도 이미지는 이전 모델보다 최대 약 3배 더 많은 이미지 토큰을 사용할 수 있습니다(이미지당 4784 대 1568 토큰). 추가 정밀도가 필요하지 않은 경우, 토큰 비용을 제어하기 위해 전송하기 전에 이미지를 다운샘플링하세요.
다음은 Claude Opus 4.7 및 Claude Opus 4.8의 입력 토큰 100만 개당 $5의 토큰당 가격을 기준으로 동일한 이미지 크기를 토큰화한 결과입니다:
| 이미지 크기 | 토큰 수 | 이미지당 비용 | 1천 개 이미지당 비용 |
|---|---|---|---|
| 200x200 px(0.04 메가픽셀) | 64 | ~$0.00032 | ~$0.32 |
| 1000x1000 px(1 메가픽셀) | 1296 | ~$0.0065 | ~$6.48 |
| 1092x1092 px(1.19 메가픽셀) | 1521 | ~$0.0076 | ~$7.61 |
| 1920x1080 px(2.07 메가픽셀) | 2691 | ~$0.013 | ~$13.46 |
| 2000x1500 px(3 메가픽셀) | 3888 | ~$0.019 | ~$19.44 |
| 3840x2160 px(8.29 메가픽셀) | 4784 | ~$0.024 | ~$23.92 |
마지막 이미지만 더 높은 제한을 초과합니다: 4K 이미지는 처리 전에 2576x1449 px로 축소됩니다. 고해상도 지원은 해상도 제한을 높이지만 제거하지는 않습니다. 긴 변이 2576 px(또는 4784 비주얼 토큰)를 초과하는 이미지는 여전히 축소됩니다.
Claude에 이미지를 제공할 때 최상의 결과를 얻으려면 다음 사항을 염두에 두세요:
Claude는 이미지의 영역을 찾아 레이블을 지정할 수 있습니다(예: 표, 양식 필드, 차트 요소 또는 UI 구성 요소에 대한 바운딩 박스 반환).
Claude는 절대 픽셀 좌표에서 가장 잘 작동합니다. 프롬프트에서 이를 명시적으로 요청하세요. 예: "각 표의 바운딩 박스를 픽셀 좌표로 [x1, y1, x2, y2] 형식으로 반환하세요." Claude는 정규화된 좌표를 요청할 때 잘 작동하지 않습니다. 예: "바운딩 박스 좌표를 0에서 1000 사이로 반환하세요." 항상 픽셀 좌표를 요청하고 필요한 경우 자체 코드에서 정규화하세요.
좌표는 표준 이미지 규칙을 따릅니다: 원점 (0, 0)은 이미지의 왼쪽 상단 모서리이며, x는 오른쪽으로 증가하고 y는 아래쪽으로 증가합니다. Claude가 반환하는 좌표는 Claude가 보는 이미지의 픽셀 위치입니다. 즉, 모델의 기본 해상도에 맞게 Claude가 크기를 조정한 후의 이미지입니다(Claude가 이미지 크기를 조정하고 패딩하는 방법 참조). 직접 사용할 수 있는 좌표를 얻으려면, 좌표가 보유한 이미지에 일대일로 매핑되도록 이미지를 미리 크기 조정하거나(업로드 전 이미지 크기 조정 참조), Claude가 반환하는 좌표를 재조정하세요(미리 크기 조정할 수 없는 경우 좌표 재조정 참조).
Claude는 모델의 두 가지 이미지 제한을 모두 충족하는 종횡비를 유지하는 최대 크기를 찾습니다:
⌈width / 28⌉ × ⌈height / 28⌉이 모델의 비주얼 토큰 예산을 초과하지 않습니다(대부분의 모델은 1568 토큰, Claude Opus 4.7 및 이후 모델은 4784).대부분의 사진과 스크린샷의 경우 가장자리 제한이 크기 조정을 유발합니다. 세로 방향 문서의 경우 일반적으로 비주얼 토큰 제한이 먼저 유발되며, 이를 간과하는 것이 좌표 불일치의 가장 흔한 원인입니다. 예를 들어, 130 DPI로 스캔된 A4 페이지는 1075×1520 픽셀입니다. 양쪽 모두 1568 px 미만이지만 39 × 55 = 2145 비주얼 토큰을 소비하므로 Claude는 이를 924×1307로 크기 조정합니다.
그런 다음 Claude는 크기 조정 여부와 관계없이 모든 이미지의 하단 및 오른쪽 가장자리를 다음 28 픽셀 배수까지 패딩합니다(예제에서 924×1307은 924×1316이 됩니다). 패딩에는 콘텐츠가 없습니다. Claude는 패딩된 이미지를 인식하지만 페이지 콘텐츠는 패딩되지 않은 크기 조정된 영역만 차지합니다. 항상 패딩된 크기가 아닌 크기 조정된 크기로 정규화하거나 재조정하세요. 패딩된 크기로 나누면 모든 좌표가 약간씩 스케일링됩니다.
가장 신뢰할 수 있는 방법은 업로드하기 전에 이미지 크기를 직접 조정하는 것입니다. 그러면 보유한 이미지가 Claude가 보는 이미지와 정확히 일치하며 Claude가 반환하는 좌표를 변환할 필요가 없습니다.
다음 참조 구현은 Claude가 이미지를 조정하는 정확한 크기를 계산합니다:
import math
def count_image_tokens(width: int, height: int) -> int:
"""Visual tokens consumed by an image: one token per 28x28 pixel patch."""
return math.ceil(width / 28) * math.ceil(height / 28)
def resized_size(
width: int,
height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[int, int]:
"""The size Claude resizes an image to before padding.
Defaults are for most models. For Claude Opus 4.7 and later models, use
max_edge=2576 and max_tokens=4784. Returns (width, height). Images that
already fit within the limits are returned unchanged.
"""
def fits(w: int, h: int) -> bool:
return (
math.ceil(w / 28) * 28 <= max_edge
and math.ceil(h / 28) * 28 <= max_edge
and count_image_tokens(w, h) <= max_tokens
)
if fits(width, height):
return (width, height)
if height > width:
resized_h, resized_w = resized_size(height, width, max_edge, max_tokens)
return (resized_w, resized_h)
# 긴 변을 따라 이진 탐색으로 종횡비를 유지하면서 맞는 최대 크기를 찾습니다.
#
aspect_ratio = width / height
lo, hi = 1, width # lo always fits; hi never fits
while lo + 1 < hi:
mid = (lo + hi) // 2
if fits(mid, max(round(mid / aspect_ratio), 1)):
lo = mid
else:
hi = mid
return (lo, max(round(lo / aspect_ratio), 1))
# "Claude가 이미지를 리사이즈하고 패딩하는 방법"의 A4 예시:
print(resized_size(1075, 1520)) # (924, 1307)resized_size가 반환한 크기로 조정하세요. 이미지가 이미 모델의 제한 내에 있으면 resized_size는 크기를 변경하지 않고 반환하며 크기 조정이 필요하지 않습니다.[x1, y1, x2, y2] 형식으로 반환하세요."미리 크기 조정할 수 없는 경우(예: 수정할 수 없는 업스트림 시스템에서 이미지가 제공되는 경우), 업로드 전 이미지 크기 조정의 resized_size를 사용하여 Claude가 본 크기를 복구한 다음, Claude가 반환하는 좌표를 정규화된 좌표로 매핑하거나 원본 이미지로 다시 매핑하세요. 이 방법은 업로드한 이미지의 픽셀 크기를 알아야 하므로 PDF 업로드에는 적용되지 않습니다.
def to_relative_coordinates(
x: float,
y: float,
original_width: int,
original_height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[float, float]:
"""Map a pixel coordinate returned by Claude to relative coordinates in [0, 1].
Pass the dimensions of the image you uploaded. For Claude Opus 4.7 and
later models, use max_edge=2576 and max_tokens=4784.
"""
resized_w, resized_h = resized_size(
original_width, original_height, max_edge, max_tokens
)
return (x / resized_w, y / resized_h)
# 원본 이미지의 픽셀 공간에서 좌표를 표현하려면
# 상대 좌표에 원본 크기를 곱하세요:
# (rel_x * original_width, rel_y * original_height)패딩은 하단 및 오른쪽 가장자리에만 적용되므로 원점이 이동하지 않으며 축별 선형 재조정으로 충분합니다.
Claude와의 텍스트 기반 상호작용에 효과적인 많은 프롬프팅 기법을 이미지 기반 프롬프트에도 적용할 수 있습니다.
이 예제들은 이미지를 포함하는 모범 사례 프롬프트 구조를 보여줍니다.
텍스트 프롬프트에서 긴 문서를 질문 앞에 배치하면 결과가 향상되는 것처럼, Claude는 이미지가 텍스트보다 먼저 올 때 가장 잘 작동합니다. 텍스트 뒤에 배치되거나 텍스트와 섞여 있는 이미지도 잘 작동하지만, 사용 사례가 허용한다면 이미지-텍스트 순서 구조를 선호하세요.
다음 예제는 다양한 프로그래밍 언어와 접근 방식을 사용하여 Claude의 비전 기능을 사용하는 방법을 보여줍니다. 세 가지 방법으로 Claude에 이미지를 제공할 수 있습니다:
image 콘텐츠 블록에 base64 인코딩된 이미지로Amazon Bedrock 및 Vertex AI에서는 현재 base64 인코딩된 소스만 사용할 수 있습니다.
base64 예제 프롬프트는 다음 변수를 사용합니다:
import base64
import httpx
# base64로 인코딩된 이미지의 경우
image1_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image1_media_type = "image/jpeg"
image1_data = base64.standard_b64encode(httpx.get(image1_url).content).decode("utf-8")
image2_url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg"
image2_media_type = "image/jpeg"
image2_data = base64.standard_b64encode(httpx.get(image2_url).content).decode("utf-8")
# URL 기반 이미지의 경우, 요청에서 URL을 직접 사용할 수 있습니다다음은 base64 인코딩된 이미지와 URL 참조를 사용하여 Messages API 요청에 이미지를 포함하는 방법의 예입니다:
image1_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC"
image1_media_type = "image/png"
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": image1_media_type,
"data": image1_data,
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)반복적으로 사용할 이미지나 인코딩 오버헤드를 피하고 싶은 경우 Files API를 사용하세요. 이미지를 한 번 업로드한 다음, base64 데이터를 다시 전송하는 대신 후속 메시지에서 반환된 file_id를 참조하세요.
멀티턴 대화 및 에이전트 워크플로에서는 각 요청이 전체 대화 기록을 다시 전송합니다. 이미지가 base64로 인코딩된 경우, 매 턴마다 전체 이미지 바이트가 페이로드에 포함되어 대화가 길어질수록 요청 크기와 지연 시간이 크게 증가할 수 있습니다. Files API에 이미지를 업로드하고 file_id로 참조하면 대화 기록에 이미지가 얼마나 많이 누적되든 요청 페이로드를 작게 유지할 수 있습니다.
client = anthropic.Anthropic()
# 이미지 파일 업로드
with open("image.jpg", "rb") as f:
file_upload = client.beta.files.upload(file=("image.jpg", f, "image/jpeg"))
# 업로드한 파일을 메시지에서 사용
message = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
betas=["files-api-2025-04-14"],
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {"type": "file", "file_id": file_upload.id},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message.content)더 많은 예제 코드와 매개변수 세부 정보는 Messages API 예제를 참조하세요.
Claude의 이미지 이해 기능은 최첨단이지만, 알아두어야 할 몇 가지 제한 사항이 있습니다:
특히 중요한 사용 사례의 경우 Claude의 이미지 해석을 항상 신중하게 검토하고 확인하세요. 사람의 감독 없이 완벽한 정밀도나 민감한 이미지 분석이 필요한 작업에 Claude를 사용하지 마세요.
Claude를 사용하여 이미지로 빌드를 시작할 준비가 되셨나요? 다음은 몇 가지 유용한 리소스입니다:
다른 질문이 있으시면 지원 팀에 문의하세요. 개발자 커뮤니티에 참여하여 다른 크리에이터와 연결하고 Anthropic 전문가의 도움을 받을 수도 있습니다.
Was this page helpful?