Aesthetics Predictor V2_5 Node
One image in, one 'is this actually good' score out
- image
- score
Ever generated fifty images, stared at them, and realized you can't tell which ten are worth keeping because your eyes have melted? That's what this node is for. AestheticsPredictorV2_5Node (shown as "Aesthetics Predictor V2_5 Node" in the search) is a one-file ComfyUI wrapper around discus0434's aesthetic-predictor-v2-5: one image in, one score out. That's the entire interface - there is nothing else to configure.
The name is a bit of a lie, in a good way: it doesn't call any API and needs no key. It's a fully local model, and it's about as simple a custom node as you'll ever install.
Why you'd reach for it
This is a dataset-prep and triage tool, not a generation node. The classic use: you're building a LoRA dataset and want to quietly drop the weak images before training. The old truism still holds - dataset curation beats every knob - and this node is the cheapest way to do that curation. Score every candidate image, keep the top N, and stop arguing with yourself about which of two similar renders is better. It's also what people get pointed at when they ask for a rough quality metric for evaluating AI images or grading dataset images; the author themselves recommended it in a r/StableDiffusion metrics thread. It won't tell you why an image is weak, but it's a fast, consistent second opinion when your own taste has gone numb.
How it works
Mechanically it's straightforward, and the source is easy to read. Your image tensor gets converted back to a PIL image, resized to 384×384, and pushed through a SigLIP vision encoder (google/siglip-so400m-patch14-384) topped with a small MLP scoring head - 1152 → 1024 → 128 → 64 → 16 → 1. The head weights are a tiny .pth the author hosts on GitHub; the encoder itself downloads from HuggingFace. On a GPU it runs in bfloat16, on CPU in plain fp32. The score is the scalar output of that head - higher means "more aesthetic, according to the model." Don't over-read the absolute number; this was trained on one person's notion of beauty, so use it for relative ranking, not gospel.
The inputs and outputs that matter
The whole schema fits on a napkin:
- image (
IMAGE) - any image tensor. One real caveat: this node is effectively single-image. Internally it squeezes the batch dimension, so feed it one image at a time; a batch of 2+ will throw a PIL error or garbage. - score (
STRING) - the result, and yes, it's a string, not a number. Because the node is marked as an output node, ComfyUI shows the score right in the UI.
That last detail is where people get burned. You can't wire score into a math or comparison node - it's text. Fine for eyeballing, annoying if you wanted to script a threshold. The price of a one-file node.
Installing it
Easiest path: ComfyUI Manager → Install Custom Nodes → search "ComfyUI Aesthetic Predictor V2.5" → install → restart ComfyUI. Manual path:
cd ComfyUI/custom_nodes
git clone https://github.com/discus0434/comfyui-aesthetic-predictor-v2-5
cd comfyui-aesthetic-predictor-v2-5
pip install -r requirements.txt
then restart ComfyUI. requirements.txt is a single line (aesthetic-predictor-v2-5), so dependencies are light - you already have torch, numpy, and PIL. The one thing you should not do is follow the README's own install block: it's copy-pasted from the underlying library repo and tells you to clone aesthetic-predictor-v2-5, which is the wrong repo for ComfyUI users. Clone the comfyui- one (or just use Manager).
Troubleshooting
- First run looks stuck. It isn't. On first use the node downloads the SigLIP encoder (~1.6 GB) from HuggingFace plus the head weights from GitHub. Needs internet, takes a while, only happens once.
- Nothing appears in the node. Remember it's an output node - wire it at the end of a branch and the score shows in its output area.
- Model won't load on an old GPU? If you don't have CUDA it quietly falls back to CPU fp32. Slow, but it works.
- License note: the underlying package is AGPL-3.0. Fine for personal and most hobby use; worth knowing before you build a product around it.
Verdict: it's a one-trick pony, and the trick isn't new - CLIP-based aesthetic scorers have been around for years. But it's free, local, single-file, and if you're curating datasets it will settle arguments you didn't know you were having.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| score | STRING | — |