Skip to content

Architecture

Block Pipeline

The UmeAiRT Toolkit replaces ComfyUI's traditional spaghetti wiring with a block architecture. Instead of connecting individual model/clip/vae/conditioning wires, you pass typed bundles:

Bundle Type Contents Created By
UME_BUNDLE model + clip + vae + model_name (+ audio_vae, latent_upscale for LTX) Loader nodes
UME_SETTINGS width, height, steps, cfg, sampler, scheduler, seed Generation Settings
UME_VIDEO_SETTINGS width, height, duration, frame_rate, seed, audio_enabled, sigmas Video Settings (LTX/WAN)
UME_IMAGE image + mask + mode + denoise + controlnets Image Loader/Process
UME_LORA_STACK list of (name, model_strength, clip_strength[, target]) LoRA Block / WAN LoRA Block nodes
UME_PIPELINE Full generation context (all of the above + latent + result) KSampler
UME_VIDEO_PIPELINE Video generation context (frames + audio + metadata) Video Generator
UME_PROMPT_SCHEDULE List of temporal prompt segments [{start_time, prompt}] Prompt Segment (chainable)
UME_VACE_FRAMES VACE conditioning (start_image, end_image) Video VACE Prep
UME_FUNCONTROL FunControl conditioning (source_image, control_video, strength) Video ControlNet Apply

Data Flow

graph TB
    subgraph "Loaders"
        CKP["⬡ Checkpoint Loader"]
        FLUX["⬡ FLUX Loader"]
        ZIMG["⬡ Z-IMG Loader"]
        LTX["⬡ LTX Loader"]
        BDL["⬡ Bundle Auto-Loader"]
    end

    subgraph "Inputs + Image"
        SET["⬡ Generation Settings"]
        POS["⬡ Positive Prompt"]
        NEG["⬡ Negative Prompt"]
        LORA["⬡ LoRA Block"]
        IMG["⬡ Image Loader"]
        IMGP["⬡ Image Process"]
        CNET["⬡ ControlNet Apply"]
        VACE["⬡ Video VACE Prep"]
    end

    subgraph "Sampler"
        KS["⬡ KSampler"]
    end

    subgraph "Post-Process"
        UP["⬡ UltimateSD Upscale"]
        SVR["⬡ SeedVR2 Upscale"]
        FD["⬡ Subject Detailer"]
    end

    subgraph "Output"
        SAV["⬡ Image Saver"]
    end

    CKP -->|UME_BUNDLE| KS
    FLUX -->|UME_BUNDLE| KS
    ZIMG -->|UME_BUNDLE| KS
    BDL -->|UME_BUNDLE| KS
    SET -->|UME_SETTINGS| KS

    LTX -->|UME_BUNDLE| VG["⬡ Video Generator"]
    LTXS["⬡ LTX Video Settings"] -->|UME_VIDEO_SETTINGS| VG
    VG -->|UME_VIDEO_PIPELINE| VEXT["⬡ Video Extender"]
    VG -->|UME_VIDEO_PIPELINE| LTXENH["⬡ LTX Video Enhancer"]
    VG -->|UME_VIDEO_PIPELINE| LTXAR["⬡ LTX Audio Replacer"]
    VG -->|UME_VIDEO_PIPELINE| VSLIC["⬡ Video Slicer"]
    VG -->|UME_VIDEO_PIPELINE| VOUT["⬡ Video Output"]

    WAN["⬡ WAN Loader"] -->|UME_BUNDLE| VG
    WANS["⬡ Video Settings"] -->|UME_VIDEO_SETTINGS| VG
    VACE -->|UME_VACE_FRAMES| VG
    VG -->|UME_VIDEO_PIPELINE| WLOOP["⬡ Video Looper"]
    VEXT -->|UME_VIDEO_PIPELINE| VOUT
    WLOOP -->|UME_VIDEO_PIPELINE| VOUT
    VCNET["⬡ Video ControlNet Apply"] -->|UME_FUNCONTROL| VG
    VEXT -->|UME_VIDEO_PIPELINE| VOUT
    LTXENH -->|UME_VIDEO_PIPELINE| VOUT
    LTXAR -->|UME_VIDEO_PIPELINE| VOUT
    VSLIC -->|UME_VIDEO_PIPELINE| VOUT

    PSEG1["⬡ Prompt Segment"] -->|UME_PROMPT_SCHEDULE| PSEG2["⬡ Prompt Segment"]
    PSEG2 -->|UME_PROMPT_SCHEDULE| LTXPD["⬡ LTX Prompt Director"]
    LTXPD -->|UME_VIDEO_PIPELINE| VOUT

    LTXKF["⬡ LTX Keyframe Generator"] -->|UME_VIDEO_PIPELINE| VOUT

    POS -->|POSITIVE| KS
    NEG -->|NEGATIVE| KS
    LORA -->|UME_LORA_STACK| KS
    IMG -->|UME_IMAGE| IMGP
    IMGP -->|UME_IMAGE| CNET
    CNET -->|UME_IMAGE| KS

    KS -->|UME_PIPELINE| UP
    KS -->|UME_PIPELINE| SVR
    KS -->|UME_PIPELINE| FD
    UP -->|UME_PIPELINE| FD
    SVR -->|UME_PIPELINE| FD

    KS -->|UME_PIPELINE| SAV
    UP -->|UME_PIPELINE| SAV
    FD -->|UME_PIPELINE| SAV
    SVR -->|UME_PIPELINE| SAV

Module Structure

ComfyUI-UmeAiRT-Toolkit/
├── __init__.py              # Node registration (57 nodes)
├── modules/
│   ├── block_loaders.py     # Model loading nodes (Checkpoint, FLUX, Z-IMG, LTX, WAN, Bundle)
│   ├── video_sampler.py     # Unified Video Generator (orchestrator, dispatches wan/ltx)
│   ├── wan_sampler.py       # WAN video generation (T2V, I2V, VACE, FunControl, MoE)
│   ├── video_utils.py       # Shared video utilities (patch_wan_model, apply_color_match)
│   ├── video_vace_prep.py   # VACE Prep Node
│   ├── video_output.py      # Video Output with audio muxing
│   ├── video_postprod.py    # Video Frame Interpolation, Smart Upscale
│   ├── video_extender.py    # Unified Video Extender (orchestrator, dispatches wan/ltx)
│   ├── wan_extender.py      # WAN video extension (extend via VACE)
│   ├── video_looper.py      # WAN Video Looper (seamless loop via VACE)
│   ├── video_funcontrol.py  # Video ControlNet Apply (FunControl prep)
│   ├── video_lightning.py   # Video Lightning Accelerator
│   ├── video_optimization.py # Video Optimization (CFGZeroStar, EasyCache, NAG)
│   ├── ltx_sampler.py       # LTX-2.3 video generation (dual-pass, AV, ManualSigmas)
│   ├── ltx_extender.py      # LTX video extension (reference frames + AV latents)
│   ├── ltx_enhancer.py      # LTX Video Enhancer (LoopingSampler re-sampling)
│   ├── ltx_keyframe_generator.py  # LTX Keyframe Generator (2/3 keyframes)
│   ├── ltx_prompt_director.py     # Prompt Segment + Prompt Director (temporal scheduling)
│   ├── ltx_audio_replacer.py      # LTX Audio Replacer (replace/regenerate)
│   ├── ltx_utils.py         # LTX spatio-temporal tiled VAE decode (vendored)
│   ├── video_slicer.py      # Video Slicer (generic, WAN+LTX)
│   ├── logic_nodes.py       # Re-export shim (upscale_nodes, seedvr2_nodes, face_nodes, detail_daemon_nodes, detail_refiner)
│   ├── image_nodes.py       # Pipeline Image Saver
│   ├── utils_nodes.py       # Downloader, Pack/Unpack interop, Signature
│   ├── common.py            # Shared dataclasses and utilities
│   ├── manifest.py          # Model manifest parsing
│   ├── download_utils.py    # Download engine (aria2c + urllib)
│   ├── extra_samplers.py    # Custom sampler registration
│   └── optimization_utils.py # VRAM management, SageAttention
├── vendor/
│   └── ltxvideo/            # Vendored from ComfyUI-LTXVideo (Apache 2.0)
│       ├── easy_samplers.py # LTXVBaseSampler, ExtendSampler, InContextSampler
│       ├── looping_sampler.py # LTXVLoopingSampler (temporal tiling)
│       ├── latents.py       # Latent helpers (AddGuide, SelectLatents, etc.)
│       └── ...              # Guide, latent norm, IC-LoRA attention
├── web/                     # Frontend JS (widget extensions)
├── docs/                    # This documentation
└── tests/                   # Test suite (378+ tests)

Bundle Auto-Download

The Bundle system uses a remote model_manifest.json hosted on UmeAiRT Assets:

sequenceDiagram
    participant User
    participant BundleLoader as ⬡ Bundle Auto-Loader
    participant Manifest as model_manifest.json
    participant HF as HuggingFace

    User->>BundleLoader: Select category + version
    BundleLoader->>Manifest: Fetch manifest (cached)
    Manifest-->>BundleLoader: File list + SHA256 hashes
    BundleLoader->>BundleLoader: Check local files
    alt Files missing
        BundleLoader->>HF: Download via aria2c/urllib
        HF-->>BundleLoader: Model files
        BundleLoader->>BundleLoader: Verify SHA256
    end
    BundleLoader->>BundleLoader: Load model/clip/vae
    BundleLoader-->>User: UME_BUNDLE ready