Janus Image Generation
A Charming Time Capsule, Not Your Next Checkpoint
- model
- processor
- images
JanusImageGeneration is the pack's showpiece and its weakest argument at the same time. It takes a text prompt, runs it through DeepSeek's Janus-Pro model you loaded with JanusModelLoader, and returns an IMAGE tensor. If that sounds like what a KSampler does, hold that thought - the mechanism is entirely different, and the difference is why this node is a curiosity rather than a replacement for your usual generator.
Janus-Pro isn't a diffusion model. It's an autoregressive language model, and this node generates an image the way a language model generates a sentence: token by token. There's no KSampler, no steps, no denoise, no scheduler anywhere in the graph. The code loops 576 times, emitting one image token per iteration (that's a 24×24 grid of patches, each 16 pixels, for a fixed 384×384 output), and then hands the tokens to gen_vision_model.decode_code to paint the final image.
The inputs that matter
Only a handful of dials exist, and they're all sampling knobs rather than diffusion ones:
prompt- a multiline STRING, default"A beautiful photo of". There is no negative prompt here; the "unconditioned" pass is just padded tokens.cfg_weight- default 5.0 (range 1–10). Janus applies classifier-free guidance like diffusion does:logits = uncond + cfg * (cond − uncond). Five is the sane starting point; it's the one knob people actually tune.temperature- default 1.0. Unlike the understanding node's 0.1, generation wants the full range.top_p- default 0.95, leave it.batch_size- 1 to 16. This one is a pleasant surprise: community tests found that generating a batch of four took about the same wall-clock time as a batch of one. Batching is nearly free, so if you're exploring, run a batch instead of rerunning seeds.
Plus the standard seed. Output is images (IMAGE), so wire it into a Save Image / Preview Image node like anything else.
Why you'd bother
The one thing Janus-Pro genuinely nails is prompt adherence. In a January 2025 community comparison on a gnarly multi-detail prompt, Janus Pro 1B followed the prompt more faithfully than SD 1.5 merges, SDXL, and even a Flux schnell quant. If you've ever fought with a diffusion model that just won't render "one eye yellow and the other green," this thing will happily do it. And the 1B is fast and light on VRAM.
But there's a reason the model faded from the conversation within months: it's stuck at 384×384, no aspect ratios, no resolution knob - the size is hard-coded in the node. Raw quality is a 2025 research-model bar, not a Flux bar. The 7B variant improves things but needs ~14 GB of VRAM to sit there while an autoregressive loop of 576 tokens churns.
So treat it as what it is: a fun, fast, batch-friendly toy with great prompt adherence, or a quick prompt-adherence sanity check. For anything you'd actually keep, upscale the output after - feed it to an SD-based upscaler or a latent upscale pass in the same workflow. If it fits your use case, great; if you're reaching for it because you want a main generator, your regular checkpoint does the job better.
Gotchas
The resolution is what it is - don't hunt for a width/height input, there isn't one. No negative prompt, so prompt hygiene is on you (keep the bad stuff out of the text). And remember the pack install dance: it needs the git+https://github.com/deepseek-ai/Janus.git dependency installed into ComfyUI's Python, and the model weights sitting in ComfyUI/models/Janus-Pro/ or the loader will refuse to start.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | JANUS_MODEL | — | |
| processor | JANUS_PROCESSOR | — | |
| prompt | STRING | A beautiful photo of | — |
| seed | INT | 6666666666666660–18446744073709550000 | — |
| batch_size | INT | 11–16 | — |
| cfg_weight | FLOAT | 5.01–10 | — |
| temperature | FLOAT | 1.00.1–2 | — |
| top_p | FLOAT | 0.950–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |