Nodes/Comfyui-bitdance/BitDance Loader
ComfyUI Node

BitDance Loader

The node that loads an entire image-language model out of three files

By aistudynow·Created 6 months ago·Updated 6 months ago· 33
BitDance Loader
    • bitdance_model
    • bitdance_text_encoder
    • bitdance_vae
    model_name
    text_encoder_name
    vae_name
    quantizationfp8_e4m3fn_scaled
    load_deviceoffload_device
    text_encoder_load_devicemain_device
    vae_load_deviceoffload_device
    attention_modeauto
    rms_norm_functiondefault
    precisionfp16

    The most confusing thing about BitDance isn't the sampling - it's that the "text encoder" is an 18.8 GB, 14-billion-parameter Qwen3 language model. BitDance is an autoregressive image model in the same family as Nano Banana and Grok Imagine: it doesn't denoise a latent, it types the image out token-by-token. And to do that it needs a whole LLM as its brain, a small diffusion head to turn thoughts into image tokens, and a custom binary-tokenizer VAE. BitDance Loader is the single node that pulls all three of those apart and hands them to the rest of the workflow.

    This loader is your entry point for the whole pack, and unlike a normal ComfyUI loader it returns three objects: bitdance_model (the vision head + projector + diffusion head, about 1.9 GB in FP8 - tiny), bitdance_text_encoder (that 14B LLM, the heavy one), and bitdance_vae. Wire bitdance_model and bitdance_vae into the sampler, bitdance_text_encoder into a text encode node.

    What the inputs actually do

    The three file pickers are self-explanatory, but the choices above them are where people get lost. The defaults are sensible - the README's opening line is literally "Make sure: BitDance Loader → quantization = fp8_e4m3fn_scaled" - so treat the defaults as correct until you have a reason to move them:

    • quantization - defaults to fp8_e4m3fn_scaled, which is what you want. The FP8 files from the comfyuiblog HF repo are built for this. Per the author's tooltip, the Qwen text encoder dequantizes FP8 weights to the target dtype during load, CPU + RAM first - so expect a big RAM spike on first load.
    • precision - fp16 by default; auto, bf16, and fp32 are also there. fp32 exists but nobody needs it on a modern card.
    • attention_mode - auto picks the best available backend (sdpa, flash_attn_2, flash_attn_3, or eager). Leave it on auto unless you've installed flash-attn and want to force it.
    • load_device / text_encoder_load_device / vae_load_device - where each component lands initially (main_device = GPU, offload_device = RAM). The defaults already offload the main model and VAE, which is the right call on 16–24 GB cards.
    • rms_norm_function - a niche one: pytorch can be faster than the default RMSNorm but changes results slightly. Only touch it if you're chasing speed and accept the drift.

    Installing and getting the model files

    Install via ComfyUI Manager (search "Comfyui-bitdance") or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/aistudynow/Comfyui-bitdance
    cd Comfyui-bitdance
    pip install -r requirements.txt
    # restart ComfyUI
    

    The dependencies are torch, einops, safetensors, transformers, huggingface_hub, accelerate, tqdm - nothing exotic. Flash attention is optional.

    The models are a 3-file download from comfyuiblog/BitDance-14B-64x-fp8-comfyui on Hugging Face, dropped into the standard folders the loader reads:

    • Main model → ComfyUI/models/diffusion_models/BitDance_14B_MainModel_FP8.safetensors
    • Text encoder → ComfyUI/models/text_encoders/BitDance_TextEncoder_FP8.safetensors
    • VAE → ComfyUI/models/vae/BitDance_VAE_FP16.safetensors

    The tokenizer is bundled inside the node package, so you don't need a separate tokenizer folder.

    Where people get burned

    The #1 surprise is load time and memory: loading that 14B text encoder means dequantizing 18.8 GB of weights into RAM before anything runs, so the first load can look hung. It isn't. Give it a minute and watch your task manager. Second: if the loader can't find your files, you put them in the wrong folder - the loader scans diffusion_models, unet, and checkpoints for the main model; text_encoders, clip, and checkpoints for the text encoder; vae and checkpoints for the VAE. The README's exact filenames are the safe path. And don't switch quantization to disabled on a 16 GB card to "get more quality" - the FP8 files are FP8; that's just a load-time label and the head barely changes.

    Categoryloaders/bitdance

    Inputs (10)

    NameTypeDefaultDescription
    model_nameCOMBO0 options:
    text_encoder_nameCOMBO0 options:
    vae_nameCOMBO0 options:
    quantizationCOMBOfp8_e4m3fn_scaledLoader quantization mode label. BitDance Qwen text encoder currently dequantizes FP8 weights to target dtype during load (CPU+RAM first).
    load_deviceCOMBOoffload_deviceInitial placement for BitDance main model (vision head + projector).
    text_encoder_load_deviceCOMBOmain_devicePlacement for the BitDance text encoder after load completes.
    vae_load_deviceCOMBOoffload_deviceInitial placement for the BitDance VAE.
    attention_modeCOMBOautoAttention backend for BitDance vision head (and mapped to Qwen backend where supported).
    rms_norm_functionCOMBOdefaultOptional RMSNorm replacement for the Qwen text encoder. 'pytorch' may be faster but changes results slightly.
    precisionCOMBOfp164 options: auto, bf16, fp16, fp32

    Outputs (3)

    NameTypeDescription
    bitdance_modelBITDANCE_MODEL
    bitdance_text_encoderBITDANCE_TEXT_ENCODER
    bitdance_vaeBITDANCE_VAE