I know, I know. We keep blogging about Flux. But there's a reason: It's really good! People are making so much cool stuff with it, and its capabilities continue to expand as the open-source community experiments with it.
In this post I'll cover some techniques you can use to generate synthetic training data to help improve the accuracy, diversity, and stylistic range of your fine-tuned Flux models.
To use the techniques covered in this post, you should have an existing fine-tuned Flux model that needs a little improvement.
If you haven't created your own fine-tuned Flux model yet, check out our guides to fine-tuning Flux on the web or fine-tuning Flux with an API, then come back to this post if you need tips to make it better.
Synthetic data is artificially generated data that mimics real-world data. In the case of image generation models, synthetic data refers to images created by the model, rather than real photographs or human-generated artwork. Using synthetic data can help create more varied and comprehensive training datasets than using real-world images alone.
The consistent-character model is an image generator from the prolific and inimitable @fofr. It takes a single image of person as input and produces multiple images of them in a variety of poses, styles, and expressions. Using consistent-character is a great way to help jumpstart your Flux fine-tuning, especially if you don't have a lot of training images to start.
Here's a quick example of how to use consistent-character with the Replicate JavaScript client to generate a batch of training images from a single image input:
Sometimes when you fine-tune Flux, your trained model doesn't consistently produce the quality of images you want. Maybe one in ten of your outputs meets your expectations. Fortunately you can take those good outputs and use them as training data to train an improved version of your model.
The process works like this:
To ease the process of generating lots of images from your model and downloading them to your local machine, you can use a tool like aimg
. All you need to run aimg
is a Replicate API token and a recent version of Node.js.
Here's a command that will generate 50 images using the exact same prompt each time:
You can also get more variety in your outputs by using the --subject
flag, which will auto-generate a unqiue prompt for each image:
Once you've gathered a selection of images that you like, zip them up:
Then kick off a new training job on the web or via the API.
Note: All Replicate models (including fine-tunes) are versioned, so you can use your existing model as the destination model when starting your second training job, and the training process will automatically create a new version of the model. Your first version will remain intact, and you'll still be able to access it and use it to generate images.
You may find that your fine-tuned Flux model is only outputting images in a single style, like a realistic photograph. You may be trying to generate images that look like paintings or illustrations, but it will only output photorealistic images, no matter how many painting-related keywords you put in your prompt.
A little-known feature of Flux fine-tunes on Replicate is that you can combine multiple LoRA styles in a single output image. LoRA stands for "Low-Rank Adaptation". I won't go into technical detail about how LoRAs work here, but the important thing to know is that it's become an industry term for "trained weights" in the context of fine-tuning image models. When you refer to "a LoRA", you're talking about a specific set of trained weights that get added to the base Flux model to constitute a "fine-tuned model".
Combining LoRAs is a really fun way of generating unique images, but you can also use it as a technique to diversify your training data to create better versions of your own fine-tuned Flux models.
At a high level, the process works like this:
To find LoRAs to combine with your model, check out the Flux fine-tunes on Replicate and Replicate LoRA fine-tunes on Hugging Face.
To generate images with combined LoRAs using the Replicate API, set the extra_lora
and extra_lora_scale
input parameters, and be sure to the use the trigger words from both models in your prompt.
Here's an example of how to generate images with combined LoRAs using the Replicate JavaScript client:
The key things to keep in mind when combining LoRAs are:
extra_lora
parameter should be set to the name of the LoRA you want to combine with your model. You can use the shorthand name of the model, like jakedahn/flux-midsummer-blues
, or the full URL to a weights file.extra_lora_scale
parameter should be set to a value between -1 and 2. The higher the value, the more pronounced the extra LoRA style will be.Hopefully these training tips will help you get the most out of your fine-tuned Flux model. The key to the fine-tuning process is experimentation and iteration. Try different techniques and see what works best for your use case.
Have fun and share your results with the community on X or Discord.