Nodes/RS-Seasonal-Prompt-Generator/Gemma TIPO Native (ComfyUI / Image → Tags)
ComfyUI Node

Gemma TIPO Native (ComfyUI / Image → Tags)

The tag-only half, and why it's often the one you want

By raspie10032·Created 2 years ago·Updated 3 days ago· 2
Gemma TIPO Native (ComfyUI / Image → Tags)
  • clip
  • image
  • tags
  • raw_output
◄prompt►
◄tag_lengthlong►
◄max_tokens384►
◄temperature0.50►
◄ban_tags►
◄seed0►
◄tipo_loranone►
◄model_sourceconnected_clip►
◄gguf_path►
◄mmproj_path►
◄tokenizer_path►
◄repetition_penalty1.05►

There are two Gemma nodes in this pack that look almost identical in the node browser, and choosing the wrong one is the most common way to waste twenty minutes here. This is the simpler of the two, and for tag-based work it's the one I'd grab first.

What it is

Gemma TIPO Native turns text - or one image - into Danbooru tags, using a Gemma 4 model running through ComfyUI's own PyTorch and model management. No llama.cpp, no separate server, no second process.

"TIPO" is the lineage name: the prompt-expansion concept and formatter come from KohakuBlueleaf's KGen / z-tipo-extension work, which the pack credits directly. The idea that survived into this node is expansion - take a thin prompt or a reference picture, and have the model fill in the plausible tags you didn't think to write. That's genuinely useful on Illustrious, NoobAI and Anima, where the model was trained on the Danbooru vocabulary and rewards being spoken to in it. It's the wrong tool for Z-Image or Flux, which want sentences; the pack's other node, Gemma Prompt Expander Native, produces those too.

The difference between the two nodes is narrower than it looks. Same engine, same base model, same LoRA offerings. This one has no output_format switch - it always produces tags - which means one call, no prose pass, and a lower default token budget (384 rather than 512). It also drops tag_set, the tag dictionary and the whole VRS state input set. So: use this when you want tags and nothing else, and use the Expander when you want prose, both, or retrieval context.

How it works

Two paths, picked by whether an image shows up:

  • Connect image and it's a vision caption-and-expand. The picture's content comes from the image, then the model plausibly fills out the rest of a tag set. That's TIPO-style upsampling, not faithful labelling - expect tags that aren't literally in the picture. If you need an exact description, use a straight tagger.
  • Leave image empty and it's text-to-tags: your prompt, in Korean or English, expanded into a fuller tag line. Longer, more specific descriptions give more accurate tags; short ones give generic ones.

Either way the result is post-processed into a tag string: duplicates dropped, ban_tags filtered out, redundant general tags pruned when a more specific tag with the same head noun exists (white skirt present means bare skirt goes), and conflicting person counts collapsed per group - 1girl kills 4girls and multiple girls, but 1girl plus 1boy stays.

The inputs that matter

  • prompt - your request or seed tags.
  • image (optional) - one image only, and it must be a single item if you're feeding a batch. Connecting it also changes what gets downloaded: the text GGUF alone is ~3.19 GiB plus a 30.7 MiB tokenizer, and vision needs a ~0.92 GiB FP16 mmproj on top.
  • tag_length - very_short, short, long, very_long. A detail target, not a guarantee.
  • max_tokens - default 384, up to 2048. Raise it before you raise temperature if your tags are getting cut off mid-list.
  • ban_tags - comma-separated English tags stripped from the tag output after generation. Note the tooltip: raw_output is unfiltered, so you can see what got removed.
  • repetition_penalty - tag sampling only, default 1.05, 1.0 disables it. It does nothing at temperature=0 in current ComfyUI, so don't tune it there and conclude it's broken. High values will start dropping names and visual tags, which is the exact opposite of what you wanted from an expander.

Optional but load-bearing: model_source - connected_clip (default, needs a native Gemma 4 E2B CLIP wired into clip) or heretic_ara_q4, which downloads its own base and requires you to disconnect clip. gguf_path, mmproj_path and tokenizer_path let you point at local files for offline use; leave all three blank and it fetches pinned, SHA-256-checked files. tipo_lora - none by default, plus pilot-001, pilot-002 and the newer image-30k. All of them need a base underneath; a LoRA on its own runs nothing.

Outputs are just tags and raw_output. tags goes to a text encoder's positive input or a Preview as Text; raw_output is the model's unfiltered text and is the only way to tell whether a missing tag was never generated or got cleaned away.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/raspie10032/RS-Seasonal-Prompt-Generator

Restart, then look under the prompt category. The Q4 path needs one dependency, and it's only a parser:

python -m pip install -r ComfyUI/custom_nodes/RS-Seasonal-Prompt-Generator/requirements.txt

That installs gguf>=0.19.0,<0.20 into ComfyUI's Python - pure Python, Python 3.10+, no CUDA wheels and no torch swap. The clip-connected path needs no extra packages at all, just a ComfyUI-format Gemma 4 E2B safetensors (~9.57 GiB) in models/text_encoders/. Use ComfyUI's interpreter, not some other venv on the box; the single most common "I installed it and the node still says it's missing" is a pip that went to the wrong Python.

Where it bites

The wrong-node mistake. If you wanted prose and you loaded this one, you'll stare at a node with no output-format switch and wonder why. Check the display name: (ComfyUI / Image → Tags) is this one.

The experimental LoRAs are presented as experiments. The author says plainly that image-30k was trained in one pass on 30,000 image cases plus 3,000 auxiliary rows, is a rank-8 language-side adapter with vision and embeddings frozen, and that quality is not guaranteed. Don't stack it on an already-merged model, and don't expect the file size (45.3 MiB) to mean it's cheap - you're still running the full Gemma.

Newly added tags don't appear in the dropdown. GGUF and model lists are read at widget-build time. New file? Reload the node list or restart.

Empty output with no error. Validation failure returns empty strings quietly. If the graph gets nothing and the node looks green, suspect inputs rather than inference.

It will not name characters or artists for you. A recurring limitation in the author's own docs, and the reason a whole separate retrieval system exists in this pack for people who need specific names back out.

Categoryprompt

Inputs (14)

NameTypeDefaultDescription
promptSTRING—
tag_lengthCOMBOlong4 options: very_short, short, long, very_long
max_tokensINT38416–2048—
temperatureFLOAT0.500–1.5—
ban_tagsSTRINGComma-separated English tags. Removed from tag output after generation; raw output is unfiltered.
seedINT00–18446744073709550000—
clipoptCLIPFor connected_clip: native Gemma 4 E2B Load CLIP.
imageoptIMAGE—
tipo_loraoptCOMBOnoneRequires a base: built-in Q4 GGUF (~3.19 GiB + tokenizer; image adds ~0.92 GiB), or native Gemma 4 E2B (~9.57 GiB) connected via Load CLIP. LoRA alone cannot run. 베이스 모델 필요: 내부 Q4 자동 다운로드 또는 네이티브 CLIP 연결. Select none for the base; each adapter downloads ~45.3 MiB on first use. image-30k improves image-tag agreement; use tags_only scope for dual output. Tested on 16GB NVIDIA GPUs. GPU compute/RAM demand is significant; results can omit names or alter appearance. 고사양 GPU 권장. 취향과 다른 결과, 이름 누락·외형 변경 가능. Experimental tag-only adapters; not the default for prose/VRS. Use p-e-w/gemma-4-E2B-it-heretic-ara; do not apply on an already merged pilot model.
model_sourceoptCOMBOconnected_clipheretic_ara_q4: first execution downloads a 3.19 GiB text GGUF + 30.7 MiB tokenizer; IMAGE adds a 0.92 GiB FP16 mmproj. ComfyUI PyTorch execution, no llama.cpp. 첫 실행 시 베이스 모델 다운로드. LoRA는 별도. 고사양 GPU 권장; 결과 품질은 보장하지 않습니다. Validated on 16GB NVIDIA GPUs; download size is not VRAM usage. connected_clip keeps your existing Load CLIP workflow.
gguf_pathoptSTRINGOptional local Gemma 4 E2B GGUF; blank downloads pinned Heretic ARA Q4.
mmproj_pathoptSTRINGOptional matching FP16 vision GGUF; only used with IMAGE.
tokenizer_pathoptSTRINGOptional matching tokenizer.json; blank downloads the pinned original.
repetition_penaltyoptFLOAT1.051–2Tag sampling repetition penalty. Current ComfyUI ignores it at temperature=0; use a positive temperature. 1.0 disables it; larger values can also omit useful tags or names. Existing workflows retain 1.05.

Outputs (2)

NameTypeDescription
tagsSTRING—
raw_outputSTRING—