Keep node transformers-only: drop GGUF presets from dropdown

Per decision, this node stays transformers/safetensors. Removed the HauhauCS
GGUF presets from model_select; the manual .gguf guard now points to a dedicated
GGUF node (1038lab/ComfyUI-QwenVL, KLL535 Simple-Qwen3-VL-gguf). Dropdown lists
the huihui 4B/8B/30B-A3B judges with VRAM hints. Docs note GGUF models run in a
separate node and feed their text into the loop.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-27 09:26:32 +02:00
parent 34adb946a4
commit e29df0b319
2 changed files with 22 additions and 18 deletions
+15 -8
View File
@@ -34,8 +34,9 @@ can act on it.
| `mode` | compare / describe | compare | `describe` = first pass over the reference only → caption + target spec (seeds the prompt). `compare` = score ref vs generated | | `mode` | compare / describe | compare | `describe` = first pass over the reference only → caption + target spec (seeds the prompt). `compare` = score ref vs generated |
| `profile` | general / oral / penetration / handjob / solo | general | **analysis profile** — act-specialized axis set; the act-critical axes are distance/proximity-aware (e.g. `mouth_genital_distance`) so magnitude isn't hidden behind a coarse label | | `profile` | general / oral / penetration / handjob / solo | general | **analysis profile** — act-specialized axis set; the act-critical axes are distance/proximity-aware (e.g. `mouth_genital_distance`) so magnitude isn't hidden behind a coarse label |
| `generated_image` | IMAGE (optional) | — | the candidate to score (required for `compare`, ignored for `describe`) | | `generated_image` | IMAGE (optional) | — | the candidate to score (required for `compare`, ignored for `describe`) |
| `model_path` | STRING | `/media/p5/qwen3vl_4b_abliterated_comfy_convert/hf_bf16` | local dir, **HF repo id** (`org/name`), or alias (`30b-a3b` / `8b` / `4b`) | | `model_select` | dropdown | 4B local bf16 | curated **transformers** judges with VRAM hints: 4B local (bf16 ~9GB / fp8 ~5GB), 8B (bf16 ~17GB), 30B-A3B (nf4 ~18GB, slow). Auto-downloads on first use |
| `precision` | bf16 / fp16 / fp8 / nf4 | bf16 | `nf4` = 4-bit (run the 30B judge on 32 GB); `fp8` with the `hf_fp8` copy | | `model_path` | STRING | "" (empty) | **manual override** of the dropdown — local dir, HF repo id, or alias (`30b-a3b`/`8b`/`4b`). Empty = use `model_select` |
| `precision` | bf16 / fp16 / fp8 / nf4 | bf16 | applies to a manual `model_path`; presets carry their own precision |
| `axes` | STRING | "" (empty) | **override** the profile's axis set with a custom comma/newline list; empty = use `profile` | | `axes` | STRING | "" (empty) | **override** the profile's axis set with a custom comma/newline list; empty = use `profile` |
| `max_new_tokens` | INT | 1024 | | | `max_new_tokens` | INT | 1024 | |
| `temperature` | FLOAT | 0.0 | 0 = greedy/repeatable | | `temperature` | FLOAT | 0.0 | 0 = greedy/repeatable |
@@ -71,12 +72,18 @@ converted at `/media/p5/qwen3vl_4b_abliterated_comfy_convert/` so it runs out of
(the abliterated/uncensored variant won't refuse to analyze adult imagery, which would (the abliterated/uncensored variant won't refuse to analyze adult imagery, which would
otherwise break the loop). otherwise break the loop).
**Recommended upgrade (latest Qwen VL + uncensored, fits 32 GB):** **Pick the judge from `model_select`** (transformers / safetensors, auto-downloaded):
[`huihui-ai/Huihui-Qwen3-VL-30B-A3B-Instruct-abliterated`](https://huggingface.co/huihui-ai/Huihui-Qwen3-VL-30B-A3B-Instruct-abliterated) the **8B** abliterated at `bf16` (~17 GB) is the recommended intermediate — fast and
— MoE (3B active, fast), run at `precision=nf4` (~18 GB). The node auto-detects the MoE clearly better than the 4B. The **30B-A3B** (nf4 ~18 GB) is higher quality but slow (the
class. An easier middle ground is the **8B** abliterated at `bf16` (~17 GB, no quantization). `nf4`/bitsandbytes path is the bottleneck, not the model). `model_path` overrides the
Qwen3.5-VL abliterated isn't out yet (Qwen3.5 abliterated builds are text-only so far); dropdown for anything else.
Gemma-3-27B-it abliterated (4-bit) is a viable non-Qwen alternative. See
**GGUF-only models are not in the dropdown.** Newer uncensored builds like
[`HauhauCS/Qwen3.5-9B-Uncensored`](https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive)
and [`HauhauCS/Qwen3.6-35B-A3B-Uncensored`](https://huggingface.co/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive)
ship as **GGUF + mmproj** only — this node is transformers-only, so run those in a dedicated
GGUF node ([1038lab/ComfyUI-QwenVL](https://github.com/1038lab/ComfyUI-QwenVL) or
KLL535 Simple-Qwen3-VL-gguf) and feed their text output into the loop. See
[docs/METHODOLOGY.md](docs/METHODOLOGY.md#model-sizing-on-32-gb-rtx-5090--abliterated-latest-qwen-vl). [docs/METHODOLOGY.md](docs/METHODOLOGY.md#model-sizing-on-32-gb-rtx-5090--abliterated-latest-qwen-vl).
## Loop sketch ## Loop sketch
+7 -10
View File
@@ -42,9 +42,10 @@ RECOMMENDED_MODELS = {
} }
# Curated model dropdown (label shown in the node -> how to load it). The label # Curated model dropdown (label shown in the node -> how to load it). The label
# carries the suggested VRAM. `backend`: "transformers" = safetensors via this node # carries the suggested VRAM. All entries are safetensors loaded via transformers
# (auto-downloaded with snapshot_download); "gguf" = GGUF + mmproj (needs the GGUF # (auto-downloaded with snapshot_download). `model_path` (manual) overrides this.
# backend). `model_path` (manual) overrides this when non-empty. # GGUF-only models (e.g. HauhauCS Qwen3.5/3.6 Uncensored) are NOT listed — run those
# in a dedicated GGUF node (1038lab/ComfyUI-QwenVL, KLL535 Simple-Qwen3-VL-gguf).
MANUAL_CHOICE = "(manual — use model_path below)" MANUAL_CHOICE = "(manual — use model_path below)"
MODEL_PRESETS = { MODEL_PRESETS = {
"Qwen3-VL-4B abliterated (huihui) · local bf16 ~9GB": { "Qwen3-VL-4B abliterated (huihui) · local bf16 ~9GB": {
@@ -55,10 +56,6 @@ MODEL_PRESETS = {
"repo": "huihui-ai/Huihui-Qwen3-VL-8B-Instruct-abliterated", "backend": "transformers", "precision": "bf16"}, "repo": "huihui-ai/Huihui-Qwen3-VL-8B-Instruct-abliterated", "backend": "transformers", "precision": "bf16"},
"Qwen3-VL-30B-A3B abliterated (huihui) · nf4 ~18GB (slow)": { "Qwen3-VL-30B-A3B abliterated (huihui) · nf4 ~18GB (slow)": {
"repo": "huihui-ai/Huihui-Qwen3-VL-30B-A3B-Instruct-abliterated", "backend": "transformers", "precision": "nf4"}, "repo": "huihui-ai/Huihui-Qwen3-VL-30B-A3B-Instruct-abliterated", "backend": "transformers", "precision": "nf4"},
"Qwen3.5-9B Uncensored Aggressive (HauhauCS) · GGUF Q4 ~8GB": {
"repo": "HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive", "backend": "gguf", "precision": "Q4_K_M"},
"Qwen3.6-35B-A3B Uncensored Aggressive (HauhauCS) · GGUF Q4 ~22GB": {
"repo": "HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive", "backend": "gguf", "precision": "Q4_K_M"},
} }
# Difference axes + a one-line definition each. Definitions are injected into the # Difference axes + a one-line definition each. Definitions are injected into the
@@ -731,9 +728,9 @@ class QwenVLImageJudge:
eff_repo, eff_backend, eff_precision = preset["repo"], preset["backend"], preset["precision"] eff_repo, eff_backend, eff_precision = preset["repo"], preset["backend"], preset["precision"]
if eff_backend == "gguf": if eff_backend == "gguf":
msg = (f"[QwenVLImageJudge] '{eff_repo}' is a GGUF model — the GGUF backend " msg = (f"[QwenVLImageJudge] '{eff_repo}' is GGUF — this node is transformers "
f"is not enabled yet (pending Ollama vs llama-cpp-python choice). " f"(safetensors) only. Run GGUF models in a dedicated GGUF node "
f"Use a transformers (safetensors) model for now.") f"(1038lab/ComfyUI-QwenVL or KLL535 Simple-Qwen3-VL-gguf).")
print(msg); return (0.0, "{}", msg, msg, "") print(msg); return (0.0, "{}", msg, msg, "")
try: try: