For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색 메뉴
Theme

이미지 생성

이미지를 생성하거나 편집하는 방법을 알아보세요.

개요

API에서 gpt-image-2.5-sunburst와 gpt-image-2.5-flare를 사용하면 텍스트 프롬프트로 이미지를 생성하고 편집할 수 있습니다. 편집 정밀도가 가장 중요한 워크플로우에는 Sunburst를, 일상적으로 고품질 이미지를 빠르게 생성할 때는 Flare를 선택하세요. 이미지 생성 기능은 다음 두 API에서 사용할 수 있습니다.

Image API

Image API는 서로 다른 기능을 제공하는 두 가지 엔드포인트를 지원합니다.

Responses API

Responses API를 사용하면 대화나 여러 단계로 구성된 플로우에서 이미지를 생성할 수 있습니다. 이미지 생성을 내장 도구로 지원하며, 컨텍스트에 이미지 입력과 출력을 포함할 수 있습니다.

Responses API는 Image API의 기능에 더해 다음 기능도 제공합니다.

  • 여러 턴에 걸친 편집: 대화를 이어 가며 프롬프트로 이미지를 정밀하게 편집할 수 있습니다.
  • 유연한 입력: 입력 이미지를 바이트 데이터로 전달하거나 이미지 파일 ID로 지정할 수 있습니다.

이미지 생성 도구를 호출할 수 있는 주 모델은 지원 모델을 참고하세요.

API 선택하기

  • 프롬프트 하나로 이미지 한 장만 생성하거나 편집하려면 Image API가 가장 적합합니다.
  • GPT Image로 대화를 주고받으며 이미지를 편집할 수 있는 환경을 구축하려면 Responses API를 사용하세요.

Image API에서는 model을 gpt-image-2.5-sunburst 또는 gpt-image-2.5-flare로 직접 설정하세요. Responses API에서는 최상위 수준에서 지원되는 주 모델을 선택한 다음 gpt-image-2.5-sunburst 또는 gpt-image-2.5-flare를 이미지 생성 도구의 model 필드에 지정하세요.

두 API 모두 품질, 크기, 형식, 압축률을 조정해 출력을 맞춤 설정할 수 있습니다.

모델의 책임 있는 사용을 위해 GPT Image 모델을 사용하기 전에 API 조직 인증을 개발자 콘솔에서 완료해야 할 수 있습니다.

GPT-Image-2.6

GPT-Image-2.6에는 정교한 이미지 작업에 적합한 Sunburst와 여러 시안을 빠르게 만들고 다듬는 데 적합한 Flare가 있습니다. 두 모델 모두 Image API에서 복잡도 조절, 마크업을 활용한 편집, SVG 출력, 애니메이션 GIF 출력을 지원합니다. 아래의 기존 예시는 GPT-Image-2.5를 사용합니다.

이미지 복잡도 설정하기

요청의 complexity 필드로 이미지 모델이 렌더링 전에 얼마나 세밀하게 계획을 세울지 조절하세요. 배경이나 표지판만 바꾸는 등 편집 범위가 좁다면 낮은 복잡도가 적합할 수 있습니다. 텍스트가 빽빽하거나 레이아웃이 복잡한 경우, 또는 사물 간의 관계를 표현해야 하는 경우에는 높은 복잡도가 도움이 될 수 있습니다. 복잡도를 높이면 지연 시간이 늘고 원치 않는 부분까지 바뀔 수 있으므로 실제 작업에서 결과를 비교하세요.

Sunburst와 Flare가 지원하는 복잡도는 low, medium, high입니다. complexity를 생략하면 두 모델 모두 high를 사용합니다. 렌더링 품질은 별도의 quality 설정으로 조절합니다.

복잡도를 조절하는 데 별도 요금은 부과되지 않습니다.

다음은 Sunburst가 같은 프롬프트와 중간 품질 설정으로 생성한 종이 오리기 기법의 축구 장면입니다. 복잡도에 따라 트로피와 유니폼의 모습, ‘CHAMPIONS’ 표지판의 위치가 어떻게 달라지는지 비교해 보세요.

낮은 복잡도

중간 복잡도

높은 복잡도

안전 식별자

개별 최종 사용자에게 서비스를 제공하는 애플리케이션이라면, 사용자별로 일정하게 유지되면서 개인정보를 보호하는 safety_identifier를 각 이미지 생성 또는 이미지 편집 요청에 포함하세요. 개인을 식별할 수 있는 정보를 직접 보내는 대신 사용자 이름이나 이메일 주소를 해시하고, 식별자 길이는 128자 이하로 유지하세요. 안전 식별자 사용은 권장 사항이며 필수는 아닙니다.

Images API의 user 매개변수는 사용 중단 예정(deprecated)입니다. 대신 같은 식별자를 safety_identifier로 보내세요. user를 사용하는 기존 요청은 계속 지원됩니다. 비어 있지 않은 safety_identifier가 user보다 우선합니다. safety_identifier를 생략하거나 null 또는 빈 문자열로 지정하면 API는 user 값이 있을 때 그 값을 사용합니다.

나무 테이블 위에 놓인 베이지색 커피 머그잔

이미지 생성하기

이미지 생성 엔드포인트를 사용해 텍스트 프롬프트로 이미지를 만들거나, Responses API의 이미지 생성 도구를 사용해 대화 중에 이미지를 생성할 수 있습니다.

출력의 크기, 품질, 형식, 압축률을 조정하는 방법은 아래의 이미지 출력 맞춤 설정을 참고하세요.

n 매개변수를 설정하면 요청 한 번으로 여러 이미지를 생성할 수 있습니다. 기본적으로 API는 이미지 한 장을 반환합니다.

이미지 생성하기
from openai import OpenAI
import base64

client = OpenAI()

prompt = """
A children's book drawing of a veterinarian using a stethoscope to
listen to the heartbeat of a baby otter.
"""

result = client.images.generate(model="gpt-image-2.5-sunburst", prompt=prompt)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("otter.png", "wb") as f:
    f.write(image_bytes)

여러 턴에 걸친 이미지 생성

Responses API에서는 이미지 생성 호출의 출력을 컨텍스트에 포함하거나(이미지 ID만 사용해도 됩니다) previous_response_id 매개변수를 사용해 여러 턴에 걸쳐 이미지를 생성하는 대화를 구성할 수 있습니다. 대화를 이어 가면서 프롬프트를 다듬고 새로운 지시를 적용해 이미지를 단계적으로 수정할 수 있습니다.

Responses API의 이미지 생성 도구에서는 지원되는 도구 모델이 새 이미지를 생성할지, 대화에 있는 이미지를 편집할지 선택할 수 있습니다. 선택 사항인 action 매개변수로 이 동작을 제어합니다. 모델이 결정하도록 하려면 action: "auto"를 유지하세요. 항상 새 이미지를 생성하려면 action: "generate"를, 컨텍스트에 있는 이미지를 반드시 편집하도록 하려면 action: "edit"를 설정하세요.

action으로 항상 새 이미지 생성하기
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "action": "generate"}
    ],
)

# Save the image to a file
image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

컨텍스트에 이미지를 제공하지 않고 edit를 강제하면 호출에서 오류를 반환합니다. 생성과 편집 중 무엇을 수행할지 모델이 결정하도록 하려면 action을 auto로 두세요.

여러 턴에 걸친 이미지 생성
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]

    with open("cat_and_otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))


# Follow up

response_fwup = client.responses.create(
    model="gpt-6-astra",
    previous_response_id=response.id,
    input="Now make it look realistic",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data_fwup = [
    output.result
    for output in response_fwup.output
    if output.type == "image_generation_call"
]

if image_data_fwup:
    image_base64 = image_data_fwup[0]
    with open("cat_and_otter_realistic.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

결과

“회색 줄무늬 고양이가 주황색 목도리를 두른 수달을 안고 있는 이미지를 만들어 줘.”

고양이와 수달

“이제 실제처럼 보이게 해 줘.”

고양이와 수달

스트리밍

Responses API와 Image API는 이미지 생성 스트리밍을 지원합니다. 이미지가 생성되는 동안 중간 이미지를 스트리밍하면 사용자가 진행 과정을 바로 확인할 수 있습니다.

partial_images 매개변수를 조정해 중간 이미지를 0~3장 받을 수 있습니다.

  • partial_images를 0으로 설정하면 최종 이미지만 받습니다.
  • 0보다 큰 값으로 설정해도 최종 이미지가 더 빨리 완성되면 요청한 수보다 적은 중간 이미지를 받을 수 있습니다.
이미지 스트리밍하기
from openai import OpenAI
import base64

client = OpenAI()


def save_base64_image(filename, image_base64):
    image_bytes = base64.b64decode(image_base64)
    with open(filename, "wb") as f:
        f.write(image_bytes)


stream = client.responses.create(
    model="gpt-6-astra",
    input="Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape",
    stream=True,
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "partial_images": 2}
    ],
)

for event in stream:
    if event.type == "response.image_generation_call.partial_image":
        idx = event.partial_image_index
        save_base64_image(f"river-partial-{idx}.png", event.partial_image_b64)
    elif event.type == "response.completed":
        image_data = [
            output.result
            for output in event.response.output
            if output.type == "image_generation_call"
        ]

        if image_data:
            save_base64_image("river-final.png", image_data[0])

결과

첫 번째 중간 이미지 두 번째 중간 이미지 최종 이미지
첫 번째 중간 이미지 두 번째 중간 이미지 최종 이미지

프롬프트: 새하얀 올빼미 깃털로 이루어진 강이 고요한 겨울 풍경 속을 굽이굽이 흐르는 모습을 아름답게 그려 줘.

수정된 프롬프트

Responses API에서 이미지 생성 도구를 사용하면 주 모델(예: gpt-5.5)이 성능을 높이기 위해 프롬프트를 자동으로 수정합니다.

수정된 프롬프트는 이미지 생성 호출의 revised_prompt 필드에서 확인할 수 있습니다.

수정된 프롬프트가 포함된 응답
{
  "id": "ig_123",
  "type": "image_generation_call",
  "status": "completed",
  "revised_prompt": "A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.",
  "result": "..."
}

이미지 편집하기

이미지 편집 엔드포인트에서는 다음 작업을 수행할 수 있습니다.

  • 기존 이미지 편집
  • 다른 이미지를 참조해 새 이미지 생성
  • 이미지와 교체할 영역을 표시한 마스크를 업로드해 이미지의 일부 편집

참조 이미지로 새 이미지 생성하기

하나 이상의 이미지를 참조해 새 이미지를 생성할 수 있습니다.

이 예시에서는 입력 이미지 네 장에 있는 물품을 모두 담은 선물 바구니 이미지를 생성합니다.

보디 로션비누인센스 세트배스 밤
목욕용품 선물 세트

Responses API에 입력 이미지를 전달하는 방법은 세 가지입니다.

  • 이미지의 절대 URL 전달
  • 이미지를 Base64로 인코딩한 데이터 URL 전달
  • Files API로 생성한 파일 ID 전달

파일 생성

파일 생성
from openai import OpenAI

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(
            file=file_content,
            purpose="vision",
        )
        return result.id

이미지를 Base64로 인코딩하기

이미지를 Base64로 인코딩하기
import base64


def encode_image(file_path):
    with open(file_path, "rb") as f:
        base64_image = base64.b64encode(f.read()).decode("utf-8")
    return base64_image
이미지 편집
from openai import OpenAI
import base64

client = OpenAI()


def encode_image(file_path):
    with open(file_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


prompt = """Generate a photorealistic image of a gift basket on a white background
labeled 'Relax & Unwind' with a ribbon and handwriting-like font,
containing all the items in the reference pictures."""

base64_image1 = encode_image("body-lotion.png")
base64_image2 = encode_image("soap.png")
file_id1 = create_file("bath-bomb.png")
file_id2 = create_file("incense-kit.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": prompt},
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image1}",
                },
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image2}",
                },
                {
                    "type": "input_image",
                    "file_id": file_id1,
                },
                {
                    "type": "input_image",
                    "file_id": file_id2,
                },
            ],
        }
    ],
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_generation_calls = [
    output for output in response.output if output.type == "image_generation_call"
]

image_data = [output.result for output in image_generation_calls]

if image_data:
    image_base64 = image_data[0]
    with open("gift-basket.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
else:
    print(response.output_text)

마크업으로 편집할 위치 표시하기

마크업을 활용한 편집을 지원하는 GPT-Image-2.5 및 GPT-Image-2.6 모델에서는 Image API의 POST /v1/images/edits 엔드포인트를 사용하세요. Responses API에서 특정 영역을 편집하려면 마스크를 사용하세요. 주석 레이어에 변경할 위치를 표시하고 prompt에 변경 내용을 설명하세요.

예시를 따라 하려면 주방 사진과 투명 오버레이를 같은 디렉터리에 다운로드하세요. 오버레이에는 색상을 바꿀 꽃병이 원으로 표시되어 있습니다.

Image API로 원 안의 꽃병 편집하기
import base64
from pathlib import Path

from openai import OpenAI

client = OpenAI()
overlay = Path("markup-vase-overlay-gpt-image-2-6.png")
with open("kitchen.webp", "rb") as image, overlay.open("rb") as markup:
    result = client.images.edit(
        model="gpt-image-2.6-flare",
        image=("kitchen.webp", image, "image/webp"),
        markup=(overlay.name, markup, "image/png"),
        quality="medium",
        prompt=(
            "Recolor the striped vase inside the red circle to solid cobalt blue ceramic. "
            "Keep its shape, the dried stems, and the rest of the kitchen unchanged. "
            "Remove the red circle from the finished photo."
        ),
    )

Path("vase.png").write_bytes(base64.b64decode(result.data[0].b64_json))

오버레이를 겹친 사진

Flare 편집 결과

  1. 원본 이미지를 첫 번째 입력 이미지로 지정하세요.
  2. 원이나 스케치 등의 주석을 담은 투명 PNG 파일을 별도로 만드세요. 이미지 방향을 적용한 후에는 주석 레이어와 첫 번째 이미지의 너비와 높이가 각각 같아야 합니다. PNG에는 투명 픽셀이 있어야 하므로 주석 레이어를 원본 이미지와 병합하지 마세요.
  3. 주석 레이어를 markup으로 보내세요. 멀티파트 요청에서는 파일을 업로드할 수 있습니다. JSON 요청에서는 image_url 또는 file_id 중 정확히 하나를 담은 객체를 보내세요. image_url에는 HTTPS URL이나 base64 데이터 URL을 지정할 수 있습니다. JSON 편집 요청에서는 입력 이미지 배열을 images에 지정하세요.
  4. 변경할 내용과 보존할 세부 요소를 설명하세요. 결과를 사용하기 전에 검토하세요.

마크업은 첫 번째 입력 이미지에 적용됩니다. 추가 이미지는 참조용으로 사용됩니다. 첫 번째 입력 이미지와 주석 레이어는 각각 16,777,216픽셀을 초과할 수 없습니다. 주석 파일의 용량도 50MB 이하여야 합니다. markup과 mask를 함께 사용하지 마세요.

마스크로 이미지 편집하기

마스크를 제공해 이미지에서 편집할 부분을 지정할 수 있습니다.

GPT Image에서 마스크를 사용하면 해당 영역을 편집하도록 안내하는 추가 지시가 모델에 전달됩니다.

GPT Image의 마스킹은 전적으로 프롬프트에 기반합니다. 모델은 마스크를 참고하지만 마스크의 모양을 정확하게 따르지 않을 수 있습니다.

입력 이미지를 여러 장 제공하면 마스크는 첫 번째 이미지에 적용됩니다.

마스크로 이미지 편집하기
from openai import OpenAI
import base64

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


fileId = create_file("sunlit_lounge.png")
maskId = create_file("mask.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "generate an image of the same sunlit indoor lounge area with a pool but the pool should contain a flamingo",
                },
                {
                    "type": "input_image",
                    "file_id": fileId,
                },
            ],
        },
    ],
    tools=[
        {
            "type": "image_generation",
            "model": "gpt-image-2.5-sunburst",
            "quality": "high",
            "input_image_mask": {
                "file_id": maskId,
            },
        },
    ],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("lounge.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
이미지 마스크 출력
수영장이 있는 분홍색 방 수영장 일부를 표시한 마스크 원래 수영장에서 마스크로 표시한 자리에 플라밍고 튜브가 놓인 모습

프롬프트: 햇살이 드는 실내 라운지. 라운지 안의 수영장에는 플라밍고가 있다.

마스크 요구 사항

편집할 이미지와 마스크는 형식과 가로·세로 크기가 같아야 하며, 각 파일의 용량은 50MB 미만이어야 합니다.

마스크 이미지에는 알파 채널도 있어야 합니다. 이미지 편집 도구로 마스크를 만드는 경우 알파 채널을 포함해 저장하세요.

코드로 흑백 이미지를 수정해 알파 채널을 추가할 수도 있습니다.

흑백 마스크에 알파 채널 추가하기
from PIL import Image
from io import BytesIO

# 1. Load your black & white mask as a grayscale image
mask = Image.open("mask.png").convert("L")

# 2. Convert it to RGBA so it has space for an alpha channel
mask_rgba = mask.convert("RGBA")

# 3. Then use the mask itself to fill that alpha channel
mask_rgba.putalpha(mask)

# 4. Convert the mask into bytes
buf = BytesIO()
mask_rgba.save(buf, format="PNG")
mask_bytes = buf.getvalue()

# 5. Save the resulting file
img_path_mask_alpha = "mask_alpha.png"
with open(img_path_mask_alpha, "wb") as f:
    f.write(mask_bytes)

이미지 출력 맞춤 설정

다음 출력 옵션을 설정할 수 있습니다.

  • 크기: 이미지의 가로·세로 크기(예: 1024x1024, 1024x1536)
  • 품질: 렌더링 품질(예: low, medium, high)
  • 형식: 출력 파일 형식
  • 압축률: JPEG 및 WebP 형식의 압축 수준(0~100%)
  • 배경: 투명, 불투명 또는 자동

size, quality, background는 auto 옵션을 지원합니다. 이 옵션을 사용하면 모델이 프롬프트에 가장 적합한 값을 자동으로 선택합니다.

크기 및 품질 옵션

gpt-image-2.5-sunburst와 gpt-image-2.5-flare에서는 xhigh와 max 품질 설정도 사용할 수 있습니다. 두 모델 모두 기본값은 auto입니다. 이전 GPT Image 모델은 high까지 지원합니다.

설정 옵션
권장 크기 1024x1024(정사각형), 1536x1024(가로형), 1024x1536(세로형)
품질 low, medium, high, xhigh, max, auto

두 모델 모두 WIDTHxHEIGHT 형식의 문자열로 사용자 지정 크기를 지정할 수 있습니다(예: 1536x864). 너비와 높이는 각각 16의 배수여야 하고, 가로세로 비율은 1:3에서 3:1 사이여야 하며, 어느 변도 3840픽셀을 초과할 수 없습니다. 총 픽셀 수는 655,360개 이상 8,294,400개(4K) 이하여야 합니다. 2560x1440을 초과하는 해상도는 실험적으로 지원됩니다.

두 모델에서 투명 배경을 사용하려면 background: "transparent"를 설정하고 output_format: "png" 또는 "webp"를 사용하세요.

초안을 빠르게 만들려면 quality: "low"를 사용하세요. 최종 결과물을 만들 때는 더 높은 품질 설정을 비교해 세부 표현, 지연 시간, 비용 사이에서 적절한 균형을 찾으세요.

출력 형식

Image API는 base64로 인코딩된 이미지 데이터를 반환합니다. 기본 형식은 png이며, jpeg 또는 webp도 요청할 수 있습니다.

jpeg 또는 webp를 사용할 때는 output_compression 매개변수로 압축률(0~100%)도 지정할 수 있습니다. 예를 들어 output_compression=50은 이미지를 50% 압축합니다.

jpeg는 png보다 처리 속도가 빠르므로 지연 시간이 중요하다면 JPEG 형식을 우선 사용하세요.

SVG 생성하기

output_format: "svg"를 POST /v1/images/generations 요청에 지정하세요. 아이콘이나 일러스트레이션처럼 경로, 도형, 색상을 편집해야 하는 그래픽에는 SVG를 사용하세요.

n을 1로 설정하세요. SVG 출력에서는 스트리밍, 중간 이미지, output_compression을 지원하지 않습니다. 이미지 편집 엔드포인트는 SVG 출력을 지원하지 않으며, 편집용 래스터 이미지 입력으로 SVG를 사용할 수도 없습니다.

API는 참조 이미지를 만든 다음 이를 바탕으로 SVG를 생성합니다. quality 설정은 이 참조 이미지의 품질을 제어합니다. data[0].b64_json 값을 base64로 디코딩한 다음, 얻은 UTF-8 XML 바이트를 확장자가 .svg인 파일로 저장하세요. 반환된 문서에는 정적 벡터 콘텐츠만 포함되며, 스크립트, 외부 리소스, 문서에 삽입된 래스터 이미지는 지원하지 않습니다.

다음은 Flare와 Sunburst가 Field & Flour 베이커리 로고를 요청하는 동일한 프롬프트로 생성한 SVG 로고입니다.

GPT-Image-2.6 Flare

GPT-Image-2.6 Sunburst

애니메이션 GIF 생성하기

output_format: "gif"를 POST /v1/images/generations 또는 POST /v1/images/edits 요청에 지정하세요. 프롬프트에 무엇이 어떻게 움직이고 그 동작이 어떤 식으로 반복되어야 하는지 설명하세요. 정지 이미지를 참조해 애니메이션을 생성하려면 해당 이미지를 이미지 편집 엔드포인트로 보내세요.

두 엔드포인트 모두 다음 요청 필드로 GIF 출력을 설정할 수 있습니다.

필드 값 기본값
frame_count 2~16프레임 9
frame_duration_ms 프레임당 20~2000밀리초, 10밀리초 단위로 반올림 200
size auto 또는 너비와 높이가 각각 16의 양의 배수인 WIDTHxHEIGHT auto

size는 완성된 각 프레임의 크기를 나타냅니다. 프레임 수와 크기, 애니메이션 수를 지정할 때는 모델의 크기 제한과 요청 전체에 허용되는 총 픽셀 수를 모두 지켜야 합니다. 요청이 이 한도를 초과하면 frame_count, 프레임 크기 또는 n을 줄이세요. auto를 사용하면 API가 모델의 제한 범위 내에서 프레임 크기를 선택합니다.

응답에는 완성된 애니메이션이 포함됩니다. 각 결과의 b64_json 값을 base64로 디코딩하고 바이트를 확장자가 .gif인 파일로 저장하세요. GIF 출력에서는 스트리밍, 중간 이미지, 사용자 지정 output_compression을 지원하지 않습니다. frame_count와 frame_duration_ms는 GIF 출력에만 사용하세요.

다음은 Sunburst가 frame_count=9와 frame_duration_ms=200 설정으로 생성한 등불 애니메이션입니다. 원숭이는 1.8초 후에 처음 자세로 돌아갑니다.

제한 사항

GPT Image 모델은 강력하고 다양한 용도로 활용할 수 있지만, 이미지를 생성할 때 다음과 같은 제한 사항이 있습니다.

  • 지연 시간: 복잡한 프롬프트를 처리하는 데 최대 2분이 걸릴 수 있습니다.
  • 텍스트 렌더링: 성능이 크게 개선되었지만, 텍스트를 정확한 위치에 배치하거나 선명하게 표현하는 데 여전히 어려움이 있을 수 있습니다.
  • 일관성: 일관된 이미지를 생성할 수 있지만, 여러 차례 생성할 때 반복해서 등장하는 캐릭터나 브랜드 요소의 모습이 달라질 수 있습니다.
  • 구도 제어: 지시를 따르는 능력이 개선되었지만, 구도가 정해져 있거나 배치가 중요한 이미지에서는 요소를 원하는 위치에 정확히 놓기 어려울 수 있습니다.

콘텐츠 검토

모든 프롬프트와 생성된 이미지는 OpenAI의 콘텐츠 정책에 따라 필터링됩니다.

GPT Image 모델로 이미지를 생성할 때는 moderation 매개변수로 필터링 강도를 조정할 수 있습니다. 이 매개변수는 두 가지 값을 지원합니다.

  • auto(기본값): 일부 연령대에 부적절할 수 있는 특정 범주의 콘텐츠 생성을 제한하기 위한 표준 필터링을 적용합니다.
  • low: 제한이 더 적은 필터링을 적용합니다.

차단된 요청 및 기타 오류 처리

이미지 생성 실패는 다른 API 오류와 같은 방식으로 처리하세요. HTTP 상태 코드나 SDK 예외 유형을 확인하고 요청 ID를 로그에 기록하세요. 인증, 할당량, 요청 한도, 서버 오류에 대한 자세한 내용은 오류 코드 가이드를 참고하세요. 일시적인 요청 한도 초과나 서버 오류가 발생하면 백오프를 적용해 재시도하세요. 할당량 오류나 요청을 수정해야 하는 이미지 생성 사용자 오류는 자동으로 재시도하지 마세요.

사용자가 직접 해결할 수 있는 일부 이미지 생성 오류에서는 error.type = "image_generation_user_error"가 반환될 수 있습니다. 이런 오류가 발생하면 프롬프트나 입력 이미지를 수정하기 전에는 자동으로 재시도하지 마세요. 코드에서 오류를 구분할 때는 안정적인 식별 기준인 error.code를 사용하세요.

error.code = "moderation_blocked"인 경우 오류에 error.moderation_details 객체가 포함될 수도 있습니다.

{
  "error": {
    "type": "image_generation_user_error",
    "code": "moderation_blocked",
    "moderation_details": {
      "moderation_stage": "input",
      "categories": ["harassment"]
    }
  }
}

moderation_details 객체는 내부 분류기의 레이블이나 점수를 공개하지 않고도 디버깅에 필요한 개략적인 정보를 제공합니다.

moderation_stage에는 다음 값이 올 수 있습니다.

  • input: 프롬프트나 요청 입력으로 인해 차단되었습니다.
  • output: 생성된 이미지로 인해 차단되었거나 후속 출력 검토 단계에서 차단되었습니다.
  • unknown: 차단이 어느 단계에서 발생했는지 판단하기 어려울 때 드물게 반환되는 값입니다.

categories에는 대략적인 범주를 나타내는 공개 레이블이 들어갑니다. 예를 들어 harassment, self-harm, sexual, violence 등의 값이 반환될 수 있습니다.

대부분의 앱에서는 최종 사용자에게 표시하는 기본 메시지에 일반적인 안내만 담으세요. moderation_details는 개발자 로그, 지원 워크플로우, 분석 또는 간단한 수정 안내에 활용하세요.

콘텐츠 검토로 차단된 이미지 생성 오류 처리하기
import OpenAI from "openai";

const openai = new OpenAI();

try {
  // The same error handling pattern applies to image generation requests,
  // image edits, and Responses API tool calls that generate images.
  await openai.images.generate({
    model: "gpt-image-2.5-sunburst",
    prompt: "Create a poster humiliating my coworker with insulting captions",
  });
} catch (error) {
  if (error?.code !== "moderation_blocked") {
    throw error;
  }

  const moderationDetails = error.error?.moderation_details;
  const categories = moderationDetails?.categories ?? [];
  const stage = moderationDetails?.moderation_stage;

  let hint =
    "This request could not be completed because it did not meet safety requirements.";

  if (categories.includes("harassment")) {
    hint =
      "Try removing abusive or targeting language and focus on neutral visual details instead.";
  } else if (stage === "input") {
    hint =
      "Try revising the prompt or input images and submit the request again.";
  } else if (stage === "output") {
    hint =
      "The generated result was blocked by a safety check. Try changing the prompt and generating again.";
  }

  console.error("Image generation blocked", {
    request_id: error?.requestID,
    code: error?.code,
    moderation_details: moderationDetails,
  });

  console.log(hint);
}

지원 모델

Responses API에서 이미지를 생성할 때 gpt-5 및 이후 모델은 일반적으로 이미지 생성 도구를 지원합니다. 사용하려는 모델이 이미지 생성 도구를 지원하는지 해당 모델의 상세 페이지에서 확인하세요.

비용 및 지연 시간

GPT-Image-2.6 비용

이미지 출력 요금은 과금 대상 토큰 100만 개당 $30입니다. 이미지 한 장의 출력 비용은 계산기로 추정하세요.

텍스트와 이미지의 100만 토큰당 단가는 이미지 생성 요금표를 참고하세요.

마크업을 활용한 편집에는 다른 편집과 같은 토큰 단가가 적용되며 추가 요금은 없습니다. SVG 출력의 경우 참조 이미지에는 이미지 모델의 단가가 적용되고, SVG를 작성하는 데 사용한 토큰에는 작성 모델의 단가가 적용됩니다. 총비용은 각 모델이 사용한 토큰 수에 따라 달라집니다.

GPT-Image-2.5 비용

Responses API 요청에는 이미지 생성 비용 외에 주 모델의 토큰 사용량에 따른 비용도 부과됩니다.

두 GPT-Image-2.5 모델의 토큰 단가는 같습니다. 100만 토큰당 이미지 입력은 $8, 캐시된 이미지 입력은 $2, 이미지 출력은 $30, 텍스트 입력은 $5, 캐시된 텍스트 입력은 $1.25입니다. 요금표를 참고하세요.

응답의 usage에서 프롬프트, 크기, 품질 설정에 따른 토큰 사용량을 확인하세요. 토큰 단가가 같아도 모델과 품질 설정에 따라 사용하는 토큰 수가 달라지므로 이미지 한 장당 비용도 달라질 수 있습니다. 이전 모델의 요금 예시는 이전 GPT Image 모델을 참고하세요.

캐시된 입력 요금

GPT-Image-2 및 GPT-Image-2.5에서 캐시된 입력 요금은 Responses API의 이미지 생성 도구에만 적용됩니다. /v1/images/edits를 비롯해 Images API에 직접 보내는 요청에는 적용되지 않습니다.

캐시된 이미지 생성 입력은 청구 금액에 반영되지만, Responses API 출력에는 캐시된 토큰 수가 포함되지 않습니다. 따라서 응답의 usage로는 캐시 적중 여부를 확인할 수 없습니다.

비용 계산

모델, 품질, 크기를 선택해 출력 토큰 수와 이미지 출력 비용을 추정하세요. GPT-Image-2.6과 GPT-Image-2.5 모두 Sunburst와 Flare에서 low, medium, high, xhigh, max 품질 옵션을 지원합니다. gpt-image-2의 품질 옵션은 low, medium, high입니다. 이미지 출력 토큰당 단가는 같지만, 같은 품질 설정에서도 모델별로 사용하는 토큰 수는 다를 수 있습니다. 비용을 추정할 때는 품질과 크기를 명시적으로 지정하세요. auto를 사용하면 생성된 이미지에 따라 값이 달라집니다.

모델
품질
출력 토큰
823
예상 이미지 출력 비용
US$0.02469

이미지 출력 토큰 100만 개당 30 USD로 계산한 이미지 한 장당 비용입니다. 텍스트·이미지 입력 토큰과 스트리밍 중에 전송되는 중간 이미지의 비용은 제외됩니다.

중간 이미지 비용

이미지 생성 결과를 스트리밍할 때 partial_images 매개변수를 사용하면 중간 이미지 한 장당 이미지 출력 토큰 100개가 추가로 부과됩니다.

이전 GPT Image 모델

아래 내용은 Sunburst와 Flare 이전 모델에 적용됩니다. 새로 연동할 때는 GPT-Image-2.6 Sunburst 또는 Flare를 사용하세요.

GPT-Image-2 설정 및 입력 충실도

gpt-image-2에서는 아래 제약 조건을 충족하는 해상도라면 size 매개변수에 지정할 수 있습니다. 일반적으로 정사각형 이미지가 가장 빠르게 생성됩니다.

자주 사용하는 크기
  • 1024x1024(정사각형)

  • 1536x1024(가로형)

  • 1024x1536(세로형)

  • 2048x2048(2K 정사각형)

  • 2048x1152(2K 가로형)

  • 3840x2160(4K 가로형)

  • 2160x3840(4K 세로형)

  • auto(기본값)

크기 제약 조건
  • 가장 긴 변의 길이는 3840px 이하여야 합니다.

  • 두 변의 길이는 각각 16px의 배수여야 합니다.

  • 긴 변과 짧은 변의 길이 비율은 3:1을 초과할 수 없습니다.

  • 총 픽셀 수는 655,360개 이상 8,294,400개 이하여야 합니다.

품질 옵션
  • low
  • medium
  • high
  • auto(기본값)

이미지 입력 충실도

input_fidelity 매개변수는 이미지 편집이나 참조 이미지를 사용하는 워크플로우에서 모델이 입력 이미지의 세부 요소를 얼마나 충실하게 보존할지 제어합니다. gpt-image-2에서는 이 매개변수를 생략하세요. 모델이 모든 이미지 입력을 자동으로 높은 충실도로 처리하므로 API에서 이 설정을 변경할 수 없습니다.

gpt-image-2는 항상 높은 충실도로 이미지 입력을 처리하므로 참조 이미지를 포함한 편집 요청에서는 이미지 입력 토큰 수가 늘어날 수 있습니다. 비용에 미치는 영향은 비전 비용을 참고하세요.

이전 모델 요금 예시

gpt-image-2 이전 모델

gpt-image-2 이전의 GPT Image 모델은 이미지 전용 토큰을 먼저 만든 다음 이미지를 생성합니다. 지연 시간과 최종 비용은 모두 이미지를 렌더링하는 데 필요한 토큰 수에 비례합니다. 이미지 크기가 크거나 품질 설정이 높을수록 더 많은 토큰을 사용합니다.

생성되는 토큰 수는 이미지의 크기와 품질에 따라 달라집니다.

품질 정사각형(1024×1024) 세로형(1024×1536) 가로형(1536×1024)
낮음 272토큰 408토큰 400토큰
중간 1056토큰 1584토큰 1568토큰
높음 4160토큰 6240토큰 6208토큰

입력 토큰도 비용에 포함해야 합니다. 프롬프트에는 텍스트 토큰이 사용되며, 이미지를 편집할 때는 입력 이미지에 대한 이미지 토큰도 사용됩니다. gpt-image-2는 모든 이미지 입력을 높은 충실도로 처리하므로 참조 이미지를 포함한 편집 요청에서 입력 토큰을 더 많이 사용할 수 있습니다.

현재 텍스트 및 이미지 토큰 단가는 요금 페이지에서 확인하세요. 이미지 출력 비용을 추정하려면 비용 계산을 참고하세요.

최종 비용은 다음 항목의 비용을 합산한 금액입니다.

  • 텍스트 입력 토큰
  • 편집 엔드포인트를 사용하는 경우 이미지 입력 토큰
  • 이미지 출력 토큰

이전 모델의 출력 비용

gpt-image-2는 수천 가지 해상도를 지원합니다. 아래 표에는 비교를 위해 이전 GPT Image 모델에서 사용한 것과 같은 크기를 표시했습니다. GPT-Image-1.5, GPT-Image-1, GPT-Image-1 Mini의 기존 이미지 한 장당 출력 요금도 함께 표시했습니다. 요청의 총비용을 추정할 때는 텍스트 및 이미지 입력 토큰 비용도 포함하세요.

gpt-image-1은 2026년 10월 23일에 서비스가 종료되었습니다. 아래 요금은 과거 요금과 비교할 수 있도록 남겨 두었습니다. 대체 모델은 지원 중단 안내를 참고하세요.

같은 품질 설정에서도 가로와 세로의 길이가 다른 큰 이미지를 생성할 때 더 작은 이미지나 정사각형 이미지보다 출력 토큰이 적게 사용되는 경우가 있습니다.

모델

품질

1024 × 10241024 × 15361536 × 1024

GPT-Image-2


다른 크기도 지원
낮음$0.006$0.005$0.005
중간$0.053$0.041$0.041
높음$0.211$0.165$0.165

GPT-Image-1.5

낮음$0.009$0.013$0.013
중간$0.034$0.05$0.05
높음$0.133$0.2$0.2

GPT-Image-1

낮음$0.011$0.016$0.016
중간$0.042$0.063$0.063
높음$0.167$0.25$0.25

GPT-Image-1 Mini

낮음$0.005$0.006$0.006
중간$0.011$0.015$0.015
높음$0.036$0.052$0.052