Nodes/ComfyUI MOSS-Image T8/MOSS-Image Official TE Loader
ComfyUI Node

MOSS-Image Official TE Loader

Loading MOSS-Image's Qwen3.5 Encoder

By T8mars·Created 15 days ago·Updated 15 days ago· 2
MOSS-Image Official TE Loader
    • text_encoder
    ◄model_name▾►
    ◄deviceauto►

    Here's the number that decides whether MOSS-Image fits on your machine, and it isn't the diffusion model: the text encoder is 16.79 GB. Bigger than the 10.16 GB DiT. If you've been sizing your card by the generator file alone, this is the node that ruins the estimate - and it's the same story as every LLM-encoded model since late 2025, where the encoder became a second VRAM budget of its own.

    What it is

    A full Qwen3.5-9B language model, not a CLIP sidecar. MOSS-Image encodes prompts by running them through this thing and taking the last hidden state, so the encoder is the model's understanding of language. That's why prompts work like instructions instead of tag soup, and why prompt weighting died on the way here.

    The pack ships it as one independent BF16 file, moss-image-qwen35-bf16.safetensors, shared by Base and SFT. It's the full encoder - the repackaging notes explicitly say all 1,936 tensors were compared byte for byte with upstream including the complete vision weights, which is a slightly odd thing to keep in a text-only pipeline and also exactly what "unmodified official pipeline" is supposed to mean. The loader also validates it: the config has to report qwen3_5 with a 4096 hidden size, or it refuses with "MOSS-Image requires the official Qwen3.5-9B text encoder." You cannot substitute a smaller Qwen here and hope.

    The inputs

    Two required fields, which is the leanest node in the pack.

    model_name lists the contents of ComfyUI/models/text_encoders. device defaults to auto, and auto is doing real work: it asks ComfyUI's device manager for the current torch device, estimates the weight file plus roughly 2 GB, reclaims cached models to make room, and falls back to CPU if the memory isn't there. The README says the full TE can fall back to CPU and run more slowly. In practice on a tight card that means encode passes measured in tens of seconds rather than a couple - correct output, painful iteration.

    Note what's missing: there's no precision field. The DiT loader has one; this doesn't. The encoder is BF16 as shipped, and the only lever you get is which device it runs on. If you were hoping to quantize the encoder to make room - a completely reasonable instinct, since hard-quantizing the encoder while keeping the diffusion model precise is the standard move on LLM-encoded models - this pack doesn't offer it. You either fit the 16.79 GB or you accept CPU encoding.

    Output is a single text_encoder of type MOSS_IMAGE_TE, and it wires into exactly one node: the Official Text Encode. It won't connect to a CLIP Text Encode, by design.

    Install

    Manager → search ComfyUI MOSS-Image T8 (publisher t8star) → install → restart. Or manually:

    cd ComfyUI
    git clone https://github.com/T8mars/Comfyui-Moss-Image-T8 custom_nodes/Comfyui-Moss-Image-T8
    python -m pip install -r custom_nodes/Comfyui-Moss-Image-T8/requirements.txt
    

    The encoder alone, if you already have the rest:

    hf download t8star/Moss-Image-Comfy --local-dir models --include "text_encoders/*"
    

    That pulls the weight file and its .assets directory. Both are required - this is the one component where the assets folder isn't just hashes, it's the tokenizer:

    models/text_encoders/
    ├── moss-image-qwen35-bf16.safetensors
    └── moss-image-qwen35-bf16.safetensors.assets/
        ├── manifest.json
        └── tokenizer/{tokenizer.json,tokenizer_config.json,chat_template.jinja}
    

    Where people get burned

    Downloaded the safetensors, skipped the folder. hf download with --include "text_encoders/*" gets everything. If you clicked the file on the Hugging Face web UI, you got one file and no tokenizer, and the loader fails on a missing tokenizer manifest. Re-run the hf command rather than hunting for the parts individually.

    You added something to tokenizer/. The loader checks that directory down to allowed filenames and hard-errors on extras - "extra inputs are not accepted" is a literal description of the check. Three files, no subdirectories, no stray .DS_Store. This bites people whose download tools leave junk behind.

    You renamed the file. model_name is just a filename list, so renaming works for the dropdown - but the manifest records the size and SHA256 of the file it shipped with. Rename is fine; editing the file (re-saving it through a tool that rewrites the safetensors header, say) trips the hash check. Prefer re-download over repair.

    Assuming the encoder hangs around between runs. It doesn't. It's loaded for encoding, then released before the sampler starts. That's deliberate and it's why a 10 GB DiT plus a 17 GB encoder can coexist on a 24 GB card. Watching the TE disappear from VRAM is the pack working correctly, not evicting things you need.

    Transformers version. The pack needs Transformers 5.3+ and Diffusers 0.38–0.41. An older Transformers will fail at import of the Qwen3.5 config, and the error will mention the model class rather than the version - install requirements.txt with the Python that runs ComfyUI.

    CategoryMOSS-Image/Official

    Inputs (2)

    NameTypeDefaultDescription
    model_nameCOMBO0 options:
    deviceCOMBOauto3 options: auto, cuda, cpu

    Outputs (1)

    NameTypeDescription
    text_encoderMOSS_IMAGE_TE—