Anima Random LoRA Loader (28/40/52 Auto)
Roll the dice on your Anima LoRA folder, with the 28/40 remap handled
- model
- clip
- MODEL
- CLIP
- positive_text
- negative_text
- positive
- negative
- preview
If you've ever wanted to just shuffle through your LoRA collection and see what sticks - instead of manually typing <lora:...> tags for every test - the AnimaRandomLoRALoader is the node. It's an Anima-only port of shin131002's own RandomLoRALoader (the 3-folder simultaneous-selector version), with the pack's automatic 28/40 block remap built straight into the selection. Every LoRA it picks is checked and, if needed, remapped before it's applied. No tagging, no thinking about block counts, just a shuffle.
How it works
You point it at up to three folders - the classic setup is style / character / concept - and it randomly picks a few LoRAs from each, applies them to your model and CLIP, and assembles the prompt text for you. Because it's Anima-only, it shares the same remap logic as the pack's tag loaders: block-count detection on both the model and each selected LoRA, remap via expand_manifest.json when the model is 40 blocks and the LoRA is 28, and a hard error if a selected LoRA references more blocks than the model has (no silent partial applications).
Inputs that matter
The node is big, but you set maybe a third of it:
lora_folder_path_1/_2/_3- one folder per group, e.g. a path underComfyUI/models/loras/.model_strength_1..3/clip_strength_1..3- fixed ("1.0") or a random range ("0.4-0.8"), written as strings. This is the fun input: ranges make each run genuinely different.num_loras_1..3- how many to pick per group (0 disables that group).include_subfolders_1..3andunique_by_filename_1..3- recurse, and skip duplicate filenames across subfolders.seed- the selection seed. Set it and the same LoRAs get picked every time; leave it wandering and every run is a surprise.trigger_word_source- where the node pulls each LoRA's trigger words from (json_combined/json_random/json_sample_prompt/metadata). Details live in the original RandomLoRALoader's README.auto_remap,extend_to_new_layers,blend_ratio,extend_strength,manifest- the remap settings, and unlike the per-group stuff above, these are one shared set applied to every LoRA regardless of which folder it came from.
There's also additional_prompt_positive / additional_prompt_negative for extra text combined with each selected LoRA's trigger words.
Outputs and wiring
Seven outputs, and you can wire it straight into the sampler:
model/clip- the patched model and CLIP.positive_text/negative_text- ready-made prompt strings with each LoRA as<lora:name:model_strength:clip_strength>, trigger words.positive/negative- already-encoded CONDITIONING, so you can skip the text-encoder dance entirely.preview- an IMAGE output showing which LoRAs got picked, for sanity checks.
What's different from the original RandomLoRALoader
Three things, per the README. No LoRA Block Weight support - Anima's flat transformer-block layout doesn't map onto SDXL's IN/MID/OUT convention. No save_remapped / on-disk cache - a cached remap would go stale the moment your remap settings changed, and would show up in the folder scan as a duplicate candidate, so it remaps in-memory every run (LoRA files are small; the cost is negligible). And the folder scan explicitly skips _29Bremap / _29Bremap_ext files, so any caches the tag loaders wrote don't get picked up as candidates.
Install
Same pack as the rest:
cd ComfyUI/custom_nodes
git clone https://github.com/shin131002/ComfyUI-Anima29B-Remap.git
or ComfyUI Manager → "Anima-2.9B Remap", then restart. No extra dependencies or downloads. One reminder that applies to everything in this pack: the repo is frozen (development moved to ComfyUI-Anima-Remap), don't install both, and remapped LoRA files are non-commercial derivatives under the CircleStone Labs license - the images they produce are fine to use commercially.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| additional_prompt_positive | STRING | — | |
| additional_prompt_negative | STRING | — | |
| lora_folder_path_1 | STRING | — | |
| include_subfolders_1 | BOOLEAN | true | — |
| unique_by_filename_1 | BOOLEAN | true | — |
| model_strength_1 | STRING | 1.0 | — |
| clip_strength_1 | STRING | 1.0 | — |
| num_loras_1 | INT | 10–20 | — |
| lora_folder_path_2 | STRING | — | |
| include_subfolders_2 | BOOLEAN | true | — |
| unique_by_filename_2 | BOOLEAN | true | — |
| model_strength_2 | STRING | 1.0 | — |
| clip_strength_2 | STRING | 1.0 | — |
| num_loras_2 | INT | 00–20 | — |
| lora_folder_path_3 | STRING | — | |
| include_subfolders_3 | BOOLEAN | true | — |
| unique_by_filename_3 | BOOLEAN | true | — |
| model_strength_3 | STRING | 1.0 | — |
| clip_strength_3 | STRING | 1.0 | — |
| num_loras_3 | INT | 00–20 | — |
| trigger_word_source | COMBO | json_combined | 4 options: json_combined, json_random, json_sample_prompt, metadata |
| seed | INT | 00–18446744073709550000 | — |
| auto_remap | BOOLEAN | true | — |
| extend_to_new_layers | BOOLEAN | false | — |
| blend_ratio | FLOAT | 1.000–1 | — |
| extend_strength | FLOAT | 0.500–2 | — |
| manifest | COMBO | 4 options: Auto (Recommended), expand_manifest_28_40.json, expand_manifest_28_52_composed.json, expand_manifest_40_52.json |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| positive_text | STRING | — |
| negative_text | STRING | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| preview | IMAGE | — |