GPT 이미지 모델(gpt-image-2, gpt-image-2.5)로 이미지를 생성할 때, 어떤 규모로든 결국 HTTP 400 오류와 함께 안전 시스템에 의해 요청이 거부되었다는 메시지를 마주하게 됩니다. 이미지도 없고, 부분적인 출력도 없으며, 프롬프트는 보기에 완벽하게 합리적인 경우입니다.
이 가이드는 해당 오류가 실제로 무엇인지, 실무에서 무엇이 이를 유발하는지, 그리고 오류 발생을 줄이기 위해 프롬프트와 참조 이미지를 어떻게 조정해야 하는지 설명합니다. 이 내용은 TokenLab의 이미지 API에서 발생한 30일간의 프로덕션 데이터(2026년 8월 19일 ~ 9월 18일)와 OpenAI의 공식 이미지 생성 문서를 기반으로 합니다. 수치는 집계된 플랫폼 통계이며, 고객 콘텐츠는 재현되지 않았습니다.
오류의 실체
GPT 이미지 모델은 모든 프롬프트, 모든 입력 이미지, 그리고 모든 생성 이미지를 제공자의 콘텐츠 정책에 따라 필터링합니다. 필터가 작동하면 요청은 400 오류로 실패하며, 이때의 안정적인 식별자는 다음과 같은 오류 코드입니다:
{
"error": {
"type": "image_generation_user_error",
"code": "moderation_blocked",
"moderation_details": {
"moderation_stage": "input",
"categories": ["sexual"]
}
}
}
공식 문서에 따르면 moderation_details는 선택 사항이며 의도적으로 거칠게 분류됩니다. moderation_stage는 차단이 입력(input)에서 발생했는지 생성된 이미지(output)에서 발생했는지 알려주며, categories는 harassment(괴롭힘), self-harm(자해), sexual(성적), violence(폭력)와 같은 광범위한 공개 레이블을 포함합니다. 내부 분류기 점수는 절대 노출되지 않습니다.
TokenLab에서 동일한 이벤트는 두 가지 형태로 나타납니다:
- 동기식 호출(
/v1/images/generations,/v1/images/edits)은 즉시 HTTP 400을 반환합니다. - 비동기 작업은 "요청이 안전 시스템에 의해 거부되었습니다."라는 메시지와 함께
failed상태로 전환됩니다.
어느 쪽이든 두 가지 운영상의 사실이 중요합니다. 첫째, 조정 차단은 동일한 콘텐츠에 대해 결정론적입니다. 변경되지 않은 요청을 재시도해도 성공할 확률은 거의 없습니다. 둘째, TokenLab에서 조정 차단된 작업은 실패한 작업으로 처리되며, 미리 차감된 할당량은 전액 자동으로 환불됩니다. 즉, 차단된 생성에 대해서는 비용을 지불하지 않습니다.
30일간의 프로덕션 데이터
2026년 8월 19일부터 9월 18일 사이에 TokenLab에서 수행된 GPT 이미지 작업의 약 4.3%(대략 23건 중 1건)가 상위 안전 시스템에 의해 거부되었습니다. 분포는 무작위가 아니며, 차단된 요청은 몇 가지 패턴 주위에 밀집되어 있습니다:
| 신호 | 차단된 작업 | 기타 모든 작업 | 해석 |
|---|---|---|---|
| 미성년자 언급 (아이, 어린이, 아기, "7세", ...) | 79% | 33% | 가장 강력한 단일 예측 변수 |
| 실사 렌더링 문구 ("실사 같은", "실제 인간", "실사 영화") | 77% | 57% | 증폭기, 특히 미성년자와 함께 사용 시 |
| 성적 관련 묘사 (나체, 섹시, 란제리, 신체 중심 문구) | 43% | 17% | 강력한 예측 변수 |
| 일반적인 행동/폭력 단어 (전투, 칼, 폭발) | ~50% | ~50% | 단독으로는 예측 가치 없음 |
같은 기간 동안의 세 가지 추가 발견 사항:
- 참조 이미지는 위험을 높입니다. 입력/참조 이미지가 포함된 작업은 8.4%의 차단율을 보인 반면, 텍스트 전용 생성은 3.7%로, 두 배 이상 높았습니다. 이미지는 텍스트만큼 엄격하게 조정됩니다.
- 긴 프롬프트는 실패할 확률이 높습니다. 차단된 프롬프트는 평균 약 3,600자였으며, 절반 이상이 2,000자를 초과했습니다. 절이 추가될 때마다 분류기가 검사해야 할 표면적이 넓어집니다.
- 재시도로 해결되지 않았습니다. 해당 기간 동안 차단된 모든 작업은 최종 실패 상태로 끝났으며, 동일한 입력을 다시 제출하여 성공한 사례는 없었습니다. 그리고 모든 작업은 자동으로 환불되었습니다.
우리가 관찰한 가장 많이 차단된 워크플로우는 미성년자의 실사 캐릭터 디자인 시트였습니다. 초현실적인 렌더링, 정확한 신체 비율, 의상 메모를 사용하여 아동 캐릭터를 묘사하는 "캐스팅 참조" 스타일의 프롬프트입니다. 미성년자 관련 어휘와 실사 렌더링을 결합한 프롬프트는 기준치보다 2.2배 높은 ~9.5%의 차단율을 보였습니다.
차단을 유발하는 5가지 패턴
차단된 데이터를 살펴보면, 거의 모든 거부가 다음 범주 중 하나에 해당합니다:
- 미성년자의 실사 묘사. "스튜디오에서 촬영된 실제 인간", "초현실적", "CGI 아님, 일러스트 아님"으로 렌더링된 아동 또는 아기 캐릭터. 미성년자와 실사의 결합은 이미지 조정에서 가장 엄격하게 보호되는 경계이며, 의도가 순수한 캐릭터 시트일지라도 차단됩니다.
- 미성년자 주변의 의상 또는 신체 중심 문구. "쇄골 위 클로즈업"(단순한 인물 사진 크롭 의도)이나 아동 캐릭터의 머리부터 발끝까지의 신체 비율 측정과 같은 문구. 개별적으로는 무해하지만, 종합적으로는 미성년자에 대한 신체 중심 묘사로 읽힙니다.
- 성인 캐릭터의 성적 묘사. 다른 부분은 건전한 구성이라도 포즈, 피부, 속옷 중심의 어휘("란제리", "나체", "유혹적인 포즈")가 포함된 경우.
- 잔인한 해부학적 묘사. 썩어가는 살점, 노출된 장기, 열린 상처 또는 기생충을 해부학적으로 상세히 묘사하는 공포 및 다크 판타지 프롬프트.
- 실제 인물의 참조 이미지. 미성년자의 실제 사진, 피부 노출이 심한 이미지, 또는 편집 입력으로 사용된 유명인과 유사한 얼굴.
두 가지 증폭기가 위 사항들을 차단으로 이끌 가능성을 높입니다: 매우 긴 프롬프트(텍스트가 길수록 나쁜 조합이 발생할 확률이 높음)와 부정어 목록. "나체 금지, 성적 콘텐츠 금지, 고어 금지"와 같은 줄은 분류기를 안심시키지 않습니다. 오히려 피하고 싶은 개념을 반복하여 입력에 추가할 뿐입니다. 원하지 않는 것이 아니라 원하는 것을 묘사하세요.
프롬프트 튜닝 플레이북
데이터에 기반한 재작성 전략입니다. (예시는 이해를 돕기 위한 것이며 고객 트래픽에서 가져온 것이 아닙니다.)
1. 미성년자를 실사로부터 분리하세요
스토리, 만화 또는 게임에 아동 캐릭터가 필요한 경우, 명확하게 스타일화된 매체로 렌더링하세요:
변경 전: "7세 소녀의 초현실적인 캐스팅 사진, 스튜디오에서 촬영된 실제 인간
어린이, 상세한 신체 비율, 쇄골 위
노출된 얼굴 클로즈업 ..."
변경 후: "명나라 복장을 한 어린 소녀의 동화책 수채화 일러스트,
어깨 위 초상화, 둥근 얼굴, 천 리본으로 묶은 양갈래 머리,
온화한 표정, 단순한 흰색 배경"
매체(수채화, 2D 애니메이션, 3D 카툰, 그림책 스타일)를 변경하고, "실제 인간/촬영" 프레임을 삭제하며, 신체 측정은 완전히 생략하세요. 의상을 묘사해야 한다면, 입지 않은 것이 아니라 입고 있는 것("둥근 깃의 천 재킷을 입은")을 묘사하세요.
2. 부정어 목록을 삭제하세요
"나체 금지, 피 금지, 텍스트 금지, 워터마크 금지"를 "완전한 의상 착용", "깔끔한 구성", "단순한 배경"과 같은 긍정적인 표현으로 바꾸세요. 제한된 범주를 명시하지 않는 부정어만 유지하세요(예: "워터마크 없음"은 괜찮지만, "나체 없음"은 도움이 되지 않습니다).
3. 프롬프트를 간결하게 유지하세요
다중 패널 캐릭터 시트를 생성하는 경우, 모든 패널 설명에 동일한 스타일 블록을 반복하지 마세요. 하나의 공유 스타일 문장과 패널별 세부 사항만 사용하면 우발적인 차단 조합이 발생할 수 있는 표면적 임계값 아래로 유지할 수 있습니다.
4. 해부학이 아닌 분위기로 공포를 표현하세요
변경 전: "썩어가는 몸, 노출된 두개골, 살점, 농포와 기생충 ..."
변경 후: "한쪽은 평온하고 모성애가 느껴지며, 다른 한쪽은 그림자와
안개 속으로 녹아드는 모습, 해부학적 세부 묘사 대신 실루엣과
조명을 통해 암시된 부패"
다크 판타지는 공포가 조직 수준의 묘사가 아닌 분위기, 조명, 실루엣을 통해 전달될 때 조정을 통과할 수 있습니다.
5. 성인 콘텐츠 관련 어휘를 중립화하세요
성인 캐릭터의 경우, 신체 및 속옷 중심의 단어를 패션 및 분위기 언어로 바꾸세요: "란제리" 대신 "이브닝 가운", "유혹적인 포즈" 대신 "자신감 있는 콘트라포스토".
참조 이미지 위생
이미지 입력도 조정 대상이며, 데이터상 차단율을 두 배 이상 높이므로 참조 이미지를 프롬프트의 일부로 취급하세요:
- 미성년자의 경우 스타일화된 참조를 선호하세요. 아동 캐릭터의 일러스트나 3D 렌더링은 실제 사진보다 훨씬 안전하며, 일반적으로 캐릭터 일관성을 유지하는 데도 효과적입니다.
- 중요한 부분만 크롭하세요. 정체성 일관성을 위해 얼굴이 필요하다면, 전신 해변 사진이 아닌 얼굴 부분만 업로드하세요. 피부 노출과 맥락이 적을수록 분류기의 표면적이 줄어듭니다.
- 오버레이 텍스트와 워터마크를 제거하세요. 참조 이미지의 캡션, 밈 텍스트, 워터마크 문자열은 입력 텍스트로 읽히며, 잊고 있었던 차단 유발 단어를 포함할 수 있습니다.
- 실제 유명인의 유사성을 피하세요. 참조 이미지로 사용하는 것과 프롬프트 텍스트에서 "<배우> 스타일로"라고 명시하는 것 모두 피해야 합니다.
조정 매개변수
GPT 이미지 모델은 공식 문서에 따라 두 가지 값을 가진 moderation 매개변수를 허용합니다:
auto(기본값): 연령에 부적절할 수 있는 특정 범주의 콘텐츠를 제한하는 표준 필터링.low: 덜 제한적인 필터링.
TokenLab은 /v1/images/generations와 /v1/images/edits 모두에서 이 매개변수를 전달합니다:
curl https://api.tokenlab.sh/v1/images/generations \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "명나라 복장을 한 어린 소녀의 동화책 수채화 일러스트, 어깨 위 초상화",
"size": "1024x1024",
"moderation": "low"
}'
콘텐츠가 분명히 무해함에도 계속 차단되는 경우 low를 사용하세요. 스타일화된 일러스트 작업이 대표적인 사례입니다. 두 가지 주의사항: low는 off가 아니며(CSAM과 같은 불법 범주는 항상 차단됨), 이는 보장된 것이 아니라 조정 다이얼입니다. 먼저 프롬프트를 수정하고, 그 다음 매개변수를 사용하세요.
코드에서 차단 처리하기
공식 지침은 명확합니다. image_generation_user_error 실패는 사용자가 수정할 수 있으며, 요청을 변경하지 않고 재시도해서는 안 됩니다. 우리의 데이터도 이에 동의합니다. 30일 동안 차단된 작업 중 변경되지 않은 요청을 재시도하여 성공한 사례는 없었습니다. 올바른 처리 방법:
- 메시지 텍스트가 아닌
error.code를 기준으로 판별하세요.moderation_blocked(및 일반적으로image_generation_user_error)만이 "입력을 수정하라"는 의미입니다. 속도 제한 및 5xx 오류는 재시도할 수 있습니다. - 단계를 확인하세요.
moderation_stage: "input"은 프롬프트를 다시 작성하거나 참조 이미지를 교체하라는 의미입니다."output"은 생성된 이미지 자체가 차단되었음을 의미하므로, 약간 조정된 위험이 낮은 프롬프트로 다시 생성하면 해결되는 경우가 많습니다. - 최종 사용자 메시지는 일반적인 문구로 유지하세요("콘텐츠 안전 요구 사항으로 인해 이 요청을 완료할 수 없습니다"). 디버깅 및 지원을 위해
moderation_details와 요청 ID를 기록하세요. - 루프를 돌리지 마세요. 고유 입력당 한 번의 조정 차단 후에는 회로를 차단하세요. 동일한 콘텐츠를 다시 제출하는 것은 TokenLab이 환불해주더라도 대기 시간과 디버깅 시간을 낭비하는 것입니다.
체크리스트
| 상황 | 유발 요인 | 해결책 |
|---|---|---|
| 아동 캐릭터 디자인 시트 | 미성년자 × 실사 | 스타일화된 매체 사용, 신체 측정 생략, 긍정적인 의상 문구 |
| 실사 성인 초상화 차단 | 성적 묘사 | 패션/분위기 문구 사용; moderation="low" 고려 |
| 다크 판타지 / 공포 생물 | 고어 해부학 | 조직 세부 묘사 대신 분위기와 실루엣 사용 |
| 참조 사진을 사용한 편집 차단 | 실제 인물 / 피부 노출이 심한 입력 | 더 타이트하게 크롭, 스타일화된 참조 사용, 오버레이 텍스트 제거 |
| 긴 다중 패널 프롬프트 차단 | 프롬프트 표면적 + 부정어 목록 | 상용구 중복 제거, 부정어 목록 삭제 |
| 무해한 스타일화 작업이 차단됨 | 분류기의 보수성 | moderation="low" 사용 |
FAQ
차단된 생성에 대해 비용을 지불하나요? 아니요. TokenLab에서는 조정 차단된 작업은 실패 처리되며, 미리 차감된 할당량이 자동으로 전액 환불됩니다.
동일한 프롬프트를 재시도하면 도움이 되나요? 아니요. 30일간의 데이터에서 변경되지 않은 재시도로 성공한 차단 작업은 단 한 건도 없었습니다. 먼저 입력을 변경하세요.
moderation="low"는 안전 필터링을 비활성화하나요? 아니요. 제한 수준을 낮출 뿐이며, 불법 콘텐츠 범주는 여전히 차단됩니다.
참조 이미지도 정말 조정되나요? 네. 프롬프트와 모든 입력 이미지가 필터링되며, 참조 이미지가 포함된 작업은 텍스트 전용 작업보다 두 배 이상 높은 차단율을 보였습니다.
어떤 규칙이 적용되었는지 정확히 알 수 있나요? 상위 시스템이 포함하는 경우에 한해 moderation_details.categories 수준에서만 알 수 있습니다. 제공자는 의도적으로 분류기 내부를 노출하지 않습니다.
제한 사항
위 통계는 TokenLab의 프로덕션 트래픽에서 집계된 30일간의 데이터이며, 보장이 아닌 경향을 설명합니다. 조정 분류기는 시간이 지남에 따라 변경되며, 동일한 프롬프트라도 상위 업데이트 후 다르게 처리될 수 있습니다. 재작성 예시는 이해를 돕기 위한 템플릿이며 고객 데이터가 아닙니다. 배치 실행 전에는 항상 작은 테스트를 통해 현재 동작을 검증하세요.
이 모델들을 사용해보려면 이미지 모델 카탈로그를 탐색하고, 작업 수명 주기 처리에 대해서는 비동기 이미지 생성 가이드를 검토하며, 현재 요청 형식은 docs.tokenlab.sh를 확인하세요.



