Nano Banana(Gemini 2.5 Flash Image)의 prompt engineering을 통한 정밀 이미지 생성
Nano Banana can be prompt engineered for nuanced AI image generation
TL;DR Highlight
Google의 autoregressive 이미지 생성 모델 Nano Banana가 기존 diffusion 모델 대비 압도적인 프롬프트 준수력을 보여주며, 복잡한 프롬프트 엔지니어링으로 극도로 세밀한 이미지 제어가 가능하다는 실험 결과를 정리한 글.
Who Should Read
AI 이미지 생성을 앱이나 워크플로우에 통합하려는 개발자, 또는 스토리보드·일러스트·콘텐츠 제작에 프로그래밍 방식으로 이미지를 생성하고 싶은 개발자.
Core Mechanics
- Nano Banana는 Google이 Gemini 2.5 Flash에 내장한 autoregressive 이미지 생성 모델로, diffusion 방식이 아니라 텍스트처럼 토큰(이미지당 1,290개)을 순차 생성해서 이미지를 만든다. LMArena에서 코드네임 'nano-banana'로 등장해 인기를 끌자 Google이 공식 별칭으로 채택했다.
- 가격이 1024×1024 기준 약 $0.04/장으로, gpt-image-1의 $0.17/장 대비 4분의 1 수준이다. 속도와 비용 면에서 diffusion 모델과 비슷한 수준을 유지하면서도 autoregressive 방식의 장점을 갖는다.
- 핵심 강점은 프롬프트 준수력(prompt adherence)이다. 컨텍스트 윈도우가 32,768 토큰으로 기존 CLIP의 77토큰, T5의 512토큰과는 비교가 안 될 만큼 넓어서, 매우 길고 복잡한 프롬프트도 충실히 반영한다.
- 저자는 'negative space prompting'이라는 기법을 소개하는데, 원하지 않는 요소를 명시적으로 금지하는 지시를 프롬프트에 포함시키면 불필요한 요소가 생성되는 것을 효과적으로 막을 수 있다.
- HTML 코드를 프롬프트로 넣으면 해당 웹페이지 렌더링을 놀라울 정도로 정확하게 이미지로 변환할 수 있다. 이는 넓은 컨텍스트 윈도우 덕분에 가능한 고유한 활용법이다.
- 반면 style transfer(스타일 변환)에는 약한 모습을 보인다. 특정 아트 스타일을 적용하려 해도 학습 데이터에 묶여 잘 안 되는 경우가 많다. 다만 커뮤니티에서는 참조 이미지 2장을 함께 넣으면 개선된다는 팁이 공유됐다.
- 저자가 만든 Python 패키지 gemimg을 사용하면 Gemini API의 복잡한 이미지 인코딩/디코딩 보일러플레이트 없이 몇 줄로 이미지를 생성할 수 있다. CLI도 지원한다.
- Google AI Studio에서 무료로 사용 가능하고, 가로세로 비율 등 파라미터도 설정할 수 있다. 다만 무료 버전에는 이미지 우측 하단에 워터마크가 찍힌다.
Evidence
- 한 사용자는 스토리보드 제작에 하루 수십 장씩 생성하며, 환경·카메라·피사체·구도·조명·색감·품질의 7개 레이어로 프롬프트를 구성해 캐릭터와 장면의 일관성을 수십 개 씬에 걸쳐 유지하고 있다고 공유했다. 바운딩 박스 편집 도구까지 만들어 불완전한 부분을 Claude와 연동해 수정하는 워크플로우를 구축했다고 한다.
- 자녀에게 Ender's Game 같은 텍스트를 일러스트로 만들어주는 프로젝트를 5번 이상 재작성했는데, Nano Banana가 가장 효과적이었다는 경험담이 있었다. 텍스트에서 엔티티를 추출하고, 아트 스타일에 맞는 캐릭터를 생성한 뒤 개별 일러스트로 조합하는 파이프라인을 사용한다고 한다.
- style transfer가 안 된다는 저자 의견에 반론도 있었다. 18세기 건축물 복원 프로젝트에서 SketchUp 모델이나 판화를 Nano Banana에 넣고 'make this into a photo'라고만 해도 형태를 유지하면서 스타일 변환이 잘 됐다는 경험이 공유됐다. 다만 '18세기'를 직접 언급하면 회화풍으로 나와서, '잘 보존된 역사 동네 사진' 같은 우회 표현이 필요했다고 한다.
- 신뢰성 문제를 제기하는 의견도 있었다. temperature를 0으로 설정하고 '절대 변경하지 마라'고 대문자로 강조해도, 이미지에 벽난로를 추가하거나 차고를 생성하는 등 랜덤한 대규모 편집이 산발적으로 발생해서 프로덕션 앱에 쓰기 어렵다는 지적이다.
- Gemini 2.5 Flash에 별도 system prompt를 넣어 이미지 생성용 프롬프트를 먼저 작성하게 하고, 그 출력을 Nano Banana에 전달하는 2단계 파이프라인이 고품질 이미지와 style transfer에 효과적이라는 팁이 공유됐다.
How to Apply
- 프로그래밍 방식으로 이미지를 대량 생성해야 하는 경우, gemimg 패키지를 설치하고 Gemini API 키만 세팅하면 2줄로 이미지 생성이 가능하다. gpt-image-1 대비 비용이 1/4 수준이므로 대량 생성 시 비용 절감 효과가 크다.
- 복잡한 장면을 생성할 때는 프롬프트를 환경/카메라/피사체/구도/조명/색감/품질 등 레이어별로 분리해서 작성하면 일관된 결과를 얻을 수 있다. 원하지 않는 요소는 negative space prompting으로 명시적으로 제외한다.
- style transfer가 필요하면 Gemini 2.5 Flash를 중간 프롬프트 작성자로 두고, 변환할 이미지 + 스타일 참조 이미지를 함께 제공하는 2단계 파이프라인을 구성하면 단순 텍스트 프롬프트보다 훨씬 좋은 결과를 얻을 수 있다.
- 프로덕션 앱에 적용할 때는 Nano Banana의 산발적 hallucination(없는 요소 추가) 문제를 감안해서, 생성 결과를 검증하는 후처리 단계를 반드시 포함해야 한다. temperature 0으로도 완전히 방지되지 않는다.
Code Example
snippet
from gemimg import GemImg
g = GemImg(api_key="AI...")
g.generate("A kitten with prominent purple-and-green fur.")
# CLI 사용법
# GEMINI_API_KEY="..." \
# uv run --with https://github.com/minimaxir/gemimg/archive/main.zip \
# python -m gemimg "a racoon holding a hand written sign that says I love trash"Terminology
Autoregressive model텍스트를 한 글자씩 이어 쓰듯이 이미지도 토큰을 하나씩 순서대로 생성하는 방식. GPT가 다음 단어를 예측하는 것처럼 다음 이미지 토큰을 예측한다.
Diffusion model노이즈가 가득한 이미지에서 시작해 점점 깨끗하게 만들어가는 방식의 이미지 생성 모델. Stable Diffusion, FLUX가 대표적.
Prompt adherence사용자가 프롬프트에 적은 요구사항을 얼마나 충실히 따르는지의 정도. 준수력이 낮으면 원하는 구도나 요소가 무시된다.
Negative space prompting이미지에 포함하지 말아야 할 요소를 명시적으로 나열하는 프롬프트 기법. '배경에 사람 없이', '텍스트 없이' 같은 제외 지시.
Style transfer한 이미지의 내용은 유지하면서 다른 이미지의 화풍이나 스타일만 적용하는 기법. 예: 사진을 수채화 스타일로 변환.
Context window모델이 한 번에 처리할 수 있는 입력의 최대 크기. 토큰 수로 표현하며, 클수록 더 길고 복잡한 프롬프트를 이해할 수 있다.