← Блог

Z-Image-Turbo LoRA на WaveSpeed: применяйте пользовательские стили (до 3 LoRA)

Используйте Z-Image-Turbo LoRA для применения пользовательских стилей, персонажей и фирменного стиля. Комбинируйте до 3 LoRA, $0.01 за изображение. Включает руководство по обучению ($1.25 за 1000 шагов).

8 min read
Z-Image-Turbo LoRA на WaveSpeed: применяйте пользовательские стили (до 3 LoRA)

Привет, я Дора. Как и вы, я устала от того, что мои макеты постоянно уходили от фирменного стиля: синий цвет всё время смещался в сторону бирюзового, логотип размывался по краям, а фотография продукта выглядела… почти правильно. «Почти» допустимо для черновиков, но это создаёт лишний шум. На прошлой неделе я попробовала LoRA с Z-Image-Turbo на WaveSpeed. Не ради новизны, а чтобы понять, можно ли превратить «достаточно близко» в «да, отправляем» без постоянного присмотра за промптами.

Это мои заметки: что сработало, где застряло, и как я настроила всё так, чтобы оно не мешало, когда уже отрегулировано.


Что такое LoRA?

LoRA (Low-Rank Adaptation) — это небольшой, точечный слой, который направляет большую модель к определённому стилю, персонажу или эстетике, без переобучения всей модели. Представьте это как мягкую линзу, которую можно надеть или снять. Базовая модель сохраняет свои широкие возможности: LoRA обучает её предпочтению.

На практике файлы LoRA компактны, быстро обучаются и дёшево заменяются. Последнее важно для рабочих процессов. Мне не нужен отдельный чекпоинт модели для каждой фирменной палитры или персонажа. Мне нужна одна быстрая основа (Z-Image-Turbo) и несколько сменных регуляторов.


Почему LoRA для Z-Image-Turbo?

Z-Image-Turbo на WaveSpeed настроен на скорость. Отлично для итераций, но скорость сама по себе не решает проблему «единого стиля». LoRA заполняет этот пробел. Я могу:

  • сохранять базовую модель быстрой,
  • подключать готовую LoRA для определённого вида или персонажа,
  • или обучить маленькую кастомную LoRA для своих ресурсов.

Меня удивило, насколько большой контроль давал параметр scale. Небольшое значение (0,3–0,6) сохраняло сильные стороны базовой модели. Более высокое (0,8–1,0) сильнее вдавливалось в выученный стиль — иногда слишком сильно. Я начинала с низкого значения, затем поднимала, пока не казалось правильным. Эта простая привычка за неделю сократила повторные рендеры примерно на треть.


Использование готовых LoRA

Сначала я пробовала готовые LoRA, потому что не хотела ничего обучать, пока не разберусь с границами. WaveSpeed обращается с LoRA как с плагином: укажи файл, задай scale, и вперёд.

Поиск совместимых LoRA

Совместимость зависит от формата и семейства базовых моделей. Если LoRA была обучена на похожей диффузионной основе (и отмечена как совместимая с Z-Image-Turbo или его предшественниками), она, как правило, работала корректно. Я держала короткий чеклист:

  • то же или смежное семейство базовых моделей,
  • примечания к версии, если есть (дата + тег модели),
  • галерея предпросмотра, показывающая разнообразие, а не только отборные удачные результаты.

Когда LoRA выглядела «слишком идеально», я предполагала переобучение. В моих тестах такие LoRA обычно ломались на промптах, выходящих за рамки узкого диапазона. Более качественные наборы держались, когда я меняла освещение или параметры камеры.

Параметры API: path + scale

API WaveSpeed использует простую структуру для каждой LoRA: path (где находится файл LoRA) и scale (насколько сильно она применяется). Path может быть размещённым ресурсом WaveSpeed или подписанным URL, которым вы управляете. Scale — это число с плавающей точкой. Я работала преимущественно в диапазоне 0,35–0,7. Ниже 0,3 я часто не могла понять, включена ли LoRA; выше 0,8 она иногда разрушала композицию.

Небольшое замечание по реальным запускам: если путь неверен или ресурс приватный без нужного токена, вы не всегда получите явную ошибку — просто изображения будут выглядеть как базовая модель. Когда что-то казалось подозрительно обычным, я перепроверяла путь.

Стекирование нескольких LoRA (до 3)

Можно стекировать до трёх LoRA. Я попробовала одну для цветовой обработки, одну для фирменной текстуры и одну для черт персонажа. Это сработало, но только после того, как я сбалансировала их значения scale. Если две LoRA конфликтуют (например, одна настаивает на мягком зерне плёнки, а другая добавляет чёткий блеск продукта), изображение выглядит нерешительным. Моё правило:

  • начинать каждую с 0,3,
  • определить якорную LoRA (обязательный вид),
  • медленно поднимать её значение,
  • слегка настраивать остальные, чтобы они дополняли, а не конкурировали.

Стекирование сэкономило мне время, когда нужны были и фирменный стиль, и повторяющийся персонаж. Оно не экономило время, когда я пыталась одновременно использовать три тяжёлых стиля. Это просто возвращало меня к методу проб и ошибок.


Реализация через API

Вот как я реализовала это в небольшом скрипте. Я использовала промпты, которые реально применяю в работе: макеты продуктов с вариантами фона, плюс несколько снимков персонажей для внутренней документации.

Структура параметра LoRA

Тело запроса включает массив loras. Каждый элемент:

  • path: строка (путь к ресурсу WaveSpeed или подписанный URL)
  • scale: число с плавающей точкой (0,0–1,0; рекомендую начинать с 0,3–0,7)

Остальные параметры Z-Image-Turbo (prompt, negative_prompt, seed, steps, width/height) работают как обычно. Seeds помогали мне сравнивать изменения 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", []))

В моих запусках 16 шагов с Z-Image-Turbo было достаточно для качества предпросмотра. Для финальных изображений я поднимала до 22–24 шагов. Это добавляло ~0,3–0,6 секунды на изображение в моём аккаунте, что было приемлемо.

Балансировка значений LoRA scale

Я итерировала так:

  1. фиксировала seed,
  2. устанавливала все LoRA на 0,3,
  3. выбирала якорную LoRA и поднимала её на 0,1, пока не казалось правильным,
  4. корректировала остальные с шагом 0,05–0,1.

Фиксированный seed при настройке scale помогал видеть эффект напрямую. Когда баланс нравился, я убирала фиксацию seed для разнообразия. Это не сэкономило время сразу — я потратила 15–20 минут только на понимание ощущений. Но на третий день заметила, что перестала редактировать промпты. Значения scale несли стиль, а я сосредоточилась на макете и тексте.


Обучение кастомных LoRA

После готовых LoRA я обучила небольшую LoRA для формы бутылки и стиля этикетки клиента. Я сделала это, чтобы устранить постоянные правки, когда угол горлышка и блеск этикетки продолжали уплывать.

Подготовка данных для обучения (загрузка ZIP)

Я собрала 18 изображений, очистила фоны и сохранила метаданные единообразными. Запаковала их в zip — простая папка, строчные имена файлов без пробелов — и загрузила. Добавила 3–4 подписи на изображение, когда текст этикетки был важен. Когда нет — оставляла подписи минимальными. Больше подписей помогло тексту этикетки оставаться читаемым.

Небольшое неудобство: почти идентичные изображения не помогали. Я удалила дубли и увидела меньше переобучения.

Параметры обучения

Я придерживалась лёгкого подхода:

  • разрешение: квадратные кропы 768,
  • размер батча: 1,
  • скорость обучения: консервативное значение по умолчанию,
  • шаги обучения: 3 000–6 000 для стиля и формы,
  • ранг сети (r): умеренный: высокое значение делало результат «громче», чем мне нужно.

Когда я превышала ~8 000 шагов, модель начинала навязывать бутылку в промпты, где я её не запрашивала. Нежелательно. Меньше шагов плюс более чистый датасет побеждали.

Цена: $1,25 за 1 000 шагов

Мои два запуска (3 500 и 5 000 шагов) обошлись в $10,63 суммарно по $1,25 за 1 000 шагов. Это разумно, если 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).

Сначала я бы делала один более короткий прогон, проверяла результаты, а затем добавляла шаги, если это перспективно. Два небольших прогона лучше одной долгой сессии с переобучением.


Сценарии использования

Это те ситуации, где LoRA на Z-Image-Turbo помогала мне работать быстрее — не каждый день, но надёжно, когда задача подходила.

Единообразие фирменного стиля

Если вы устали повторно вводить подсказки о бренде в каждый промпт, мягкая LoRA стиля на 0,4–0,6 держит цвет, контраст и текстуру в норме. Я использовала это для вариантов в социальных сетях и веб-баннеров. Это не делало их блестящими — просто делало единообразными. В этом и смысл. Я экономила примерно 5–7 минут на каждый результат, пропуская второй раунд «исправь настроение».

LoRA персонажей

Для внутренней документации и лёгкого маскота, появляющегося на экранах онбординга, LoRA персонажа удерживала черты постоянными при разных ракурсах. Стекирование с мягкой цветовой обработкой работало, но только после того, как я снизила scale персонажа до 0,35. При более высоком значении он заглушал освещение. После настройки это сняло странную умственную нагрузку: я перестала беспокоиться о том, уплывёт ли лицо.

Специфическая эстетика продукта

Кастомная LoRA бутылки снизила искажение этикетки и сохранила геометрию горлышка в крупных планах. Не идеально — чёткие отражения всё ещё требовали пары попыток, — но это сократило количество непригодных рендеров. Тихая победа — предсказуемость. Когда я вводила «угол три четверти на льне», я получала именно это, а не случайный вариант.

Кому это может понравиться: тем, кто уже знает, чего хочет, и устал спорить с моделью. Кому нет: тем, кто каждый раз исследует совершенно новые стили. LoRA — это стабилизатор. Он блистает, когда цените меньше сюрпризов, а не больше фейерверков.

Поделиться