아직도 포토샵으로 이미지 속 글자 일일이 바꾸고 계세요? Python + Nano Banana API면 단번에 해결!

기범 ·2025년 11월 13일

혹시 이런 고민, 한 번쯤은 해보셨나요? 수십, 수백 장의 제품 사진이 쌓여 있는데, 가격이나 프로모션 문구 몇 자 바꾸라고 포토샵을 한 장 한 장 켜야 하는 상황. 글자 레이어를 찾아 조심스럽게 수정하고, 다른 이름으로 저장하고... 스무 장만 바꿔도 눈이 빠지고 머리가 아플 정도죠. 시간도 오래 걸리고 힘든 건 기본, 실수까지 동반되기 마련이죠. 어디 한두 장 빼먹는 실수는 태반...

예전의 우리라면 아마 이렇게 했겠죠:
1. 포토샵 실행...
2. 이미지 불러오기...
3. 글자 레이어 찾기...
4. 글자 수정...
5. 이미지 내보내기...
6. 위 과정 N번 반복...

수십, 수백 장의 이미지를 앞에 놓고 생각하면 정말 끔찍한 단순 노가다죠.

하지만 이제 우리는 이렇게 할 수 있습니다:
1. 파이썬 스크립트 실행.
2. 커피 한잔하고, 핸드폰이나 잠깐 만지고.
3. 짠! 모든 이미지가 알아서 수정되어 폴더에 쏙- 들어와 있음.

이 모든 마법의 주인공, 바로 오늘 소개해 드릴 AI 이미지 편집 기능입니다.

핵심 도구: Nano Banana API

한 마디로 정의하면, Nano Banana API는 간단한 글자 설명만으로 이미지 속 내용을 직접 수정할 수 있는 강력한 AI 도구입니다. 마치 디자이너에게 구두로 지시하는 것과 같죠.

"이미지 속 '¥19.9' 글자를 '¥9.9'로 바꿔줘"라고 명령만 하면, AI가 알아서 이해하고 수정을 완성해 준답니다.

준비물? 아주 간단한 3단계면 끝!

걱정 마세요. 준비 과정은 아주 간단해서 3분이면 충분합니다.

  1. Python 설치: 컴퓨터에 Python 3가 설치되어 있는지 확인해주세요.
  2. 라이브러리 설치: 네트워크 요청을 보낼 requests 라이브러리 하나만 필요합니다. 터미널이나 명령 프롬프트를 열고 아래 명령어를 실행하세요.
    pip install requests
  3. API 키 발급받기: API 제공 사이트에 가입해서 API Key를 발급받으세요. 이 키가 서비스를 이용하는 유일한 열쇠입니다.

자, 이제 준비 끝! 아주 간단하지 않나요?

실전! 바로 써먹는 전체 코드

아래에 완전한 파이썬 스크립트를 바로 드릴게요. YOUR_API_KEY 부분만 본인의 키로 바꾸고, 이미지 URL과 설명(프롬프트)만 수정하면 바로 실행할 수 있습니다.

코드에는 API 사용법을 상세히 설명하는 주석을 모두 달아놨어요.

import requests
import time
import json

# --- 1. 준비 단계: 본인의 API 키와 주소 설정 ---
# 본인의 API 키로 교체하세요
API_KEY = "YOUR_API_KEY" 
# 문서에 명시된 API 기본 주소
BASE_URL = "https://api.defapi.org" 
# 인증을 위한 요청 헤더. API 문서에서 요구하는 "Bearer <your-api-key>" 형식
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

def edit_image_with_text(image_url: str, prompt: str):
    """
    Nano Banana API를 사용해 텍스트 프롬프트에 따라 이미지 내용을 수정합니다.
    
    :param image_url: 수정할 이미지의 URL
    :param prompt: 수정 지시문. 예: "이미지의 가격 텍스트를 99원으로 변경해줘"
    :return: 수정된 이미지 URL, 실패 시 None 반환
    """
    print(f"🚀 이미지 처리 시작: {image_url}")
    print(f"📝 수정 지시문: {prompt}")

    # --- 2. 이미지 수정 작업 요청 ---
    # 작업을 생성하는 API 엔드포인트
    gen_url = f"{BASE_URL}/api/image/gen"
    
    # AI에게 무엇을 할지 알려주는 요청 본문 구성
    # model: "google/nano-banana" 모델 사용을 명시
    # prompt: 우리의 수정 지시문
    # images: 원본 이미지 URL (최대 4장), 여기서는 1장만 사용
    payload = {
        "model": "google/nano-banana",
        "prompt": prompt,
        "images": [image_url]
    }

    try:
        # 비동기 작업을 생성하기 위해 POST 요청 전송
        response = requests.post(gen_url, headers=headers, json=payload)
        response.raise_for_status()  # 요청 실패 시 (예: 401, 400) 예외 발생
        
        # 응답에서 task_id 추출. 이것으로 작업 상태를 추적합니다.
        task_id = response.json().get("data", {}).get("task_id")
        if not task_id:
            print("❌ 오류: task_id를 가져오지 못했습니다.")
            return None
            
        print(f"✅ 작업 생성 성공! 작업 ID: {task_id}")

        # --- 3. 작업 결과 폴링(반복) 확인 ---
        # 작업 상태를 조회하는 API 엔드포인트
        query_url = f"{BASE_URL}/api/task/query"
        
        # 작업이 성공하거나 실패할 때까지 반복 조회
        while True:
            # task_id를 파라미터로 GET 요청 전송
            params = {"task_id": task_id}
            query_response = requests.get(query_url, headers=headers, params=params)
            query_response.raise_for_status()
            
            result_data = query_response.json().get("data", {})
            status = result_data.get("status")
            
            print(f"⏳ 현재 작업 상태: {status}...")
            
            if status == "success":
                # 작업 성공! result 필드에서 수정된 이미지 URL 가져오기
                edited_image_url = result_data.get("result", [{}])[0].get("image")
                print(f"🎉 이미지 수정 완료! 새 이미지 주소: {edited_image_url}")
                return edited_image_url
            elif status == "failed":
                # 작업 실패, 실패 원인 출력
                reason = result_data.get("status_reason", {}).get("message", "알 수 없는 오류")
                print(f"❌ 작업 실패: {reason}")
                return None
            else:
                # 작업이 진행 중 (in_progress, pending 등), 5초 대기 후 재시도
                time.sleep(5)

    except requests.exceptions.RequestException as e:
        print(f"❌ 네트워크 요청 오류: {e}")
        return None
    except json.JSONDecodeError:
        print("❌ API 응답 파싱 실패. 유효한 JSON 형식이 아닙니다.")
        return None


if __name__ == "__main__":
    # --- 여기서 이미지 URL과 수정 지시문을 바꿔주세요 ---
    # 예제 이미지: 가격 라벨이 있는 제품 사진
    target_image_url = "https://cdn.openai.com/API/docs/images/body-lotion.png"
    # 예제 지시문: 가격을 새로운 값으로 변경
    modification_prompt = "Change the price text on the bottle to $9.99"
    
    # 함수를 호출해서 작업 시작 (여기서는 예시로 1장만 처리)
    # URL 리스트를 만들어 for문으로 감싸면 대량 처리도 가능합니다!
    final_image_url = edit_image_with_text(target_image_url, modification_prompt)
    
    if final_image_url:
        print("\n처리 과정이 끝났습니다. 위 URL을 방문해 결과를 확인해 보세요.")
    else:
        print("\n처리 과정이 끝났지만, 수정된 이미지를 성공적으로 가져오지 못했습니다.")

어떻게 사용하나요?

  1. 코드 저장: 위 코드를 batch_edit.py 와 같이 파이썬 파일로 저장하세요.
  2. API 키 입력: API_KEY = "YOUR_API_KEY" 라인을 찾아서 YOUR_API_KEY 부분을 발급받은 실제 키로 교체하세요.
  3. 이미지와 지시문 지정: if __name__ == "__main__": 부분에서 target_image_urlmodification_prompt 변수 두 개를 수정하세요.
  4. 스크립트 실행: 터미널에서 python batch_edit.py 명령어를 입력하세요.

그럼 터미널에 스크립트가 실시간으로 처리 진행 상황을 출력하다가, 작업이 완료되면 멈추는 걸 보실 수 있습니다. 대량 처리를 원하시면, 이미지 URL과 지시문을 리스트에 넣고 edit_image_with_text 함수를 반복문으로 호출하기만 하면 됩니다.

이제 반복적인 노동에서 한번에 해방된 기분 아니신가요? 바로 따라해보세요

profile
Hello world!

0개의 댓글