From f5be04a5cb898e4420b764e65e359a33049295ad Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Sat, 27 Jun 2026 10:18:12 +0200 Subject: [PATCH] Fix: render text inputs as editable fields, not input sockets Widget-type inputs in the optional section render as connection sockets (not editable boxes) in some ComfyUI frontends. Moved all widgets (report_dir, run_tag, reference_description, system_prompt, user_prompt, keep_loaded, auto_download) into required; only generated_image (a real node-to-node wire) stays optional. Same fix for the receptor's source_file. Co-Authored-By: Claude Opus 4.8 --- nodes/qwen_judge.py | 8 +++++--- nodes/receptor.py | 5 ++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/nodes/qwen_judge.py b/nodes/qwen_judge.py index 91f0a8b..a6ec95f 100644 --- a/nodes/qwen_judge.py +++ b/nodes/qwen_judge.py @@ -749,9 +749,6 @@ class QwenVLImageJudge: "max_new_tokens": ("INT", {"default": 1024, "min": 64, "max": 4096}), "temperature": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.5, "step": 0.05}), "swap_eval": ("BOOLEAN", {"default": True}), - }, - "optional": { - "generated_image": ("IMAGE",), # required for compare, ignored for describe "keep_loaded": ("BOOLEAN", {"default": True}), "auto_download": ("BOOLEAN", {"default": True}), # The agent reads the analysis from these files after each queue. @@ -764,6 +761,11 @@ class QwenVLImageJudge: "system_prompt": ("STRING", {"default": "", "multiline": True}), "user_prompt": ("STRING", {"default": "Describe this image.", "multiline": True}), }, + # Only genuine node-to-node wires stay optional (widgets in `optional` render + # as input sockets instead of editable fields in some ComfyUI frontends). + "optional": { + "generated_image": ("IMAGE",), # required for compare, ignored for describe/chat + }, } def judge(self, reference_image, mode, model_path, precision, axes, diff --git a/nodes/receptor.py b/nodes/receptor.py index 7f6cad4..bf0d52e 100644 --- a/nodes/receptor.py +++ b/nodes/receptor.py @@ -29,11 +29,10 @@ class CalibratorPromptReceptor: "prompt": ("STRING", {"default": "", "multiline": True}), "negative": ("STRING", {"default": "", "multiline": True}), "seed": ("INT", {"default": 0, "min": 0, "max": 0x7FFFFFFFFFFFFFFF}), - }, - "optional": { # If set and present, a JSON file {prompt, negative, seed} overrides # the widgets above. Lets the agent drive the loop file-first if it - # prefers that to the HTTP API. + # prefers that to the HTTP API. (Kept in `required` so it renders as an + # editable field, not an input socket.) "source_file": ("STRING", {"default": ""}), }, }