Nodes/Gallery Prompt Manager (GPM)/GPM VLM Scanner (Internal Advanced)
ComfyUI Node

GPM VLM Scanner (Internal Advanced)

Three prompt families, one model load, real runtime knobs

By Mystic419·Created 6 months ago·Updated 24 days ago· 1
GPM VLM Scanner (Internal Advanced)
    • summary_json
    • status_text
    ◄root_folder►
    ◄scan_sdxlON►
    ◄scan_ponyOFF►
    ◄scan_naturalOFF►
    ◄sdxl_presetSDXL►
    ◄pony_presetPony►
    ◄natural_presetNatural Language►
    ◄overwrite_modeSKIP_EXISTING►
    ◄scan_limit0►
    ◄write_scan_reportOFF►
    ◄model_name<no gguf models found>►
    ◄mmproj_name(auto)►
    ◄n_ctx4096►
    ◄n_gpu_layers-1►
    ◄temperature0.20►
    ◄top_p0.95►
    ◄max_tokens512►
    ◄threads0►
    ◄batch_size512►
    ◄debug_modeOFF►

    Same scanner, two differences that matter: it can caption one folder for several bases in a single queue, and it exposes the runtime settings the basic node hard-codes. If you're captioning a mixed library - some SDXL-era finetunes, some Pony, some newer natural-language models - this is the one you want. If you're doing one pass on one family, the basic node does the same job with fewer ways to misconfigure it.

    The three-family pass

    Instead of a single prompt_preset, you get scan_sdxl, scan_pony and scan_natural, each ON/OFF, plus a preset dropdown per family (sdxl_preset, pony_preset, natural_preset) so you can point each at a user preset you've tuned rather than the built-in. Defaults are SDXL on, the other two off - same shape as the basic node until you change something.

    Turn on all three and the node runs three full scans over the same root_folder, sequentially, one preset at a time. The win is the model: it stays loaded across all of them and the worker exits once at the end, so you pay for one load and one VRAM dance instead of three. The catch is that it's three passes over your images, so it's genuinely three times the time.

    The output shape changes with the count, and this trips people up:

    • One family selected - you get the normal single summary, exactly like the basic node.
    • More than one - summary_json becomes an aggregate: an ok flag, a scan_runs list of the per-family summaries, and processed_total, failed_total, skipped_total across all of them. status_text joins the per-family lines with ||.

    Also: if a family fails, the run stops there. The node breaks out of the loop rather than continuing, on the theory that whatever broke will break the next one too. So an aggregate showing one run and no others means the first one died, not that you configured two families.

    overwrite_mode, scan_limit, write_scan_report and debug_mode behave as they do on the basic node. SKIP_EXISTING skips per family, so a folder that already has sdxl_* fields still gets the pony_* pass - which is exactly what you want here, and why the three-family run is cheap to re-queue when you add new images to a folder you already scanned.

    The runtime knobs

    • model_name / mmproj_name - the GGUF pair. Matching release, both files, in ComfyUI/models/llm/, models/llm/GGUF/ or models/GGUF/.
    • n_ctx - context window, 256–32768, default 4096. Bigger costs VRAM; the caption prompt plus one image isn't a huge window.
    • n_gpu_layers - -1 means offload everything. Sharing a card, a smaller positive number trades speed for headroom.
    • temperature (0.2) and top_p (0.95) - caption sampling. Low temperature is why the scanner is conservative; raising it buys creativity, which for a description task is a bug, not a feature.
    • max_tokens - 32–2048, default 512. The SDXL preset asks for 10–20 fragments per field, so truncation shows up as cut-off scenes, not an error.
    • batch_size (512) and threads (0 = runtime decides) - throughput knobs. threads matters most when you're offloading to CPU.

    One subtlety worth knowing: the Advanced node passes its own temperature/top_p/max_tokens values through explicitly, so the widgets win over whatever a preset carries in its temperature/max_tokens fields. The basic node leaves those None and lets the preset decide. In practice the built-ins ship 0.2 / 0.95 / 512 - the same numbers - so you won't notice until you tune a preset expecting it to stick.

    Install

    ComfyUI Manager → Gallery Prompt Manager (Registry name gallery-prompt-manager), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Mystic419/GPM-for-ComfyUI GPM
    cd GPM
    python -m pip install -r requirements.txt
    python install.py
    

    install.py is the llama-cpp-python step and it is not optional if you want this to be usable: the default pip wheel is CPU-only, and a vision scan on CPU is measured in evenings. The installer handles CUDA wheels and honours GPM_LLAMA_INSTALL_MODE=cuda if you want to force that path. Model files: Qwen2.5-VL GGUF plus its matching mmproj.

    Where people get burned

    • Validated family only. The same gate as the basic scanner applies: Qwen2.5-VL is the approved internal family for scan correctness, and Qwen3-VL / Gliese-Qwen3.5-VL are detected but blocked. Given how fast the captioning crowd moved to Qwen3-VL, that's the thing most likely to send you looking for a different pack - and the honest answer is that this one is deliberately conservative while the author validates the newer image path.
    • A three-family run you didn't mean. SKIP_EXISTING is per family, so ticking scan_natural on an already-scanned folder quietly adds a third pass. Three passes, three times the time, and it doesn't start until the previous family finishes - which looks hung if you're watching one progress bar.
    • Aggregate JSON parsed as a single summary. Anything downstream expecting processed finds processed_total once two or more families are on. Per-family detail is in scan_runs.
    • VRAM mid-session. The worker releases the model on exit, but while it scans the VLM is holding memory alongside whatever your workflow already loaded. Scan first, generate after.
    CategoryGPM

    Inputs (20)

    NameTypeDefaultDescription
    root_folderSTRING—
    scan_sdxlCOMBOON2 options: ON, OFF
    scan_ponyCOMBOOFF2 options: ON, OFF
    scan_naturalCOMBOOFF2 options: ON, OFF
    sdxl_presetCOMBOSDXL1 options: SDXL
    pony_presetCOMBOPony1 options: Pony
    natural_presetCOMBONatural Language1 options: Natural Language
    overwrite_modeCOMBOSKIP_EXISTING2 options: SKIP_EXISTING, OVERWRITE_FAMILY
    scan_limitINT00–100000—
    write_scan_reportCOMBOOFF2 options: OFF, ON
    model_nameCOMBO<no gguf models found>1 options: <no gguf models found>
    mmproj_nameCOMBO(auto)2 options: (auto), <no mmproj models found>
    n_ctxINT4096256–32768—
    n_gpu_layersINT-1-1–200—
    temperatureFLOAT0.200–2—
    top_pFLOAT0.950–1—
    max_tokensINT51232–2048—
    threadsINT00–128—
    batch_sizeINT51232–8192—
    debug_modeCOMBOOFF2 options: OFF, ON

    Outputs (2)

    NameTypeDescription
    summary_jsonSTRING—
    status_textSTRING—