Qwen-Image Style LoRA Training
Train a Qwen-Image style LoRA in the cloud — your GPU gets the day off
- importModel
- file_path
Most of this pack is "rent a model," but this node is different: it's "rent a trainer." Qwen-Image Style LoRA Training runs a full LoRA training job on Runware's servers and hands you back a trained adapter file. If you've ever wanted a style LoRA but balked at fighting ai-toolkit, Kohya, or OneTrainer installs on a 2026 architecture, this is the path that sidesteps the entire local toolchain.
The context matters here. Qwen-Image is a 20B open-weights image model, and style LoRAs are how people imprint an aesthetic - an art style, a rendering look, a consistent vibe - onto it. Locally, that means running a modern trainer with all its moving parts: the text encoder is a Qwen3 language model you don't train, you cache embeddings, you sweat multi-resolution bucketing. On Runware, all of that is someone else's problem. You ship a dataset ZIP and a few numbers, and the adapter comes back.
Inputs
Two required inputs, and this is where it gets less magical:
importModel- aRUNWARE_IMPORTMODELfrom the Runware Import Model builder node. That builder needs an AIR (provider:model@versionformat, i.e. the Qwen-Image model identifier) and a name. You're telling Runware which base model the LoRA should target.dataset- a training dataset as a ZIP file, referenced by UUID or URL. You'll typically stage it with Runware's upload/import utilities first. The quality of this ZIP is 90% of the outcome; garbage-in applies exactly as hard in the cloud as locally.
The optional knobs are the friendly ones:
triggerWord- the rare-ish token you'll type at inference to summon the style. Pick something uncommon; this is the same advice as local training.trainingSteps- 10 to 4000, default 300. Fewer steps for a tight style, more for a sprawling concept. Don't blindly max it - overtraining is a thing the cloud can't fix for you.learningRate- 0.0005 default, 1e-5 to 0.01 range. Lower learns slower but more stably. On the modern architectures, the instinct to go big-and-fast usually backfires; stay near default.
The output is a single file_path (STRING) pointing at the trained LoRA file saved to your output folder - not a tensor, just a path you can then feed into the pack's Runware LoRA builder and stack onto image nodes.
The trade, stated plainly
This is a hosted training service: it costs real money per job, and you're trading the endless local dependency debugging for a per-run bill. What you buy is reproducibility - the exact same dataset and settings produce the same result every time, which is genuinely harder to guarantee locally. It's also the rare Runware node that's explicitly training, so expect the job to take a while and the cost to be noticeable.
Install
Same pack, same dance:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart, then set your API key in ComfyUI Settings → "Runware API key", via RUNWARE_API_KEY, or runware auth login.
The gotcha most people hit first: it's not a "upload my folder" node. dataset wants a ZIP as a UUID/URL, so you need Runware's upload/import flow (or a hosted ZIP URL) before you can queue. And because this targets the Qwen-Image style line specifically, the LoRA you get back only applies to Qwen-Image-family generation - it won't drop onto a FLUX or Z-Image model. Check your base model matches, or you'll train a LoRA you can't use.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| importModel | RUNWARE_IMPORTMODEL | — | |
| dataset | STRING | Training dataset as a ZIP file (UUID or URL) containing the training images, each optionally paired with a `.txt` caption file of the same filename. | |
| checkpointopt | STRING | AIR of a LoRA previously trained on Runware to resume from. `trainingSteps` runs as additional steps from its final checkpoint. LoRAs trained elsewhere are not supported. | |
| learningRateopt | FLOAT | 0.000.00001–0.01 | Step size applied at each training update. Lower values learn more slowly but can improve stability. |
| trainingStepsopt | INT | 30010–4000 | Total number of optimization steps to run during training. |
| triggerWordopt | STRING | Word or phrase used to activate the trained concept at inference time. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| file_path | STRING | — |