나노바나나 무료 연결법 공개! n8n으로 이미지 편집부터 업로드까지 전부 자동화

1. 나노바나나(Gemini 2.5 Flash Image)의 등장과 기술적 우위

구글이 출시한 Gemini 2.5 Flash Image 모델, 일명 ‘나노바나나(Nanobanana)‘는 현재 AI 이미지 생성 분야에서 가장 주목받는 모델 중 하나다. 이 모델이 업계의 관심을 끄는 이유는 단순히 새로운 모델이라는 점을 넘어서, 벤치마크 스코어와 실사용 체감 품질 모두에서 기존 경쟁 모델들을 압도하는 성능을 보여주기 때문이다.

1.1 벤치마크 및 실사용 성능

나노바나나는 공개된 벤치마크 테스트에서 기존 이미지 생성 모델들보다 월등히 높은 점수를 기록했다. 더 중요한 것은 실제 사용자들이 체감하는 품질 측면에서도 ChatGPT의 이미지 생성 모델보다 빠른 속도와 더 높은 퀄리티를 동시에 제공한다는 평가를 받고 있다는 점이다.

1.2 이미지 편집 특화 기능

나노바나나의 가장 두드러진 강점은 이미지 편집(Image Editing) 기능이다. 이 모델은 다음과 같은 작업을 뛰어난 수준으로 처리한다:

  • 스타일 변환(Style Transfer): 기존 이미지의 스타일을 다른 이미지로 변경
  • 레퍼런스 기반 생성(Reference-based Generation): 레퍼런스 이미지를 기반으로 새로운 이미지 생성
  • 부분 편집(Selective Editing): 이미지의 특정 부분만 선택적으로 수정

1.3 접근성 문제와 해결책

현재 나노바나나는 구글 AI 스튜디오(Google AI Studio)에서 무료로 테스트할 수 있다. 하지만 n8n과 같은 자동화 도구와 연결하기 위해서는 API 버전이 필요한데, 구글이 공식적으로 제공하는 API는 무료 등급(Free Tier)에서 사용할 수 없다는 제약이 있다.

이 문제의 해결책은 OpenRouter라는 플랫폼을 활용하는 것이다. OpenRouter는 다양한 LLM(Large Language Model) API들을 하나의 플랫폼에서 통합 관리할 수 있는 서비스로, 마치 앱 스토어나 구글 플레이처럼 AI 모델 API들의 마켓플레이스 역할을 한다. 현재 OpenRouter에서는 Gemini 2.5 Flash Image Preview 버전을 무료로 제공하고 있어, 이를 통해 비용 부담 없이 나노바나나를 활용할 수 있다.

OpenRouter 설정 방법:

  1. OpenRouter 웹사이트에서 회원가입
  2. 검색창에 “gemini 2.5 flash image” 검색
  3. Preview Free 버전 선택
  4. API 탭에서 “Create API Key” 클릭하여 새 API 키 발급
  5. 발급받은 API 키 안전하게 보관

2. n8n 워크플로우 아키텍처 설계

이번 자동화 시스템은 사용자로부터 이미지와 텍스트 요청을 받아 나노바나나로 이미지를 생성·편집한 후, 최종 결과물을 구글 드라이브에 업로드하는 전체 프로세스를 자동화한다. 실제 업무 환경에서는 구글 드라이브 대신 블로그, 인스타그램 등 다양한 플랫폼과 연동할 수 있다.

2.1 시스템 플로우 개요

User Input (Form) 
  → File Processing (Base64 Conversion)
  → Data Merging
  → Field Classification
  → Prompt Engineering (ChatGPT)
  → Image Generation/Editing (Nanobanana via OpenRouter)
  → File Conversion
  → Upload to Google Drive

3. n8n 노드별 상세 구현

3.1 Form Submission 트리거 설정

워크플로우의 시작점은 사용자 입력을 받는 폼(Form)이다. n8n의 Form Submission 트리거를 사용하여 다음 세 가지 입력 요소를 구성한다:

폼 구성 요소:

  1. Reference Image (참조 이미지)

    • Type: File
    • Accepted formats: JPG, PNG
    • Required: No
    • Purpose: 스타일 변환의 기준이 되는 이미지
  2. Original Image (원본 이미지)

    • Type: File
    • Accepted formats: JPG, PNG
    • Required: No
    • Purpose: 편집 대상이 되는 원본 이미지
  3. Request (요청 내용)

    • Type: Text (Multiline)
    • Required: Yes
    • Purpose: 이미지 생성 또는 편집에 대한 텍스트 지시사항

Form 설정 코드 예시:

{
  "title": "이미지 편집 요청 - 나노바나나",
  "description": "나노바나나를 활용한 이미지 생성 및 편집 요청",
  "elements": [
    {
      "fieldLabel": "Reference Image",
      "fieldType": "file",
      "acceptedFileTypes": ".jpg,.png",
      "required": false
    },
    {
      "fieldLabel": "Original Image",
      "fieldType": "file",
      "acceptedFileTypes": ".jpg,.png",
      "required": false
    },
    {
      "fieldLabel": "이미지 생성/편집 요청 내용",
      "fieldType": "textarea",
      "required": true
    }
  ]
}

3.2 파일 처리: Base64 변환

AI 모델이 이미지를 처리하려면 파일을 Base64 문자열 형식으로 변환해야 한다. 이를 위해 두 개의 “Move Binary Data to Base64 String” 노드를 병렬로 구성한다.

첫 번째 Base64 변환 노드 (Reference Image):

  • Input Field: Reference Image
  • Output Field: referenceData
  • Settings: “Always Output Data” 활성화 (이미지가 없어도 워크플로우 진행)

두 번째 Base64 변환 노드 (Original Image):

  • Input Field: Original Image
  • Output Field: originalData
  • Settings: “Always Output Data” 활성화

3.3 데이터 병합 및 분류

두 개의 Base64 변환 결과를 하나로 합치기 위해 Merge 노드를 사용한다.

Merge 노드 설정:

  • Mode: Combine
  • Combine By: Position
  • Input 1: Reference Image Base64 노드
  • Input 2: Original Image Base64 노드

병합 후, Edit Fields (Set) 노드를 추가하여 이미지 존재 여부를 판별하는 변수를 생성한다.

이미지 존재 여부 판별 Expression:

{{
  $json.referenceData 
    ? 'Reference Image Exist' 
    : $json.originalData 
      ? 'Source Image Exist' 
      : 'Image does not exist'
}}

이 분류는 이후 세 가지 케이스별로 다른 프롬프트를 생성하는 데 활용된다:

  • Case 1: Reference Image Exist → 스타일 변환 작업
  • Case 2: Source Image Exist → 이미지 편집 작업
  • Case 3: Image does not exist → 새 이미지 생성 작업

3.4 프롬프트 엔지니어링 (ChatGPT 활용)

나노바나나에 최적화된 프롬프트를 생성하기 위해 ChatGPT-4를 활용한다. 구글의 개발자 문서에는 나노바나나를 효과적으로 활용하기 위한 프롬프트 템플릿과 권장사항이 제공되는데, 이를 매번 수동으로 작성하는 것은 비효율적이다. 따라서 ChatGPT에게 이 작업을 위임한다.

OpenAI 노드 설정:

  • Model: GPT-4.1
  • Message Type: System + User

System 프롬프트:

You are an expert in image generation and editing prompt engineering.
Your task is to create optimized English prompts for Gemini 2.5 Flash Image (Nanobanana).

Follow these three branching rules based on image availability:

1. IF Reference Image EXISTS:
   Apply the style of the reference image to the original image.
   Focus on style transfer while maintaining the subject of the original.

2. IF ONLY Original Image EXISTS (no reference):
   Modify the original image according to the text instruction.
   Preserve elements not mentioned in the instruction.

3. IF NO Images provided:
   Generate a new image based solely on the text instruction.

Always output prompts in English for optimal quality.
Include detailed visual descriptions, composition, lighting, and style specifications.

User 프롬프트:

Generate an image prompt following the system branching rules.

Image Exist Status: {{ $json.imageExist }}
User Request: {{ $json.request }}

Create a detailed, optimized prompt in English.

이 구조를 통해 ChatGPT는 입력된 이미지 상태와 사용자 요청을 분석하여, 나노바나나에 최적화된 영문 프롬프트를 자동으로 생성한다.

3.5 나노바나나 API 연결 (OpenRouter via HTTP Request)

나노바나나는 아직 n8n의 공식 노드로 제공되지 않으므로, HTTP Request 노드를 통해 OpenRouter API에 연결한다.

초기 설정 간편화 방법:

OpenRouter에서 제공하는 cURL 코드를 활용하면 설정을 빠르게 완료할 수 있다.

  1. OpenRouter 웹사이트에서 Gemini 2.5 Flash Image Preview 모델 선택
  2. API 탭에서 cURL 코드 복사
  3. n8n HTTP Request 노드에서 “Import cURL” 기능 사용
  4. 복사한 cURL 붙여넣기 → 자동 설정 완료

Authentication 설정:

자동 생성된 헤더 인증 방식 대신, n8n의 Predefined Credential을 사용한다.

  • Authentication Type: Predefined Credential Type
  • Credential: OpenRouter API
  • API Key: 앞서 발급받은 OpenRouter API 키 입력

요청 본문 동적 구성을 위한 Code 노드:

이미지 존재 여부에 따라 API 요청 본문을 동적으로 구성해야 하므로, HTTP Request 노드 이전에 Code 노드를 추가한다.

// Check image availability
const hasReference = $input.item.json.referenceData;
const hasOriginal = $input.item.json.originalData;
const promptText = $input.item.json.gptPrompt;
 
// Build content array
let content = [
  {
    type: "text",
    text: promptText
  }
];
 
// Add images if they exist
if (hasReference) {
  content.push({
    type: "image_url",
    image_url: {
      url: `data:image/jpeg;base64,${hasReference}`
    }
  });
}
 
if (hasOriginal) {
  content.push({
    type: "image_url",
    image_url: {
      url: `data:image/jpeg;base64,${hasOriginal}`
    }
  });
}
 
// Construct final JSON
const requestBody = {
  model: "google/gemini-2.5-flash-preview-0514:free",
  messages: [
    {
      role: "user",
      content: content
    }
  ]
};
 
return { json: requestBody };

HTTP Request 노드 Body 설정:

{{ $json }}

Code 노드에서 생성한 JSON을 그대로 전달하여, 이미지 유무에 관계없이 유연하게 API 요청을 처리한다.

3.6 결과 처리 및 파일 변환

나노바나나 API는 생성된 이미지를 Base64 URL 형식으로 반환한다. 이를 실제 이미지 파일로 확인하고 저장하려면 다시 파일 형식으로 변환해야 한다.

Base64 추출 (Edit Fields 노드):

API 응답에서 순수 Base64 데이터만 추출한다.

// Extract base64 data from image URL
{{ $json.imageUrl.split(',')[1] }}
  • Field Name: base
  • Expression: 위 코드로 설정하여 “data:image/jpeg;base64,” 접두사 제거

Convert to File (Base64 to File 노드):

  • Input Field: base
  • File Name: 원하는 파일명 설정 (예: edited_image_{{ $now.format('YYYY-MM-DD_HH-mm-ss') }}.jpg)

3.7 구글 드라이브 업로드

최종 단계로 생성된 이미지 파일을 구글 드라이브에 업로드한다.

Google Drive 노드 설정:

  • Operation: Upload a File
  • File Name: edited_image_{{ $now.format('YYYY-MM-DD_HH-mm-ss') }}.jpg
  • Parent Folder: 사전에 생성한 “Nanobanana” 폴더 선택
  • Binary Data: 이전 노드에서 변환된 파일 데이터

4. 실제 테스트 케이스 및 결과 분석

4.1 Test Case 1: 레퍼런스 기반 스타일 변환

입력:

  • Reference Image: 사무실 배경 이미지
  • Original Image: 프로필 사진
  • Request: “Reference Image에 원본 이미지 인물이 앉아서 코딩하는 느낌으로 이미지를 편집해줘”

결과: 사무실 환경의 스타일을 유지하면서 원본 인물의 얼굴을 합성하여, 자연스럽게 코딩하는 모습을 연출했다. 배경의 분위기와 조명이 레퍼런스 이미지와 일치하며, 심지어 화면에 코드까지 표시하는 디테일을 보여줬다.

4.2 Test Case 2: 선택적 부분 편집

입력:

  • Reference Image: None
  • Original Image: 유튜브 엔드카드 이미지
  • Request: “유튜브 엔드카드 이미지에서 다른 요소들은 변경하지 않고 배경 이미지 부분만 AI 자동화에 어울리는 느낌으로 변경해줘”

결과: 텍스트와 레이아웃은 그대로 유지하면서, 배경만 AI 자동화를 연상시키는 테크 분위기의 이미지로 정확하게 변경했다. 요청하지 않은 요소들은 전혀 건드리지 않는 높은 정확도를 보였다.

4.3 Test Case 3: 텍스트 기반 새 이미지 생성

입력:

  • Reference Image: None
  • Original Image: None
  • Request: “시민개발자 구씨는 AI 자동화 관련 사업을 하는 브랜드인데 해당 브랜드의 로고를 생성해줘”

결과: AI와 자동화를 상징하는 디자인 요소를 포함한 로고를 생성했다. 다만 “시민개발자 구씨”라는 한글 텍스트를 이미지에 포함시키려 했으나, 완벽하게 렌더링하지 못하고 비슷한 형태의 글자로 표현했다. 이는 현재 나노바나나의 한글 처리 한계를 보여준다.

5. 운영 시 주의사항 및 최적화 전략

5.1 이미지 해상도 관리

나노바나나 API는 컨텍스트 리밋(Context Limit)이 존재하므로, 너무 고해상도의 이미지를 입력하면 오류가 발생할 수 있다. 따라서 워크플로우에 이미지 리사이징 단계를 추가하는 것이 권장된다.

권장 해상도:

  • 최대 너비/높이: 2048px
  • 파일 크기: 5MB 이하

n8n의 이미지 처리 노드나 별도의 이미지 최적화 서비스를 전처리 단계에 추가하여 자동으로 리사이징하도록 구성할 수 있다.

5.2 프롬프트 엔지니어링 튜닝

ChatGPT가 생성하는 프롬프트가 항상 최적의 결과를 보장하지는 않는다. 실제 사용 중 생성된 프롬프트와 결과 이미지를 분석하여, System 프롬프트를 지속적으로 개선해야 한다.

프롬프트 개선 전략:

  • 실패 케이스 수집 및 패턴 분석
  • 특정 스타일이나 품질 키워드 추가 (예: “photorealistic”, “high detail”, “professional composition”)
  • 구글 개발자 문서의 Best Practice 반영

5.3 API 사용량 관리

OpenRouter의 무료 티어는 일일 할당량(Daily Quota)이 제한되어 있다. 결제 정보를 등록하지 않은 계정의 경우 하루 약 50회의 이미지 생성 요청만 가능하다.

사용량 최적화 방안:

  • 워크플로우에 요청 횟수 카운터 추가
  • 일일 한도 도달 시 알림 전송
  • 여러 OpenRouter 계정을 로테이션하는 로직 구현
  • 프로덕션 환경에서는 유료 플랜 고려

5.4 한글 텍스트 처리 한계

현재 나노바나나는 한글 텍스트를 이미지에 완벽하게 렌더링하지 못한다. 한글이 포함되어야 하는 경우 다음 전략을 고려한다:

해결 방안:

  1. 이미지 생성 시 텍스트 영역을 비워두고 생성
  2. 후처리 단계에서 별도의 이미지 편집 툴(ImageMagick, Pillow 등)로 한글 텍스트 오버레이
  3. 또는 한글 대신 영문으로 생성 후 수동 편집

5.5 에러 핸들링 및 재시도 로직

API 호출 실패, 타임아웃, 컨텍스트 리밋 초과 등 다양한 오류 상황에 대비해야 한다.

n8n 에러 핸들링 구현:

// HTTP Request 노드의 "Continue On Fail" 옵션 활성화
// 이후 IF 노드로 성공/실패 분기 처리
 
{{
  $json.error 
    ? 'failed' 
    : 'success'
}}

실패 시 재시도 로직을 추가하거나, 사용자에게 알림을 보내는 분기를 구성할 수 있다.

6. 확장 가능성 및 실무 활용 시나리오

6.1 콘텐츠 자동화 파이프라인

블로그 포스팅 자동화:

  1. RSS 트리거로 새 글 감지
  2. 글 내용 추출 및 요약
  3. 요약 기반 썸네일 이미지 생성 (나노바나나)
  4. 워드프레스 API로 이미지 업로드 및 포스트 연동

소셜 미디어 콘텐츠 생성:

  1. 스케줄 트리거 (매일 오전 9시)
  2. 데이터베이스에서 오늘의 콘텐츠 주제 가져오기
  3. 브랜드 가이드라인에 맞는 이미지 생성
  4. 인스타그램/페이스북 자동 포스팅

6.2 E-커머스 제품 이미지 자동화

배경 교체 및 스타일링:

  • 제품 원본 사진 + 다양한 배경 레퍼런스
  • 일괄 처리로 여러 버전의 제품 이미지 생성
  • 시즌별, 타겟 고객별 맞춤 이미지 제작

6.3 A/B 테스팅 자동화

광고 소재 변형 생성:

  • 하나의 원본 이미지로 다양한 스타일 변형 생성
  • 각 변형을 광고 플랫폼에 자동 업로드
  • 성과 데이터 수집 및 최적 버전 자동 선정

6.4 다중 플랫폼 배포 확장

현재 워크플로우의 구글 드라이브 업로드 부분을 다음과 같이 확장할 수 있다:

Generate Image (Nanobanana)
  ├─→ Upload to Google Drive
  ├─→ Upload to WordPress Media Library
  ├─→ Post to Instagram via Graph API
  ├─→ Send to Slack channel for review
  └─→ Store metadata in Airtable/Database

7. 기술적 의의 및 향후 전망

7.1 No-Code AI 자동화의 진화

이 워크플로우는 코드 작성 없이(일부 Expression 제외) 최신 AI 모델을 실무 프로세스에 통합할 수 있음을 보여준다. n8n과 같은 No-Code/Low-Code 플랫폼의 발전과 OpenRouter 같은 통합 API 서비스의 등장은 AI 기술의 접근성을 크게 향상시키고 있다.

7.2 멀티모달 AI의 실용화

나노바나나는 텍스트 지시사항과 이미지 입력을 동시에 처리하는 멀티모달(Multimodal) AI의 대표적 사례다. 이러한 기술은 단순한 이미지 생성을 넘어, 맥락을 이해하고 의도를 반영한 창작물을 산출할 수 있는 단계로 진화하고 있다.

7.3 개인 및 소규모 팀의 생산성 혁신

과거에는 전문 디자이너나 대규모 팀이 필요했던 비주얼 콘텐츠 제작이, 이제는 자동화 시스템 하나로 대체 가능한 영역이 늘어나고 있다. 이는 개인 크리에이터나 스타트업이 적은 리소스로도 높은 품질의 콘텐츠를 지속적으로 생산할 수 있는 환경을 만든다.

7.4 향후 개선 방향

  • 한글 지원 강화: 향후 모델 업데이트로 한글 렌더링 품질 개선 기대
  • Fine-tuning 지원: 브랜드 스타일 학습을 통한 맞춤형 이미지 생성
  • 실시간 처리: 더 빠른 응답 속도로 인터랙티브 애플리케이션 구현
  • 비용 최적화: 무료 티어 확대 또는 더 경쟁력 있는 가격 정책

💡 핵심 구현 포인트

OpenRouter를 통한 무료 API 활용

  • 구글 공식 API의 무료 티어 제한을 OpenRouter로 우회
  • Gemini 2.5 Flash Image Preview Free 버전 활용
  • 일일 50회 제한 내에서 테스트 및 소규모 운영 가능

삼중 분기 로직 (Three-Case Branching)

Case 1: Reference + Original → Style Transfer
Case 2: Original Only → Image Editing
Case 3: Text Only → Image Generation
  • 단일 워크플로우로 세 가지 사용 시나리오 모두 처리
  • 조건부 로직으로 유연한 API 요청 구성

ChatGPT를 활용한 메타 프롬프트 엔지니어링

  • AI가 AI를 위한 최적 프롬프트 생성
  • 구글 개발자 가이드라인 자동 반영
  • 사용자는 자연어 요청만으로 전문적 결과 획득

Base64 파이프라인 최적화

Binary File → Base64 String → AI Processing → Base64 Result → Binary File → Cloud Storage
  • AI 모델과 파일 시스템 간 원활한 데이터 변환
  • 중간 처리 과정에서 데이터 손실 최소화

워크플로우 활용 체크리스트:

✅ OpenRouter 계정 생성 및 API 키 발급
✅ n8n Form Submission 트리거 구성 (3개 필드)
✅ Base64 변환 노드 2개 병렬 구성 + Always Output Data 설정
✅ Merge 노드로 데이터 통합
✅ Edit Fields로 이미지 존재 여부 분류
✅ ChatGPT 노드로 프롬프트 엔지니어링
✅ Code 노드로 동적 JSON 생성
✅ HTTP Request로 OpenRouter API 호출
✅ Base64 추출 및 파일 변환
✅ Google Drive 업로드 (또는 원하는 플랫폼)


이 시스템을 통해 반복적인 이미지 제작 작업을 자동화하고, 창의적인 작업에 더 많은 시간을 투자할 수 있는 환경을 구축할 수 있다. 나노바나나의 뛰어난 이미지 편집 능력과 n8n의 유연한 자동화 기능이 결합된 이 워크플로우는, AI 시대의 콘텐츠 제작 방식을 보여주는 실용적 사례라 할 수 있다.