The BFS (Best Face Swap) LoRA series was developed for Qwen Image Edit 2509, specialized in high-fidelity face and head replacement tasks with natural tone blending and consistent lighting.
Each version builds upon the previous one:
🧠 Focus Faces: precise face swaps, keeping the original head shape and hair while transferring facial identity and expression.
🧩 Focus Head: stronger head swaps, replacing the full head (including hair and pose orientation).
The 2 versions complement each other, one is focused on face swapping and the other is focused on head swapping.
Share your creations that do not involve public figures or individuals who have not given consent. By sharing, you will earn Buzz, and your posts directly help me improve future versions by identifying and correcting potential issues.
Important Note: If you are going to use Qwen Image Edit 2511, update your comfyui before anything else, because without it you may have problems with completely distorted or ugly images.
Workflows:
Head/Face Swap Workflow - Qwen-Image-Edit-2509 | Civitai
My Custom Lightning LoRA:
Custom Lightning - Qwen Image Edit - 2511 | Qwen LoRA | Civitai
Alissonerdx/CustomLightning · Hugging Face
Test V3 here:
BFS Best Face Swap - a Hugging Face Space by Alissonerdx
Face Swap Video Tests (V1):
Face Swap - Qwen Image Edit 2509 (English)
Another important thing is to update ComfyUI. Many people are having terrible results because they haven't updated ComfyUI. The 2511 model has an architecture with a few more layers, and that's why ComfyUI needs to be updated.
About Flux 2:
I've done my best so far, but the results aren't as good as with QWEN. The base Flux 2 model can already handle head swapping, but with some difficulties. The goal of this LoRa was to try and improve that a bit, but I haven't achieved very good results. It might be a configuration issue, so here's this beta version for you to test.
Try with CFG: 8.0
PERSONAL NOTES:
The swap quality will always depend heavily on the quality of your input images. Larger, clean images with little noise or compression artifacts generally produce the best results. Keep in mind that the model always follows the quality of the body image, since it becomes the final rendered frame—so even if the face source is high-quality, a low-resolution or noisy body image will limit the outcome.
Most of the images I generate are created without using the LightX2V lighting LoRA, since I noticed that enabling it tends to make the skin appear more plastic-like and reddish, and finding the right balance requires extra tuning that I didn’t focus on. If anyone has discovered good configurations, feel free to share them in the comments of this template.
In short, using LightX2V makes the model less versatile because it operates with a fixed CFG value of 1.0. So before assuming it “didn’t work,” I recommend first testing the workflow I published without LightX2V to compare the results.
If you’re getting results with too much contrast, overly strong colors, or plastic-like textures while using LightX2V’s lightning models, try reducing the number of inference steps. For example, if you’re using the Qwen Image Edit 2509 Lightning (8 steps) model, try running it with 4 steps instead. The excessive contrast often comes from running too many steps while CFG remains fixed at 1.0.
If you encounter similar issues without using the lighting LoRA, try lowering the steps as well—e.g., from 20 down to around 16 or fewer—and reduce CFG to values like 1.2 or 1.5, which can help produce smoother, more natural results.
Another important detail: in images where the body is positioned farther from the camera, the face region becomes smaller, which can reduce swap accuracy and overall quality. This happens because the model has less pixel information to work with in that small facial area. To handle these cases, you can use my older workflow, which automatically crops the face region from the body image and performs an inpainting-like process to improve results in distant or small-face compositions.
Finally, if you notice loss of similarity between faces or poses—especially when the reference and target images differ significantly in aesthetics or angles—try increasing the strength of your head swap LoRA slightly (for instance, to 1.2 or 1.3) to restore consistency.
⚙️ BFS — “Focus Faces”
Trained on 240 image triplets (face, body, and result),
with a LoRA rank of 16 → later increased to 32,
and gradient accumulation = 2, running for 5500 steps on an NVIDIA L40S GPU.
This version produces stable and detailed face swaps, preserving expression, lighting, and gaze direction while maintaining the body’s natural look.
🔧 Model Notes
You don't need to use my workflow to make this lora work, if you are having problems with it use yours, it is the simple workflow of qwen image edit + lora and the inputs in the right order: face image 1, body image 2.
Quantization: not guaranteed to work below FP8 (avoid GGUF Q4).
Face mask: optional — remove if MediaPipe or Planar Overlay cause issues.
Pose conditioning: use MediaPipe Face Mesh or DWPose if you need more alignment control.
Lightning LoRA: may produce plastic-like skin, especially when mixed with other Qwen-based LoRAs.
⚙️ Recommended Settings
Samplers:
er_sde + beta57 / kl_optimal / ddim_uniform(best results)ddim + ddim_uniform (sometimes most realistic)res_2s + beta57
Don't get attached to one setting, sometimes if it doesn't work well with one, switch to another.
Precision:
🧠 Best:
fp16⚙️ Recommended:
gguf q8orfp8⚠️ Below fp8: noticeable degradation
Inference Tips:
With Qwen Image Edit 2509 Lightining LoRA → use 4 / 8 steps for fast generation.
Without it → use 12–20 steps, CFG 1.0–2.5 for realism.
🧬 BFS — “Focus Head”
The “Focus Head” version was trained as a continuation of Focus Face, extending the dataset and shifting focus toward full head swaps.
It was trained on a NVIDIA RTX 6000 PRO, rank 32, for 12,000 steps, using 628 image pairs (face, body, target, and sometimes pose maps generated via MediaPipe).
🔹 Training Phases
Standard Face Swap – same Focus Face, focusing on facial identity.
Pose-Conditioned Face Swap – added pose maps to align gaze and head angle.
Full Head Swap – replaced the entire head (including hair) for stronger identity control.
After ~2000 steps, the focus moved toward head swap refinement.
At ~4000 steps, the dataset was narrowed to perfect skin-tone matches, and by the end of training,
the dataset evolved from 628 → 138 → 76 high-quality samples for final fine-tuning.
⚠️ Note:
While Focus Face can still perform standard face swaps, it’s more naturally inclined toward full head swaps due to its data balance.
This was intentional in part, but also a side-effect of dataset distribution and mixed conditioning.
⚠️ Important Notice
Do not share results involving real people, celebrities, or public figures.
Civitai’s moderation may disable posts that violate likeness or consent rules.
This model is intended only for artistic and fictional characters, educational use, and AI experimentation.
I take no responsibility for any misuse of this model. Please use it responsibly and respect all likeness rights.
Description
One really cool thing about this model is that you can now add information like expressions and other details bellow the original prompt, and it will add them without any problem.
FAQ
Comments (57)
This is an amazing LORA, I Just linked this at my newly uploaded beginner friendly Flux.2 Klein 4B GGUF Simple Flawless Fast Headswap Workflow's "Suggested Resources" section. You can find the workflow here - https://civitai.com/models/2320172/comfyui-beginner-friendly-flux2-klein-4b-gguf-simple-flawless-fast-headswap-workflow-by-sarcastic-tofu
C'mon, dude...
So, you using this free lora for you pay to win wf? Also, your latest wf examples looks like flux2 is kinda bad no matter 4b or 9b used, just look at this example: https://civitai.com/models/2320445/comfyui-beginner-friendly-flux2-klein-4b-gguf-simple-image-edit-workflow-by-sarcastic-tofu
not even close output.
Наебашил на хайпе по одному воркфлоу ранних доступов штук пять и сидит пердит. Говна в панамку держи.
Уважай бесплатные лораc, стыдно должно быть.
@alex47213 Why are you commenting about other workflow that does not even use the headswap LORA? and the initial input that you showed did not came from Flux.2 4B. Only the process output results. Look at their prompts and generation methods closely.. the input images came from CiviAI's generations. Stop being negative Nancy..
@alex47213 Hey did you even looked at the prompt to get the output? I changed first female's hair color and bikini and for the second female I changed hair length and bikini too... you can have selective change of outputs but can keep other portions intact.. that is the whole point of the editor workflow. And as far as the head swap workflow is concerned the link I posted in the earlier comment above that works exactly as it is expected.. kept every other details on the target (Image 1) intact (dress, background & posture) but meticulously swapped the head with perfect hair color from the reference source (Image 2)..
Amazing, can delete safely FusionFusion and whatever now :D
Emm... Nope. ReActor still works better, but sometimes flux2 also nice. Cherrypicked sometimes I mean, reactor kinda better in that (technology of the ancients, which nobody can surpass still). Even FusionDudes with their models (they hate criticism on reddit).
I think how to implement reactor and flux2 together, but flux2 - too robotic and missing details, reactor - too low quality and missing details. Worked nice when just crappy paint-style head replace put into wan2.2, and it put it together (also kinda cherrypicked).
Best I got was - do remake of picture in flux2 (if bad quality), than run it to i2v with reactor at the end. Don't know how new iterations of comfy works with reactor, mine don't, so I using old one.
didn't know flux2 can do this. is there wf for this one?
This is a new version, it's called Flux 2. Klein also has the 4B and 9B models, which are extremely small and very good.
Just tested Flux Klein 2 9B, and I’m not sure what to think about it yet. It can deliver nice results, but compared to Qwen 2511 it lacks consistency. With Qwen + Inpaint & Crop, I get nearly perfect results almost every time.
Flux 9B non distilled + Inpaint & Crop can also create very nice results, but it often gives a very beautified, AI-face look. I’ll definitely test it a bit more and change things up with the prompt.
Excited for the new release nonetheless — you’re a machine for uploading so frequently!
I really liked the results so far, you could try using both models together too, because it's very fast to do with flux.2 klein, it follows the additional prompt much more closely, then you could try doing a second pass with qwen, I haven't tested that but it would be a good attempt.
@NRDX With crop & stitch, the colors in the generated part tend to be paler than the rest of the picture.
@trammediddusu9402457 But why did you use crop and stich? I noticed that, unlike Qwen, it works quite well with details that are further away, sometimes due to the flux 2.
@trammediddusu9402457 You can also try using the rank64 version; it doesn't try to copy the body image effect as much as rank128.
@NRDX I have very high resolution images that I crop around the head so that the final output has the same resolution as the original.
Come on! I'm more looking forward to only changing the face. I've noticed that the model always tends to replace the entire head—including the hairstyle—even when the prompt clearly specifies otherwise.
This LoRa wasn't designed to replace only the face, hence the name "focus head" and not "focus face." If you want to replace the face, you can try using the version called "focus face," which is only compatible with Qwen Image Edit 2509.
BFS - Best Face Swap - QIE 2509 - V1 Focus Face | Qwen LoRA | Civitai
Hey btw, can you try asking nano banana pro to change hairstyle first and then pass it to qwen.
Results very unstable on 2511. Mostly always erases original completely and takes expression and head rotation from image 2.
I haven't had that problem; it might be your configuration or your inputs. Do you have an example I could look at?
where is the qwen workflow? cant find it anywhere :s
@NRDX thank you!
running out of memory on RTX 5090 weird
I don't know what you're doing, I have a 5090 and I haven't had any problems with VRAM. Is your ComfyUI updated?
@NRDX it is idk bro, using runpod
@ereinte471 If you're using Runpod and ComfyUI, on the 5090 you'll need to use Torch 2.8.0; look for that template. Additionally, it's a good idea to install Sage Attention on the pod as well.
@NRDX i do use both i think it might be linked to the resolution of the image, i tried ur wf on huggingface and got a error too i use 2K 4:5 image
This is mainly dependent on the resolution setting. On my system (RTX 5090), GPU VRAM usage is ~24 GB, which is not the bottleneck. The limiting factor is system RAM.
With Resolution set to 2, 32 GB RAM is right at the limit if you have anything else open that uses the RAM: swap gets fully saturated and ComfyUI may be killed by the OS.
With Resolution set to 1, everything runs stably on 32 GB RAM. Since the output will be upscaled afterward anyway, using Resolution = 1 is the sensible choice here if you have < 32GB System RAM.
Flux2 Klein works really well! Is there a way in the future to make it only for the faces?
Will it work with stylized anime characters?
It works great! My question why only head? Why not to adjust also body from reference? Was it harder task? It seems Qwen struggle with body replacement same way as with head swap. So I wander if you plan lora for that or idea how to do best. For me most common use case is full char swap head+body.
So, just the head, because for me that was the most common use case. If it's the whole body, a simple, well-done inpaint can solve it, but I can certainly think about train a body swapping. Besides, you can do this with WAN Animate or SCAIL in WAN, but only for one frame.
@NRDX Can you suggest prompt or idea for pipeline with qwen edit. I prefer to use qwen for image editing rather then wan model animate. You suggest something like replace main body with white and request inpaint or use crop lora with body reference?
Right now I use 2 step pipeline for full swap 1. head swap using your good lora. 2. use gemini flash to read both images and create replacement prompt then use it in qwen edit again. Generic replacement prompts do not work somehow - so i need LLM to help tune it for particular image. Results are good. But 2 step is slow and LLM not make it always reliable 8/10 are good. That why lora would help me a lot.
Where workflow for klein?
Thanks for this great lora.
Between 2509 and 2511, which one do you find better for it?
It’d be awesome if you could use same images for models so we can compare them.
Also sorry if this is off-topic, but with 16 vram and 32 ram, which model do you suggest? can I run fp16 or fp8?
Look, a lot of people thought the Qwen 2511 V5 results were good. I think all the currently available models are the best versions of each base model. In theory, newer models usually have a more up-to-date dataset because I rebuild the datasets every time to solve problems from previous versions. For lower-level computers, Flux Klein 9b should be the best since it has less VRAM, but I don't usually use the models I trained very much. My enjoyment is training and seeing the feedback from people. I hope someone can add more than I can to this conversation. Besides, people rarely use BF16 due to lack of computational resources, but all the models I train are done without performing any quantization on the base model, always on top of the original model, and that's why the results might be better using the base model in the inference as well.
I'm not quite understanding how the LTX version is supposed to work. I couldn't find a workflow in your example video, and the description only mentions Qwen. Is the LTX version supposed to work on its own or does it need a Qwen preprocess first? If it's the former, what sort of workflow modifications need to be made to allow both a video and an image source for LTX?
It seems to be here: https://huggingface.co/Alissonerdx/BFS-Best-Face-Swap-Video/tree/main
@elis_ts Good find, thank you
@elis_ts all I found in there was a screenshot of their workflow but you can't see everything exactly, is there a link to the json? I checked the example videos but no metada for drag and drop into comfy. I'm assuming the creator just forgot to attach a workflow here though and will add it soon hopefully
@kaileykk If you drag and drop the png in the comfyui browser the workflow will load.
@elis_ts I switched to a JSON file now.
Has anyone tested it? Worked ? What's the feedback?
@NRDX doesn't work produces nothing but empty files
@banditlevel200 What do you mean it's not working? Is there an error? Tell me more.
@banditlevel200 I did a clean install of ComfyUI on a runpod, downloaded all the models, and it worked. I'll even publish a video about it soon.
@NRDX
Failed to validate prompt for output 351:
* VHS_LoadVideo 28:
- Custom validation failed for node: video - Invalid video file: 148055906499073246.mp4
* LoadImage 13:
- Custom validation failed for node: image - Invalid image file: pasted/image (388).png
Output will be ignored
Failed to validate prompt for output 153:
Output will be ignored
Failed to validate prompt for output 134:
Output will be ignored
Failed to validate prompt for output 366:
Output will be ignored
Failed to validate prompt for output 41:
Output will be ignored
Failed to validate prompt for output 120:
Output will be ignored
Failed to validate prompt for output 186:
Output will be ignored
Failed to validate prompt for output 367:
Output will be ignored
Failed to validate prompt for output 180:
Output will be ignored
Failed to validate prompt for output 106:
Output will be ignored
invalid prompt: {'type': 'prompt_outputs_failed_validation', 'message': 'Prompt outputs failed validation', 'details': '', 'extra_info': {}}
[VideoHelperSuite] - WARNING - Output images were not of valid resolution and have had padding applied
it 'works' it just produces a black video that is not display able and so does the audio file, the klein face swap seems to work its the LTX stuff that is broken the only thing that might be the issue is that I do not know what the lora is that is at the start and is said to be used to for base. I thought it was just the distil lora so I've been loading that.
@banditlevel200 Have you ever run LTX-2 before? It seems like there's a problem reading the video file you provided. You could try a different video, or use a different node to load the video.
@NRDX Took a while to get all the models, but it did run fairly well right out of the box, and with surprising speed (about 500 seconds for a 10 second video on a 4060TI). Results show potential so far, though I'll have to do some dialling in of the settings. Currently looking quite cartoonish even when both sources are photoreal. I couldn't quite work out what the FastCanvas node was doing, results seemed identical with or without it.
What I did notice is it regenerates the whole frame, not just the face area as I was expecting. This caused feet to turn into hands in some instances. I might look at masking in post, but I don't know how well the source video and the generation will line up in terms of content.
I'm looking forward to playing around with it more, thanks for providing this.
@NRDX normal LTX works just fine even tried it now and it works. Your workflow though doesn't it just outputs black broken files, even with all the files downloaded
@NRDX Love to see your video soon~
@banditlevel200 I think you're having the same problem that some other people have had when increasing the resolution; I'm trying to adjust the workflow to resolve these issues.
@NRDX Could the issues the other users be having possibly be related to NSFW generation? I don't know enough about how LTX or Flux Klein work with NSFW, but I know Reactor has inbuilt detection (by default...) that will spit out black frames if it detects NSFW content. My tests were with SFW generations which might be why I didn't get the issues (but admittedly lowish res so could also be that).

