Turbo Flux Trainer
subject trainerfal-ai/turbo-flux-trainer
FLUX.1 dev LoRAs at a fraction of the usual training cost.
The fast, cheap route to a FLUX.1 dev LoRA: a high learning rate over a short schedule, a built-in 'ohwx' trigger, and optional face cropping. Good for quick subject and style experiments. Move to flux-lora-fast-training when you want masking and more control.
What goes in the zip
Flat zip with at least 10 images of a consistent subject or style. Optional captions; include [trigger] where the trigger phrase should land.
Good starting point
steps: 1000learning_rate: 0.00115Parameters
Schema facts come straight from the fal API; the notes are ours.
Required
images_data_urlstringrequiredURL to a zip archive of your training images, optionally with matching .txt caption files.
In the atelier: The album you hand the painter. It is the single biggest factor in what the LoRA becomes.
Tip: 15 to 30 sharp, varied images beat 200 sloppy ones. Vary angle, lighting and background; keep the subject consistent.
Watch out: Duplicate or near-duplicate images push the LoRA toward memorizing instead of learning.
Raw schema description
URL to zip archive with images of a consistent style. Try to use at least 10 images, although more is better.
Optional
trigger_phrasestringdefault: ohwxA unique word or phrase baked into your captions that activates the LoRA at inference time.
In the atelier: The skill's calling word. Say it in the prompt and the painter knows to use the bracelet.
Tip: Pick something that is not a real word, like TOK or OHWX, so it does not collide with anything the base model already knows.
Watch out: If you train with a trigger and forget it in your prompts later, the LoRA will seem weak or broken.
Raw schema description
Trigger phrase to be used in the captions. If None, a trigger word will not be used. If no captions are provide the trigger_work will be used instead of captions. If captions are provided, the trigger word will replace the `[trigger]` string in the captions.
stepsintegerdefault: 10001 – 10000How many training iterations the model runs on your dataset. More steps means the LoRA sees your images more times.
In the atelier: Practice repetitions. Too few and the painter never picks up the skill. Too many and he stops learning and starts memorizing your exact photos.
Tip: Around 1000 is a solid default for a 15 to 30 image subject dataset. Small datasets need fewer steps, not more.
Watch out: If outputs start reproducing your training photos almost exactly (same pose, same background), you overtrained. Go back down.
Raw schema description
Number of steps to train the LoRA on.
learning_ratenumberdefault: 0.001151e-7 – 0.01How big each learning update is. Controls how aggressively the model changes per step.
In the atelier: The painter's eagerness. A high rate is frantic practice: fast but sloppy, and it can wreck habits he already had. A low rate is careful practice: slow, but precise.
Tip: Stay near the trainer's default unless you have a reason. If results look fried or oversaturated, lower it. If the subject barely shows after many steps, raise it slightly or add steps.
Watch out: Learning rate and steps trade off against each other. Doubling both at once is how datasets get burned.
Raw schema description
Learning rate for the training.
training_styleenumdefault: subjectsubject | styleSwitches the recipe between subject training and style training.
Tip: Default is 'subject'. Flip it for art styles so the trainer stops protecting subject identity.
Raw schema description
Training style to use.
face_cropbooleandefault: trueDetects the face in each image and crops training to it.
Tip: On by default. Turn off for objects, scenes and styles, where there is no face to find.
Raw schema description
Whether to try to detect the face and crop the images to the face.
Call it
import { fal } from "@fal-ai/client";
const result = await fal.subscribe("fal-ai/turbo-flux-trainer", {
input: {
"images_data_url": "https://your-cdn.com/dataset.zip",
"steps": 1000,
"learning_rate": 0.00115,
"trigger_phrase": "TOK"
},
logs: true,
});
console.log(result.data);