ComfyUI Node

System One Score

Put a Number on 'How Gory Is This Prompt?'

By dante01yoon·Created 22 days ago·Updated 22 days ago· 6
System One Score
  • backend
  • score
  • level
  • confidence
  • report
◄state—►
◄instructions—►
◄levels—►

Yes/No nodes are great right up until the answer is "sort of". Is this prompt a bit edgy or extremely edgy? Is this request a little dark or full horror? System One Score hands the model a ladder and asks it to say where on the ladder the prompt sits - then gives you both the rung (level) and the exact position (score).

The pack's demo use is a kid-safe gate: score how graphic the requested image would be, check score >= 2, and swap in a replacement prompt before anything is sampled. Nothing gory ever gets rendered because nothing gory ever gets sent.

How it works

You supply levels, one description per line, lowest first:

none, safe everyday content
mild, stylised or non-explicit conflict
strong, visible injury, blood, or horror imagery
extreme, graphic gore or body horror

The node sends those to the backend as a score question, the model returns a float position on that scale plus a confidence and a probability spread across the rungs, and the node rounds the float to give you level. The maths is worth knowing because it's where a boundary case can surprise you: the level is round(score) clamped to the range of your list, and Python's round() breaks ties toward even numbers. A score of exactly 2.5 becomes 2, and 3.5 becomes 4. Don't build a workflow where 2.5 is the decision point.

The on-node preview shows you everything - score, which rung, confidence, and a bar per level - which is a better tuning surface than most threshold nodes give you.

Inputs and outputs

backend, state (usually your prompt), instructions (the question), levels (the ladder). No optional inputs, no threshold - the cutoff lives downstream.

Outputs: score (FLOAT), level (INT), confidence (FLOAT), report (STRING, JSON with the question, raw answer, backend and latency).

score is the one to wire into a comparison or a math node, because a gate at 2.0 against a raw 1.48 and a raw 2.31 tells you your margin. level is the one to wire into a Map if you want a per-rung response - but convert it to a string first, as the Map node's own description warns; ComfyUI won't cast an INT socket into a STRING input for you.

How well does it actually work?

Better than the same question as a yes/no, at least in the pack's own numbers. On a 12-prompt test set, every safe prompt (a knight fighting a dragon, a pirate ship in a storm, a cartoon Halloween pumpkin) scored 1.39 or lower, and every gore prompt scored 2.39 or higher - so a 2.0 cut separated all 12. Asked the same question as a Yes/No, the model got 11 of 12. Grading gives you the thing a boolean can't: distance.

The honest caveat is in the README and it's worth repeating - in the recorded demo the gore prompt scored 2.31, which clears the 2.0 cut by less than the test set's margin. And Laya's confidence is explicitly uncalibrated (its checkpoint warns about out-of-range temperatures), so treat confidence as a hint, not a probability you can multiply into anything. Tune the cut on your own prompts; a threshold from someone else's test set is a starting point.

Levels are yours to define

Nothing about this node is specific to gore. The ladder is arbitrary descriptions, and the score is a position on it. Useful ladders people build with this shape: how much of the frame is occupied by a person, how complex a scene is (great for deciding whether to route to a heavier model), how stylised versus photographic a prompt is, how likely a prompt is to need an inpainting pass. If you can describe the rungs in a sentence each, the model can rate against them.

Keep the descriptions concrete - "strong: visible injury, blood, or horror imagery" beats "strong: quite graphic" - because a vague ladder produces a confident-looking number that means nothing.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/dante01yoon/ComfyUI-SystemOne
pip install -r ComfyUI-SystemOne/requirements.txt

Or search System One in ComfyUI Manager. The requirements file is one line, laya>=0.3.24, and that's the only real dependency, so Laya runs this fully offline and free. Jev needs TYPESAFE_API_KEY exported in the shell that starts ComfyUI; forget that and the first run tells you so in as many words.

Getting burned

  • One level. One line in levels raises Score needs at least 2 levels, one per line from lowest to highest. Two rungs is a yes/no wearing a hat - if that's all you need, use the Yes/No node and save yourself the ambiguity.
  • Order. Lowest first, because the model is told the criteria in the order you typed them and the rung index is the position in that list. Sorting your ladder backwards inverts every number you were about to threshold on, silently.
  • Wiring level straight into System One Map. They're different types. Use score for comparisons and convert level to text if you need it as a key.
CategorySystemOne

Inputs (4)

NameTypeDefaultDescription
backendSYSTEMONE_BACKEND—
stateSTRINGWhat the model looks at: plain text, or a JSON object/array.
instructionsSTRINGThe question to answer about the state.
levelsSTRINGOne level description per line, lowest first.

Outputs (4)

NameTypeDescription
scoreFLOAT—
levelINT—
confidenceFLOAT—
reportSTRING—