CSV Reader X Checkpoint (Soze)
Sweep every prompt against every checkpoint with one counter
- Column_1
- Column_2
- Column_3
- Column_4
- Column_5
- Column_6
- Column_7
- Column_8
- Column_9
- Column_10
- Entire_Line
- Row_Count
- Ckpt_Full_Path
- Ckpt_Name_Only
- Cktp_Index
- status
CSV Reader's sibling for a specific job: sweeping every row of your CSV against every checkpoint in a list, with a single counter. Per the pack's own description, this and its LoRA counterpart "iterate index across rows × models, so a single counter walks every (row, checkpoint) pair" - exactly what you want for a "does this batch of prompts hold up across all my finetunes" grid test, without hand-building every combination yourself.
How it works
It reads CSV rows the same way CSV Reader does, but adds a checkpoint dimension: you tell it a starting checkpoint and how many to cycle through, and as index climbs, the node walks the full cross-product of CSV rows against that checkpoint range - one index value maps to exactly one (row, checkpoint) combination.
The inputs and outputs that matter
csv_filename_path- your CSV file.index(INT, 0 to 1,000,000) - per its own tooltip, "the row number to read from the CSV file," but here it's driving the combined row × checkpoint walk, not just the row.start_ckpt_name(enum, populated from your installed checkpoints) - "the name of the starting checkpoint," per its tooltip. Pick where the checkpoint cycle begins.ckpt_count(INT, default 1, max 100) - "the number of checkpoints to iterate," starting fromstart_ckpt_name.- Outputs: the same
Column_1–Column_10,Entire_Line,Row_CountasCSV Reader, plusCkpt_Full_Path,Ckpt_Name_Only, andCktp_Index(yes, that's how it's spelled in the node itself - worth knowing so you're not hunting for a "Ckpt_Index" that doesn't exist when you go to wire it), andstatus.
Wire Ckpt_Full_Path (or Ckpt_Name_Only) into your checkpoint loader, and the relevant Column_N outputs into your prompt fields, and one index counter drives both dimensions at once.
How to install it
Via ComfyUI Manager: search "Quality of Life Nodes for ComfyUI", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
No API keys needed - it reads your CSV and your local checkpoints folder, nothing external.
Common issues & troubleshooting
start_ckpt_name dropdown is empty or missing a model. It's populated from whatever ComfyUI can see in your checkpoints folder at load time - if you've added a checkpoint since starting ComfyUI, restart to refresh the list.
You're not sure how far index needs to go to cover everything. With ckpt_count checkpoints and Row_Count rows, the full sweep is Row_Count × ckpt_count combinations - use both outputs together to bound your loop rather than guessing.
You only need to sweep checkpoints, not CSV rows (or vice versa). If you don't actually need the row dimension, plain CSV Reader plus a separate checkpoint-cycling setup might be simpler than pulling in this combined node. This one earns its keep specifically when you want the full grid.
Looking for the LoRA version. The README mentions a CSV Reader X Lora sibling that does the same thing for LoRAs instead of checkpoints - same pattern, different axis.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| csv_filename_path | STRING | — | |
| index | INT | 00–1000000 | The row number to read from the CSV file. |
| start_ckpt_name | COMBO | The name of the starting checkpoint. | |
| ckpt_count | INT | 11–100 | The number of checkpoints to iterate. |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| Column_1 | STRING | — |
| Column_2 | STRING | — |
| Column_3 | STRING | — |
| Column_4 | STRING | — |
| Column_5 | STRING | — |
| Column_6 | STRING | — |
| Column_7 | STRING | — |
| Column_8 | STRING | — |
| Column_9 | STRING | — |
| Column_10 | STRING | — |
| Entire_Line | STRING | — |
| Row_Count | INT | — |
| Ckpt_Full_Path | STRING | — |
| Ckpt_Name_Only | STRING | — |
| Cktp_Index | INT | — |
| status | STRING | — |