Ultra LoRA Reference Images
One photo in, a 24-image training set out
- 얼굴_참조_이미지
- 밸런스_참조_이미지_상반신이상
The part of a character LoRA that decides whether it works is the dataset, and the dataset is the part nobody wants to build. Twenty good images of one person, varied angles, light and framing, each with a caption file - that's an afternoon of work, and most people don't have twenty photos of the person they want.
So the community answer became: manufacture the dataset with an instruction editor. Feed Qwen-Image-Edit one photo and twenty framing prompts, get twenty images of the same face back. That kind of workflow was among the most-upvoted posts of late 2025, and it survived because it works.
This node is that idea crammed into one box. One photo, pick a number, press Queue, get a folder of PNGs with matching caption .txt files.
What it actually is
Mechanically it's not a generator - it's a graph expander. You see one node; the queue sees 24 (or 30, or 40) independent branches, each a full little Qwen edit graph: model loader, text encoder loader, VAE loader, your LoRA stack, CFGNorm on the 2511 path (or QwenImage21Cache on 2.1), an encode step, a KSampler, a VAEDecode, and an internal save node. Every branch gets its own framing, head angle, expression, gaze, lighting and background, planned in Python rather than in forty prompt nodes - which is why 24 face-only images use ten angle slugs in a fixed order rather than lopsided profiles.
On the 2511 path it feeds two references to the editor: the balance image first (body proportions, framing, pose baseline) and the face image second (identity, skin tone, hair). That split is why balance mode can change outfit and framing while keeping the person.
The inputs worth setting
Face Reference Image (얼굴_참조_이미지) - required, one photo. In face-only mode it's the only reference, and it sets the ceiling on everything downstream.
Generation Mode (생성_모드) - face-only or balance (the widget values are Korean: 얼굴전용 / 밸런스; the pack ships an English locale so you'll see the translations). Face-only gives you face framings only. Balance mixes face, upper-body, thigh-up and full-body, with a new outfit for each body shot.
Image Count (배치수) - 24, 30 or 40. Balance mode splits them like this:
| Count | Face | Upper body | Thighs-up | Full body | |---|---|---|---|---| | 24 | 9 | 7 | 5 | 3 | | 30 | 11 | 9 | 6 | 4 | | 40 | 14 | 12 | 8 | 6 |
Balance Reference Image (밸런스_참조_이미지_상반신이상, optional input) - the second photo, same person, upper body or wider. A second face photo also runs fine per the tooltip; you just get less body-proportion information. Two different people is what quietly ruins the set.
Then the dials: 표정_변화 (expression range), 의상_다양성 (outfit pool, 4/8/12), 배경_옵션, 조명_옵션, 정체성_보존 (strong keeps the likeness, free lets angles get bolder), and 출력_비율 (keep the reference's ratio, or let framing choose 3:4 for faces and upper body, 2:3 for the rest). 트리거 and 피사체 get prepended to every caption - that text is training data.
Sampling defaults (steps 8, cfg 1.0, euler/simple) assume a few-step distilled setup: load a 4/8-step accelerate LoRA into the node's LoRA panel, or push steps into the 20s with CFG off 1.0 on stock 2511 weights.
Model Variant (모델_계열) - Qwen Image Edit 2511 or Qwen Image 2.1. This switches which set of model dropdowns, which encode path, and which remembered LoRA stack you get; the two families never share either. On 2.1 there are also 2.1 Cache Device and 2.1 Cache Dtype widgets for the internal cache node, which only do anything if your ComfyUI build has it.
Outputs: none. It's a terminal node. The images and captions land in ComfyUI/output/lora_dataset/<timestamp>_<count>_<mode>/.
Installing it
Manager → Custom Nodes Manager → search Ultra LoRA Reference Images. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Yamoon-jjang/comfyui-Ultra-LoRA-Reference-Images
Restart afterwards. The README's "no extra pip install" claim holds - requirements.txt is comments only; torch, numpy, Pillow and aiohttp come from ComfyUI.
You need one model family installed, in ComfyUI's standard folders:
- 2511:
diffusion_models/qwen_image_edit_2511_bf16.safetensors,text_encoders/qwen_2.5_vl_7b_fp8_scaled.safetensors,vae/qwen_image_vae.safetensors - 2.1:
qwen_image_2.1_bf16.safetensors,qwen3vl_8b_bf16.safetensors,qwen_image_2.1_vae_bf16.safetensors
Both want a current ComfyUI: 2511 needs TextEncodeQwenImageEditPlus, FluxKontextMultiReferenceLatentMethod and VAEEncode; 2.1 needs TextEncodeQwenImage21. The example workflow in 예제/ is the fastest sanity check.
Where it goes wrong
The dropdowns only know a fixed list of filenames, matched case-insensitively. Rename a file, tuck it in a subfolder, or use a merge with a different name and it won't appear - you'll get a placeholder like <2511 diffusion model missing> and a validation error. GGUF is out; the graph uses UNETLoader, not a GGUF loader.
Balance mode with no second image fails loudly and on purpose. The code won't substitute the face photo, because a tight face crop in the body slot produces giant heads.
Check the set before you train on it. Edit models re-emit the whole frame, so hands break and a caption sometimes describes an expression the face isn't making. Twenty-five curated images beat forty sloppy ones - lora-training.md has the captioning rules, character-consistency.md explains why faces drift across a chain of edits.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| 얼굴_참조_이미지 | IMAGE | — | |
| 트리거 | STRING | — | |
| 피사체 | STRING | a korean woman | — |
| 생성_모드 | COMBO | 얼굴전용 | 2 options: 얼굴전용, 밸런스 |
| 배치수 | COMBO | 24 | 3 options: 24, 30, 40 |
| 조명_옵션 | COMBO | 안정적분산 | 3 options: 사용안함, 안정적분산, 다양한분산 |
| 의상_다양성 | COMBO | 보통 | 3 options: 낮음, 보통, 높음 |
| 배경_옵션 | COMBO | 단순 | 3 options: 단순, 실내실외혼합, 다양화 |
| 표정_변화 | COMBO | 보통 | 3 options: 낮음, 보통, 높음 |
| 정체성_보존 | COMBO | 균형 | 3 options: 강함, 균형, 자유 |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 81–10000 | — |
| cfg | FLOAT | 1.00–100 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| denoise | FLOAT | 1.000–1 | — |
| 출력_비율 | COMBO | 원본 비율 | 2 options: 원본 비율, 자동 구도별 |
| 모델_계열 | COMBO | Qwen Image Edit 2511 | 2 options: Qwen Image Edit 2511, Qwen Image 2.1 |
| 2511_확산모델 | COMBO | <2511 확산 모델 없음> | 1 options: <2511 확산 모델 없음> |
| 2511_텍스트인코더 | COMBO | <2511 텍스트 인코더 없음> | 1 options: <2511 텍스트 인코더 없음> |
| 2511_VAE | COMBO | <2511 VAE 없음> | 1 options: <2511 VAE 없음> |
| 2.1_확산모델 | COMBO | <2.1 확산 모델 없음> | 1 options: <2.1 확산 모델 없음> |
| 2.1_텍스트인코더 | COMBO | <2.1 텍스트 인코더 없음> | 1 options: <2.1 텍스트 인코더 없음> |
| 2.1_VAE | COMBO | <2.1 VAE 없음> | 1 options: <2.1 VAE 없음> |
| 2.1_캐시_장치 | COMBO | auto | 4 options: auto, gpu, cpu, off |
| 2.1_캐시_정밀도 | COMBO | default | 3 options: default, int8, int4 |
| 밸런스_참조_이미지_상반신이상opt | IMAGE | — |
Outputs (0)
No outputs