Janus Model Loader
Load DeepSeek's Dual-Purpose Model, Weights Included
- model
- processor
JanusModelLoader is the front door to DeepSeek's Janus-Pro models inside ComfyUI. It's the smallest node in the CY-CHENYUE pack and the one you touch first, because the other two - JanusImageUnderstanding and JanusImageGeneration - refuse to run without its outputs. It has exactly one job: get the model and its processor into VRAM, and hand them to the rest of the workflow.
What Janus-Pro is explains why this loader doesn't look like the ones you already know. DeepSeek shipped Janus-Pro in January 2025 as a "unified" multimodal model - one set of weights that both reads images and generates them. That's a different philosophy from a diffusion checkpoint, where a separate CLIP encoder turns your prompt into conditioning. Janus-Pro is an autoregressive language model that treats image tokens the way it treats text tokens. So the loader behaves differently from a CheckpointLoaderSimple in two ways you'll feel immediately.
It doesn't download anything. The loader only looks in ComfyUI/models/Janus-Pro/ for a folder matching the model name you select, and raises ValueError: Local model not found at ... if it's missing. No silent Hugging Face fetch, no surprise 8 GB pull. You place the weights by hand (below), or this node does nothing.
It emits two outputs and you need both. model (type JANUS_MODEL) is the AutoModelForCausalLM loaded with trust_remote_code=True; processor (type JANUS_PROCESSOR) is the tokenizer plus image preprocessor. These are custom types that only the pack's own nodes understand, so wire both into JanusImageUnderstanding or JanusImageGeneration.
Inputs and outputs that matter
The single required input is model_name, a dropdown with exactly two choices:
deepseek-ai/Janus-Pro-1B- the practical pick for most peopledeepseek-ai/Janus-Pro-7B- stronger quality, roughly 14 GB of weights
The name doubles as the folder the loader expects, so keep the folder under models/Janus-Pro/ named exactly like the choice you pick.
Under the hood it loads via Hugging Face's AutoModelForCausalLM and runs the model's own remote code, which is another reason the weights have to be local and complete. It probes for bfloat16 support and falls back to float16, then goes to CUDA - or CPU if no GPU exists (works, but you'll be waiting).
How to install it
Install the pack through ComfyUI Manager by searching "Janus-Pro", or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/CY-CHENYUE/ComfyUI-Janus-Pro
Then install dependencies with the same Python that runs ComfyUI:
cd ComfyUI-Janus-Pro
python -m pip install -r requirements.txt
That requirements file is a single line - git+https://github.com/deepseek-ai/Janus.git - so pip needs git installed and GitHub reachable; behind a proxy it fails. This is the part that trips people: you're installing DeepSeek's Janus repo, not just the node. Then grab the weights from Hugging Face (deepseek-ai/Janus-Pro-1B or -7B) and drop them in:
ComfyUI/models/Janus-Pro/Janus-Pro-1B/
ComfyUI/models/Janus-Pro/Janus-Pro-7B/
Where people get burned
The 7B is around 14 GB and does not fit comfortably on 8 GB cards - community reports put it out of reach for most single-GPU setups, which is why the 1B is the one most folks end up using (it's fast and VRAM-light, and its understanding is surprisingly good). Second classic trap: Python environment mismatch. If ComfyUI runs under python_embeded (portable install) and you pip-install Janus into system Python instead, the node raises ImportError the moment it tries to import. Same environment, always.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | 2 options: deepseek-ai/Janus-Pro-1B, deepseek-ai/Janus-Pro-7B |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | JANUS_MODEL | — |
| processor | JANUS_PROCESSOR | — |