Nodes/ComfyUI-SkyReels-A2/Reference Images
ComfyUI Node

Reference Images

Feed SkyReels-A2 its subject, object, and scene in one node

By Yuan-ManX·Created about a year ago·Updated about a year ago· 32
Reference Images
    • clip_image_list
    • vae_image_list
    refer_image_paths['assets/human.png', 'assets/thing.png', 'assets/env.png']
    height480
    width832
    devicecuda

    SkyReels-A2 is Skywork's "Compose Anything" video model, and it works differently from the usual one-reference image-to-video. Instead of a single start frame you hand it up to three references - a person, a thing, an environment - and it stitches them into one video that holds all three together. Think Pika Ingredients, but running locally on top of a Wan 2.1 14B fine-tune. ReferenceImages is the front door of that workflow: you tell it which files to use and it turns them into the two data structures the generator downstream actually wants.

    It's a dumb-but-necessary node. It doesn't compose anything itself, and it has no knobs worth agonizing over. What it does is quietly do the two different kinds of preprocessing the A2 model needs for each reference, which is exactly the part you don't want to hand-roll.

    How it works

    For every path in your list, the node loads the image and produces two versions of it. First a 512x512 square crop, which gets sent to the CLIP vision encoder - that's the model's "who/what is this" channel. Then a full-size crop at your height/width, run through the Wan VAE video processor into a single-frame latent tensor - that's the "pixels that actually get composed" channel. The first two references are padded and treated as subject/object; anything after that is treated as background.

    That's why it has two outputs instead of one: clip_image_list and vae_image_list, and both plug into the same A2VideoGenerator node. Get the wiring wrong and nothing downstream works.

    The inputs that actually matter

    • refer_image_paths - this is where people get burned. It's not a plain text box; the node literally runs eval() on your string, so it must be a Python list literal, brackets and quotes included:
      ['C:/refs/person.png', 'C:/refs/product.png', 'C:/refs/room.png']
      
      Type it as comma-separated paths and it will crash with a NameError. Paths are relative to wherever ComfyUI runs, so the README's default ['assets/human.png', ...] won't exist for you unless you clone the repo's assets folder.
    • height / width - set these once and keep them identical to what you feed A2VideoGenerator. Defaults (480x832) are the model's native resolution; mixing them up will misalign everything.
    • device - cuda unless you're doing a CPU smoke test.

    Installing it

    This node ships in the Yuan-ManX/ComfyUI-SkyReels-A2 pack, so install the whole pack: ComfyUI Manager → Install Custom Nodes → search "SkyReels", or

    cd ComfyUI/custom_nodes
    git clone https://github.com/Yuan-ManX/ComfyUI-SkyReels-A2.git
    cd ComfyUI-SkyReels-A2
    pip install -r requirements.txt
    

    Then restart ComfyUI. The requirements are heavy - flash_attn, diffusers pulled from git, even dashscope and gradio left over from Skywork's own repo - so budget a painful first install.

    Common issues

    Beyond the eval() list-syntax trap, the main confusion is that the IMAGE_LIST outputs are plain Python lists, not ComfyUI-native image tensors. Don't try to wire them into ordinary ComfyUI image nodes or a VAE decode - they only make sense flowing into this pack's A2VideoGenerator. The pack author's other projects have had rough, half-announced starts, but this node does what it says: feed it three real image paths and it hands the generator everything it needs.

    CategorySkyReelsA2

    Inputs (4)

    NameTypeDefaultDescription
    refer_image_pathsSTRING['assets/human.png', 'assets/thing.png', 'assets/env.png']
    heightINT480
    widthINT832
    deviceSTRINGcuda

    Outputs (2)

    NameTypeDescription
    clip_image_listIMAGE_LIST
    vae_image_listIMAGE_LIST