Nodes/ComfyUI-LZNodes/LZ Anima Artist Options (Advanced)
ComfyUI Node

LZ Anima Artist Options (Advanced)

The advanced controls cabinet for the Anima artist mixer

By liz-ils·Created 7 months ago·Updated 12 days ago· 1
LZ Anima Artist Options (Advanced)
    • advanced_options
    start_block0
    end_block-1
    start_percent0.000
    end_percent1.000
    normalize_weightstrue
    artist_ema_alpha0.00
    lowrank_k1
    artist_static_capturefalse
    static_capture_k6
    artist_anchor_qfalse
    anchor_seeds_count1
    anchor_user_blend0.00
    anchor_deep_layer_threshold-1
    layer_filter

    If LZAnimaArtistNode is the knob, LZ Anima Artist Options is the entire control room. It's an options bundle node: one ANIMA_OPTS output that plugs into the advanced_options socket on the Pack/CrossAttn/combined nodes and unlocks block-level layer selection, sampling-progress windows, EMA smoothing, low-rank consensus, static capture, and the anchor-Q experiment. Nothing to generate on its own - it's pure configuration that rides along with the injection.

    What you're actually tuning

    The full list is long, so here's the map, roughly from "you'll touch this" to "rarely":

    • start_block / end_block - which cross-attention layers get patched, by index (0 = first layer, −1 = last). Restricting injection to mid/high blocks is the single most effective lever for "the style is bleeding into the composition." A layer_filter string (0,3,5-10,-1) overrides both if you want a non-contiguous set.
    • start_percent / end_percent - window the injection across sampling progress (0.0 → 1.0). Style early, let structure settle late, or vice versa.
    • normalize_weights - whether the per-artist weights act as relative proportions (on) or independent strengths (off). Auto-disabled if you used ::weight syntax in the artist chain.
    • artist_ema_alpha - cross-step EMA smoothing of the injected attention (interpolate fusion only). 0.3–0.5 is light, 0.8+ heavy; it removes flicker-style instability across steps at the cost of lag. Auto-resets each sampling run.
    • lowrank_k - only for combine_mode: lowrank_avg. The low-rank projection dimension: k=1 forces all artists along a single consensus style direction, k=2–3 keeps the main directions (recommended), k≥N degenerates to plain output averaging.
    • artist_static_capture + static_capture_k - accumulate the artist attention over the first K steps, then freeze it. K=6 is the recommended default; the tooltip calls K=1 the "v18 single-point cache."
    • artist_anchor_q + anchor_seeds_count / anchor_user_blend / anchor_deep_layer_threshold - the experiment: fix the query hidden state to a precomputed anchor (from a fixed-seed forward pass, ~1s overhead on first use) instead of letting it follow the user seed. anchor_user_blend mixes between pure-anchor and pure-user x; anchor_deep_layer_threshold restricts anchoring to shallow layers. Decoupling style from seed noise.

    The pack is upfront that some of these are experimental, and the code actively guards the combinations: static capture + concat_with_base is incompatible (static auto-ignored with a warning), anchor_q + static capture are mutually exclusive, and anchor_q + concat_with_base disables anchor_q.

    How to use it

    Add the Options node, set the few knobs you care about, wire its advanced_options into the injection node's socket. Leave everything at defaults and it's a no-op - the injection runs exactly as if you hadn't connected it.

    Installing it

    cd ComfyUI/custom_nodes
    git clone https://github.com/liz-ils/ComfyUI-LZNodes
    

    restart → LZNodes/Anima. ComfyUI Manager: ComfyUI-LZNodes. No extra dependencies.

    The honest take

    This is the "we ran out of room on the main node" node. Ninety percent of users should never touch it - the defaults are sensible and the strength/combine/fusion trio on the injection node gets you 95% of the results. The remaining 5% (layer targeting, EMA, low-rank consensus) is real but requires patience and a willingness to grid-test. Where it genuinely shines: if you've dialed in a combination that works, the Options node is how you save that recipe as a reusable config. Just don't start here - start with the combined node and one artist, then graduate.

    One thing the docs don't scream loud enough: because all of this rides on model patching, every sampling run pays whatever cost your options impose (the anchor pre-run, the EMA state, the accumulation steps). Fiddly options mean slower generations. Budget accordingly.

    CategoryMyCustomNodes/Anima

    Inputs (14)

    NameTypeDefaultDescription
    start_blockINT00–63Starting block (inclusive). 0 = first layer
    end_blockINT-1-1–63Ending block (inclusive). -1 = last layer
    start_percentFLOAT0.0000–1Sampling progress start. 0.0 = sampling start
    end_percentFLOAT1.0000–1Sampling progress end. 1.0 = sampling end
    normalize_weightsBOOLEANtrueTrue: weights normalized to relative proportions. False: weights used as independent strengths. If ::weight syntax is used in artist_chain, this switch is automatically disabled.
    artist_ema_alphaFLOAT0.000–0.95Cross-step EMA smoothing coefficient (only effective for fusion=interpolate). 0.0: off (default) 0.3-0.5: light smoothing 0.5-0.8: medium-heavy smoothing >0.8: strong smoothing Auto-reset on new sampling (sigma rising).
    lowrank_kINT11–32LoRA-style low-rank injection dimension (only effective for combine_mode=lowrank_avg). k=1: all artists along a single consensus direction k=2-3: retain main style directions (recommended) k>=N: equivalent to output_avg (no projection)
    artist_static_captureBOOLEANfalseH' cross-step temporal averaging: first K steps accumulate artist attention, then freeze from step K onwards.
    static_capture_kINT61–12H' accumulation steps (only when artist_static_capture=True). K=1: v18 single-point cache K=6: recommended default
    artist_anchor_qBOOLEANfalseUse fixed-seed anchor hidden state for artist cross-attn Q, fully decoupling from user seed. Pre-runs one model forward on first use (~1s overhead).
    anchor_seeds_countINT11–4Number of fixed seeds for anchor pre-run (only when anchor_q=True). More seeds = less systematic bias, more overhead.
    anchor_user_blendFLOAT0.000–1Anchor/user x blend ratio (only when anchor_q=True). Q = blend * user_x + (1-blend) * anchor_x 0.0: pure anchor; 1.0: pure user x.
    anchor_deep_layer_thresholdINT-1-1–64Only use anchor in shallow layers (only when anchor_q=True). -1: all layers use anchor (default) N>=0: layer idx < N uses anchor, idx >= N uses user x
    layer_filteroptSTRINGAdvanced layer selection (optional). Comma-separated block indices, supports ranges and negative indices. Example: '0,3,5-10,-1' Overrides start_block/end_block when set.

    Outputs (1)

    NameTypeDescription
    advanced_optionsANIMA_OPTS