# Flux Gym Dead simple web UI for training FLUX LoRA **with LOW VRAM (12GB/16GB/20GB) support.** - **Frontend:** The WebUI forked from [AI-Toolkit](https://github.com/ostris/ai-toolkit) (Gradio UI created by https://x.com/multimodalart) - **Backend:** The Training script powered by [Kohya Scripts](https://github.com/kohya-ss/sd-scripts) FluxGym supports 100% of Kohya sd-scripts features through an [Advanced](#advanced) tab, which is hidden by default. ![screenshot.png](screenshot.png) --- # What is this? 1. I wanted a super simple UI for training Flux LoRAs 2. The [AI-Toolkit](https://github.com/ostris/ai-toolkit) project is great, and the gradio UI contribution by [@multimodalart](https://x.com/multimodalart) is perfect, but the project only works for 24GB VRAM. 3. [Kohya Scripts](https://github.com/kohya-ss/sd-scripts) are very flexible and powerful for training FLUX, but you need to run in terminal. 4. What if you could have the simplicity of AI-Toolkit WebUI and the flexibility of Kohya Scripts? 5. Flux Gym was born. Supports 12GB, 16GB, 20GB VRAMs, and extensible since it uses Kohya Scripts underneath. --- # News - September 25: Docker support + Autodownload Models (No need to manually download models when setting up) + Support custom base models (not just flux-dev but anything, just need to include in the [models.yaml](models.yaml) file. - September 16: Added "Publish to Huggingface" + 100% Kohya sd-scripts feature support: https://x.com/cocktailpeanut/status/1835719701172756592 - September 11: Automatic Sample Image Generation + Custom Resolution: https://x.com/cocktailpeanut/status/1833881392482066638 --- # Supported Models 1. Flux1-dev 2. Flux1-dev2pro (as explained here: https://medium.com/@zhiwangshi28/why-flux-lora-so-hard-to-train-and-how-to-overcome-it-a0c70bc59eaf) 3. Flux1-schnell (Couldn't get high quality results, so not really recommended, but feel free to experiment with it) 4. More? The models are automatically downloaded when you start training with the model selected. You can easily add more to the supported models list by editing the [models.yaml](models.yaml) file. If you want to share some interesting base models, please send a PR. --- # How people are using Fluxgym Here are people using Fluxgym to locally train Lora sharing their experience: https://pinokio.computer/item?uri=https://github.com/cocktailpeanut/fluxgym # More Info To learn more, check out this X thread: https://x.com/cocktailpeanut/status/1832084951115972653 # Install ## 1. One-Click Install You can automatically install and launch everything locally with Pinokio 1-click launcher: https://pinokio.computer/item?uri=https://github.com/cocktailpeanut/fluxgym ## 2. Install Manually First clone Fluxgym and kohya-ss/sd-scripts: ``` git clone https://github.com/cocktailpeanut/fluxgym cd fluxgym git clone -b sd3 https://github.com/kohya-ss/sd-scripts ``` Your folder structure will look like this: ``` /fluxgym app.py requirements.txt /sd-scripts ``` Now activate a venv from the root `fluxgym` folder: If you're on Windows: ``` python -m venv env env\Scripts\activate ``` If your're on Linux: ``` python -m venv env source env/bin/activate ``` This will create an `env` folder right below the `fluxgym` folder: ``` /fluxgym app.py requirements.txt /sd-scripts /env ``` Now go to the `sd-scripts` folder and install dependencies to the activated environment: ``` cd sd-scripts pip install -r requirements.txt ``` Now come back to the root folder and install the app dependencies: ``` cd .. pip install -r requirements.txt ``` Finally, install pytorch Nightly: ``` pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 ``` # Start Go back to the root `fluxgym` folder, with the venv activated, run: ``` python app.py ``` > Make sure to have the venv activated before running `python app.py`. > > Windows: `env/Scripts/activate` > Linux: `source env/bin/activate` ## 3. Install via Docker First clone Fluxgym and kohya-ss/sd-scripts: ``` git clone https://github.com/cocktailpeanut/fluxgym cd fluxgym git clone -b sd3 https://github.com/kohya-ss/sd-scripts ``` Check your `user id` and `group id` and change it if it's not 1000 via `environment variables` of `PUID` and `PGID`. You can find out what these are in linux by running the following command: `id` Now build the image and run it via `docker-compose`: ``` docker compose up -d --build ``` Open web browser and goto the IP address of the computer/VM: http://localhost:7860 # Usage The usage is pretty straightforward: 1. Enter the lora info 2. Upload images and caption them (using the trigger word) 3. Click "start". That's all! ![flow.gif](flow.gif) # Configuration ## Sample Images By default fluxgym doesn't generate any sample images during training. You can however configure Fluxgym to automatically generate sample images for every N steps. Here's what it looks like: ![sample.png](sample.png) To turn this on, just set the two fields: 1. **Sample Image Prompts:** These prompts will be used to automatically generate images during training. If you want multiple, separate teach prompt with new line. 2. **Sample Image Every N Steps:** If your "Expected training steps" is 960 and your "Sample Image Every N Steps" is 100, the images will be generated at step 100, 200, 300, 400, 500, 600, 700, 800, 900, for EACH prompt. ![sample_fields.png](sample_fields.png) ## Advanced Sample Images Thanks to the built-in syntax from [kohya/sd-scripts](https://github.com/kohya-ss/sd-scripts?tab=readme-ov-file#sample-image-generation-during-training), you can control exactly how the sample images are generated during the training phase: Let's say the trigger word is **hrld person.** Normally you would try sample prompts like: ``` hrld person is riding a bike hrld person is a body builder hrld person is a rock star ``` But for every prompt you can include **advanced flags** to fully control the image generation process. For example, the `--d` flag lets you specify the SEED. Specifying a seed means every sample image will use that exact seed, which means you can literally see the LoRA evolve. Here's an example usage: ``` hrld person is riding a bike --d 42 hrld person is a body builder --d 42 hrld person is a rock star --d 42 ``` Here's what it looks like in the UI: ![flags.png](flags.png) And here are the results: ![seed.gif](seed.gif) In addition to the `--d` flag, here are other flags you can use: - `--n`: Negative prompt up to the next option. - `--w`: Specifies the width of the generated image. - `--h`: Specifies the height of the generated image. - `--d`: Specifies the seed of the generated image. - `--l`: Specifies the CFG scale of the generated image. - `--s`: Specifies the number of steps in the generation. The prompt weighting such as `( )` and `[ ]` also work. (Learn more about [Attention/Emphasis](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#attentionemphasis)) ## Publishing to Huggingface 1. Get your Huggingface Token from https://huggingface.co/settings/tokens 2. Enter the token in the "Huggingface Token" field and click "Login". This will save the token text in a local file named `HF_TOKEN` (All local and private). 3. Once you're logged in, you will be able to select a trained LoRA from the dropdown, edit the name if you want, and publish to Huggingface. ![publish_to_hf.png](publish_to_hf.png) ## Advanced The advanced tab is automatically constructed by parsing the launch flags available to the latest version of [kohya sd-scripts](https://github.com/kohya-ss/sd-scripts). This means Fluxgym is a full fledged UI for using the Kohya script. > By default the advanced tab is hidden. You can click the "advanced" accordion to expand it. ![advanced.png](advanced.png) ## Advanced Features ### Uploading Caption Files You can also upload the caption files along with the image files. You just need to follow the convention: 1. Every caption file must be a `.txt` file. 2. Each caption file needs to have a corresponding image file that has the same name. 3. For example, if you have an image file named `img0.png`, the corresponding caption file must be `img0.txt`.