혹시 이런 고민, 한 번쯤은 해보셨나요? 수십, 수백 장의 제품 사진이 쌓여 있는데, 가격이나 프로모션 문구 몇 자 바꾸라고 포토샵을 한 장 한 장 켜야 하는 상황. 글자 레이어를 찾아 조심스럽게 수정하고, 다른 이름으로 저장하고... 스무 장만 바꿔도 눈이 빠지고 머리가 아플 정도죠. 시간도 오래 걸리고 힘든 건 기본, 실수까지 동반되기 마련이죠. 어디 한두 장 빼먹는 실수는 태반...
예전의 우리라면 아마 이렇게 했겠죠:
1. 포토샵 실행...
2. 이미지 불러오기...
3. 글자 레이어 찾기...
4. 글자 수정...
5. 이미지 내보내기...
6. 위 과정 N번 반복...
수십, 수백 장의 이미지를 앞에 놓고 생각하면 정말 끔찍한 단순 노가다죠.
하지만 이제 우리는 이렇게 할 수 있습니다:
1. 파이썬 스크립트 실행.
2. 커피 한잔하고, 핸드폰이나 잠깐 만지고.
3. 짠! 모든 이미지가 알아서 수정되어 폴더에 쏙- 들어와 있음.
이 모든 마법의 주인공, 바로 오늘 소개해 드릴 AI 이미지 편집 기능입니다.
한 마디로 정의하면, Nano Banana API는 간단한 글자 설명만으로 이미지 속 내용을 직접 수정할 수 있는 강력한 AI 도구입니다. 마치 디자이너에게 구두로 지시하는 것과 같죠.
"이미지 속 '¥19.9' 글자를 '¥9.9'로 바꿔줘"라고 명령만 하면, AI가 알아서 이해하고 수정을 완성해 준답니다.
걱정 마세요. 준비 과정은 아주 간단해서 3분이면 충분합니다.
requests 라이브러리 하나만 필요합니다. 터미널이나 명령 프롬프트를 열고 아래 명령어를 실행하세요.pip install requests자, 이제 준비 끝! 아주 간단하지 않나요?
아래에 완전한 파이썬 스크립트를 바로 드릴게요. 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처리 과정이 끝났지만, 수정된 이미지를 성공적으로 가져오지 못했습니다.")
batch_edit.py 와 같이 파이썬 파일로 저장하세요.API_KEY = "YOUR_API_KEY" 라인을 찾아서 YOUR_API_KEY 부분을 발급받은 실제 키로 교체하세요.if __name__ == "__main__": 부분에서 target_image_url과 modification_prompt 변수 두 개를 수정하세요.python batch_edit.py 명령어를 입력하세요.그럼 터미널에 스크립트가 실시간으로 처리 진행 상황을 출력하다가, 작업이 완료되면 멈추는 걸 보실 수 있습니다. 대량 처리를 원하시면, 이미지 URL과 지시문을 리스트에 넣고 edit_image_with_text 함수를 반복문으로 호출하기만 하면 됩니다.
이제 반복적인 노동에서 한번에 해방된 기분 아니신가요? 바로 따라해보세요