feat: add AODH Image Saver (Metadata), Lora Selector, Checkpoint Selector, and various node improvements

This commit is contained in:
Aodhan Collins
2026-02-06 03:41:15 +00:00
parent 2417dcc090
commit 644ab104d9
54 changed files with 1483 additions and 104 deletions

View File

@@ -12,8 +12,9 @@ The **Character JSON Reader** node allows you to load character definitions from
- **Automatic File Discovery**: Scans the `nodes/character_reader/characters/` folder for `.json` files.
- **Selection Modes**:
- `manual`: Select a specific file from the dropdown.
- `sequential`: Cycles through files based on the `index` input.
- `random`: Picks a random file using the `index` as a seed.
- `sequential`: Cycles through files, starting from the selected file.
- `random`: Picks a random file. Uses a fresh random seed on every execution.
- **Repeat Count**: Keeps the same selection for a specified number of executions before changing.
- **Structured Outputs**: Provides 21 distinct output pins covering identity, wardrobe, and style.
- **Prompt-Ready Formatting**: Automatically appends a comma to every non-empty output string.
- **Robustness**: Ensures all outputs are valid strings, even if fields are missing from the JSON.
@@ -24,11 +25,77 @@ The **Resolution Reader** node reads resolution configurations from text files.
#### Features:
- **Selection Modes**:
- `manual`: Uses the first line of the selected file.
- `sequential`: Cycles through lines in the file based on the `index` input.
- `random`: Picks a random line from the file using the `index` as a seed.
- `manual`: Uses the selected line from the dropdown.
- `sequential`: Cycles through lines in the file, starting from the selected line.
- `random`: Picks a random line from the file. Uses a fresh random seed on every execution.
- **Repeat Count**: Keeps the same selection for a specified number of executions before changing.
- **Outputs**: Provides `width` (INT), `height` (INT), and `upscale` (FLOAT).
### Lora Selector
The **Lora Selector** node allows you to select a folder of Lora files (from `ComfyUI/models/Lora/Illustrious/`) and pick one `.safetensors` file at a time, either randomly or sequentially.
#### Features:
- **Folder Selection**: Scans `ComfyUI/models/Lora/Illustrious/` for subdirectories.
- **Selection Modes**:
- `Random`: Picks a random Lora from the folder. Uses a fresh random seed on every execution.
- `Sequential`: Cycles through the Lora files in the folder, starting from the `manual_index`.
- `Manual`: Selects the Lora at the specified `manual_index`.
- **Repeat Count**: Keeps the same selection for a specified number of executions before changing.
- **Manual Index**: Specifies the starting index for `Sequential` mode or the specific index for `Manual` mode.
- **Outputs**:
- `lora_name` (STRING): The relative path to the selected Lora.
- `total_loras` (INT): The total number of Lora files in the selected folder.
### Checkpoint Selector
The **Checkpoint Selector** node allows you to select a folder of Checkpoint files (from `ComfyUI/models/Stable-diffusion/`) and pick one `.safetensors` or `.ckpt` file at a time, either randomly or sequentially.
#### Features:
- **Folder Selection**: Scans `ComfyUI/models/Stable-diffusion/` (and other checkpoint paths) for subdirectories.
- **Selection Modes**:
- `Random`: Picks a random Checkpoint from the folder. Uses a fresh random seed on every execution.
- `Sequential`: Cycles through the Checkpoint files in the folder, starting from the `manual_index`.
- `Manual`: Selects the Checkpoint at the specified `manual_index`.
- **Repeat Count**: Keeps the same selection for a specified number of executions before changing.
- **Manual Index**: Specifies the starting index for `Sequential` mode or the specific index for `Manual` mode.
- **Outputs**:
- `checkpoint_name` (STRING): The relative path to the selected Checkpoint.
- `total_checkpoints` (INT): The total number of Checkpoint files in the selected folder.
### Checkpoint Loader (From String)
The **Checkpoint Loader (From String)** node loads a checkpoint model using a string input (e.g., from the **Checkpoint Selector** node).
#### Inputs:
- `ckpt_name` (STRING): The name/path of the checkpoint to load.
#### Outputs:
- `MODEL`: The loaded model.
- `CLIP`: The loaded CLIP model.
- `VAE`: The loaded VAE model.
### AODH Image Saver (Metadata)
The **AODH Image Saver (Metadata)** node saves images with comprehensive metadata in both A1111-compatible and extended ComfyUI formats.
#### Features:
- **Dynamic Directory Support**: Specify a `save_directory` with support for date formatting:
- `date:yyyy-MM-dd`: Replaces with formatted date (e.g., `2024-05-20`).
- Standard `strftime` patterns like `%Y-%m-%d`.
- **Comprehensive Metadata**: Embeds prompt, sampling parameters, model info, and LoRA details.
- **LoRA Handling**: Automatically strips directory paths from LoRA names for cleaner metadata.
- **Image Pass-through**: Includes an image output pin to continue the workflow after saving.
#### Inputs:
- `images` (IMAGE): The images to save.
- `filename_prefix` (STRING): The prefix for the saved files.
- `save_directory` (STRING): The folder to save images in (defaults to current date).
- Various optional metadata fields (prompts, checkpoint, lora, etc.).
#### Outputs:
- `images` (IMAGE): The input images passed through.
#### JSON Structure:
Place your character JSON files in the `nodes/character_reader/characters/` directory. The expected format is: