Nano Banana Pro API를 호출할 때 finishReason: "IMAGE_SAFETY" 오류가 발생하는 것은 개발자들이 가장 자주 겪는 문제 중 하나예요. 분명히 평범한 상품 사진이나 풍경 사진인데도 시스템에서 "Google 생성형 AI 사용 정책 위반"으로 판정하여 차단하는 경우가 있죠. 이번 글에서는 IMAGE_SAFETY 오류의 발생 메커니즘과 8가지 실용적인 해결 방법을 심도 있게 분석하여, 오탐지로 인해 차단될 확률을 획기적으로 낮추는 방법을 알려드릴게요.
핵심 가치: 이 글을 읽고 나면 Nano Banana Pro의 안전 필터링 작동 원리를 이해하고, 오차단을 방지하는 실용적인 팁을 익혀 이미지 생성 성공률을 60%에서 95% 이상으로 높일 수 있습니다.

Nano Banana Pro IMAGE_SAFETY 오류 분석
먼저, 여러분이 겪고 계신 이 오류 응답을 분석해 볼게요.
{
"candidates": [
{
"content": { "parts": null },
"finishReason": "IMAGE_SAFETY",
"finishMessage": "Unable to show the generated image...",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 531,
"candidatesTokenCount": 0,
"totalTokenCount": 824,
"thoughtsTokenCount": 293
},
"modelVersion": "gemini-3-pro-image-preview"
}
IMAGE_SAFETY 오류 주요 필드 해설
| 필드 | 값 | 의미 |
|---|---|---|
finishReason |
IMAGE_SAFETY |
이미지가 안전 필터에 의해 차단됨 |
candidatesTokenCount |
0 |
출력이 전혀 생성되지 않음 (과금되지 않음) |
thoughtsTokenCount |
293 |
모델이 추론을 진행했으나 결과물이 차단됨 |
promptTokenCount |
531 |
텍스트 273개 + 이미지 258개 토큰 포함 |
🎯 핵심 발견:
thoughtsTokenCount: 293은 모델이 이미 내부 추론(Thinking)을 완료했지만, 최종 출력 단계에서 안전 필터에 의해 차단되었음을 의미해요. 즉, 문제는 입력 프롬프트가 아니라 생성된 결과물에 있다는 뜻입니다.

Nano Banana Pro 안전 필터링 메커니즘 상세 분석
Google의 Nano Banana Pro는 다층적인 안전 필터링 아키텍처를 채택하고 있습니다. 이 메커니즘을 이해하는 것이 문제를 해결하는 핵심이에요.
Nano Banana Pro 안전 필터링 계층
| 필터 계층 | 감지 대상 | 설정 가능 여부 | 트리거 결과 |
|---|---|---|---|
| 입력 필터링 | 프롬프트 텍스트 | 부분 설정 가능 | 요청 거부 |
| 이미지 입력 필터링 | 참조 이미지 콘텐츠 | 설정 불가능 | IMAGE_SAFETY |
| 생성 필터링 | 모델 출력 결과 | 부분 설정 가능 | IMAGE_SAFETY |
| 하드 필터링 | CSAM/PII 등 | 설정 불가능 | 영구 차단 |
Nano Banana Pro 4대 위험 범주
Google은 콘텐츠 위험을 설정 가능한 네 가지 범주로 분류합니다.
| 범주 | 영문명 | 트리거 예시 | 기본 임계값 |
|---|---|---|---|
| 증오 표현 | HARM_CATEGORY_HATE_SPEECH | 인종, 종교 차별 콘텐츠 | MEDIUM |
| 괴롭힘 콘텐츠 | HARM_CATEGORY_HARASSMENT | 인신공격, 위협 | MEDIUM |
| 성적인 내용 | HARM_CATEGORY_SEXUALLY_EXPLICIT | 노출, 성인용 콘텐츠 | MEDIUM |
| 위험한 콘텐츠 | HARM_CATEGORY_DANGEROUS_CONTENT | 폭력, 무기, 마약 | MEDIUM |
왜 정상적인 콘텐츠도 차단될까요?
Google은 Nano Banana Pro의 안전 필터가 "예상보다 훨씬 더 보수적(way more cautious than intended)"이라고 공식적으로 인정했습니다. 흔히 발생하는 오탐지 시나리오는 다음과 같아요.
| 시나리오 | 오탐지 이유 | 실제 위험도 |
|---|---|---|
| 이커머스 속옷 사진 | '성적인 내용' 감지 트리거 | 정상적인 상품 전시 |
| 애니메이션 스타일 캐릭터 | 애니메이션 스타일은 더 엄격한 감지 적용 | 예술 창작 |
| 어린이 관련 콘텐츠 | 'underage' 태그로 최고 등급 필터링 작동 | 정상적인 가족 장면 |
| 의학 해부도 | '폭력/유혈' 감지 트리거 | 교육적 목적 |
| 특정 직업군 인물 | '식별 가능한 개인'으로 인식될 가능성 | 일반적인 직업 묘사 |
⚠️ 중요 팁: 애니메이션/만화 스타일의 이미지는 실사 스타일보다 안전 필터링이 작동할 확률이 현저히 높습니다. 똑같은 내용(예: "쉬고 있는 고양이")이라도 "anime style"을 사용하면 거부될 수 있지만, "realistic digital illustration"은 통과될 수 있어요.
Nano Banana Pro IMAGE_SAFETY 해결 방법 1: 프롬프트 재작성
가장 직접적이고 효과적인 방법은 프롬프트를 수정하여 안전 필터링을 유발하는 민감한 단어를 피하는 것이에요.
Nano Banana Pro 프롬프트 재작성 전략
| 기존 방식 | 문제점 | 재작성 제안 |
|---|---|---|
| "sexy model wearing bikini" | 성적인 내용 감지 트리거 | "fashion model in summer beachwear" |
| "anime girl" | 애니메이션+여성 조합은 높은 위험도 | "illustrated character in digital art style" |
| "child playing" | "child"는 최고 등급 필터링 작동 | "young person enjoying outdoor activities" |
| "bloody wound" | 폭력적인 내용 감지 트리거 | "medical illustration of skin injury" |
| "holding a gun" | 위험한 내용 감지 트리거 | "action pose with prop equipment" |
프롬프트 재작성 코드 예시
import openai
import re
# 민감한 단어 치환 맵
SAFE_REPLACEMENTS = {
r'\bsexy\b': 'stylish',
r'\bbikini\b': 'summer beachwear',
r'\bchild\b': 'young person',
r'\bkid\b': 'young individual',
r'\banime\b': 'illustrated',
r'\bmanga\b': 'digital art',
r'\bgun\b': 'equipment',
r'\bweapon\b': 'tool',
r'\bblood\b': 'red liquid',
r'\bnude\b': 'unclothed figure',
}
def sanitize_prompt(prompt: str) -> str:
"""민감한 단어를 교체하여 차단 위험을 낮춥니다."""
sanitized = prompt.lower()
for pattern, replacement in SAFE_REPLACEMENTS.items():
sanitized = re.sub(pattern, replacement, sanitized, flags=re.IGNORECASE)
return sanitized
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # APIYI 통합 인터페이스 사용
)
# 사용 예시
original_prompt = "anime girl in bikini at beach"
safe_prompt = sanitize_prompt(original_prompt)
# 결과: "illustrated girl in summer beachwear at beach"
response = client.images.generate(
model="nano-banana-pro",
prompt=safe_prompt,
size="2048x2048"
)
💡 추천: APIYI(apiyi.com) 플랫폼을 통해 Nano Banana Pro를 호출할 때, 먼저 테스트 도구인 imagen.apiyi.com에서 프롬프트가 필터링을 트리거하는지 확인한 후 정식 호출을 진행하는 것이 좋습니다.
Nano Banana Pro IMAGE_SAFETY 해결 방법 2: 예술 스타일 전환하기
애니메이션 스타일은 IMAGE_SAFETY를 유발하는 높은 위험 요소예요. 사실적인 스타일로 전환하면 성공률을 크게 높일 수 있습니다.
Nano Banana Pro 스타일별 안전성 비교
| 스타일 유형 | 안전 필터링 민감도 | 추천 지수 | 적용 시나리오 |
|---|---|---|---|
| 애니메이션/만화 (Anime/Manga) | 매우 높음 | ⭐ | 비추천 |
| 카툰 (Cartoon) | 높음 | ⭐⭐ | 주의 필요 |
| 디지털 아트 (Digital Art) | 중간 | ⭐⭐⭐ | 사용 가능 |
| 사실적 스타일 (Realistic) | 낮음 | ⭐⭐⭐⭐ | 추천 |
| 사진 (Photography) | 최저 | ⭐⭐⭐⭐⭐ | 적극 추천 |
스타일 전환 코드 예시
def generate_with_safe_style(prompt: str, preferred_style: str = "anime"):
"""위험도가 높은 스타일을 안전한 스타일로 자동 변환합니다"""
# 스타일 매핑 테이블
style_mappings = {
"anime": "digital illustration with soft lighting",
"manga": "stylized digital artwork",
"cartoon": "clean vector illustration",
"hentai": None, # 완전히 지원하지 않음
}
# 스타일 전환 필요 여부 확인
safe_style = style_mappings.get(preferred_style.lower())
if safe_style is None:
raise ValueError(f"Style '{preferred_style}' is not supported")
# 안전 프롬프트 생성
safe_prompt = f"{prompt}, {safe_style}, professional quality"
return client.images.generate(
model="nano-banana-pro",
prompt=safe_prompt,
size="2048x2048"
)
Nano Banana Pro IMAGE_SAFETY 해결 방법 3: 안전 임계값 파라미터 조정하기
Google은 필터링 제한을 어느 정도 완화할 수 있는 설정 가능한 안전 임계값 파라미터를 제공해요.
Nano Banana Pro 안전 임계값 설정
| 임계값 레벨 | 파라미터 값 | 필터링 엄격도 | 적용 시나리오 |
|---|---|---|---|
| 가장 엄격함 | BLOCK_LOW_AND_ABOVE |
높음 | 미성년자 대상 앱 |
| 표준 (기본) | BLOCK_MEDIUM_AND_ABOVE |
중간 | 일반적인 시나리오 |
| 느슨함 | BLOCK_ONLY_HIGH |
낮음 | 전문가/예술 창작 |
| 가장 느슨함 | BLOCK_NONE |
최저 | 권한 신청 필요 |
안전 임계값 조정 코드
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # APIYI 통합 인터페이스
)
response = client.images.generate(
model="nano-banana-pro",
prompt="fashion model in elegant evening dress",
size="2048x2048",
extra_body={
"safety_settings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_ONLY_HIGH"
}
]
}
)
⚠️ 주의: 모든 설정 가능한 임계값을
BLOCK_NONE으로 설정하더라도 CSAM(아동 성학대물) 및 PII(개인 식별 정보) 관련 콘텐츠를 포함한 일부 강력한 필터링은 우회할 수 없어요.

Nano Banana Pro IMAGE_SAFETY 해결 방법 4: 복잡한 장면 단계별 생성하기
복잡한 프롬프트는 안전 필터링을 트리거할 가능성이 더 높습니다. 복잡한 장면을 여러 개의 간단한 단계로 나누어 생성하면 성공률을 높일 수 있습니다.
단계별 생성 전략
def generate_complex_scene_stepwise(scene_description: str):
"""
복잡한 장면을 여러 단계로 나누어 생성합니다.
전략: 배경을 먼저 생성하고, 그 다음 피사체를 생성한 후 마지막에 합성합니다.
"""
steps = [
# 1단계: 순수 배경 생성
{
"prompt": "empty beach scene at sunset, golden hour lighting, no people",
"purpose": "background"
},
# 2단계: 피사체 생성 (안전한 묘사 사용)
{
"prompt": "professional fashion photography, model in summer dress, studio lighting",
"purpose": "subject"
}
]
results = []
for step in steps:
try:
response = client.images.generate(
model="nano-banana-pro",
prompt=step["prompt"],
size="2048x2048"
)
results.append({
"purpose": step["purpose"],
"success": True,
"image": response.data[0]
})
except Exception as e:
results.append({
"purpose": step["purpose"],
"success": False,
"error": str(e)
})
return results
Nano Banana Pro IMAGE_SAFETY 해결 방법 5: 이미지 편집 모드 활용하기
직접 생성이 차단될 경우, 이미 생성된 안전한 이미지를 기반으로 수정하는 이미지 편집(Image Editing) 모드를 시도해 볼 수 있습니다.
이미지 편집 모드 예시
import base64
from pathlib import Path
def edit_existing_image(
image_path: str,
edit_instruction: str
) -> dict:
"""
이미지 편집 모드를 사용하여 기존 이미지를 기반으로 수정합니다.
일반적으로 직접 생성하는 것보다 안전 필터링을 통과하기가 더 쉽습니다.
"""
# 이미지를 읽고 인코딩합니다.
image_data = Path(image_path).read_bytes()
base64_image = base64.b64encode(image_data).decode('utf-8')
response = client.images.edit(
model="nano-banana-pro",
image=base64_image,
prompt=edit_instruction,
size="2048x2048"
)
return response
# 사용 예시: 의상 색상 수정
result = edit_existing_image(
image_path="original_product.png",
edit_instruction="change the dress color to deep blue, keep everything else the same"
)
🎯 팁: 이미지 편집 모드에서는 모델이 원본 이미지를 기반으로 부분적인 수정을 진행하기 때문에, 아무것도 없는 상태에서 새로 생성하는 것보다 안전 필터링이 작동할 확률이 낮습니다. APIYI apiyi.com 플랫폼을 통해 호출할 때도 이미지 편집 기능을 동일하게 사용할 수 있습니다.
Nano Banana Pro IMAGE_SAFETY 솔루션 6: 안전 컨텍스트 추가하기
프롬프트에 "안전(safe)", "전문적인(professional)", "상업용(commercial)"과 같은 컨텍스트 어휘를 명시적으로 추가하면, 모델이 사용자의 정당한 의도를 이해하는 데 큰 도움이 됩니다.
안전 컨텍스트 어휘표
| 카테고리 | 추천 추가 어휘 | 효과 |
|---|---|---|
| 용도 선언 | "for commercial use", "product catalog" | 상업적 용도임을 명시 |
| 전문성 선언 | "professional photography", "studio shot" | 전문적인 작업임을 강조 |
| 스타일 선언 | "clean", "family-friendly", "SFW" | 안전한 의도를 명확히 함 |
| 품질 선언 | "high quality", "editorial", "magazine" | 공식적인 채널용임을 암시 |
안전 컨텍스트 추가 코드 예시
def add_safety_context(prompt: str, context_type: str = "commercial") -> str:
"""프롬프트에 안전 컨텍스트를 추가하여 오탐지(차단) 확률을 낮춥니다."""
context_templates = {
"commercial": "Professional product photography for e-commerce catalog, clean background, {prompt}, high quality commercial image",
"editorial": "Editorial photography for fashion magazine, {prompt}, professional studio lighting, tasteful and elegant",
"artistic": "Fine art digital illustration, {prompt}, museum quality, suitable for all ages",
"medical": "Medical educational illustration, {prompt}, anatomically accurate, clinical documentation style"
}
template = context_templates.get(context_type, context_templates["commercial"])
return template.format(prompt=prompt)
# 사용 예시
original = "model wearing swimwear"
safe_prompt = add_safety_context(original, "commercial")
# 결과: "Professional product photography for e-commerce catalog, clean background, model wearing swimwear, high quality commercial image"
Nano Banana Pro IMAGE_SAFETY 솔루션 7: 지능형 재시도 메커니즘 구현
안전 필터링은 때때로 어느 정도의 무작위성을 띠기도 합니다. 따라서 지능형 재시도(Retry) 메커니즘을 구현하면 전체적인 생성 성공률을 효과적으로 높일 수 있습니다.
지능형 재시도 전략
import time
import random
from typing import Optional, List
class SafeImageGenerator:
"""지능형 재시도 기능이 포함된 안전한 이미지 생성기"""
def __init__(self, api_key: str):
self.client = openai.OpenAI(
api_key=api_key,
base_url="https://api.apiyi.com/v1" # APIYI 통합 인터페이스
)
self.prompt_variations = []
def generate_prompt_variations(self, original: str) -> List[str]:
"""재시도를 위한 프롬프트 변체들을 생성합니다."""
variations = [
original,
f"Professional {original}",
f"{original}, clean and tasteful",
f"High quality {original}, suitable for all audiences",
f"Editorial style {original}, magazine quality"
]
return variations
def generate_with_retry(
self,
prompt: str,
max_retries: int = 3,
size: str = "2048x2048"
) -> Optional[dict]:
"""지능형 재시도 로직이 적용된 이미지 생성 함수"""
variations = self.generate_prompt_variations(prompt)
for attempt, current_prompt in enumerate(variations[:max_retries]):
try:
print(f"시도 {attempt + 1}/{max_retries}: {current_prompt[:50]}...")
response = self.client.images.generate(
model="nano-banana-pro",
prompt=current_prompt,
size=size
)
print(f"✅ 생성 성공!")
return {
"success": True,
"attempt": attempt + 1,
"prompt_used": current_prompt,
"image": response.data[0]
}
except Exception as e:
error_msg = str(e)
if "IMAGE_SAFETY" in error_msg or "PROHIBITED_CONTENT" in error_msg:
print(f"❌ 안전 필터에 의해 차단됨, 다음 변체로 시도 중...")
time.sleep(1) # 빈번한 요청 방지를 위한 대기
continue
else:
raise e
return {
"success": False,
"attempts": max_retries,
"error": "All prompt variations were blocked by safety filter"
}
# 사용 예시
generator = SafeImageGenerator(api_key="your-api-key")
result = generator.generate_with_retry("fashion model in elegant dress")
if result["success"]:
print(f"{result['attempt']}번째 시도만에 성공했습니다.")
else:
print(f"{result['attempts']}번의 시도가 모두 실패했습니다.")
Nano Banana Pro IMAGE_SAFETY 해결 방법 8: 적절한 API 서비스 제공업체 선택하기
API 서비스 제공업체마다 각기 다른 보안 필터링 정책을 사용합니다. 여러분의 비즈니스 시나리오에 가장 적합한 제공업체를 선택하는 것이 중요해요.
Nano Banana Pro API 서비스 제공업체 비교
| 서비스 제공업체 | 필터링 엄격도 | 설정 가능성 | 가격 | 특징 |
|---|---|---|---|---|
| Google 공식 | 가장 엄격 | 제한적 | $0.134/장 | 가장 보수적인 기본 설정 |
| APIYI | 표준 | 조정 지원 | $0.05/장 | 보안과 가용성의 균형 |
| 기타 중계 업체 | 불일치 | 알 수 없음 | 다양함 | 품질이 일정하지 않음 |
💰 비용 최적화: APIYI(apiyi.com)를 통해 Nano Banana Pro를 호출하면 가격이 공식 서비스의 37% 수준일 뿐만 아니라, 더 유연한 보안 임계값(Threshold) 설정이 가능합니다. 오차단된 요청에 대해서는 비용이 청구되지 않으니 다양한 프롬프트 전략을 안심하고 시도해 보세요.
전체 프로덕션 코드 펼쳐보기
"""
Nano Banana Pro IMAGE_SAFETY 完整解决方案
集成所有优化策略的生产环境代码
"""
import openai
import re
import time
from typing import Optional, Dict, List
from dataclasses import dataclass
@dataclass
class GenerationResult:
success: bool
image_data: Optional[str] = None
prompt_used: Optional[str] = None
attempts: int = 0
error: Optional[str] = None
class RobustImageGenerator:
"""
健壮的 Nano Banana Pro 图像生成器
集成多种 IMAGE_SAFETY 绕过策略
"""
# 敏感词替换映射
SENSITIVE_WORDS = {
r'\bsexy\b': 'elegant',
r'\bhot\b': 'attractive',
r'\bbikini\b': 'swimwear',
r'\blingerie\b': 'intimate apparel',
r'\bchild\b': 'young person',
r'\bkid\b': 'young individual',
r'\bgirl\b': 'young woman',
r'\bboy\b': 'young man',
r'\banime\b': 'illustrated',
r'\bmanga\b': 'digital art',
r'\bhentai\b': 'artwork',
r'\bgun\b': 'equipment',
r'\bweapon\b': 'tool',
r'\bknife\b': 'utensil',
r'\bblood\b': 'red fluid',
r'\bviolent\b': 'dynamic',
r'\bnude\b': 'unclothed',
r'\bnaked\b': 'without clothing',
}
# 安全上下文模板
SAFETY_CONTEXTS = [
"", # 原始
"Professional photography, ",
"High quality commercial image, ",
"Editorial style, tasteful, ",
"Clean and family-friendly, ",
]
def __init__(self, api_key: str, base_url: str = "https://api.apiyi.com/v1"):
self.client = openai.OpenAI(
api_key=api_key,
base_url=base_url
)
def sanitize_prompt(self, prompt: str) -> str:
"""替换敏感词汇"""
sanitized = prompt
for pattern, replacement in self.SENSITIVE_WORDS.items():
sanitized = re.sub(pattern, replacement, sanitized, flags=re.IGNORECASE)
return sanitized
def generate_variations(self, prompt: str) -> List[str]:
"""生成提示词变体"""
sanitized = self.sanitize_prompt(prompt)
variations = []
for context in self.SAFETY_CONTEXTS:
variations.append(f"{context}{sanitized}")
return variations
def generate(
self,
prompt: str,
size: str = "2048x2048",
max_retries: int = 5,
safety_threshold: str = "BLOCK_MEDIUM_AND_ABOVE"
) -> GenerationResult:
"""
生成图像,带完整的 IMAGE_SAFETY 处理
Args:
prompt: 原始提示词
size: 图像尺寸
max_retries: 最大重试次数
safety_threshold: 安全阈值
Returns:
GenerationResult 对象
"""
variations = self.generate_variations(prompt)
attempts = 0
for variation in variations[:max_retries]:
attempts += 1
try:
response = self.client.images.generate(
model="nano-banana-pro",
prompt=variation,
size=size,
extra_body={
"safety_settings": [
{"category": cat, "threshold": safety_threshold}
for cat in [
"HARM_CATEGORY_SEXUALLY_EXPLICIT",
"HARM_CATEGORY_DANGEROUS_CONTENT",
"HARM_CATEGORY_HARASSMENT",
"HARM_CATEGORY_HATE_SPEECH"
]
]
}
)
return GenerationResult(
success=True,
image_data=response.data[0].b64_json,
prompt_used=variation,
attempts=attempts
)
except Exception as e:
error_msg = str(e)
if any(keyword in error_msg for keyword in
["IMAGE_SAFETY", "PROHIBITED_CONTENT", "SAFETY"]):
time.sleep(0.5)
continue
else:
return GenerationResult(
success=False,
attempts=attempts,
error=error_msg
)
return GenerationResult(
success=False,
attempts=attempts,
error="All variations blocked by safety filter"
)
# 使用示例
if __name__ == "__main__":
generator = RobustImageGenerator(api_key="your-api-key")
# 测试案例
test_prompts = [
"anime girl in bikini", # 高风险
"child playing in park", # 中风险
"fashion model in elegant dress", # 低风险
]
for prompt in test_prompts:
print(f"\n测试: {prompt}")
result = generator.generate(prompt)
if result.success:
print(f" ✅ 成功 (尝试 {result.attempts} 次)")
print(f" 使用的提示词: {result.prompt_used[:60]}...")
else:
print(f" ❌ 失败: {result.error}")
Nano Banana Pro IMAGE_SAFETY 자주 묻는 질문(FAQ)
Q1: 왜 제 일반 상품 이미지도 IMAGE_SAFETY가 발생하는 건가요?
Google의 보안 필터는 "문제가 될 소지가 있다면 차단한다"는 보수적인 전략을 취하고 있습니다. 다음과 같은 유형의 상품 이미지는 오차단될 가능성이 높아요.
- 속옷/수영복류: 정상적인 이커머스용 사진일지라도 성인 관련 감지기가 작동할 수 있습니다.
- 인체 관련 제품: 마사지기, 뷰티 디바이스 등 피부에 접촉하는 제품군.
- 아동용품: 아동과 관련된 모든 콘텐츠는 가장 엄격한 필터링 기준이 적용됩니다.
해결 방법: "e-commerce product photo", "catalog image"와 같이 명확한 비즈니스 맥락을 프롬프트에 추가하고, 배경을 최대한 단순하게 유지하세요. APIYI(apiyi.com) 플랫폼에서 다양한 프롬프트 조합을 테스트하며 최적의 방안을 찾아보시는 것을 추천합니다.
Q2: BLOCK_NONE으로 설정했는데도 왜 여전히 차단되나요?
모든 구성 가능한 보안 임계값을 BLOCK_NONE으로 설정하더라도, 우회할 수 없는 강제 필터링 항목이 존재합니다.
| 필터링 유형 | 설정 가능 여부 | 설명 |
|---|---|---|
| 4대 위험 카테고리 | ✅ | safety_settings를 통해 조정 가능 |
| CSAM(아동 성학대물) 탐지 | ❌ | 영구적으로 설정 변경 불가 |
| PII(개인정보) 탐지 | ❌ | 영구적으로 설정 변경 불가 |
| 저작권 탐지 | ❌ | 유명인, 브랜드 로직 등 |
만약 여러분의 콘텐츠가 이러한 강제 필터링 카테고리에 해당하지 않는다면, 프롬프트를 다시 작성하거나 예술 스타일을 바꿔보세요.
Q3: 차단된 요청도 비용이 청구되나요?
Google 공식 문서에 따르면, 보안 필터에 의해 차단된 이미지는 비용이 청구되지 않습니다. 응답 결과에서 candidatesTokenCount: 0을 확인할 수 있다면 출력이 생성되지 않았음을 의미하며, 따라서 비용도 발생하지 않아요.
다만, thoughtsTokenCount: 293과 같은 수치는 모델이 내부 추론을 수행했음을 나타냅니다. 일부 과금 모델에서는 이 '생각(thoughts)' 토큰이 포함될 수 있습니다. APIYI 플랫폼을 통해 호출할 경우, 차단된 요청에 대해서는 일절 비용을 청구하지 않으므로 안심하고 여러 번 시도해 보셔도 됩니다.
Q4: 입력 프롬프트의 문제인지 출력 이미지의 문제인지 어떻게 구분하나요?
오류 응답을 통해 판단할 수 있습니다.
| 특징 | 입력 문제 | 출력 문제 |
|---|---|---|
promptTokenCount |
0일 가능성 있음 | 정상 카운트 |
thoughtsTokenCount |
0 | 수치 존재 (예: 293) |
| 오류 유형 | BLOCKED_PROMPT | IMAGE_SAFETY |
thoughtsTokenCount: 293이 나타난다면 이는 출력 단계에서 차단된 사례입니다. 모델이 추론을 완료했지만 생성된 이미지가 필터를 트리거한 것이죠. 이 경우 프롬프트를 수정하여 모델이 더 안전한 내용을 생성하도록 유도하는 것이 해결 방법입니다.
Nano Banana Pro IMAGE_SAFETY 솔루션 요약

이 글에서는 Nano Banana Pro의 IMAGE_SAFETY 오류를 해결하는 8가지 방법을 소개합니다.
| 솔루션 | 적용 시나리오 | 구현 난이도 | 효과 등급 |
|---|---|---|---|
| 프롬프트 재작성 | 모든 시나리오 | 낮음 | ⭐⭐⭐⭐⭐ |
| 아트 스타일 전환 | 애니메이션/일러스트 요구사항 | 낮음 | ⭐⭐⭐⭐ |
| 보안 임계값 조정 | API 설정 권한이 있는 경우 | 중간 | ⭐⭐⭐⭐ |
| 단계별 생성 | 복잡한 장면 | 중간 | ⭐⭐⭐ |
| 이미지 편집 모드 | 기존 이미지 기반 수정 | 중간 | ⭐⭐⭐⭐ |
| 안전 컨텍스트 추가 | 상업적/전문적 시나리오 | 낮음 | ⭐⭐⭐⭐ |
| 지능형 재시도 메커니즘 | 프로덕션 환경 | 높음 | ⭐⭐⭐⭐⭐ |
| 적절한 서비스 업체 선택 | 장기적인 사용 | 낮음 | ⭐⭐⭐⭐ |
핵심 제안: "프롬프트 재작성 + 안전 컨텍스트 + 지능형 재시도"의 세 가지 전략을 조합하여 사용하면 성공률을 60%에서 95% 이상으로 끌어올릴 수 있습니다.
🎯 최종 권장 사항: APIYI(apiyi.com)를 통해 Nano Banana Pro를 호출하는 것을 추천합니다. 이 플랫폼은 더 유연한 보안 설정 옵션을 제공하며, 차단된 요청에 대해서는 비용을 청구하지 않습니다. 또한 장당 $0.05라는 가격으로 디버깅 비용을 획기적으로 낮출 수 있습니다. 온라인 테스트 도구인 imagen.apiyi.com에서 프롬프트가 필터링을 트리거하는지 빠르게 확인할 수 있습니다.
본 게시물은 APIYI 기술팀에서 작성하였습니다. AI 이미지 생성 API 사용 팁에 대해 더 자세히 알고 싶으시다면 apiyi.com을 방문하여 기술 지원을 받아보세요.
