FLUX 3 Image Klein Restore LoRA

A LoRA for FLUX 3 Image Klein that nudges a restore toward your photo. When FLUX 3 redraws a small or worn photo in tiles, faces come out a little closer to the picture you gave it, and their colours stay closer. It is optional in my upscale workflow: without it the workflow still runs.

Also on Civitai: my FLUX 3 Image Klein Upscale workflow, which uses this LoRA.

The difference is small. Side by side, the faces with the LoRA had slightly better colour and shape, and a face-recognition check agrees: below.

A woman with black bangs, from a 386 px wide JPEG. Without the LoRA her skin comes out a little darker and her cheeks lose some pink; with it the colour stays close to the photo

In each picture: the small input, the result without the LoRA and with it, and the marked face enlarged underneath. All made with the workflow in this repo, Photo at 4 megapixels, same request and seed. "Without the LoRA" is the same workflow with the LoRA row switched off. "Same person" and "colour off" are the face check below, against the clean picture the input was made from. None of these pictures are in the training set.

A woman with a bob and a black coat, from a 463 px wide JPEG. Without the LoRA her face comes out darker than in the photo; with it the face stays closer to the photo's light

A woman with headphones, from a 317 px wide JPEG. Neither result brings back her freckles, which the small input does not hold; with the LoRA the skin tone sits a little closer to the photo

How to use it

Put it on the distilled model at strength 1.0. It was trained on the base model. The trigger is the sentence it was trained on:

Restore the photo: remove blur, noise and compression artifacts and recover sharp, natural detail, keeping the same composition, people and colors.

Use it in tiles of about 2 megapixels, on a picture that is already enlarged. Each tile is the reference (Set Reference Multi Latent, resolution keep resolution), and the KSampler starts from the latent that node returns: 8 steps, CFG 1, euler / simple, denoise 1. The workflow in this repo does the whole chain: SeedVR2 3B enlarges a photo first, then FLUX 3 redraws it in tiles.

How the upscale workflow uses the LoRA. Pick Photo (SeedVR2 3B cleans it up and enlarges it), Blurry photo (FLUX 3 draws the whole picture again at 2 megapixels) or Generated picture (4x-UltraSharpV2 enlarges it). Then FLUX 3 redraws it in tiles of about 2 megapixels and the tiles are joined. The restore LoRA goes on FLUX 3 wherever it draws, when its file is there

What I measured

My upscale workflow's example pictures, with the LoRA on and off and everything else the same: the same request, seed and settings. Each example was made from a clean picture of mine (shrunk and saved as a low-quality JPEG, or blown up from a small picture), so each result can be held against the true picture. 8 faces in 7 pictures:

against the clean picture with the LoRA without it faces where the LoRA was closer
same person (face recognition, 1 = identical) 0.773 0.753 7 of 8
colour of the face (difference, lower = closer) 2.8 4.1 8 of 8
face shape (point error, % of the eye distance, lower = closer) 1.96 % 2.05 % 5 of 8
  • How it was measured: InsightFace buffalo_l. Same person is the cosine similarity of the two faces' ArcFace embeddings. Face shape is the mean distance between the 106 face points of the two faces, as a share of the distance between the eyes. Colour is the mean CIE76 delta-E of the face area, both crops at 128 px and softened.
  • One seed per picture, one RTX 5090.
  • On 4 of the same examples the whole picture also sat a little closer to the clean picture: 0.3 to 0.8 px off at the worst corner with the LoRA, 1.0 to 1.3 px without it.

Strength

I have only tested it at 1.0. On a clean, sharp portrait the skin can come out a little too textured. Other strengths are untested.

Files

file notes
flux-3-image-klein-restore.safetensors The LoRA. Step 1,500 of a 2,000-step run, rank 32, 161 MB. Loads onto the FLUX 3 Image Klein files in ComfyUI.
workflows/flux-3-image-klein-upscale.json The ComfyUI workflow: Photo, Blurry photo or Generated picture, up to the size you set. The LoRA row is optional.
LICENSE.md, NOTICE.txt The FLUX Kommunity License and the notice it asks for. See License.

What it does not do

  • It does not bring back what the camera saw. It is a redraw: fine detail is made up to fit, and a face stays the same person, not the same pixels.
  • It does not make the picture bigger. Give FLUX 3 the picture at the size you want, in tiles of about 2 megapixels. It was trained at 1 to 2 megapixels.
  • A very noisy old webcam photo came out bad in every way I tried with FLUX 3.
  • Shadows on a face can come back as stubble, with the LoRA or without it.
  • I tested it on the distilled model only: 8 steps per tile, and 16 steps when the whole picture is drawn again.
  • The prompts it was trained on are English.

ComfyUI

You need ComfyUI 0.41 or newer, which is the first version with FLUX 3, and AusBoss nodes 2.13.0 or newer. In ComfyUI-Manager, search "AusBoss". The FLUX 3 Image Klein files are on Hugging Face behind a license click: black-forest-labs/flux-3-image-klein-comfy.

workflows/flux-3-image-klein-upscale.json has it set up. Load your picture, pick Photo, Blurry photo or Generated picture, and press Run. The LoRA row is optional: without the file the workflow skips it and runs. Photo runs SeedVR2 3B first, Generated picture runs 4x-UltraSharpV2 first, and the workflow's note lists every file it needs with its link. The same workflow is on Civitai, inside its example pictures too.

To add it to your own graph:

  1. Enlarge your picture to the size you want first. SeedVR2 3B is what I use for photos.
  2. Cut it into tiles of about 2 megapixels that overlap. My Tiled Upscale and Tiled Upscale Stitch nodes do the cutting and the joining.
  3. For each tile: CLIP Text Encode with the sentence above, Conditioning Zero Out for the negative, Set Reference Multi Latent with the tile as the reference (resolution keep resolution), and a KSampler on the latent it returns: 8 steps, CFG 1, euler / simple, denoise 1. The LoRA goes on the distilled model at 1.0.
  4. VAE Decode each tile and join them.

Also for FLUX 3 Image Klein: my Outpaint LoRA and Consistency LoRA. For Qwen Image 2.1: my Restore LoRA. Videos on YouTube @ausbossdev.

How it was made

  • The same 1,209 pairs as my Qwen Image 2.1 Restore LoRA, from 786 clean pictures. A pair is a clean picture and the same picture damaged the way pictures get damaged: shrunk 3 to 6 times and saved as JPEG, WebP or PNG like a web picture (324 pairs), low-resolution JPEG and PNG, blur and noise, saving and re-saving, phone smoothing, old prints, video stills, banding, and a heavy mix of these.
  • The clean pictures are 661 Unsplash photos (via unsplash-lite) and 125 pictures of my own, most of them made with Qwen Image 2.1. None of the example pictures measured above is in the training set.
  • Captions: the instruction above on about two thirds of the pairs, the same thing in other words on the rest, and on 720 of them Scene: plus a description of the clean picture. Caption dropout 0.
  • ostris/ai-toolkit, arch: flux3, on FLUX 3 Image Klein Base in BF16 without quantization. Rank 32, alpha 32, AdamW 8-bit, learning rate 1e-4 constant, batch 1, 2,000 steps with a checkpoint every 250, resolution 1408 buckets, the reference kept at the target's size (match_target_res), shift timesteps, caption dropout 0, no flips. About 2 h 12 min on one RTX PRO 6000.
  • I tested steps 1,000, 1,500 and 2,000 blind and picked step 1,500.

License

This LoRA is a modified version of FLUX 3 Image Klein: an adapter I trained on FLUX 3 Image Klein Base. It is shared under the FLUX Kommunity License v.1.0, the same license as the base model, and I added no terms of my own. The rights to use FLUX 3 Image Klein and this adapter come to you directly from Black Forest Labs under that license. Whether you may use the pictures you make commercially depends on section 2 of it, so read it first.

Black Forest Labs did not make, endorse or approve this adapter. It is provided as is, with no warranty and no liability, as in sections 5 and 6 of the license.

The notice the license asks for, which is also in NOTICE.txt:

This FLUX Model is licensed by Black Forest Labs Inc. under the FLUX Kommunity License. Copyright Black Forest Labs Inc. IN NO EVENT SHALL BLACK FOREST LABS INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH USE OF THIS MODEL.

I changed the FLUX Model: this file is a LoRA adapter trained by ausboss.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ausboss/FLUX-3-Image-Klein-Restore-LoRA

Adapter
(21)
this model