# n8n GPT Image 2.5 연동: 노드 한계부터 파일 저장까지

> n8n OpenAI 노드의 GPT Image 2.5는 품질 high, 크기 1536px까지이고 사용량도 안 남지만 과금됩니다. xhigh·2K 이상·투명 배경은 HTTP Request로 부르세요.

- URL: https://blog.laozhang.ai/ko/posts/gpt-image-2-5-n8n
- Published: 2026-09-21
- Updated: 2026-09-25
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ko/about)
- Topic: API 가이드
- Tags: GPT Image 2.5, n8n, 이미지 자동화, OpenAI API, HTTP Request

---
n8n에서 GPT Image 2.5를 가장 빨리 붙이는 방법은 기본 OpenAI 노드의 **Generate an Image** 작업에 모델 ID `gpt-image-2.5-flare` 또는 `gpt-image-2.5-sunburst`를 직접 입력하는 것입니다. 생성된 이미지는 바이너리 필드 `data`로 나오므로 Google Drive 업로드나 메일 첨부 노드에 그대로 넘길 수 있습니다. 대신 이 노드에서 고를 수 있는 품질은 `high`까지, 크기는 1024x1024 · 1024x1536 · 1536x1024 세 가지뿐이고, API 응답에 들어 있는 토큰 사용량(`usage`)은 노드 안에서 버려집니다.

판단 기준은 이렇습니다. 2.5에서 새로 생긴 `xhigh`·`max`·`auto` 품질, 2K·4K 같은 사용자 지정 크기, 생성 단계의 투명 배경이나 JPEG·WebP 출력, 호출별 사용량 기록 가운데 하나라도 필요하면 **HTTP Request** 노드로 Images API를 직접 부르고 **Convert to File**로 파일을 만드세요. 넷 다 필요 없다면 OpenAI 노드로 충분합니다.

비용도 먼저 짚어 둡니다. n8n을 거쳐도 API 호출은 OpenAI 계정에 토큰 단위로 과금되며, 노드 화면에 사용량이 보이지 않는다고 무료로 처리된 것이 아닙니다. 인터넷의 「무료 생성기」는 웹 서비스이고, n8n 자동화에 쓰는 API와는 과금 구조가 다릅니다.

## OpenAI 노드와 HTTP Request에서 지정할 수 있는 항목

GPT Image 2.5에는 `gpt-image-2.5-flare`와 `gpt-image-2.5-sunburst` 두 모델 ID가 있고, 둘 다 `/v1/images/generations`(생성)와 `/v1/images/edits`(편집)를 지원합니다. `gpt-image-2.5`라는 ID는 없으므로 이 문자열만 넣으면 모델을 찾지 못합니다. 두 모델 중 무엇을 고를지는 [GPT Image 2.5 Flare와 Sunburst 비교](https://blog.laozhang.ai/ko/posts/gpt-image-2-5-sunburst-vs-flare)에서 따로 다룹니다.

아래 표의 노드 항목은 2026년 9월 25일 기준 n8n 공개 저장소의 OpenAI 노드 소스 코드를, API 쪽 값은 [OpenAI 이미지 생성 가이드](https://developers.openai.com/api/docs/guides/image-generation)를 따릅니다.

| 필요한 설정 | OpenAI 노드 Generate an Image | OpenAI 노드 Edit an Image | HTTP Request로 직접 호출 |
| --- | --- | --- | --- |
| 모델 ID 직접 입력 | 노드 버전 2.2 이상 | 노드 버전 2.3 이상 | 가능 |
| 품질 | `low`·`medium`·`high` (기본 `medium`) | `auto`·`high`·`medium`·`low` | `low`~`max`, `auto` 전부 |
| 크기 | 1024x1024, 1024x1536, 1536x1024 | 256·512·1024 정사각, 1024x1536, 1536x1024, `auto` | 사용자 지정, 한 변 최대 3840px |
| 투명 배경 | 항목 없음 | Background | `background: "transparent"` |
| 출력 형식 jpeg·webp | 항목 없음 | Output Format 칸은 있으나 API로 전달되지 않을 수 있음 | `output_format` |
| 참고 이미지 여러 장·마스크 | 해당 없음 | 가능 | Form-Data로 가능 |
| 토큰 사용량 `usage` | 버려짐 | 버려짐 | 응답 JSON에 남음 |
| 응답이 URL이거나 접두어 붙은 base64 | 처리 못 함 | 처리 못 함 | 직접 처리 |

마지막 행은 노드 코드의 동작에서 따라 나오는 결론입니다. OpenAI 노드는 응답의 `data[].b64_json`을 그대로 디코딩해 파일로 만들기 때문에, `url`만 돌려주거나 `data:image/png;base64,` 같은 접두어를 붙여 돌려주는 중계 API에서는 정상적인 파일이 나온다고 기대하기 어렵습니다.

사용량이 버려지는 문제는 n8n 저장소의 [issue #38482](https://github.com/n8n-io/n8n/issues/38482)로 보고되어 있고 2026년 9월 25일 기준 열려 있습니다. 보고자는 n8n 2.38.6, 노드 버전 2.3에서 `gpt-image-2.5-flare`로 재현했으며, 표현식이나 Code 노드로도 되살릴 수 없다고 적었습니다.

### 내 n8n에서 직접 확인하는 방법

설치된 버전에 따라 항목이 다를 수 있으니, 노드를 열어 다음을 확인하세요. n8n의 최신 릴리스는 2026년 9월 24일에 나온 2.40.6이지만, Generate 작업의 코드는 2026년 5월 이후 바뀌지 않았습니다.

- **Model 필드 모양**: From List와 ID를 오가는 선택 칸이면 노드 버전(typeVersion)이 2.2 이상입니다. DALL·E 2, DALL·E 3, GPT Image 1만 있는 고정 드롭다운이면 오래된 노드이므로 캔버스에 OpenAI 노드를 새로 추가하세요. 노드 버전은 n8n 앱 버전과 다른 숫자이며, 노드를 복사해 텍스트 편집기에 붙여 넣으면 JSON의 `typeVersion`으로 보입니다.
- **기본 모델**: 새 Generate an Image 노드의 기본값은 `gpt-image-1-mini`입니다. 모델을 바꾸지 않고 실행하면 2.5가 아니라 이 모델이 호출됩니다.
- **Options의 Quality 목록**: Add Option에서 Quality를 추가했을 때 `xhigh`나 `max`가 보이면 설치본이 위 표보다 새로운 것입니다. 보이지 않으면 표 그대로입니다.
- **작업 이름**: Analyze Image는 이미지를 읽고 설명하는 작업이라 모델 목록에 GPT Image가 나오지 않습니다. 생성은 Generate an Image, 수정은 Edit an Image입니다.

## OpenAI 노드로 만드는 기본 워크플로

위 제한이 괜찮다면 노드 두세 개로 끝납니다.

1. **Credentials**: OpenAI 자격 증명에 API Key를 넣습니다. Organization ID는 선택 항목이며, 넣어야 하는 경우는 [OpenAI API Key와 Organization ID](https://blog.laozhang.ai/ko/posts/openai-api-key-organization-id)에 정리되어 있습니다. Base URL은 OpenAI를 직접 쓰면 기본값 `https://api.openai.com/v1` 그대로 둡니다.
2. **OpenAI 노드**: Resource는 Image, Operation은 Generate an Image. Model에서 ID를 선택하고 `gpt-image-2.5-flare`를 입력합니다. From List는 자격 증명 Base URL의 `/models`에서 이름에 `dall-e`나 `gpt-image`가 들어간 모델만 가져오므로, 목록에 없더라도 ID 입력으로 호출할 수 있습니다.
3. **Prompt와 Options**: 프롬프트는 앞 노드 값을 `{{ $json.prompt }}`처럼 연결하고, Options에서 Quality와 Resolution을 고릅니다. 결과 필드 이름을 바꾸려면 Put Output in Field를 씁니다(기본 `data`).
4. **목적지 노드**: Google Drive 업로드, Gmail 첨부, S3 업로드처럼 바이너리를 받는 노드에서 입력 바이너리 필드 이름을 `data`로 지정합니다.

실행 결과 패널에서 Binary 탭에 이미지가 보이고, 목적지에 올라간 파일이 열리면 성공입니다. 첫 실행에서 403이나 모델 사용 불가 오류가 나면 키보다 조직 상태를 먼저 보세요. OpenAI는 GPT Image 모델을 쓰기 전에 [API Organization Verification](https://help.openai.com/en/articles/10910291-api-organization-verification)을 요구할 수 있습니다.

## HTTP Request로 GPT Image 2.5 직접 호출하기

노드가 못 하는 설정이 필요하면 HTTP Request 노드 하나로 Images API를 부릅니다.

- **Method**: POST
- **URL**: `https://api.openai.com/v1/images/generations`
- **Authentication**: Predefined Credential Type에서 OpenAI 자격 증명을 고르거나, Header Auth로 `Authorization: Bearer <API 키>`를 보냅니다.
- **Send Body**: 켜고 Body Content Type은 JSON, Specify Body는 Using JSON.

본문은 다음처럼 씁니다. 프롬프트에 따옴표나 줄바꿈이 섞여도 깨지지 않도록 `JSON.stringify`로 감쌉니다.

```json
{
  "model": "gpt-image-2.5-flare",
  "prompt": {{ JSON.stringify($json.prompt) }},
  "size": "2048x1152",
  "quality": "high",
  "output_format": "webp",
  "output_compression": 85
}
```

값을 정할 때 알아 둘 조건입니다.

- **크기**: 사용자 지정 크기는 가로·세로가 모두 16의 배수, 비율 1:3~3:1, 한 변 3840px 이하, 총 픽셀 655,360~8,294,400 범위여야 합니다. 예시의 2048x1152는 16:9이고 조건을 모두 만족합니다. 2560x1440을 넘는 해상도는 OpenAI가 「experimental」로 표시하므로 4K는 품질 보장 없이 시험하는 단계로 보세요. 4K 저장과 검증 절차는 GPT Image 2 기준이지만 [GPT Image 2 4K API 가이드](https://blog.laozhang.ai/ko/posts/gpt-image-2-4k-image-generation)가 참고가 됩니다.
- **품질**: `quality`를 빼거나 `auto`로 보내면 모델이 단계를 고르므로 같은 요청이라도 장당 비용이 달라질 수 있습니다. 예산을 맞춰야 하는 자동화라면 값을 명시하세요.
- **투명 배경**: `"background": "transparent"`는 `output_format`이 `png`나 `webp`일 때만 씁니다.
- **형식**: 기본은 `png`이고, OpenAI는 `jpeg`가 `png`보다 빠르다고 안내합니다. `output_compression`(0~100)은 jpeg·webp에만 적용됩니다.
- **보내지 않는 값**: `response_format`은 DALL·E 시절 파라미터라 GPT Image 계열에는 넣지 않습니다. n8n OpenAI 노드도 `gpt-image` 모델에는 이 값을 빼고 보냅니다. 노드의 Input Fidelity 역시 2.5 문서에 없는 파라미터이므로 설정하지 않습니다.

성공하면 응답 JSON의 `data[0].b64_json`에 이미지가, `usage`에 `input_tokens`·`output_tokens`·`total_tokens`가 들어 있습니다. Options의 Response에서 Include Response Headers and Status를 켜면 응답 전체가 `body` 아래로 들어가므로 이후 경로가 `body.data[0].b64_json`, `body.usage`로 바뀝니다.

## 응답을 파일로 바꾸고 사용량은 따로 남기기

OpenAI 노드는 디코딩까지 알아서 해 주지만, HTTP Request 응답은 base64 문자열이 든 JSON이라 한 단계를 더 거쳐야 합니다.

![OpenAI 노드가 바이너리 data 필드로 image.png를 바로 만드는 경로와, HTTP Request 응답 JSON의 b64_json 값을 Edit Fields의 image_base64 필드로 옮긴 뒤 Convert to File로 image.png를 만드는 경로를 위아래로 비교한 도식](https://blog.laozhang.ai/posts/ko/gpt-image-2-5-n8n/img/response-to-file.webp)

HTTP Request 뒤에 두 노드를 이어 붙입니다.

1. **Edit Fields (Set)**: 필드 두 개를 만듭니다. `image_base64`(String)에 `{{ $json.data[0].b64_json }}`, `usage`(Object)에 `{{ $json.usage }}`. 모델 이름이나 작업 번호처럼 나중에 비용을 나눠 볼 값도 여기서 함께 적어 둡니다.
2. **Convert to File**: Operation은 Move Base64 String to File, Base64 Input Field는 `image_base64`, Put Output File in Field는 `data`. Options에서 File Name을 `{{ $execution.id }}.webp`처럼, MIME Type을 요청한 형식에 맞춰 `image/webp`로 지정합니다.

여기서 순서가 중요합니다. Convert to File의 출력 항목은 JSON이 빈 상태(`{}`)에 파일만 붙은 형태라, 앞 단계의 `usage`가 다음 노드로 넘어가지 않습니다. 그래서 사용량 기록은 Convert to File 뒤가 아니라 **Edit Fields에서 갈라져 나온 별도 연결**에 둡니다. n8n에서는 한 노드의 출력을 여러 노드에 동시에 연결할 수 있으니, Edit Fields의 출력을 Convert to File과 Google Sheets(또는 Data Table)의 행 추가 노드에 함께 연결합니다.

![원본 JSON 응답이 이미지 변환과 파일 저장 경로, 그리고 작업 번호·model·usage·시각을 적는 사용량 기록 표로 갈라지고, usage 값이 없는 행은 미확인으로 남기는 방식을 보여 주는 도식](https://blog.laozhang.ai/posts/ko/gpt-image-2-5-n8n/img/usage-records.webp)

기록 표에는 실행 ID, 모델 ID, 품질과 크기, `usage.input_tokens`, `usage.output_tokens`, 실행 시각 정도면 충분합니다. 중계 API처럼 `usage`를 돌려주지 않는 경우에는 칸을 비워 「미확인」으로 두고 0을 적지 마세요. 0은 「비용 없음」으로 읽혀 월말 정산을 틀리게 만듭니다. 기록이 쌓이면 품질·크기 조합별 실제 토큰 사용량이 보이고, 이를 단가와 곱하면 장당 비용이 나옵니다. 단가와 호출당 과금과의 비교는 [GPT Image 2.5 Sunburst 가격과 공식 토큰 요금 비교](https://blog.laozhang.ai/ko/posts/gpt-image-2-5-api-pricing)에 있습니다.

위 구성은 요청 하나에 이미지 한 장(`n`=1)을 전제로 합니다. 한 번에 여러 장을 받으면 `data` 배열의 첫 항목만 파일이 되므로, 여러 장이 필요하면 프롬프트 항목을 여러 개 만들어 한 장씩 요청하는 편이 아래의 속도 제한 계산과도 맞습니다.

## 여러 장을 자동으로 만들 때: 배치 간격과 타임아웃

스프레드시트의 상품 50개를 간격 없이 연달아 보내면 금방 속도 제한에 걸립니다. OpenAI의 GPT Image 2.5 기본 한도는 사용 등급(usage tier)별 분당 이미지 수(IPM)로 정해져 있고, Flare와 Sunburst가 같습니다.

한 요청에 한 장씩 보낸다면 요청 사이 최소 간격은 `60,000 ÷ IPM` 밀리초입니다. HTTP Request 노드 Options의 Batching에서 Items per Batch를 1로, Batch Interval을 아래 값 이상으로 두면 됩니다.

| 사용 등급 | 분당 이미지(IPM) | 분당 토큰(TPM) | 최소 Batch Interval |
| --- | --- | --- | --- |
| Tier 1 | 5 | 100,000 | 12,000ms |
| Tier 2 | 20 | 250,000 | 3,000ms |
| Tier 3 | 50 | 800,000 | 1,200ms |
| Tier 4 | 150 | 3,000,000 | 400ms |
| Tier 5 | 250 | 8,000,000 | 240ms |

이 간격은 같은 조직에서 다른 이미지 요청이 없다는 가정의 하한입니다. 다른 워크플로나 서비스가 같은 키를 쓰면 그만큼 늘리세요. 등급은 계정마다 다르고 사용액에 따라 올라가므로 OpenAI 콘솔의 한도 화면을 기준으로 삼습니다. 중계 API는 OpenAI 등급이 아니라 그 서비스의 제한을 따릅니다.

**Timeout**은 HTTP Request가 서버의 응답 헤더를 기다리는 시간(밀리초)입니다. 이미지를 한 번에 돌려주는 일반 요청에서는 생성이 끝나야 응답이 시작되는 경우가 많아, 이 값이 사실상 생성 대기 시간이 됩니다. OpenAI는 복잡한 프롬프트가 최대 2분 정도 걸릴 수 있다고 안내하므로 120,000ms보다 여유 있게 잡으세요. n8n 문서에 기본값이 나와 있지 않으니 직접 지정해 두는 편이 안전합니다.

### 자동으로 다시 보내면 안 되는 오류

오류마다 대응이 다릅니다. OpenAI는 속도 제한과 서버 오류만 간격을 두고 재시도하고, 요청을 고쳐야 하는 오류는 자동 재시도하지 말라고 안내합니다.

| 상황 | 자동 재시도 | 할 일 |
| --- | --- | --- |
| 속도 제한(rate limit) | 간격을 늘려 재시도 | Batch Interval을 키움 |
| 서버 오류(5xx) | 간격을 늘려 재시도 | 요청 ID를 기록 |
| 할당량 초과(quota) | 하지 않음 | 결제 한도·잔액 확인 |
| `image_generation_user_error` (예: `moderation_blocked`) | 하지 않음 | 프롬프트나 입력 이미지 수정 |
| n8n 쪽 Timeout | 바로 하지 않음 | 서버에서 생성이 끝났는지 먼저 확인 |
| 401·403 | 하지 않음 | 키, 조직 인증 확인 |

`moderation_blocked`에는 `error.moderation_details.moderation_stage`(input·output·unknown)가 붙을 수 있어, 프롬프트 단계에서 막혔는지 결과물 단계에서 막혔는지 구분할 수 있습니다. 상태 코드만으로는 속도 제한과 할당량 초과를 가르기 어려우니 `error.code`와 `error.type`을 함께 보세요.

n8n에서 이렇게 나누려면 HTTP Request의 Options에서 Never Error와 Include Response Headers and Status를 켜고, 뒤에 IF나 Switch 노드를 두어 `{{ $json.statusCode }}`와 `{{ $json.body.error.code }}`로 분기합니다. 노드 Settings의 Retry On Fail은 오류 종류를 가리지 않고 다시 보내므로, 할당량 초과나 콘텐츠 차단까지 반복 호출하게 됩니다.

타임아웃은 「생성되지 않았다」는 뜻이 아닙니다. 클라이언트가 기다림을 멈춰도 서버에서 생성이 계속됐을 수 있습니다. 예를 들어 LaoZhang API는 클라이언트 타임아웃이나 연결 끊김이 서버 생성을 취소하지 않으며 완료되면 과금된다고 문서에 밝히고 있습니다. OpenAI 직접 호출의 경우 이 상황의 과금 규칙은 공개 문서에 나와 있지 않으니, 재시도 전에 사용량 화면을 확인하는 습관을 들이세요.

*안내: [laozhang.ai는 이 블로그 운영팀의 자사 서비스입니다](https://blog.laozhang.ai/ko/about#laozhang). 그 가격은 독립적인 비교가 아니라 자사 제시 가격입니다.*

## 참고 이미지 여러 장과 마스크로 편집하기

상품 사진의 배경만 바꾸거나 여러 참고 이미지를 합치는 작업은 편집 엔드포인트 `/v1/images/edits`를 씁니다.

**OpenAI 노드**의 Edit an Image(노드 버전 2.3 이상)는 Images 항목에 바이너리 필드를 여러 개 추가할 수 있고, 이를 `image[]`로 반복해 보냅니다. Options에는 Image Mask와 Background가 있습니다. Output Format과 Output Compression은 Options 밖의 별도 칸으로 보이지만, 현재 소스 코드의 실행 부분은 이 값을 Options 안에서 찾기 때문에 화면에서 고른 형식이 API로 전달되지 않을 가능성이 큽니다. JPEG나 WebP가 꼭 필요하면 아래의 HTTP Request 방식으로 `output_format`을 보내고, 받은 파일의 MIME Type이 요청한 형식과 같은지 확인하세요. 또 품질은 `high`까지, 크기는 긴 변 1536px까지이며, 결과는 항상 바이너리 `data`에 들어가고 `usage`는 역시 버려집니다. Input Fidelity 항목은 2.5에서는 비워 두세요.

**HTTP Request**로 편집하려면 URL을 `https://api.openai.com/v1/images/edits`로, Body Content Type을 Form-Data로 둡니다. `model`과 `prompt`는 일반 텍스트 파라미터로 넣고, 이미지는 파라미터 종류를 n8n Binary File로 바꾼 뒤 Name에 `image[]`, Input Data Field Name에 앞 노드의 바이너리 필드 이름을 적습니다. 참고 이미지가 여러 장이면 이 파라미터를 장수만큼 반복하고, 마스크는 Name을 `mask`로 한 파라미터를 하나 더 추가합니다.

마스크에는 조건이 있습니다.

- 여러 장을 보내면 마스크는 **첫 번째 이미지**에만 적용됩니다.
- 마스크는 그 이미지와 형식·크기가 같아야 하고 알파 채널이 있어야 합니다. 투명한 부분이 수정 영역입니다.
- GPT Image의 마스크는 프롬프트 기반이라 경계를 정확히 따르지 않을 수 있습니다. 로고나 글자처럼 모양이 중요한 부분은 몇 번 시험해 본 뒤 자동화하세요.
- 파일 크기 상한은 안내마다 다릅니다. OpenAI 가이드는 50MB 미만, n8n Edit 노드 설명은 마스크 PNG 4MB 미만으로 적고 있으니 마스크는 4MB 아래로 맞추는 편이 무난합니다.

## 중계 API를 연결할 때: 응답 형태부터 확인하기

OpenAI 호환 중계 API는 OpenAI 자격 증명의 Base URL만 바꾸면 OpenAI 노드에서도 호출됩니다. 노드는 `Base URL + 엔드포인트`로 요청을 보내고, 모델 목록도 그 주소의 `/models`에서 가져옵니다. 목록에 원하는 모델이 없으면 ID로 입력하면 됩니다.

문제는 응답입니다. 같은 엔드포인트라도 서비스마다 이미지를 돌려주는 형태가 달라서, 첫 요청의 원본 응답을 HTTP Request로 한 번 받아 보고 연결 방식을 정하는 것이 가장 빠릅니다.

| 응답 형태 | 예 | n8n 연결 방식 |
| --- | --- | --- |
| 깨끗한 `b64_json` | OpenAI 직접 호출 | OpenAI 노드, 또는 HTTP Request → Edit Fields → Convert to File |
| 접두어가 붙거나 끝의 `=`가 빠진 base64 | 일부 중계 API | HTTP Request → Code 노드로 정리 → Convert to File |
| 만료되는 `url` | 일부 중계 API | HTTP Request → URL을 곧바로 다운로드(Response Format: File) |
| 작업 ID를 받고 상태를 조회 | 비동기 작업형 API | 제출 → Wait → 상태 조회 반복 → 결과 URL 다운로드 |

두 번째와 세 번째 경우는 앞의 Edit Fields 자리에 Code 노드를 두면 한 번에 처리됩니다. Mode를 Run Once for Each Item으로 두고 다음을 넣습니다.

```javascript
// Include Response Headers and Status를 켰다면 응답은 body 아래에 있습니다
const res = $json.body ?? $json;
const first = (res.data ?? [])[0] ?? {};

let b64 = first.b64_json ?? '';
if (b64.startsWith('data:')) b64 = b64.slice(b64.indexOf(',') + 1); // data:image/png;base64, 제거
b64 = b64.replace(/\s/g, '');
if (b64) b64 = b64.padEnd(Math.ceil(b64.length / 4) * 4, '='); // 빠진 = 채우기

return {
  json: {
    image_base64: b64 || null,
    image_url: first.url ?? null,
    usage: res.usage ?? null, // 없으면 null, 0으로 바꾸지 않음
    error: res.error ?? null,
  },
};
```

그다음 IF 노드로 `image_base64`가 있으면 Convert to File로, `image_url`만 있으면 HTTP Request(GET, Response Format은 File)로 내려받게 나눕니다. URL은 만료되므로 대기 노드를 끼우지 말고 바로 받아야 합니다. 둘 다 없으면 `error`를 알림으로 보내면 됩니다.

작업형 API는 흐름이 다릅니다. 예를 들어 HiAPI의 n8n 예제는 작업을 제출해 ID를 받은 뒤 5초마다 최대 36번 상태를 조회하고, 완료되면 결과 URL을 돌려줍니다. 이 경우에도 결과 URL을 파일로 내려받아 저장하는 단계는 따로 만들어야 합니다.

### LaoZhang API를 쓰는 경우

LaoZhang API를 예로 들면 Base URL은 `https://api.laozhang.ai/v1`이고, 생성과 편집 모두 같은 엔드포인트를 씁니다. 모델 ID에 따라 조건이 달라집니다.

*안내: [laozhang.ai는 이 블로그 운영팀의 자사 서비스입니다](https://blog.laozhang.ai/ko/about#laozhang). 그 가격은 독립적인 비교가 아니라 자사 제시 가격입니다.*

- **`gpt-image-2.5-flare`·`gpt-image-2.5-sunburst`** (공식 API 전달): OpenAI와 같은 모델 ID이고 토큰 과금입니다. 토큰 그룹이 `Sora2Official`이면 단가가 OpenAI와 같고, `GPTImage2 Sora2 Enterprise`는 20% 높습니다. 참고 이미지 최대 16장과 마스크를 지원합니다. `response_format`을 보내면 파라미터 오류가 날 수 있습니다.
- **`gpt-image-2.5-flare-vip`·`gpt-image-2.5-sunburst-vip`**: 호출당 $0.03이고 품질 다섯 단계와 사용자 지정 크기를 지원하지만 마스크는 쓸 수 없습니다. 2026년 9월 16일 중단됐다가 9월 22일 재개되었습니다.
- **`gpt-image-2.5-web`**: 호출당 과금이며 Flare와 Sunburst를 고를 수 없습니다.

응답의 `b64_json`에 접두어가 붙거나 끝의 `=`가 빠질 수 있고, `url`로 올 수도 있다고 문서에 적혀 있으므로 위의 Code 노드 경로를 쓰는 편이 안전합니다. 호출당 과금 모델은 `usage`로 비용을 계산하지 않으니, 실제 차감액은 콘솔의 호출 로그에서 확인합니다. 설정 세부는 [LaoZhang API의 GPT Image 2.5 문서](https://docs.laozhang.ai/api-capabilities/gpt-image-2-5)에 있습니다.

## 이미지가 목적지에 도착하지 않을 때 확인 순서

실행은 초록색인데 드라이브에 파일이 없거나, 파일은 있는데 열리지 않을 때는 요청 → 응답 → 파일 → 전달 순서로 좁혀 가면 빠릅니다.

1. **요청 단계**: 401·403이면 API 키와 조직 인증을, 모델을 찾지 못한다는 오류면 모델 ID(`gpt-image-2.5`만 넣지 않았는지)와 From List·ID 모드를 확인합니다. 400이면 크기 조건, `response_format`, Input Fidelity 같은 파라미터를 봅니다.
2. **응답 단계**: HTTP Request 출력에서 `data`가 비어 있지 않은지, 이미지가 `b64_json`인지 `url`인지 봅니다. OpenAI 노드가 성공으로 끝났는데 Binary 탭이 비어 있거나 파일이 깨졌다면 중계 API가 다른 형태로 돌려준 경우일 가능성이 큽니다.
3. **파일 단계**: Convert to File에서 오류가 나면 Base64 Input Field 경로를 봅니다. Include Response Headers and Status를 켰다면 `body.`가 앞에 붙어야 합니다. 파일은 생겼는데 열리지 않으면 접두어가 남았거나, MIME Type과 파일 확장자가 요청한 `output_format`과 다를 수 있습니다.
4. **전달 단계**: 목적지 노드가 읽는 바이너리 필드 이름이 앞 노드의 출력 이름(`data` 등)과 같은지 확인합니다. Put Output in Field나 Put Output File in Field를 바꿨다면 여기도 같이 바꿔야 합니다.
5. **비용 단계**: 사용량 기록이 비어 있으면 OpenAI 노드를 쓰고 있는지부터 봅니다. 앞서 본 대로 이 노드는 `usage`를 남기지 않습니다. 기록이 없다는 것이 과금이 없었다는 뜻은 아닙니다.

파일은 정상으로 열리는데 결과물이 거칠거나 격자무늬가 보인다면 연동 문제가 아니라 화질 문제이므로 [GPT Image 2.5 노이즈·격자무늬: 어디서 거칠어졌는지 찾는 법](https://blog.laozhang.ai/ko/posts/gpt-image-2-5-noise-grainy)을 참고하세요.

## 자주 묻는 질문

### n8n으로 GPT Image 2.5를 무료로 쓸 수 있나요?

아닙니다. n8n은 API를 부르는 도구일 뿐이고, 이미지 생성 비용은 OpenAI나 사용하는 중계 API에 따로 청구됩니다. OpenAI 직접 호출은 토큰 과금이며 Flare와 Sunburst의 토큰 단가는 같지만, 품질과 크기에 따라 소모 토큰이 달라 장당 비용은 달라집니다.

### OpenAI 노드 모델 목록에 GPT Image 2.5가 안 보입니다

목록은 자격 증명 Base URL의 `/models`에서 가져온 결과이므로 계정이나 중계 서비스가 해당 ID를 목록에 내놓지 않으면 보이지 않습니다. Model 칸을 ID 모드로 바꿔 `gpt-image-2.5-flare`를 직접 입력하세요. ID 모드 자체가 없다면 노드 버전이 2.2 미만이니 노드를 새로 추가해야 합니다.

### OpenAI 노드와 HTTP Request를 한 워크플로에서 섞어 써도 되나요?

됩니다. 예를 들어 초안 이미지는 OpenAI 노드의 `medium`으로 빠르게 뽑고, 최종본만 HTTP Request로 `xhigh`나 2K 크기를 요청하는 구성이 가능합니다. 다만 OpenAI 노드로 만든 쪽은 사용량이 기록되지 않으니 비용을 비교하려면 두 경로 모두 HTTP Request로 두는 편이 정확합니다.

### GPT Image 2에서 쓰던 워크플로를 그대로 옮겨도 되나요?

모델 ID만 바꾸면 호출은 되지만, 같은 품질 이름이라도 소모 토큰이 달라질 수 있어 비용과 결과를 다시 확인해야 합니다. 옮길지 말지의 기준은 [GPT Image 2.5 vs GPT Image 2: 옮길지 판단 기준](https://blog.laozhang.ai/ko/posts/gpt-image-2-5-vs-gpt-image-2)에서 볼 수 있습니다.

## 참고 자료

이 글이 링크한 외부 페이지를 본문에 나온 순서대로 정리했습니다. 마지막 업데이트: 2026-09-25.

- [OpenAI 이미지 생성 가이드](https://developers.openai.com/api/docs/guides/image-generation) (developers.openai.com)
- [issue #38482](https://github.com/n8n-io/n8n/issues/38482) (github.com)
- [API Organization Verification](https://help.openai.com/en/articles/10910291-api-organization-verification) (help.openai.com)
