FLUX.1 [dev] Style LoRA Training
Train a FLUX.1 style LoRA on someone else's GPU
- importModel
- file_path
This is the node for people who want a FLUX.1 [dev] style LoRA but who do not want to babysit ai-toolkit or kohya through a VRAM budget. It's cloud training as a node: you hand Runware a zip of images, pick a trigger word, and a trained .safetensors comes back. No local GPU, no accelerate config, no "why is this 4GB card swapping."
The tradeoff is real and worth naming up front. Local trainers give you control - buckets, masked training, every knob OneTrainer has. This node gives you the three knobs that matter for a style LoRA and lets Runware handle the rest. For most style work, that's honestly enough, and the dataset is where the result is won or lost anyway.
The inputs that matter
dataset(required,STRING): the training set as a ZIP file, given as a UUID or URL. This is the whole ballgame. Style LoRAs want 30–100 images of diverse subjects sharing one aesthetic; caption what you want to remain variable and leave the fixed thing undescribed. Dataset curation beats every hyperparameter, in the cloud exactly as it does locally.triggerWord(optional,STRING): the word or phrase you'll use at inference to activate the style. Make it rare - "neonnoir" beats "style."learningRate(optional, default0.0005, range 1e-5–0.01): step size per update. Lower is slower but stabler; start at the default and only nudge down if it wobbles.trainingSteps(optional, default100, range 10–4000): total optimization steps. A style LoRA doesn't need the 4,000 end - 100 is a reasonable first pass, and overtraining is the more common failure.
There's also a required importModel socket (RUNWARE_IMPORTMODEL) - wire the Runware Import Model builder to say which base model the LoRA trains against (the pack defaults to FLUX.1 [dev] unless you override). The output is a single file_path (STRING): the trained weights land in your ComfyUI output folder. Point it at a LoRA loader or just grab the file.
How it works
The node is the same thin REST client as every other Runware node, with a different taskType (training). Your dataset is sent up, training runs on Runware's fleet, and the finished LoRA is downloaded back as a file. Because it's all cloud-side, nothing here touches your text encoder or your VRAM - and yes, that means it costs money per run, shown on the node's title bar.
One FLUX-specific note: FLUX.1 [dev] runs on the two-encoder stack (CLIP-L + T5-XXL) and modern training advice is to leave text encoders alone. This node doesn't expose them, which is consistent with where the ecosystem landed. If you're new to training, keep the images clean, the trigger word rare, and let the defaults do the work.
Install and gotchas
Install once with ComfyUI Manager (search Runware) or git clone https://github.com/Runware/ComfyUI-Runware into custom_nodes, then pip install -r requirements.txt. You'll need a Runware API key (Settings → Runware API key, RUNWARE_API_KEY, or runware auth login) - and unlike a text node, a failed training run may have burned a partial credit, so check the cost line before you blame the workflow.
The classic mistakes: uploading a zip of mixed, badly-cropped images and wondering why the style is weak, and forgetting to actually use the triggerWord at inference. Both are dataset/prompt problems, not node problems - the node faithfully ships what you give it.
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 | 10010–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 | — |