GPT-Image-2 · 이미지-이미지
curl --request POST \
--url https://api.gravitex.ai/v1/images/edits \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.gravitex.ai/v1/images/edits"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.gravitex.ai/v1/images/edits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/images/edits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/edits"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/images/edits")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/images/edits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_bodyimage-2
GPT-Image-2 · 이미지-이미지
GPT-Image-2 Flare / Sunburst · POST /v1/images/edits
POST
/
v1
/
images
/
edits
GPT-Image-2 · 이미지-이미지
curl --request POST \
--url https://api.gravitex.ai/v1/images/edits \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.gravitex.ai/v1/images/edits"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.gravitex.ai/v1/images/edits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/images/edits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/edits"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/images/edits")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/images/edits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_body소개
GPT-Image-2는 POST /v1/images/edits로 참조 이미지를 편집하고 부분 리터치, 스타일 전환 및 다중 참조를 처리합니다. 변경 및 유지할 내용을 명시하세요. 입력은 항상 높은 충실도로 처리하므로 input_fidelity는 생략하며 영역 편집은 mask를 사용합니다.인증
string
필수
Bearer $GRAVITEX_API_KEY
string
필수
application/json / multipart/form-data
요청 매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
model | string | 필수: gpt-image-2 |
prompt | string | 필수 생성 설명 또는 편집 지시, 최대 32,000자 |
quality | string | auto / low / medium / high; 기본 auto |
size | string | auto 또는 WxH, 너비와 높이는 16의 배수. 모델 크기와 픽셀 제한 적용 |
n | integer | 1–10; 기본 1 |
background | string | auto / opaque / transparent; 투명 래스터 출력은 png 또는 webp |
output_format | string | png / jpeg / webp; 기본 png |
output_compression | integer | 0–100, 기본 100; JPEG / WebP 전용 |
moderation | string | auto / low; 기본 auto |
safety_identifier | string | 안정적인 해시 사용자 식별자, 최대 128자; user 대체 |
stream | boolean | 기본 false. true이면 단일 JSON 대신 SSE 이벤트를 읽습니다 |
partial_images | integer | 래스터 스트리밍 전용, 0–3, 기본 0. 요청한 미리보기 수보다 적게 반환될 수 있습니다 |
images / image[] | array / file | JSON 필수: images: [{"image_url": "HTTPS URL 또는 base64 data URI"}]로 하나 이상의 참조 이미지 전달. multipart는 image[] 파일 사용 |
mask | object / file | 첫 번째 참조 이미지와 크기가 같고 alpha 채널이 있는 PNG 마스크. 완전히 투명한 영역이 편집 대상입니다. 첫 이미지에만 적용되며 markup와 함께 사용 불가 |
images / mask
JSON은images: [{"image_url": "https://..."}] 또는 base64 data URI를 사용합니다. multipart는 image[]로 파일을 업로드합니다. 플랫폼 연동 설명에 따르면 JSON 편집은 multipart로 변환되며 OpenAI file_id 참조는 지원하지 않습니다.
편집 영역은 mask로 지정합니다. JSON은 image_url, multipart는 파일을 사용합니다.
요청 예시
예시는 터미널 환경 변수 GRAVITEX_API_KEY에서 플랫폼 토큰을 읽습니다. 업로드 시 curl -F가 Content-Type과 boundary를 자동 생성하므로 multipart/form-data 헤더를 직접 고정하지 마세요.접근 가능한 HTTPS URL 또는 base64 data URI를 사용하세요. multipart 예시는 공식 이미지를 먼저 다운로드합니다. 플랫폼 연동 설명은 OpenAI file_id 참조를 지원하지 않습니다.
JSON
curl https://api.gravitex.ai/v1/images/edits \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Change the vase to blue. Keep everything else unchanged.",
"quality": "medium",
"size": "1024x1024",
"images": [
{
"image_url": "https://developers.openai.com/images/platform/guides/image-prompting/kitchen.webp"
}
]
}'
multipart/form-data
curl --fail --location "https://developers.openai.com/images/platform/guides/image-prompting/kitchen.webp" -o kitchen.webp
curl https://api.gravitex.ai/v1/images/edits \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-F "model=gpt-image-2" \
-F "prompt=Change the vase to blue. Keep everything else unchanged." \
-F "image[]=@kitchen.webp"
마스크 부분 편집
curl https://api.gravitex.ai/v1/images/edits \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Add a pink flamingo float in the masked pool area. Keep the rest of the room unchanged.",
"images": [
{
"image_url": "https://cdn.openai.com/API/docs/images/sunlit_lounge.png"
}
],
"mask": {
"image_url": "https://cdn.openai.com/API/docs/images/mask.png"
},
"quality": "medium"
}'
스트리밍
curl --no-buffer https://api.gravitex.ai/v1/images/edits \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Change the vase to blue. Keep everything else unchanged.",
"quality": "medium",
"size": "1024x1024",
"stream": true,
"partial_images": 1,
"images": [
{
"image_url": "https://developers.openai.com/images/platform/guides/image-prompting/kitchen.webp"
}
]
}'
제한 및 참고 사항
size 기본값은 auto입니다. WxH의 각 변은 16의 배수이며 비율은 1:3–3:1 범위입니다. image-2 가이드는 최대 변 3840px, 총 픽셀 655,360–8,294,400을 명시합니다. 공식 Images API JSON 편집은 PNG, JPEG, WebP 참조 1–16장, 각 50MB 미만을 허용합니다. mask는 첫 참조와 크기가 같은 alpha 채널 PNG입니다. 투명 영역은 편집을 유도하지만 픽셀 단위 경계를 보장하지는 않습니다. 게이트웨이가 검증하지 않아도 상위 서비스 제한은 적용됩니다. quality는 auto / low / medium / high이며 기본 auto입니다. image-2 투명 배경은 미리보기 기능이며 사용 가능 시 PNG 또는 WebP와 background=transparent를 사용합니다. 2.6 complexity, GIF, SVG 또는 2.5 markup 지원을 그대로 적용하지 않습니다.응답 예시
다음은 비스트리밍 응답 구조 예시입니다. 이미지 데이터와 토큰 수는 실제 생성 결과가 아닙니다. b64_json을 디코딩하여 해당 형식으로 저장하고 Base64 텍스트를 이미지 파일로 직접 저장하지 마세요.{
"created": 1794268800,
"data": [
{
"b64_json": "<BASE64_IMAGE_DATA>"
}
],
"usage": {
"input_tokens": 100,
"output_tokens": 824,
"total_tokens": 924
}
}
응답 및 과금
비스트리밍 예시는 b64_json으로 이미지를 반환합니다. response_format=url로 이미지 링크를 기대하지 마세요. 같은 토큰 단가가 이미지당 같은 비용을 뜻하지 않으므로 실제 usage를 확인하세요. data[].b64_json과 usage를 반환합니다. 이미지는 Base64 디코딩 후 저장하세요. 아래는 OpenAI 표준 요금이며 GravitexAI 견적이 아닙니다. 캐시 요금은 공식 참고 가격입니다. 가이드에 따르면 GPT Image 2 / 2.5 캐시 입력 할인은 Responses 이미지 도구에만 적용되며 직접 Images API 호출(edits 포함)에는 적용되지 않습니다. 플랫폼 결제는 콘솔 기준입니다.| 유형 | USD / 1M tokens |
|---|---|
| 텍스트 입력 | $5.00 |
| 캐시 텍스트 입력 | $1.25 |
| 이미지 입력 | $8.00 |
| 캐시 이미지 입력 | $2.00 |
| 이미지 출력 | $30.00 |
