WAN LoRA Trainer (fal)
Train a Wan LoRA on fal's GPUs, no local rig
- lora_file_url
Training a Wan LoRA locally means a serious GPU and a fiddly toolchain (ai-toolkit or musubi, a rough install, hours of your card pinned). This node skips all of it: you point it at a dataset, it trains a Wan LoRA on fal.ai's hardware, and it hands you back a download URL for the finished .safetensors. If you don't have the GPU for local video-model training, this is the shortcut.
Cloud job, billed by fal for the training run. No weights or trainer on your machine.
How it works
You give it a dataset as a ZIP URL - images (and captions) packaged up and uploaded to fal - plus a couple of training settings, and fal runs the training loop and produces a LoRA. The pack's own utility nodes are built to feed this exact flow: Load Image Folder → Batch Caption → Images → Training ZIP URL gets you the training_data_url this node wants, no other packs required. Out the other end comes a lora_file_url you can download and drop into your Wan generation workflow.
The thing worth internalizing from every LoRA guide going: dataset curation beats every knob here. A well-chosen, well-captioned 15–25 images will out-train a careless hundred. The settings below matter far less than what you put in the ZIP.
The inputs and outputs that matter
training_data_url(required, STRING) - your dataset ZIP as a fal URL. Build it with the pack's dataset utilities, or upload your own ZIP.number_of_steps(default 400) - total training steps. 400 is a light default; a solid character LoRA often wants more. Watch for under- vs over-training and adjust.learning_rate(default 0.0002 = 2e-4) - a reasonable starting point. Lower if the LoRA overcooks (outputs look like copies of your training images); the default is fine for a first run.
Optional but recommended: trigger_phrase - the word you'll prompt with to invoke the LoRA. Use a rare, made-up token (ohwx, ch9ractr) so it doesn't collide with real vocabulary. And auto_scale_input (default on) - lets fal normalize your dataset resolutions.
Output is a lora_file_url STRING - download the .safetensors and use it in your Wan workflow.
How to install it
Part of gokayfem's ComfyUI-fal-API pack. ComfyUI Manager: search ComfyUI-fal-API, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-fal-API.git
pip install -r ComfyUI-fal-API/requirements.txt
Add your fal key (copy config.ini.example → config.ini, paste from fal.ai/dashboard/keys, or export FAL_KEY=your_key), restart.
Common issues & troubleshooting
The LoRA barely does anything (undertrained). 400 steps is a modest budget. Raise number_of_steps, and double-check your dataset is on-target and captioned. Caption what should stay variable (clothing, background, pose) and leave what should stay fixed (the identity itself) undescribed - that's the rule that makes a character LoRA actually hold.
The LoRA overcooks - every output looks like a training image. Classic overfitting. Fewer steps, or a lower learning_rate, or a slightly larger/more varied dataset.
The trigger word doesn't fire. Use a rare token as trigger_phrase, then actually put it in your prompts at generation time. A common English word as a trigger collides with the base model's existing vocabulary.
Where do I get the dataset URL? From the pack's Utils nodes - Images → Training ZIP URL is built for exactly this. It handles the standard caption layout so you don't hand-assemble a ZIP.
Insufficient funds / credit lag. Training is a longer, pricier job than a single generation, so make sure your balance covers it. fal is legit but has occasionally posted top-ups late - let credits settle rather than repaying. fal errors print as text in ComfyUI.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| training_data_url | STRING | — | |
| number_of_steps | INT | 4005–10000 | — |
| learning_rate | FLOAT | 0.000.00001–0.01 | — |
| trigger_phraseopt | STRING | — | |
| auto_scale_inputopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| lora_file_url | STRING | — |