ποΈ LoRA Dataset Config
The One Node That Builds a LoRA Dataset While You Watch
- trigger
- varied_prompt
- base_description
- output_prefix
- latent_width
- latent_height
Making a LoRA dataset by hand is a slog, and the community consensus says it matters more than every trainer knob you'll ever touch. You want 20β50 images of your subject, and you want them varied - different shots, poses, expressions, backgrounds - because the model bakes whatever you repeat into the concept. The old way of getting that variety was ugly: a base description node, a trigger word pasted into a wildcard node, two output folder fields, external .txt wildcard files, and a Python script run after every batch just to attach captions. LoRADatasetConfig is the part of this pack that kills most of that.
ποΈ LoRA Dataset Config doesn't generate anything itself. It's the orchestrator: type in your trigger word, subject name, and description once, and it emits every string and number the rest of the workflow needs - the varied prompt, the output path, even the latent size. The README's promise, and it mostly holds, is that it's the only node you ever edit.
How it works
Under the hood it's simple and transparent. It takes your five inputs, picks one random item from each of its built-in wildcard lists (shot, pose, expression, location, lighting, etc.), and assembles trigger, <shot>, <pose>, <expression>, <location>, <lighting> as your prompt. The lists are baked into wildcards.py - no .txt files to maintain, which is the whole point.
The seeding is the nice touch: random.Random(seed) drives the picks. Same seed, same composition - reproducible when you want to debug. Seed on Randomize, and every queue gives you a fresh combination. Since caption sidecars are written per-image, that's exactly the dataset variety you want.
The inputs that actually matter
You'll set four of the five, and they're the ones in the tooltips:
trigger_word- your activation token, e.g.jane_doe_v1. Keep it short and unusual; it gets prepended to every caption and every prompt.output_name- folder and filename prefix, snake_case (spaces get converted automatically). This becomeslora_dataset/<name>/<name>.description- the base visual description of your subject. Do not include the trigger word here; it's added automatically. Leave out the things you want to stay changeable.dataset_type-character,outfit,location, orobject. This is more than a label: it switches which wildcard lists are used and the output resolution.locationgets a 1216Γ832 landscape ratio, everything else 1024Γ1024.
seed is the one you can forget about - leave it at 0 or flip it to Randomize.
What wires where
Six outputs, and each has a job. trigger and output_prefix feed the pack's other node, LoRACaptionSaver. varied_prompt is your positive prompt, base_description is a stable secondary prompt (useful for IPAdapter conditioning in the example workflows), and latent_width / latent_height plug into your Empty Latent Image node so you can't drift off the recommended resolution.
Installing
This is a pack of two, so the install is shared. Either grab it from ComfyUI Manager (search "LoRA Dataset Tools") or clone it in:
cd ComfyUI/custom_nodes
git clone https://github.com/LordTaylor/comfyui-lora-dataset-tools.git
The node itself has zero Python dependencies - the wildcard logic is self-contained. The catch is the surrounding example workflows, which need ComfyUI IPAdapter Plus, comfyui-florence2, and pythongosssss's Custom Scripts, plus the SDXL IP-Adapter weights, a CLIP vision model, Florence-2-base, and the bridgeToonsMix checkpoint. There's a one-command install.sh that clones the nodes and downloads the models for you (bridgeToonsMix still has to come from CivitAI manually).
Where people get burned
Forgetting the trigger word in the description is the classic one - the tooltip warns you for a reason, and a model whose captions don't say the trigger never learns it. Also, don't fight the latent sizes: the resolution is chosen per dataset type because the example workflows condition on it. And a fair warning: the whole stack here is SDXL-era - the IP-Adapter face chain is the 2024/2025 approach to consistency, and it won't load on Flux or newer bases. But the part this node actually owns - varied, captioned training data that kohya and SimpleTuner can eat directly - never goes out of style.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| trigger_word | STRING | char_trigger | Unique trigger word for your LoRA. Use it in training captions. |
| output_name | STRING | my_character | Output folder and filename prefix. Keep it short and snake_case. |
| description | STRING | adult woman, cel-shaded, flat colors, animated series character, bridge toons style | Base description of your character / outfit / location. Do NOT include trigger word here β it is added automatically. |
| dataset_type | COMBO | character β full IPAdapter face chain, 1024Γ1024 | outfit β style IPA only | location β 1216Γ832 landscape, no people | object β 1024Γ1024, isolated | |
| seed | INT | 00β18446744073709550000 | Set to 'randomize' in the widget for variety per run. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| trigger | STRING | β |
| varied_prompt | STRING | β |
| base_description | STRING | β |
| output_prefix | STRING | β |
| latent_width | INT | β |
| latent_height | INT | β |