ComfyUI Node

Shot Asset Loader v3.7 - Akki

The node that assembles a shot's cast, set, and lookdev prompts before you render

By routhakash·Created about a year ago·Updated 9 months ago· 8
Shot Asset Loader v3.7 - Akki
    • character_images
    • set_image
    • character_lookdev_prompts
    • set_lookdev_prompt
    • character_names
    project_path
    csv_report
    shot_index1
    character_lookdev_folderLookdev/CHR
    set_lookdev_folderLookdev/SET

    Rendering a shot in a character-consistent way means the characters and the set need to look the same as they did in every other shot - which means you need their reference images and their art-direction prompts loaded, all at once. That's the whole job of Shot Asset Loader. You give it a shot index and the production CSV; it reads that shot's cast and location, then goes into your lookdev folders and drags out the character reference images, the set image, and the matching prompts. One node, everything a KSampler needs to keep a face recognizable across a 40-shot scene.

    It's the heaviest of the pack's File I/O nodes, and the only one that outputs actual IMAGE tensors. It's also where the "lookdev bible" discipline pays off: if you've run the Character and Set Lookdev nodes (Phase 3) properly, the files this node expects will be there.

    How it works

    Five inputs:

    • project_path - from the Project Director, relative to ComfyUI's output/.
    • csv_report - the canonical shot list (usually ProShotListParser's full_report_csv). The node reads the selected row's LOCATION and CHARACTERS columns.
    • shot_index (default 1) - which row to load, 1-based.
    • character_lookdev_folder (default Lookdev/CHR) and set_lookdev_folder (default Lookdev/SET) - where the lookdev assets live inside the project folder.

    For each asset it follows a strict naming convention, picking the latest file that matches:

    • Image: <sanitized_name>_L_<version>_.png (e.g. Mara_L_3_.png)
    • Prompt: <sanitized_name>_<version>_<date>.txt

    The node sanitizes character and set names for filenames (strips parentheticals, replaces illegal characters with _) before matching. Five outputs, and they map directly to what a render needs:

    • character_images - a list of IMAGE tensors, one per character in the shot, in CSV order.
    • set_image - the single set/location IMAGE.
    • character_lookdev_prompts - a list of STRINGs, the art-direction prompts that pair with the character images.
    • set_lookdev_prompt - the set's prompt.
    • character_names - the sanitized names, in the same order as the images, so you know which tensor is which.

    The natural wiring: character images + prompts go into an IPAdapter or reference setup, set_image into img2img, and the names feed the Scene Choreographer or your own prompt assembly.

    Installing

    Pack-level install, same as the rest:

    cd ComfyUI/custom_nodes
    git clone https://github.com/routhakash/AkkiNodes-LLM-Suite-for-ComfyUI
    

    Windows: run install.bat as administrator once (installs llama-cpp-python==0.3.9 and openai), add a GGUF model to ComfyUI/models/llms/, restart. Linux/macOS: install those two packages into your ComfyUI environment manually.

    Gotchas

    • Missing assets don't crash - they degrade silently. If a character's image file isn't found, the node returns a 1×64×64 black dummy tensor and an ERROR: string in the corresponding prompt slot, then prints a notice to the console. A character with no image becomes a tiny black square in your IPAdapter - you'll get a lovely black smudge where a face should be. The console is your only warning.
    • The naming convention is strict and versioned. Hand-named files like Mara_final.png won't match <base>_L_<n>_.png and are ignored. If you've been saving lookdev renders with a different naming scheme, this node can't see them.
    • The CSV must have LOCATION and CHARACTERS columns (case-insensitive). No location, and the node throws No set/location specified for shot N. A None character in the list is filtered out - that's why CHARACTERS in the CSV should read None for empty, not a blank.
    • It's single-set. One set image per shot, because the CSV stores one location per row. Multi-location shots aren't handled - restructure them as separate shots if that's your thing.

    This is the node where the whole "film studio" metaphor becomes concrete: it's your production assistant walking to the art department, grabbing the reference stills, and handing them to the renderer. It's fiddly about file names, but once the lookdev stage is done right, it's genuinely the most satisfying node in the suite to watch fire.

    CategoryAkkiNodes/FileIO

    Inputs (5)

    NameTypeDefaultDescription
    project_pathSTRING
    csv_reportSTRING
    shot_indexINT1
    character_lookdev_folderSTRINGLookdev/CHR
    set_lookdev_folderSTRINGLookdev/SET

    Outputs (5)

    NameTypeDescription
    character_imagesIMAGE
    set_imageIMAGE
    character_lookdev_promptsSTRING
    set_lookdev_promptSTRING
    character_namesSTRING