Home Creators Posts Import Register Favorites Logout

Downloads

Content

🎥 Watch this workflow in action: timestamped to where I use Dataset Generator in the full video. If you want a visual walkthrough alongside this breakdown, that link jumps straight to it.

Training a character LoRA requires a dataset, a set of images all showing the same person from different angles, poses, and framing distances, so the model can learn to generate that person consistently instead of just memorizing one photo. This workflow is how I build that dataset. It picks up right after Face Creator, which produces one locked, straight-on identity photo, and turns that single reference into a full fifty-image set ready for training.

Most broken character LoRAs aren't broken because of bad training settings, they're broken because of a bad dataset. This is the workflow where dataset quality actually gets decided.

Two reference images, two separate pipelines

The workflow accepts two reference images, not one. A face reference and a body reference, each running through its own identical pipeline: Load Image, Scale Image to Total Pixels (nearest-exact scaling, 1.20 megapixels), VAE Encode, and Set Reference Latent.

Keeping these as two separate conditioned latents, rather than merging them into one image up front, is what makes it possible to lock a character's identity from one photo while pulling body proportions from an entirely different one. The model draws from both independently during generation instead of working from a single blended reference.

The fifty-prompt list structure

The actual pose list runs through a prompt list node with three parts: a prepend block applied to every single prompt in the batch, the main body containing the fifty pose descriptions, and an append block for background and lighting that also applies to everything.

Every single image in the dataset ends with the same append instruction: a plain gray wall background, fair and neutral lighting. That's intentional. A flat, consistent, boring background across all fifty images means the LoRA has nothing environmental to accidentally latch onto during training. It only has the character to learn from.

The fifty prompts themselves follow a specific split: fifteen close-up face selfies, twenty five frontward facing shots at various distances, and ten shots from behind. That ratio isn't arbitrary. Too many close-up face shots and you end up with a LoRA that nails the face and falls apart the moment you generate a full body shot. Too few shots from behind and the model has no idea what the back of your character or their outfit looks like. This split gives the training data enough coverage of every angle to generalize properly instead of overfitting to whichever angle you happened to generate the most of.

Fighting synthetic-looking skin before it starts

Flux.2 Klein, the model doing the main image generation in this workflow, has a known tendency to render skin looking airbrushed and synthetic if nothing is pushing against that. This workflow fights it in two separate places, and the first is a dedicated negative prompt attached to the main generation pass.

That negative prompt explicitly excludes terms like plastic skin, waxy surface, airbrushed, oversmoothed, poreless, glossy skin, synthetic sheen, doll-like, and ceramic texture, along with composition problems like uncanny valley and CGI render quality. This is the first layer of defense against fake-looking skin, not the only one.

Three generation passes, not one

Getting a clean image out of this workflow isn't a single generate-and-done step. It's three stages stacked on top of each other.

Stage one is the main generation. Flux.2 Klein 9B takes the two reference latents from the face and body pipelines and places them into whatever pose and outfit the current prompt calls for.

This runs at just 6 steps, cfg 1.0, sampler euler_ancestral_cfg_pp, full denoise at 1.00, a complete generation rather than a light touch-up.

Stage two is a second KSampler running Z-Image Turbo across the entire image at a low denoise of 0.15. This isn't a face detailer, it's a full-frame pass whose only job is recovering the fine skin texture Flux.2 Klein tends to lose during the main generation. Stage three is a dedicated Face and Eye Detailer subgraph that runs after that, using SAM ViT for segmentation to isolate the face and eyes specifically, denoising the face region at 0.15 and the eyes at 0.20.

Each of these three stages does a different job: generate the pose, recover full-image texture, then refine the face and eyes specifically. Skip any one of them and it shows up in the output somewhere, either the pose comes out wrong, the skin reads synthetic, or the eyes look slightly off in close-up shots.

Adjusting body proportions without breaking identity

The prepend field on the prompt list node has a second use beyond just applying text to every prompt. Using that second body reference image from the dual-pipeline setup, you can push body proportions in a specific direction, and it's built as separate modular blocks so you're only changing what you actually want to change.

One block isolates the lower body only, glutes and hips, while explicitly locking everything else in place: face, hair, bust, outfit, pose, hands, background, lighting, framing. A second block does the same thing for the bust only. A third block swaps in an outfit from the body reference photo while preserving whatever shape changes you've already dialed in. A fourth block is pure reinforcement language, because image models have a strong built-in bias toward slimming a body back down toward "average" the moment you ask for any body edit, so this block exists specifically to push back against that bias. There's also a combined mode that runs all of it at once for a full identity-plus-body transformation off two references in a single pass.

The reason the reinforcement language in that fourth block has to be so explicit isn't a stylistic choice, it's functional. Leave it out and you'll watch your edits slowly regress toward a smaller, more default-looking body across a batch of generations, because that's the direction the model drifts toward without something explicitly telling it not to.

Putting it together

For my Alyssa character, the dataset ran the standard fifty-prompt split with no prepend modifications at all. Her identity was already locked from the Face Creator step and didn't need any body adjustment. The prepend body customization system is what you'd reach for instead if you were building a character from a face reference and a separate body reference that don't already match each other, which is a common starting point if you're combining assets rather than generating a character from scratch.

Once this dataset is generated, it's ready to move on to captioning and training. Getting this stage right, the reference setup, the pose split, and the three-pass generation, is what determines whether the LoRA you eventually train actually holds up, so it's worth not rushing.

Files

Comments

Michael

Nice workflow, thanks you man! I'm not so into Flux.klein - was only used to fluxD and so with fine-tuned model ... I wanted to ask you about the resolution, in my opinion and my gut-feeling 720x1280 don't give me sharp and crisp output images. Did you tried another resolution options for getting "higher quality" variations? I also realized that in 9:16 I have often distortions with 3 hands and stuff. with 2:3 or 4:5 I get 99% correct body outputs. But, back to the main question - did you tried also higher resolution examples for better quality? 5090 get a lot of room for it :D

LoRAtech - ComfyUI Hub

You can go up to like 1600x900 but anything more than that is going to take quite a while and will also maybe start diminishing quality, but yes you could potentially go up 😀 let me know what you find out about how good it works, I would recommend keeping the longer side below 1600 but that’s just me!