본문 바로가기

블로그 도전기

Replicate API로 AI 이미지 생성하기: Python 코드부터 환경변수(.env) 설정까지

리플리케이트(Replicate)의 API를 이용해 이미지를 생성해 보겠습니다.

 

지난 글에서 replicate 계정 등록하고 credit을 충전해 놓았으니,

이제 API token를 생성해야 합니다.

보통 key라고 하는데 replicate는 token이라고 하네요.(별로 중요하지 않음)

 

API token은 replicate에 접속 후 왼쪽 상단의 아이디 부분을 클릭하면

아래 그림처럼 메뉴가 보입니다. 

 

여기서 "API tokens"를 선택하면 화면이 바뀌고 "token name"을 입력하라고 합니다.

고민하지 말고 머리에 생각나는 대로 입력 후 "Create token"을 클릭.

 

이렇게 만들어진 "API token"을 복사한 후, ". env" 파일을 만들고 아래처럼 넣습니다.

(파일들은 아래에 첨부해 놓을게요)

REPLICATE_API_TOKEN = r8_***********************************

 

환경 변수명은 "REPLICATE_API_TOKEN"이라고 해줘야 됩니다.

 

이미지를 생성하는 코드 "imagecreate.py"는 아래와 같습니다.

이미지 생성 프롬프트들이 있는 json 파일을 읽어서 순서대로 생성하는 간단한 코드입니다.

import os
import sys
import time
import random
import dotenv
import json

import replicate

dotenv.load_dotenv()

def create_image(filename: str, prompt: str):
    output = replicate.run(
        "prunaai/p-image",
        input={
            "width": 720,
            "height": 1280,
            "prompt": prompt,
            "aspect_ratio": "9:16",
            "seed": random.randint(0, 2**32 - 1),
            "prompt_upsampling": False
        }
    )

    # output이 리스트인 경우 첫 번째 항목 사용
    if isinstance(output, list):
        output = output[0]

    with open(f"{filename}.png", "wb") as file:
        file.write(output.read())

if __name__ == '__main__':
    json_path = sys.argv[1]

    with open(json_path, "r", encoding='utf-8') as f:
        prompts = json.load(f)

    for key, data in prompts.items():
        filename = f"{int(key):03d}"
        start = time.time()
        create_image(filename, data["english_prompt"])
        elapsed = time.time() - start
        print(f"{filename}.png 생성 완료 ({elapsed:.1f}초)")

 

이미지 생성 프롬프트는 아래와 같이 json 파일로 만들었어요.

손으로 직접 만들어도 되지만 프로그램이나 AI에게 만들어 달라고 하면 편하게 만들 수 있습니다.

파일 이름은 아무렇게나 해도 되지만 이번 테스트에는 "imageprompt.json"이라고 했습니다.

{
  "0": {
    "english_prompt": "Graphic Novel Noir: A master shoemaker with deep wrinkles and sharp eyes, engraving his name into a leather sole with a silver tool, dark wooden workshop, heavy shadows, high contrast, low angle shot.",
    "korean_prompt": "그래픽 노블 누아르: 깊은 주름과 날카로운 눈매의 구두 장인이 은색 도구로 가죽 밑창에 자신의 이름을 새기는 모습, 어두운 나무 공방, 짙은 그림자, 높은 대비, 로우 앵글 샷."
  },
  "1": {
    "english_prompt": "Graphic Novel Noir: A weary farmer standing in a barren field under a storm-heavy sky, clutching a small bag of grain like a treasure, harsh wind blowing, desolate landscape, monochrome with deep blacks.",
    "korean_prompt": "그래픽 노블 누아르: 폭풍전야의 하늘 아래 황량한 들판에 서서 작은 곡식 자루를 보물처럼 움켜쥔 지친 농부, 거센 바람, 적막한 풍경, 깊은 블랙 톤의 흑백 스타일."
  },
  "2": {
    "english_prompt": "Graphic Novel Noir: A blacksmith striking red-hot iron on an anvil, sparks flying into the pitch-black surroundings, sweat glistening on a muscular back, powerful action shot, intense orange and black contrast.",
    "korean_prompt": "그래픽 노블 누아르: 모루 위에서 벌갛게 달군 철을 내리치는 대장장이, 칠흑 같은 어둠 속으로 튀는 불꽃, 근육질 등에 맺힌 땀방울, 강렬한 액션 샷, 강렬한 오렌지와 블랙의 대비."
  }
}

 

위에 언급한 코드와 프롬프트는 아래에 파일로 첨부했어요.(당연히. env파일에 token은 직접 넣어야 합니다.)

.env
0.00MB
imagecreate.py
0.00MB
imageprompt.json
0.00MB

 

이제 실행해 볼게요.

 

실행은 가상환경은 만들어서 진행하겠습니다.(python은 설치되었다는 전제로...)

현재 폴더는 " F:\Exam\replicate>"입니다.(여기에 파일 3개가 들어 있습니다)

아래를 쭉 실행해 줍니다.

 

F:\Exam\replicate>python -m venv venv

F:\Exam\replicate>venv\Scripts\activate

(venv) F:\Exam\replicate>

(venv) F:\Exam\replicate>pip install 

(venv) F:\Exam\replicate>pip install replicate

(venv) F:\Exam\replicate>python imagecreate.py imageprompt.json
000.png 생성 완료 (2.7초)
001.png 생성 완료 (1.6초)
002.png 생성 완료 (1.9초)

 

첫 번째 생성 이미지

 

두 번째 생성 이미지

 

대체로 생성된 이미지의 일관성이 많이 떨어지네요.

이래 가지고 이미지를 연결해서 동영상 만들면 보는 사람도 짜증, 만든 사람도 짜증, 모두가 짜증일 겁니다.

이미지 생성 프롬프트를 개판으로 만들어서 그래도.(이 영역은 아직도 고민 중입니다)

 

어쨌든 이제 replicate를 이용하여 기다리지 않고 여러 장의 이미지를 만들어 낼 수 있는 방법을 알았으니,

더 재마난 방법으로 발전할 수 있을 겁니다.

 

아래 동영상에서 사용된 이미지는 위 테스트에서 사용한 것과 같은 프롬프트를

캡컷에서 제공하는 seedream 4.0으로 만든 겁니다.

화면 연출은 비슷한데 이미지 느낌은 많이 다르네요. 공부가 더 필요해 보입니다. 

 

 

요즘 번아웃이라고 생각하는 사람이 많은데,

관련 주제로 만들었습니다. 조금 불편할 수도..