FLUX.2 [klein] 9B Style LoRA Training
FLUX.2 Klein 9B style LoRA training, with the VRAM math handled for you
- importModel
- file_path
The 9B is the bigger sibling in FLUX.2 Klein's consumer line, and for style LoRA work it's the one people usually mean when they say "Klein training is good." But there's a reason most of us never got there: Klein 9B is a heavy model, and the community consensus is blunt about it - it hates small batch sizes and high learning rates, and squeezing a training run onto a consumer card means offloading, mixed-precision tricks, and an 8-hour run you babysit. This node just skips all of it. Runware trains it for you in the cloud; you get a file back.
Before you pick this over the 4B, know the license fork. Klein 4B is Apache 2.0; Klein 9B is non-commercial. That applies to the base model, and it colors what you can legally do with LoRAs you train on top of it. If your style LoRA is for personal work or research, the 9B's extra quality and prompt adherence is worth it. If you might sell anything, the 4B is the version you can build on. Both nodes are otherwise identical - same inputs, same flow.
How it works
Like its 4B twin, this is a Runware/Training/runware node. You supply a dataset ZIP, Runware runs the optimization remotely on FLUX.2 Klein 9B, and the finished LoRA downloads to your output folder with the path returned as the file_path output. Because the heavy lifting is cloud-side, the whole "which GPU, how much VRAM, which trainer" conversation vanishes. There's no trainer to install at all.
Required inputs:
dataset- a ZIP (as UUID or URL) of training images, each optionally paired with a same-named.txtcaption.importModel- theRUNWARE_IMPORTMODELsocket from the Runware Import Model builder (Runware/Params). Name your model, give it an AIR, set visibility - this is how the trained LoRA becomes usable inside the Runware ecosystem (and from theRunware LoRAbuilder at inference).
The dials that matter:
trainingSteps- default 1000, max 4000. For a style, start around 1000 and compare; the last epoch is rarely the best one.learningRate- default 5e-05, within the sane band for modern architectures. The instinct to crank the LR because it's "fast" is what produces the fried runs people post about.triggerWord- a rare word that summons the style at inference.checkpoint- an AIR to resume from, but only for LoRAs previously trained on Runware. Your locally trained Klein LoRA won't plug in here.
Dataset notes
Style LoRA guidance applies unchanged: 30–100 images, diverse subjects, one aesthetic, captions that describe what should vary and leave the fixed parts silent. The cloud batch handling also sidesteps the "Klein 9b wants a bigger effective batch than your VRAM allows" failure mode - which is exactly the trap that makes local 9B training miserable.
Installing and gotchas
Install the Runware/ComfyUI-Runware pack via ComfyUI Manager (search "Runware") or clone it into custom_nodes plus pip install -r requirements.txt, then restart. No model files to fetch - training happens remotely, so dependencies stay light (runware-sdk, pillow, soundfile).
The account stuff is where people trip: you need a Runware API key (Settings → Runware API key, the RUNWARE_API_KEY env var, or runware auth login), training is a billed service, and the run's cost prints on the node title bar when it completes. One more thing to remember: resume-from-checkpoint only works with Runware-trained LoRAs, so keep your trained artifacts inside the platform if you think you'll iterate.
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 | 100010–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 | — |