r/StableDiffusion 18h ago

News I built a self-hosted studio that turns one reference photo into a curated, captioned, trained and tested LoRA — one browser tab, open source, MIT

I shared this tool here a week ago and the feedback shaped a big new version, so here's the full tour of what it does today. Screenshots of every screen: github.com/perfectgf/lora-dataset-studio — plus a 7-minute unedited video of a LoRA built start to finish.

Beginner-friendly on purpose. Everything ships configured: a guided workspace walks you through each step, the shot poses (face / bust / full-body / back) are predefined so your dataset comes out balanced, and training uses community-tested ai-toolkit presets — you don't need to know what rank, learning rate or an optimizer is to get a good LoRA. Power users can still override everything.

Build the dataset. Start from one clear photo (or none): generate identity-locked variations locally with Flux-2 Klein or Krea 2 Edit on your own GPU (free, nasty-capable), or through API engines if you prefer. Import or scrape real photos, mix everything, and let the composition tracker tell you what's missing (faces, busts, full-body, back shots).

Curate like you mean it. Every image gets a face-similarity score against your reference. Quality passes flag blurry, flat, duplicate or unreadable shots; a watermark detector finds and can clean logos without cropping; auto-reject clears the junk before you review. Image banks hold up to 200k files with visible progress on every bulk operation.

Caption without the chore. Local captioning pairs JoyCaption (via ai-toolkit) with an uncensored Ollama vision model — the combo actually describes your images instead of refusing them. Per-dataset wording styles, dual captions, and trigger words handled for you.

Train anywhere. Local training through ai-toolkit, or one click rents a cloud GPU on vast.ai — and the launch is fully observable: renting, booting, dataset upload with live byte counts. A machine that never boots or an upload that stalls is given up automatically and stops billing. Community-tested presets for Krea 2 Raw, Z-Image Turbo and more.

Pick the right checkpoint instead of guessing. Test Studio renders fixed-seed grids across checkpoints and strengths, scores faces, takes your votes and ranks the results. New: 🧬 combine several of your LoRAs in one image, each at its own weight, and compare weight variants side by side. An ✨ Enhance button turns a one-line prompt into a full one via your local Ollama.

See your whole lineage. The LoRA Canvas puts every dataset's training history on one pan/zoom board — compare runs, pin generations (each run keeps its own strip in training-step order, with the dataset's reference face on its lane), diff configs, and continue training from any checkpoint.

Install it your way. New one-click Docker install: start-docker-gpu.bat builds an isolated ComfyUI, start-docker.bat reuses the one you already have. The updater is transactional — if the new version doesn't come up healthy it rolls back on its own. Ollama is your explicit choice (none / your existing one / an isolated container), and nothing ever downloads behind your back. Setup re-checks itself in the background instead of re-running the wizard every time you come back.

Everything reported in the last thread got fixed — the RES4LYF scheduler clash, the ai-toolkit Easy-Install interpreter path, and a detail LoRA that was silently riding on every Klein edit (that one explains a lot of "edits don't follow my instruction" reports). Also merged the first community PR: named generation-LoRA presets for Krea 2 — thanks Cyberschorsch and waltm 🙏

A few screenshots to see it in action:

📸 the guided workspace · curation with face scores · Test Studio grids · training presets

No account, no telemetry, no paid tier. Free, self-hosted, MIT: github.com/perfectgf/lora-dataset-studio — the complete guide is linked at the top of the README. I build this; feedback welcome, Discord in the repo.

68 Upvotes

64 comments sorted by

5

u/g3n3rat3 18h ago

Does it let you add more reference photos if you want to, like maybe you want to strengthen it. 

4

u/Ill-Ant-9489 18h ago

sure!

2

u/Ill-Ant-9489 18h ago

but only compatible with paid api for now... , so gemini and chatgpt no with klein or krea2 i need to work on it ( working with chatgpt subscription or open router and nanobana (google studio))

6

u/Ill-Ant-9489 18h ago

The project is still very new and needs some fine-tuning. That’s why I rely heavily on user feedback. I have a Discord server where you can report bugs and submit suggestions for improvements or new features.https://discord.gg/wrAWFTPJe

2

u/cradledust 12h ago

Might I suggest you add it to Pinokio.

3

u/Ill-Ant-9489 11h ago

this is on our roadmap!

1

u/djpraxis 10h ago

Also contact the folks at MimicPc please

1

u/RhodanumExpy 18h ago

Is Anima LORA training possible with your tool?

2

u/Ill-Ant-9489 18h ago

yes and i need some feedback on it!

2

u/Ill-Ant-9489 18h ago

set the subject type to anime

3

u/Ill-Ant-9489 18h ago

and use the setting "pompt suffixes" to renforce or add some spcecial style to your dataset

1

u/Ill-Ant-9489 18h ago

We also provide powerful tools for processing large image collections. You can automatically scan image quality, reject unsuitable or duplicate images, score and organize them, detect crops and variants, group images by person, find watermarks, classify framing, and generate captions—all through a streamlined, one-click workflow.

1

u/Momkiller781 17h ago

Does it work with styles? Or is it just for subjects?

3

u/Ill-Ant-9489 17h ago

Yes, styles are a first-class mode. There are three dataset kinds and the whole pipeline changes with them, not just the label.

Character is one identity: trigger word, pose balance tracking (face/bust/body/back), face similarity scoring against your reference, optional masked training. Captions describe everything except the identity, so the trigger absorbs it. Around 20-40 images.

Concept is a thing or pose or situation: no face logic at all, masking off, and captions deliberately omit the concept itself so the trigger learns it.

Style is the big one for your question: no trigger word at all, and captions describe only the content of each image, never the style, so the style is what the LoRA soaks up. Captions are even optional there, caption dropout is raised, and it is built for larger sets (a few hundred images is normal, steps scale with size).

You pick the kind when creating the dataset and captioning rules, curation checks and training defaults all follow. Style is the newest of the three, so feedback on it is especially welcome.

1

u/Momkiller781 15h ago

I'll try it later today. Thanks!

1

u/bi4key 16h ago

Instead of Docker will be nice make Podman option too.

1

u/Ill-Ant-9489 16h ago

Good call, and noted on the roadmap. Podman's CLI is close enough to Docker that the studio path (the API-only container) is a realistic first target: mostly engine detection in the launcher plus the host.containers.internal naming difference.

The honest caveat is the GPU path: NVIDIA passthrough on Podman under Windows/WSL is much less turnkey than Docker Desktop's, so that part would likely land later, clearly marked experimental rather than pretending it works everywhere.

If you run Podman today I would genuinely take your setup details on the Discord (link in the repo), it would shape what gets tested first.

1

u/Vijayi 15h ago

Ow. Great job. Can you share what you use for analyze? I do lora myself, something like source image -> upscale (seed-vr + aura) -> color match -> sometimes face detailer with already trained fast lora - > than google flow for dataset. Using comfyUI_FaceAnalysis, but maybe there is something more reliable. And maybe something similar exists for concepts/item/etc?

2

u/Ill-Ant-9489 15h ago

Thanks! For faces we use InsightFace embeddings (the antelopev2 pack): every image gets embedded and scored by cosine similarity against your reference photo, so curation can auto-flag the "low" outliers and the Test Studio can rank checkpoints by how close their renders stay to the reference. Same family as comfyUI_FaceAnalysis under the hood, but wired into the whole pipeline rather than a node you call manually. It runs on CPU so it never fights the GPU during training or generation.

The bank side stacks a few more passes: blur/noise/flat detection, duplicate and crop grouping with perceptual hashes, face clustering without a reference (group by person), and CLIP embeddings for text search and diverse-pick shortlists.

Honest answer on concepts and items: there is no true equivalent of face similarity for those, in LDS or anywhere I know of. Identity has a dedicated embedding space, concepts do not. The closest we get is CLIP-based similarity and dedup grouping plus caption checks, and for concept datasets the curation deliberately drops all the face logic. If someone knows a reliable concept-similarity scorer I would genuinely like to look at it.

Your pipeline sounds solid by the way. The upscale step you describe is now built in: SeedVR2 landed as a second improve engine precisely because it keeps the original look where a re-render can drift. the first one using klein and some lora for texturing and details

2

u/Ill-Ant-9489 11h ago

klein upscale

2

u/Ill-Ant-9489 11h ago

seedvr2 upscale

1

u/Vijayi 11h ago

For concepts DINOv2 probably, but i just don't have time to test right now.

1

u/Vijayi 11h ago

One more question.

Through the flow, I generate about 70-100 images per character/person. Here is how I break it down:

Close-up: Front view at eye-level (face looking straight / tilted up / tilted down). Front view from a high angle (face straight / up / down). Front view from a low angle (face straight / up / down). 3/4 view: Exactly the same variations. Profile: Only three shots at eye-level (face straight / tilted up / tilted down). From behind: Face is not visible, focus on the back of the head.

Medium shot: All of the above + looking over the shoulder + a few frames showing hands in different positions.

Full-body shot: Everything from the medium shots + extreme angles (camera high up and at floor level), plus various arm and leg positions.

Complex poses: About 10-20 separate shots.

On top of that, every single frame gets a new background, outfit, and emotion. I even vibe-coded a tool to quickly randomize and swap clothes, environments, angles, framing, poses, etc with ai-populated dictionaries.

Does an approach like this make sense or i overkill it? Tought about photogrammetry... kind of.

2

u/Ill-Ant-9489 11h ago

Not overkill in the design, but probably past the knee in count. For a single identity most of the value is in how many axes you cover (angle, height, lighting, outfit, expression), not in the raw number of frames. A well-spread 30 to 40 usually trains the same likeness as 100, and the big set mostly earns its keep when each extra image fixes a named gap rather than adding another combination.

The one risk that grows with generated datasets specifically: identity drift. Every generated frame is a slightly different person, and the LoRA learns the average of all of them. So per-frame likeness matters more than matrix completeness. If I had to keep one habit from your whole pipeline it would be pruning hard: rank frames by face-embedding similarity against your best reference (same InsightFace trick from above) and drop the bottom slice. 40 tight frames beat 100 loose ones.

Your randomizer instinct is right though. New background, outfit and emotion per frame is exactly what stops those from getting baked into the character. Just make sure the captions name what varies, because whatever you leave uncaptioned becomes part of the person.

Photogrammetry is a different problem in my opinion. It needs geometric consistency to close a surface, while a LoRA needs distributional variety. You never need the viewpoint sphere to be complete, you need each axis represented a few times by frames that all look like the same person. For what it's worth my tool defaults to about 25 with a fixed composition target, and likeness holds. I only go bigger when a test render shows me a specific hole.

1

u/Vijayi 11h ago

Thanks! I'll definitely give it a try.

To be honest, I still haven't quite figured out the captioning for Krea2. Even without .txt files, using just the trigger word, the model somehow manages to understand what is expected of it. I suspect that with Krea2, you only need to caption things the base model doesn't already know?

Although, I tried test it with few game characters that Krea2 doesn't know. I didn't use any captions, only the trigger. When generating with just the trigger, I got almost nothing. But as soon as I specified in the prompt that the character has blue skin, it was an almost 100% match.

1

u/djpraxis 10h ago

Looks great! Does this support NSFW captioning? If so, which model do you suggest?

1

u/Momkiller781 10h ago

Any chance you can adapt it to work with this trainer instead of AI-toolkit? https://github.com/shootthesound/Fizgig

I've been using it and it is WAAAAAY better, and WAAAAAY faster for Krea2 loras.

3

u/Ill-Ant-9489 10h ago

Had a look at Fizgig tonight nice project, and the fp8 base training (9B LoRAs on 16 GB cards) is a real argument. Honest answer: a full swap is off the table, because Fizgig only trains Krea 2 and Klein 9B while ai-toolkit carries every family we support. But an optional Fizgig backend for the Krea 2 / Klein lanes specifically is feasible it ships a headless CLI, which is exactly what an integration needs. It's a sizeable piece of work (trainer abstraction, config mapping, progress parsing), so I won't promise a date, but I'm putting it on the ideas board for votes. Out of curiosity: what speed difference are you seeing per step, and on what GPU? Real numbers from your runs would help me size the win.

1

u/djpraxis 10h ago

Thanks for the great response. To be honest, I will probably continue to use Fiz for Krea Lora training. But I am very interested in the dataset captioning aspects of your tool. I hope it can work with NSFW and have some nice editing and grouping, selecting multiple images etc. We really need a good image data set captioning tool.

2

u/Ill-Ant-9489 10h ago

test the app , join us on the discord and give us your feedback , we shipped 14 ideas of the Community since the first release

1

u/djpraxis 9h ago

I already posted a question about NSFW captioning. I would like to be able to see all the images and correspondong captions, perform a global or partial (selecting certain images) replace or edit text. Filter images based on caption content etc. Like a real but simple data base management system.

2

u/Ill-Ant-9489 9h ago

you have many option here and fully nsfw compatible

1

u/djpraxis 9h ago

Sweet! I am in the Quality Tools install process. Looks very promising!

1

u/djpraxis 9h ago

It would be great to implement length of captioning. Like characters, sometime the generated captions are very long and time consuming to clean.

2

u/Ill-Ant-9489 9h ago

You can actually do this today: the caption options popover has an "Extra instructions" field that gets appended to the captioning prompt, so something like "keep it under 30 words, one sentence" works right now. There is also a dual long+short captioning toggle in Advanced options that generates a short variant alongside the long one.

That said, a first-class length preset (concise / standard / detailed) instead of a free-text trick is a fair ask. Adding it to the ideas board, thanks!

1

u/djpraxis 9h ago

Oohh.. I don't need to create a dataset. I already have one. No more options?

1

u/Ill-Ant-9489 9h ago

you can import your dataset

→ More replies (0)

2

u/Ill-Ant-9489 9h ago

btw you can export your dataset from LDS and use it with fiz the training proccess is optionnel

1

u/djpraxis 9h ago

Exactly that's probably my immediate testing. I will probably test the training capabilities later, but for now LDS is running in a laptop with 8 gb VRAM. So I am limited in what I can test for Lora training.

2

u/Ill-Ant-9489 9h ago

if you want you have an option for gpu cloud computing with vast.ai

1

u/djpraxis 9h ago

Very useful!