Если вы обучили LoRA в Ostris AI Toolkit, увидели отличные результаты в Training Samples, а затем получили заметно другие выходы при инференсе в ComfyUI или Diffusers, это легко выбивает из колеи. Возможно, вы искали что‑то вроде:
- «AI Toolkit samples выглядят хорошо, но ComfyUI — плохо»
- «AI Toolkit LoRA не работает в ComfyUI»
- «Тот же prompt/seed, но Diffusers не совпадает с AI Toolkit preview»
- «Почему моя LoRA выглядит иначе после обучения?»
Вот прямой (и обычно успокаивающий) ответ:
В ~99% случаев с вашей LoRA всё в порядке. Просто ваш инференс‑сетап не совпадает с тем, что использовалось в training preview.
Samples в AI Toolkit — это не «случайные прогоны Diffusers». Они получаются из конкретной комбинации:
- точного варианта base model
- способа применения LoRA (adapter vs merged/fused)
- семантики steps/scheduler/guidance
- обработки разрешения (snapping/cropping)
- поведения seed/RNG
- (иногда) дополнительных conditioning‑входов (edit/control/I2V wiring)
Если хоть один из этих пунктов отличается, результат уходит в дрейф.
Ниже — быстрый side‑by‑side пример того, что вы наблюдаете: AI Toolkit Training Sample vs ваш текущий инференс‑тулчейн (ComfyUI/Diffusers/etc.).
| AI Toolkit training sample | Your inference toolchain |
|---|---|
![]() |
![]() |
Что вы получите из этого гайда
- 60‑секундный sanity check: зафиксируйте эти 6 полей (training пока не трогаем)
- 10‑минутный parity‑чеклист: 7 частых причин «preview ≠ inference» (по приоритету)
- Не хотите разбираться сами? Получите parity инференса на RunComfy
Если вам нужно просто заставить инференс совпасть с training samples AI Toolkit (начните здесь)
- Рекомендовано (parity‑workflow): AI Toolkit LoRA Training‑Inference Parity
- Для аудита/self‑host (референс Diffusers): Open-source AI Toolkit inference code
60‑секундный sanity check: зафиксируйте эти 6 полей (training пока не трогаем)
Выберите один AI Toolkit Training Sample, который хотите воспроизвести (идеально — Sample #1). Скопируйте/экспортируйте точно следующее:
1) Base model (точный вариант/ревизия — не просто «FLUX»)
2) Prompt (включая trigger‑слово, в той же позиции)
3) Negative prompt (если в training его не было — оставьте пустым)
4) Width/height
5) Seed
6) Steps + guidance (и всё, что связано с sampler/scheduler)
Если вы совпали по этим 6 пунктам, а расхождение всё ещё большое — причина почти наверняка в одном из пунктов ниже.
10‑минутный parity‑чеклист: 7 частых причин «preview ≠ inference» (по приоритету)
Правило: меняйте по одной переменной. Если вы поменяете пять вещей сразу, вы не поймёте, что именно исправило проблему.
1) Несовпадение base model (самая частая и разрушительная причина)
2) Несовпадение обработки разрешения (snapping к кратности / скрытый resize)
3) Разная семантика steps/scheduler/guidance (few‑step модели крайне чувствительны)
4) Разная семантика seed/RNG (CPU vs GPU generator, global seeding)
5) Разный способ применения LoRA (adapter vs fuse/merge; неправильный loader)
6) Prompt/negative/trigger не идентичны (один токен может сломать parity)
7) Неправильная family пайплайна / отсутствуют conditioning‑входы (edit/control/I2V)
Дальше — как быстро диагностировать каждый пункт.
1) Несовпадение base model: «почти то же» — это не то же
Симптомы
- Уезжает весь look: лица, текстура, стиль, детализация.
- Может выглядеть так, будто LoRA вообще не применяется.
Почему так бывает
LoRA сильно зависит от base model. Если обучали на одном точном варианте, а инференс делаете на другом (даже «в той же семье»), дрейф часто огромный.
Быстрый тест
- Откройте training config/YAML AI Toolkit.
- Найдите точный идентификатор/путь base model.
- Проверьте, что ComfyUI/Diffusers грузит тот же base model (не «похожий»).
Частые ловушки
- Смешивание вариантов FLUX (dev vs schnell, 1 vs 2)
- Смешивание Qwen Image generation vs Qwen Image Edit
- Смешивание Z‑Image Turbo vs DeTurbo
- Неправильная family задач WAN 2.2 (T2V vs I2V)
Фикс
Считайте training config источником истины: выбирайте base model по YAML, а не по памяти.
2) Несовпадение обработки разрешения: вы думаете, что это 1024, но это не так
Симптомы
- Меняется композиция, резкость, детали «мылятся».
- На few‑step/turbo моделях дрейф намного сильнее.
Почему так бывает
Многие реализации подгоняют width/height к делителю (часто 32). Если preview AI Toolkit «снапит» вниз, а ваш стек — нет (или наоборот), вы не запускаете одинаковый входной размер.
Пример:
width = (width // divisor) * divisor
height = (height // divisor) * divisor
Быстрый тест
- Заставьте инференс использовать кратность 32 (например, 1024×1024, 1216×832).
- В ComfyUI проверьте скрытые nodes resize/crop/latent scaling.
Фикс
Для parity зафиксируйте width/height так, как preview реально использовал (включая snapping‑правила).
3) Разная семантика steps/scheduler/guidance: few‑step модели «наказывают SDXL‑привычки»
Симптомы
- Результат становится мутным/грязным и теряет «preview‑резкость».
- Или уходит в overcooked‑артефакты.
Почему так бывает
Distilled/turbo/few‑step модели часто ожидают мало steps и низкий guidance (иногда guidance ≈ 1.0). Если применить SD/SDXL‑дефолты (steps 20–30, CFG 5–8), вы выходите из режима, для которого модель настроена.
Быстрый тест
- Зафиксируйте steps и guidance как в Training Sample.
- Пока ищете parity — не меняйте scheduler.
Фикс
Начните с настроек Training Sample как ground truth. Когда воспроизведёте — тогда уже тюните.
4) Разная семантика seed/RNG: одинаковый seed ≠ одинаковый noise‑stream в разных стеках
Симптомы
- Один и тот же prompt + seed, но результаты сильно разные.
Почему так бывает
Разные стеки по‑разному реализуют seeding:
- global seeding vs seeding на уровне узлов
- CPU generator vs GPU generator
- дополнительный расход RNG (random crops, jitter и т.д.)
Быстрый тест
- Сначала проверьте воспроизводимость в рамках одного стека (3 запуска — одинаково).
- Затем сравнивайте между стеками.
Фикс
Максимально выровняйте seed handling (глобальный seed + явная семантика генератора).
5) Разный способ применения LoRA: adapter vs fuse/merge (и «не тот loader»)
Симптомы
- Эффект LoRA слабее/сильнее, чем в preview.
- Или кажется, что LoRA не применяется.
Почему так бывает
Два частых различия:
- Adapter‑применение: LoRA динамически применяется на инференсе со scale.
- Fuse/Merge‑применение: веса LoRA мерджатся в модель, адаптеры выгружаются.
Поведение может отличаться. А ещё loader/pipeline, не соответствующий family модели, может тихо «не применить ничего».
Быстрый тест
- Выставьте scale LoRA как в Training Sample.
- Убедитесь, что loader подходит к family модели (не мешайте пайплайны разных family).
Фикс
Сначала используйте референсную реализацию, которая точно поддерживает AI Toolkit LoRA для этой family, воспроизведите sample, затем перенесите метод в ваш стек.
6) Prompt / negative / trigger mismatch: один токен может сломать parity
Симптомы
- Стиль вроде близкий, но пропали «фирменные детали».
- Или поведение как у базовой модели.
Частые ошибки
- В training negative пустой, но UI инференса подставляет default negative.
- Trigger‑слово отсутствует/с опечаткой/перемещено.
- Разный parsing промпта/синтаксис весов в разных инструментах.
Быстрый тест
- Поставьте negative prompt пустым (как в training).
- Скопируйте/вставьте prompt точь‑в‑точь из Training Sample.
Фикс
Для parity‑тестов уберите скрытые дефолты. Сначала прогоните «чисто».
7) Неправильная family пайплайна / отсутствуют conditioning‑входы (edit/control/I2V)
Симптомы
- Логика вывода полностью неправильная.
- Или инференс падает с ошибками.
Почему так бывает
Некоторые family моделей требуют дополнительные входы (control image, edit input, I2V conditioning). Training preview мог использовать эту связку, а ваш запуск может быть prompt‑only.
Быстрый тест
- Требуется ли модели control image или edit input?
- Используете ли вы правильную pipeline family?
Фикс
Переключитесь на правильный пайплайн и передайте необходимые inputs.
Не хотите разбираться сами? Получите parity инференса на RunComfy
Не хотите сами охотиться за дрейфом ComfyUI/Diffusers? RunComfy уже предоставляет training & inference parity pipelines для семей AI Toolkit, так что вам не нужно вручную собирать точную preview‑пайплайн‑схему.
Вам нужны только ваша LoRA и Training config (YAML) из AI Toolkit. Импортируйте их в Trainer → LoRA Assets, нажмите Run (Run LoRA) и сразу запускайте инференс. RunComfy выполнит корректный base‑model пайплайн с parity‑критичным поведением, чтобы результаты совпадали с training samples.
Workflow: AI Toolkit LoRA Training‑Inference Parity.
Так это выглядит на практике (AI Toolkit Training Sample vs RunComfy‑инференс с применённой training config):
| AI Toolkit training sample | RunComfy inference (Playground/API) |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Хотите глубже?
- Open-source AI Toolkit inference code (аудируемые Diffusers‑пайплайны, adapters, schedulers)
FAQ
«Моя AI Toolkit LoRA работает в Training Samples, но в ComfyUI ничего не делает».
Начните с base model mismatch и LoRA loader mismatch. Большинство случаев «ничего не делает» — это:
- неверный вариант base model
- неверный способ/loader применения LoRA
- скрытые negative prompt/defaults
«Почему AI Toolkit Samples резче, чем мой output в Diffusers?»
Обычно это одно из:
- mismatch режима steps/guidance (особенно few‑step)
- различия в snapping разрешения
- различия scheduler/timestep
«Как надёжно сделать так, чтобы инференс совпадал с training preview?»
Считайте training config ground truth и зафиксируйте:
- base model
- width/height (включая snapping‑правила)
- family steps/guidance/scheduler
- метод применения LoRA и scale
- семантику seed
Если вы хотите повторяемый workflow Run LoRA (Playground/API), строите инференс вокруг этой же config.
Готовы начать обучение?







