(Deno) Local LLM Reviewer
Let a local LLM decide what actually gets saved
- image
- audio
- image
- audio
Save nodes don't judge. They write whatever you give them, which is why a bad generation in a long batch either pollutes your output folder or sends you back to manually sorting. (Deno) Local LLM Reviewer is a gate you drop before your Save node: a text review comes in from a local LLM - typically the pack's (Deno) Local LLM Loader, but really any text node - and image and audio only pass through when that review approves them. Nothing leaves your PC; the whole review loop is local.
How the gate works
The review input is the verdict text or JSON from your reviewer LLM. review_mode has two states: Review checks the verdict and gates the media; Passthrough bypasses the gate entirely - the switch you flip when you're testing the graph and don't want the reviewer in the way.
The approve_once toggle is the interesting one. It's a one-shot approval controlled by a node button: when set, you approve the current reviewed result once, then the gate closes again until the path before it is re-run. That's a deliberate guard against the "I approved it, now everything for the next hour sneaks through" problem - you approve the specific result you looked at, and then it re-arms. Combined with rerunning the path before the reviewer when you want another take, it gives you a manual-in-the-loop approval loop that a pure-automation gate can't.
Inputs and outputs
review(STRING) - the reviewer's verdict text or JSON.review_mode-Review(default) orPassthrough.approve_once(BOOLEAN) - the one-shot approval button state.image/audio- optional media that passes through only when approved.reviewer_state(STRING) - internal snapshot used by the frontend buttons; don't hand-edit.- Outputs:
imageandaudio- the original media, forwarded only when the review approves it.
The audio caveat
Worth reading carefully: the Local LLM Loader does not send audio into a local model - it's a text/image tool. So when this gate passes or blocks AUDIO, it's gating audio against a review text that was produced elsewhere. The README is explicit that the Reviewer can gate audio when another text-generation node - including ComfyUI audio-capable text generation - creates the review text. So for a pure image-review loop, Local LLM Loader → Local LLM Reviewer → Save is the intended stack; for audio, route the review text from wherever your audio-aware text node lives.
Install
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/Deno2026/comfyui-deno-custom-nodes.git
# restart ComfyUI
No extra dependencies - it's a text-parsing gate. The only setup is having a local LLM server running if you want the automatic verdict side. Real talk: this node pays off in production batch runs, not single renders. If you're generating one image at a time and eyeballing it anyway, the gate is overhead. The moment you're queueing fifty variations and want only the ones the LLM agrees are good to hit disk, it stops being a convenience and starts being the thing that keeps your output folder usable.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| review | STRING | Text or JSON verdict from a reviewer LLM or text node. | |
| review_mode | COMBO | Review | Review checks the verdict text. Pass bypasses the review gate. |
| approve_once | BOOLEAN | false | One-shot approval state controlled by the node button. |
| imageopt | IMAGE | Optional image to pass through only when the review approves it. | |
| audioopt | AUDIO | Optional audio to pass through together with the approved image/media result. | |
| reviewer_stateopt | STRING | Internal reviewer snapshot used by the frontend buttons. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | Original image passed through only when the review approves it. |
| audio | AUDIO | Original audio passed through only when the review approves it. |