HPSv3++ Score
The flavor of scoring node the example workflows use
- model
- images
- images
- scores
Twenty images, one prompt, and you can't tell which four are the good ones anymore. HPSv3++ Score reads each image against its prompt and hands back a number, plus a saved PNG with the number visible. It's the same idea as the plain HPSv3 scoring node - this is the ++ series version, and it's the one the pack's own examples are built on.
What it does
A human-preference reward model does the judging: image plus prompt in, a single float out that estimates how much a person would prefer that image given that prompt. There's no API call and no key behind this. The weights sit on your disk (about 6.5 GB for the ++ model, downloaded by HPSv3++ Model Loader into ComfyUI/models/hpsv3pp/) and it's run locally with the rest of your graph.
The two reasons people reach for it:
Curating data. Reward-model scores are how a lot of training sets get filtered now - cull the folder, keep the top slice, and throw the mushy tail away before it teaches your LoRA to be mushy.
Deciding between variants. Fixed seed, fixed prompt, two checkpoints or two LoRA strengths, two numbers. It's a tiebreaker, and honest about being one.
Inputs
model- anHPSV3PP_MODELfrom the ++ loader. Feeding it a plain HPSv3 model won't validate; the two series are deliberately incompatible, and the README says to keep loader and node from the same series.images- any IMAGE, batches included.prompt- the prompt you want the image judged against. Multiline. One prompt applies to the whole batch; give it a list and the count has to match the image count.score_mode- how the score gets shown:banner- white space added above the image with the score drawn in it, so your pixels are never covered.metadata- no text on the image; the model name, score and evaluation prompt are written as JSON into the PNG text itemhpsv3pp.both- banner and metadata in the same file.
filename_prefix- defaults toHpsv3pp, and takes ComfyUI's usual substitutions:%date:yyyy%/%date:MM%/%date:dd%/Hpsv3ppsaves into dated folders.
Outputs
images is the stamped result, one per input image, in input order. scores is a matching list of FLOATs. Feed scores into whatever consumes numbers - a display node while you're calibrating, a switch or filter node if you're automating the cull - and send images on to an upscaler or a saver.
Two things surprise people:
This is an output node. Like Save Image, it always runs and always writes a PNG into output/. Iterating on a graph that contains it means a lot of files. Use the filename_prefix to sort them, since the date substitutions are free.
The metadata lives in this node's file only. Wire images into a separate Save Image and the hpsv3pp JSON does not ride along. If the score record matters to you, keep this node as the saver.
Reading the number honestly
Higher means the model thinks a human would prefer it, for that prompt - and you're reading a proxy, not a verdict. Reward models carry the taste of their training data, and this family has a history of disagreeing with human eyes: when people tested earlier generations (HPSv2, ImageReward), all of them on average rated SDXL above Flux, which is not what looking at the images suggested.
So: use it to rank your own near-identical variants, where the differences are subtle and the scorer's bias is roughly constant. Don't use it to crown a model, and don't optimise a prompt against it, because you'll just find what the scorer likes rather than what you like. Also compare within one scoring model - an HPSv3 number and an HPSv3++ number are not on the same scale, which is exactly why the metadata records which model produced it.
Install
Manager: search ComfyUI-HPSv3 with the search type set to Node Pack, confirm Stella2211/ComfyUI-HPSv3, install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/Stella2211/ComfyUI-HPSv3.git
cd ComfyUI-HPSv3
uv pip install --python <ComfyUI Python> -r requirements.txt
uv run --no-project --python <ComfyUI Python> python install.py
The install.py step is for manual installs only. Requirements are an NVIDIA CUDA GPU with BF16 support (12 GB VRAM as a guideline, 8 GB untested), Python 3.12+, and the usual driver support - no CPU, AMD or Apple GPUs. Use ComfyUI's own PyTorch and torchvision; the pack doesn't replace them.
Common issues
Type error on model. You connected the plain HPSv3 loader. Swap in HPSv3++ Model Loader.
First run looks frozen. It's downloading 6.5 GB and then loading it. Progress prints in the ComfyUI terminal. A cancelled download keeps its partial data and resumes on the next run.
Prompt list length mismatch. One prompt for many images is fine; a list of prompts must match one-for-one.
transformers / bitsandbytes import errors. Repair this extension's dependencies in Manager and restart.
CUDA out of memory. The reward model occupies VRAM while it works. If your generation graph is already at the ceiling, score in a separate workflow instead.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | HPSV3PP_MODEL | — | |
| images | IMAGE | — | |
| prompt | STRING | — | |
| score_mode | COMBO | banner | 3 options: banner, metadata, both |
| filename_prefix | STRING | HPSv3pp | Output folder and filename prefix. Supports ComfyUI substitutions, e.g. %date:yyyy%/%date:MM%/%date:dd%/HPSv3pp. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| scores | FLOAT | — |