← 블로그

Z-Image-Turbo LoRA, WaveSpeed에서 커스텀 스타일 적용 (최대 3개 LoRA)

Z-Image-Turbo LoRA를 사용하여 커스텀 스타일, 캐릭터, 브랜드 아이덴티티를 적용하세요. 최대 3개의 LoRA를 중첩 적용할 수 있으며, 이미지당 $0.01입니다. 학습 가이드 포함 (1000 스텝당 $1.25).

7 min read
Z-Image-Turbo LoRA, WaveSpeed에서 커스텀 스타일 적용 (최대 3개 LoRA)

안녕하세요, 저는 Dora입니다. 저처럼 목업이 브랜드 기준에서 벗어나는 게 싫으셨나요? 청색이 자꾸 청록으로 기울고, 로고 마크는 가장자리가 흐릿해지고, 제품 사진은… 거의 맞는 것 같은데. 초안에서 ‘거의 맞음’은 괜찮지만, 잡음이 생깁니다. 그래서 저는 지난주에 WaveSpeed에서 Z-Image-Turbo와 LoRA를 써봤습니다. 새로운 걸 쫓으려는 게 아니라, ‘거의 맞음’을 프롬프트를 계속 손보지 않고도 ‘응, 바로 배포해’로 만들 수 있는지 확인하고 싶었거든요.

이건 제 메모입니다. 뭐가 잘 됐고, 어디서 막혔고, 한 번 세팅하면 방해받지 않도록 어떻게 구성했는지에 관한 이야기입니다.


LoRA란 무엇인가요?

LoRA(Low-Rank Adaptation)는 전체 모델을 재학습하지 않고도 큰 모델을 특정 스타일, 캐릭터, 미적 감각으로 유도하는 작고 정교한 레이어입니다. 추가하거나 제거할 수 있는 부드러운 렌즈라고 생각하면 됩니다. 기본 모델은 넓은 범위의 능력을 유지하고, LoRA는 그 모델에 특정 성향을 가르치는 역할을 합니다.

실제로 LoRA 파일은 크기가 작고, 학습 속도가 빠르며, 교체 비용도 저렴합니다. 마지막 특성이 워크플로우에서 중요합니다. 브랜드 팔레트나 캐릭터마다 별도의 모델 체크포인트를 원하지 않습니다. 빠른 기본 백본(Z-Image-Turbo) 하나와 교체 가능한 다이얼 몇 개만 있으면 됩니다.


왜 Z-Image-Turbo에 LoRA를 쓰나요?

WaveSpeed의 Z-Image-Turbo는 속도에 최적화되어 있습니다. 반복 작업에는 좋지만, 속도만으로는 ‘일관된 스타일’ 문제를 해결할 수 없습니다. LoRA가 그 공백을 채워줍니다. 덕분에 저는:

  • 기본 모델을 빠르게 유지하면서,
  • 특정 외관이나 캐릭터에 맞는 사전 제작된 LoRA를 붙이거나,
  • 내 자산에 맞는 작은 커스텀 LoRA를 학습시킬 수 있습니다.

놀라웠던 건 scale 파라미터가 주는 제어력이었습니다. 낮은 scale(0.3–0.6)은 기본 모델의 강점을 유지해줬습니다. 높은 scale(0.8–1.0)은 학습된 스타일로 더 강하게 밀어붙였는데, 때로는 너무 강했습니다. 낮게 시작해서 적절하다 싶을 때까지 올렸습니다. 이 단순한 습관 덕분에 일주일 동안 재렌더링이 약 3분의 1 정도 줄었습니다.


사전 제작된 LoRA 사용하기

경계를 파악하기 전에 학습부터 시작하고 싶지 않아서 먼저 사전 제작된 LoRA를 사용해봤습니다. WaveSpeed는 LoRA를 플러그인처럼 취급합니다. 파일을 지정하고, scale을 설정하고, 바로 사용하면 됩니다.

호환되는 LoRA 찾기

호환성은 포맷과 기본 모델 계열에 달려 있습니다. 유사한 디퓨전 백본을 기반으로 학습된 LoRA(Z-Image-Turbo 또는 그 계열과 호환된다고 명시된 것)는 대체로 잘 작동했습니다. 저는 짧은 체크리스트를 유지했습니다:

  • 같거나 인접한 기본 모델 계열,
  • 제공된 경우 버전 메모(날짜 + 모델 태그),
  • 선별된 결과물만 보여주지 않고 다양성을 보여주는 미리보기 갤러리.

LoRA가 ‘너무 완벽해’ 보이면 과적합을 의심했습니다. 테스트에서 그런 것들은 좁은 범위의 프롬프트에서만 잘 동작하다 무너지는 경향이 있었습니다. 좋은 세트는 조명이나 카메라 용어를 변경해도 잘 버텼습니다.

API 파라미터: path + scale

WaveSpeed의 API는 LoRA당 path(LoRA 파일 위치)와 scale(적용 강도)로 구성된 단순한 구조를 사용합니다. path는 WaveSpeed에 호스팅된 자산이거나 직접 관리하는 서명된 URL일 수 있습니다. scale은 float 값입니다. 저는 주로 0.35에서 0.7 사이에서 작업했습니다. 0.3 미만에서는 LoRA가 켜져 있는지 알 수 없는 경우가 많았고, 0.8 이상에서는 때때로 구성을 망가뜨렸습니다.

실제 실행에서의 작은 메모: path가 잘못되었거나 올바른 토큰 없이 자산이 비공개라면, 큰 오류가 나타나지 않을 수 있습니다. 그냥 기본 모델처럼 생긴 이미지가 나옵니다. 뭔가 수상할 정도로 평범해 보이면 path를 다시 확인하세요.

여러 LoRA 쌓기 (최대 3개)

최대 세 개의 LoRA를 쌓을 수 있습니다. 색상 처리용 하나, 브랜드 텍스처용 하나, 캐릭터 특징용 하나를 시도해봤습니다. 가능하긴 했지만, scale을 균형 있게 맞춘 후에야 잘 됐습니다. 두 LoRA가 충돌하면(예: 하나는 부드러운 필름 그레인을 고집하고 다른 하나는 선명한 제품 광택을 추가하는 경우), 이미지가 우유부단해 보입니다. 제 규칙은 이렇습니다:

  • 각각 0.3에서 시작,
  • 앵커 LoRA(타협 불가한 외관) 식별,
  • 그것을 느리게 올리고,
  • 나머지는 경쟁이 아닌 보완이 될 때까지 조금씩 조정.

브랜드 느낌과 반복되는 캐릭터가 모두 필요할 때 쌓기가 시간을 절약해줬습니다. 세 가지 강한 스타일을 한 번에 억지로 넣으려 했을 때는 시간이 절약되지 않았습니다. 그건 그냥 시행착오로 돌아가는 길이었습니다.


API 구현

이걸 작은 스크립트로 연결한 방법입니다. 실제로 배포하는 프롬프트를 사용했습니다: 배경 변형이 있는 제품 목업과 내부 문서용 캐릭터 샷 몇 개.

LoRA 파라미터 구조

요청 본문에 loras 배열이 포함됩니다. 각 항목:

  • path: 문자열 (WaveSpeed 자산 경로 또는 서명된 URL)
  • scale: float (0.0–1.0: 시작은 0.3–0.7 권장)

다른 Z-Image-Turbo 파라미터(prompt, negative_prompt, seed, steps, width/height)는 평소와 같이 작동합니다. 시드는 scale 변경 효과를 동등한 조건으로 비교하는 데 도움이 됐습니다.

Python 코드 예제

import requests


API_KEY = "YOUR_WAVESPEED_KEY"

ENDPOINT = "https://api.wavespeed.ai/v1/z-image-turbo/generate"


payload = {

"prompt": "minimal product photo of a cobalt-blue bottle on soft textured linen, natural window light, 50mm, f2.8",

"negative_prompt": "text, watermark, harsh shadows, warped label",

"width": 768,

"height": 768,

"steps": 16,

"seed": 12345,

"loras": [

{"path": "wavespeed://assets/brand/linen_texture_lora.safetensors", "scale": 0.45},

{"path": "wavespeed://assets/brand/cobalt_hue_lora.safetensors", "scale": 0.55}

]

}


headers = {

"Authorization": f"Bearer {API_KEY}",

"Content-Type": "application/json"

}


r = requests.post(ENDPOINT, json=payload, headers=headers, timeout=60)

r.raise_for_status()

result = r.json()
# 계정 설정에 따라 base64 이미지 또는 URL이 반환됩니다

print(result.get("images", []))

실제 실행에서 Z-Image-Turbo의 16 스텝은 미리보기 품질로 충분했습니다. 최종 이미지의 경우 22–24 스텝으로 올렸습니다. 제 계정에서는 이미지당 약 0.3–0.6초가 추가됐는데, 괜찮은 수준이었습니다.

LoRA Scale 균형 맞추기

저는 이렇게 반복했습니다:

  1. 시드 고정,
  2. 모든 LoRA를 0.3으로 설정,
  3. 앵커를 선택하고 적절하다 싶을 때까지 0.1씩 올리기,
  4. 나머지는 0.05–0.1 단위로 조정.

scale을 조정하는 동안 시드를 고정하면 효과를 직접 확인할 수 있었습니다. 균형이 마음에 들면 시드 고정을 해제해 다양성을 확보했습니다. 처음에는 시간이 절약되지 않았습니다. 감을 잡는 데만 15–20분을 썼으니까요. 하지만 3일째 되던 날, 프롬프트 수정을 멈췄다는 걸 깨달았습니다. scale이 스타일을 담당하고, 저는 레이아웃과 카피에 집중할 수 있었습니다.


커스텀 LoRA 학습

사전 제작된 LoRA를 써본 후, 클라이언트의 병 모양과 라벨 스타일을 위한 작은 LoRA를 학습시켰습니다. 병목 각도와 라벨 광택이 계속 달라지는 문제로 생기는 번거로운 주고받기를 줄이려는 목적이었습니다.

학습 데이터 준비 (ZIP 업로드)

이미지 18장을 수집하고, 배경을 정리하고, 메타데이터를 일관되게 유지했습니다. 이미지를 압축했습니다. 단순한 폴더 구조, 소문자 파일명, 공백 없이 만들어서 업로드했습니다. 라벨 텍스트가 중요한 이미지에는 이미지당 캡션을 3–4개 추가했습니다. 중요하지 않을 때는 캡션을 최소화했습니다. 캡션이 많을수록 라벨의 가독성 유지에 도움이 됐습니다.

작은 불편함: 거의 동일해 보이는 이미지는 도움이 되지 않았습니다. 거의 중복된 이미지를 제거하니 과적합이 줄었습니다.

학습 파라미터

가볍게 유지했습니다:

  • 해상도: 768 정사각형 크롭,
  • 배치 크기: 1,
  • 학습률: 보수적인 기본값,
  • 학습 스텝: 스타일 + 형태에 3,000–6,000,
  • 네트워크 랭크(r): 적당하게 — 높게 설정하면 원하는 것보다 ‘더 강하게’ 나왔습니다.

스텝을 ~8,000을 넘기면 병을 요청하지 않은 프롬프트에도 병이 나타나기 시작했습니다. 이상적이지 않았습니다. 스텝을 낮추고 더 깔끔한 데이터셋을 사용하는 게 더 나았습니다.

가격: 1,000 스텝당 $1.25

두 번의 실행(3,500 스텝과 5,000 스텝)이 1,000 스텝당 $1.25로 총 $10.63이 들었습니다. LoRA가 몇 달 동안 제값을 한다면 합리적인 비용입니다.

일반적인 학습 예산

이제 제가 예산을 잡는 방식:

  • 스타일 전용 LoRA: 2,000–4,000 스텝 ($2.50–$5.00),
  • 표정이 있는 캐릭터: 5,000–8,000 스텝 ($6.25–$10.00),
  • 제품 형태 + 라벨 디테일: 3,000–6,000 스텝 ($3.75–$7.50).

먼저 짧은 학습을 한 번 돌려서 결과를 확인한 다음, 괜찮아 보이면 추가하는 방식을 택하겠습니다. 두 번의 짧은 학습이 한 번의 긴 과적합 세션보다 낫습니다.


활용 사례

다음은 Z-Image-Turbo에서 LoRA가 더 빠른 배포를 도와준 상황들입니다. 매일은 아니지만, 작업이 맞을 때는 믿을 수 있었습니다.

브랜드 스타일 일관성

모든 프롬프트에 브랜드 단서를 다시 입력하는 게 지겨워졌다면, 0.4–0.6의 약한 스타일 LoRA가 색상, 대비, 텍스처를 일관되게 유지해줍니다. 저는 소셜 변형 이미지와 웹 배너에 이것을 사용했습니다. 결과물을 뛰어나게 만들어주진 않았지만, 일관성을 유지해줬습니다. 그게 핵심입니다. ‘분위기 수정’ 두 번째 라운드를 건너뛰어서 납품물당 5–7분을 절약했습니다.

캐릭터 LoRA

내부 문서와 온보딩 화면에 등장하는 가벼운 마스코트를 위해, 캐릭터 LoRA가 다양한 각도에서 특징을 일정하게 유지해줬습니다. 부드러운 색상 처리와 쌓아 사용하는 게 효과적이었지만, 캐릭터 scale을 0.35로 낮춘 후에야 가능했습니다. 더 높으면 조명을 덮어버렸습니다. 한번 설정하고 나니, 이상한 정신적 부담이 사라졌습니다. 얼굴이 달라질까 봐 걱정하지 않아도 됐으니까요.

제품별 미학

커스텀 병 LoRA는 라벨 왜곡을 줄이고 클로즈업에서 병목 형태를 보존해줬습니다. 완벽하진 않았습니다. 좁은 반사는 여전히 몇 번의 시도가 필요했지만, 사용 불가능한 렌더링 수를 줄여줬습니다. 조용한 승리는 예측 가능성이었습니다. “린넨 위에 쿼터 앵글”이라고 입력하면 그게 나왔습니다. 예상치 못한 변형이 아니라요.

이걸 좋아할 사람: 원하는 게 뭔지 이미 알고 있고 모델과 계속 실랑이하는 게 지겨운 분들. 좋아하지 않을 사람: 매번 완전히 새로운 스타일을 탐색하는 분들. LoRA는 안정화 도구입니다. 더 많은 불꽃놀이보다 예측 가능성을 중시할 때 빛을 발합니다.