GPT Image 2 API: 전체 가이드(Python, Node.js, Curl)
2026/04/23

GPT Image 2 API: 전체 가이드(Python, Node.js, Curl)

GPT Image 2 API 통합 가이드를 완료하세요. 인증, 매개변수, Python/Node.js 샘플, 이미지 편집, 배치 생성, 오류 처리, 비용 팁.

GPT Image 2를 자체 제품, 자동화 파이프라인 또는 배치 생성 워크플로에 통합하려는 경우 API가 유일한 방법입니다. 이 가이드에서는 인증, 매개변수, Python 및 Node.js에 대한 코드 샘플, 이미지 편집, 오류 처리, 비용 최적화 등 필요한 모든 것을 다룹니다.

결국에는 실제 프로덕션 트래픽을 처리하는 GPT Image 2 통합이 작동하게 됩니다.

전제 조건

시작하기 전에:

  1. OpenAI 개발자 계정 (platform.openai.com)
  2. 자금이 조달된 청구 계정(이미지 생성이 지불되고 새 계정에 평가판 크레딧이 제공될 수 있음)
  3. API 키 - platform.openai.com/api-keys에서 생성하세요.
  4. 사용하려는 SDK에 따라 Python 3.8+ 또는 Node.js 18+

프로덕션 팀을 위한 안정적인 API 액세스

팀이 직접 OpenAI 액세스가 불안정한 지역에 있거나 장애 조치, 청구 집계 및 SLA 보장을 처리하는 단일 릴레이가 필요한 경우support@gpt-image2.art에 이메일을 보내 관리형 GPT Image 2 API 키를 얻을 수도 있습니다. 계전기는 동일한 gpt-image-2 모델 이름, 아래 설명된 동일한 매개변수 및 동일한 응답 형식을 지원하므로 코드를 변경할 필요가 없습니다.

1단계: SDK 설치

Python

pip install openai pillow

pillow는 선택 사항이며 반환된 이미지에 대해 사후 처리를 수행하려는 경우에만 필요합니다.

Node.js

npm install openai
# or
pnpm add openai

2단계: API 키 구성

API 키를 하드 코딩하지 마십시오. 환경 변수를 사용하십시오.

.env 파일을 만듭니다.

OPENAI_API_KEY=sk-proj-your-key-here

그런 다음 이를 코드에 로드합니다(Python는 python-dotenv를 사용하고, Node.js는 기본적으로 .env를 로드하거나 dotenv를 사용하여 로드합니다).

3단계: 첫 번째 이미지 생성

Python — 최소한의 작업 예

import os
from openai import OpenAI
import base64

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

result = client.images.generate(
    model="gpt-image-2",
    prompt="A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.",
    size="1024x1024",
    quality="medium",
    n=1,
)

# Image is returned as base64
image_b64 = result.data[0].b64_json
with open("output.png", "wb") as f:
    f.write(base64.b64decode(image_b64))

print("Saved to output.png")

Node.js — 최소한의 작업 예

import OpenAI from 'openai';
import fs from 'fs';

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const result = await client.images.generate({
  model: 'gpt-image-2',
  prompt:
    'A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.',
  size: '1024x1024',
  quality: 'medium',
  n: 1,
});

const imageB64 = result.data[0].b64_json;
fs.writeFileSync('output.png', Buffer.from(imageB64, 'base64'));
console.log('Saved to output.png');

Curl — 쉘 스크립트 및 빠른 테스트용

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A white stainless steel water bottle on a beige linen tablecloth.",
    "size": "1024x1024",
    "quality": "medium",
    "n": 1
  }'

모든 매개변수 설명

매개변수유형필수설명
model문자열항상 gpt-image-2
prompt문자열이미지 설명; 최대 32,000자
size문자열아니종횡비(1:1, 16:9, 9:16 등) 또는 명시적 픽셀(1024x1024, 1536x1024, 1024x1536)
resolution문자열아니1K(~1 MP) / 2K(~4 MP) / 4K(~8 MP) — 명시적인 해상도 제어를 위해 일부 릴레이에서 사용
quality문자열아니low, medium, high — 출력 토큰 수 및 비용에 영향을 미칩니다
n정수아니요청당 이미지 수, 1-10
image_urls배열아니이미지 편집/이미지 대 이미지 (each ≤50MB, JPEG / PNG / WEBP)를 위한 1-16개의 참조 이미지
output_format문자열아니png(기본값), jpeg, webp
output_compression정수아니0-100, jpeg/webp에만 해당
background문자열아니알파 채널이 있는 PNG용 transparent
moderation문자열아니더 빠르고 더 엄격한 필터링을 위한 auto(기본값) 또는 low
callback_url문자열아니완료 콜백을 수신하기 위한 HTTPS 엔드포인트(비동기 릴레이에서 사용)
user문자열아니OpenAI의 남용 모니터링을 위한 안정적인 사용자 ID

이미지 편집 — 킬러 기능

GPT Image 2의 감독 편집은 확산 모델에 비해 API의 가장 큰 장점입니다. 기존 이미지와 변경할 내용을 설명하는 메시지를 업로드합니다.

Python

result = client.images.edit(
    model="gpt-image-2",
    image=open("original.png", "rb"),
    prompt="Change the bottle's color from white to navy blue. Keep everything else identical.",
    size="1024x1024",
    quality="medium",
)

with open("edited.png", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))

Node.js

import { toFile } from 'openai';

const result = await client.images.edit({
  model: 'gpt-image-2',
  image: await toFile(fs.createReadStream('original.png'), 'original.png'),
  prompt:
    "Change the bottle's color from white to navy blue. Keep everything else identical.",
  size: '1024x1024',
  quality: 'medium',
});

프롬프트에서**"다른 모든 것을 동일하게 유지하세요"**라는 문구는 매우 중요합니다. 이 문구가 없으면 모델이 관련되지 않은 영역을 재생성할 수 있습니다.

속도 제한이 없는 동시성을 사용한 일괄 생성

순진하게 Promise.all() 100개의 요청을 처리하지 마십시오. 속도 제한에 도달하게 됩니다. 제한된 동시성을 사용합니다.

Python — 세마포어와 함께 asyncio 사용

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])

async def generate_one(prompt: str, semaphore: asyncio.Semaphore):
    async with semaphore:
        result = await client.images.generate(
            model="gpt-image-2",
            prompt=prompt,
            size="1024x1024",
            quality="medium",
        )
        return result.data[0].b64_json

async def batch_generate(prompts: list[str], concurrency: int = 5):
    semaphore = asyncio.Semaphore(concurrency)
    tasks = [generate_one(p, semaphore) for p in prompts]
    return await asyncio.gather(*tasks)

results = asyncio.run(batch_generate(["prompt 1", "prompt 2", ...]))

Node.js — p-limit 사용

import pLimit from 'p-limit';

const limit = pLimit(5); // 5 concurrent requests

const tasks = prompts.map((prompt) =>
  limit(async () => {
    const result = await client.images.generate({
      model: 'gpt-image-2',
      prompt,
      size: '1024x1024',
      quality: 'medium',
    });
    return result.data[0].b64_json;
  })
);

const results = await Promise.all(tasks);

프로덕션 오류 처리

API는 여러 가지 독특한 방식으로 실패할 수 있습니다. 각각 처리:

from openai import OpenAI, APIError, RateLimitError, APIConnectionError, BadRequestError

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

def safe_generate(prompt: str, max_retries: int = 3):
    for attempt in range(max_retries):
        try:
            result = client.images.generate(
                model="gpt-image-2",
                prompt=prompt,
                size="1024x1024",
                quality="medium",
            )
            return result.data[0].b64_json

        except RateLimitError:
            # 429 — wait and retry
            wait = (2 ** attempt) * 5
            print(f"Rate limited; waiting {wait}s")
            time.sleep(wait)

        except BadRequestError as e:
            # 400 — usually a content policy violation, don't retry
            print(f"Bad request: {e}")
            return None

        except APIConnectionError:
            # network blip — retry
            time.sleep(2 ** attempt)

        except APIError as e:
            # 500-level — retry with backoff
            time.sleep(2 ** attempt)

    return None

비용 최적화 — 구체적인 전술

1. 적절한 품질 등급을 선택하세요.

계층이미지당 비용(1024×1024)사용 시기
low~$0.011초안, A/B 테스트, 신속한 반복
medium~$0.042대부분의 프로덕션 사용 사례
high~$0.167최종 히어로 이미지, 인쇄 해상도 자산

대부분의 팀은 high를 기본값으로 설정하여 초과 지불합니다. 작업의 ~95%에는 medium를 사용하세요.

2. images.generate가 아닌 images.edit로 반복합니다.

지시된 편집 비용은 한 세대와 동일하지만5번이 아닌 1번의 시도로 올바른 결과를 얻습니다. 다중 라운드 개선의 경우 비용이 5배 절감됩니다.

3. 프롬프트가 반복되면 결정적으로 캐시합니다.

동일한 프롬프트를 반복적으로 생성하는 경우(예: 사용자 대상 제품 미리보기) hash(prompt + size + quality)로 캐시하고 CDN에서 제공하세요.

4. 신속한 탐색을 위해 low를 사용한 후 업그레이드

일반적인 작업 흐름:

# Step 1: try 5 prompt variants at low quality ($0.05 total)
candidates = [generate(p, quality="low") for p in variants]

# Step 2: pick the best, regenerate at high quality
best_prompt = pick_winner(candidates)
final = generate(best_prompt, quality="high")  # $0.167

총 비용: 5개 변형을 모두 높은 수준으로 실행하는 경우 ~$0.84 대신 ~$0.22입니다.

5. OpenAI 대시보드에서 하드 지출 한도 설정

버그가 발생하지 않도록 코드를 신뢰하지 마십시오. platform.openai.com/account/billing/limits.에서 사용 한도를 설정하십시오.

스트리밍 생성 상태(선택 사항)

장기 실행 일괄 처리의 경우 진행 상황을 표시할 수 있습니다. 이미지 생성 엔드포인트는 스트리밍되지 않지만 비동기 진행 보고에서 배치를 래핑할 수 있습니다.

let completed = 0;
const tasks = prompts.map((prompt) =>
  limit(async () => {
    const result = await client.images.generate({ /* ... */ });
    completed++;
    onProgress({ completed, total: prompts.length });
    return result.data[0].b64_json;
  })
);

일반적인 통합 실수

실수무슨 일이 일어나는가수정
하드 코딩 API 키Git을 통한 키 유출항상 환경 변수 사용
result.data[0].url에 저장필드가 항상 존재하는 것은 아닙니다(response_format에 따라 다름)b64_json를 사용하여 로컬로 디코딩
편집을 위해 대용량 이미지 보내기느리고 비싸다업로드하기 전에 1024×1024로 크기 조정
400 오류 무시Burns는 수정 불가능한 오류에 대해 재시도4xx(재시도 안 함)와 5xx(재시도) 구별
속도 제한 없음 처리버스트가 429 캐스케이드를 트리거합니다세마포 제한 동시성 사용
일반 텍스트로 전체 프롬프트 로깅사용자가 제공한 경우 개인정보 침해로깅 전 해시 또는 수정

제작 준비 체크리스트

GPT Image 2 통합을 배송하기 전에:

  • 환경 변수의 API 키, 코드나 로그에는 없음
  • 사용 사례에 적합한 품질 계층(기본값은 medium)
  • 일괄 작업에 대한 제한된 동시성 (ZXQ1QXZ / ZXQ2QXZ)
  • 오류 처리는 4xx와 5xx를 구별합니다.
  • OpenAI 대시보드에 설정된 하드 지출 한도
  • 콘텐츠 정책 위반으로 인해 사용자 입력이 삭제되었습니다.
  • 자체 저장소에 저장된 출력(OpenAI URL에 의존하지 않음)
  • 반복 프롬프트를 위한 캐시 레이어
  • 이미지당 비용 및 오류율 모니터링

작업 폴링을 통한 비동기 생성(고동시성 설정용)

대용량 프로덕션 워크로드의 경우 일부 GPT Image 2 릴레이는비동기 작업 모델을 제공합니다. 즉, 요청을 제출하고 작업 ID를 즉시 돌려받으며 완료를 위해 폴링하거나 콜백을 받습니다. 이렇게 하면 대규모 배치에서 HTTP 시간 초과가 방지됩니다.

일반적인 비동기 흐름:

# 1. Submit request → get task_id
response = client.images.generate(
    model="gpt-image-2",
    prompt="...",
    size="1024x1024",
    quality="high",
    callback_url="https://your-app.com/api/image-callback",  # optional
)
task_id = response.id

# 2. Poll task status every few seconds
while True:
    status = client.images.retrieve(task_id)
    if status.status == "completed":
        image_url = status.data[0].url
        break
    elif status.status == "failed":
        raise Exception(status.error)
    time.sleep(3)

비동기 모드는 다음과 같은 경우에 이상적입니다.

  • 하룻밤 사이에 수백 가지의 제품 변형을 생성하는 전자상거래 매장
  • A/B 프롬프트 테스트를 실행하는 마케팅 팀
  • 사용자가 이미지를 요청하고 나중에 다시 확인하는 앱(알림)

GPT Image 2 API FAQ

Q: GPT Image 2 API 모델명이 무엇인가요? gpt-image-2. 모든 요청에 ​​정확히 이 문자열을 사용하세요.

Q: GPT Image 2 API는 이미지 간/이미지 편집을 지원합니까? 그렇습니다. image 매개변수와 함께 images.edit를 사용하거나 이를 지원하는 릴레이에 image_urls(1-16 참조 이미지 배열)를 전달합니다. 참조 이미지는 캐릭터 일관성, IP 디자인, 제품 사진 촬영에 필수적입니다.

Q: GPT Image 2 API는 무료인가요? 아니요, 토큰 단위로 지급됩니다. 새로운 OpenAI 계정은 평가판 크레딧을 받을 수 있습니다. 일부 타사 릴레이는 무료 평가판 크레딧을 제공합니다.

Q: GPT Image 2 API의 이미지당 비용은 얼마입니까? 낮음/중간/고화질에서 1024×1024 이미지당 각각 약 $0.011 / $0.042 / $0.167입니다. 크기가 크고 참조 이미지가 클수록 비용이 더 많이 듭니다.

Q: 프롬프트의 최대 길이는 얼마입니까? 최대 32,000자입니다. 실제로 1,500자를 초과하는 프롬프트는 수익 감소를 보여줍니다.

Q: API를 사용하여 투명한 배경 PNG를 어떻게 생성합니까? background: "transparent"output_format: "png"를 설정합니다.

Q: GPT Image 2는 어떤 해상도를 지원합니까? 공통 사전 설정: 1024x1024, 1536x1024, 1024x1536. 일부 계전기는 명시적인 제어를 위해 1K / 2K / 4K 해상도 수준을 노출합니다.

Q: 비율 제한은 무엇입니까? OpenAI 등급에 따라 다릅니다. 무료 등급에는 가장 엄격한 제한이 있습니다. 사용 계층은 시간이 지남에 따라 확장됩니다. 한도 미만으로 유지하려면 제한된 동시성 (ZXQ0QXZ / ZXQ1QXZ)를 사용하세요.

Q: GPT Image 2 API 오류를 어떻게 처리합니까? 4xx(재시도하지 않음 - 일반적으로 콘텐츠 정책 위반)와 5xx(지수 백오프로 재시도)를 구별합니다. 위의 오류 처리 섹션을 참조하세요.

Q: 기내 GPT Image 2 API 요청을 취소할 수 있나요? 동기화 요청의 경우 연결을 닫는 것만 가능합니다. 비동기 가능 릴레이는 작업이 대기열에 있는 동안 작동하는 cancel 엔드포인트를 노출합니다.

Q: API는 스트리밍을 지원합니까? 이미지 생성 자체는 스트리밍되지 않습니다(마지막에 전체 이미지를 얻습니다). 진행률 UI의 경우 사용자 정의 진행률 보고자로 배치를 래핑합니다(위의 "스트리밍 생성 상태" 참조).

작동하는 예제 앱을 원하시나요?

전체 참조 구현(Next.js + GPT Image 2 + Stripe + 이미지 저장소)을 보려면 실제 출력을 보여주는 gpt-image2.art탐색 페이지를 살펴보세요.

SLA와 함께 관리형 API 키가 필요합니까?

계정 설정, 청구, 지역 문제 및 속도 제한 조정을 건너뛰고 싶다면support@gpt-image2.art로 이메일을 보내 관리형 GPT Image 2 API 키를 구매할 수 있습니다. 우리는 다음을 제공합니다:

  • 장애 조치 기능이 내장된 안정적인 API 엔드포인트 1개
  • 현지 통화로 집계된 청구서(USD 전신 송금이 필요하지 않음)
  • 비동기 작업 모드 + 즉시 사용 가능한 콜백 지원
  • 10,000개 이상의 이미지를 생성하는 팀을 위한 볼륨 가격 /month
  • 공식 API와 동일한 gpt-image-2 모델 이름 및 매개변수 사양 — 드롭인 호환

추가 자료

Free to try

Generate your first image with GPT Image 2 — right now

Reliable non-Latin text rendering, directed editing, and 50+ ready-to-use prompts. No downloads — just open in your browser.