Nodes/MKRShift_Nodes/Character State
ComfyUI Node

Character State

One record, reused across every shot

By criskb·Created 7 months ago·Updated 5 months ago· 0
Character State
    • character_state_json
    • positive_anchor
    • negative_anchor
    • summary_json
    character_nameHero
    core_identity_prompthero character design
    body_notesclear silhouette, readable anatomy
    face_notesrecognizable face, stable eye shape
    style_anchorcinematic character design
    consistency_tokens_csv
    avoid_tokens_csv
    default_negativebad anatomy, off-model face, unstable costume details
    notes
    character_state_json
    reference_notes
    default_outfit_name

    The cheapest consistency trick in AI art isn't a LoRA - it's writing the character down once and reusing it. MKRCharacterState is that notebook: a structured record of a character's identity (core description, body and face notes, style anchor, tokens to keep and tokens to avoid) that outputs a single character_state_json plus ready-to-use positive and negative anchor strings. Feed the state back in on the next shot and it merges rather than resets - so your character accumulates detail across a session instead of losing it.

    Part of MKRShift_Nodes by criskb. Install via ComfyUI Manager (search "MKRShift_Nodes") or git clone https://github.com/criskb/MKRShift_Nodes into custom_nodes/, restart. It ships a custom frontend for a friendlier editing UI and needs no models.

    How it works

    You fill in the identity fields; the node dedupes and merges them with any existing character_state_json you wire into the optional input. consistency_tokens_csv and avoid_tokens_csv become token lists that accumulate (with dedupe) across runs. It then builds a positive_anchor (identity + body + face + style + consistency tokens + reference notes) and a negative_anchor (default negative + avoid tokens) - strings you can hand straight to a CLIP encoder, or embed into MKRCharacterCustomizer's prompt assembly.

    Inputs and outputs that matter

    • character_name, core_identity_prompt, body_notes, face_notes, style_anchor - the identity core.
    • consistency_tokens_csv / avoid_tokens_csv - the "always keep this" and "never this" lists, comma-separated.
    • character_state_json (optional) - feed the previous state back in to keep building on it.
    • default_outfit_name, reference_notes (optional) - extras the record carries.

    Outputs: character_state_json (the full record), positive_anchor, negative_anchor, and summary_json (name, slug, token counts).

    The honest take

    This is a text identity record - it manages the words, not the pixels. The community's hard-won lesson is that prompt anchors alone rarely hold a face across wildly different scenes; for real stability you still pair this with a LoRA, IP-Adapter-style reference, or an edit-model workflow (that's the whole character-consistency story). But as the source-of-truth layer that keeps every shot's prompt from drifting, it earns its place, and the merge-on-reuse behavior is the part that's genuinely clever - one record, many shots, no retyping. For anyone who juggles a cast of characters across a batch, it's the node that stops you from regenerating "the same guy" as five different guys.

    CategoryMKRShift Nodes/Core/Character

    Inputs (12)

    NameTypeDefaultDescription
    character_nameSTRINGHero
    core_identity_promptSTRINGhero character design
    body_notesSTRINGclear silhouette, readable anatomy
    face_notesSTRINGrecognizable face, stable eye shape
    style_anchorSTRINGcinematic character design
    consistency_tokens_csvSTRING
    avoid_tokens_csvSTRING
    default_negativeSTRINGbad anatomy, off-model face, unstable costume details
    notesSTRING
    character_state_jsonoptSTRING
    reference_notesoptSTRING
    default_outfit_nameoptSTRING

    Outputs (4)

    NameTypeDescription
    character_state_jsonSTRING
    positive_anchorSTRING
    negative_anchorSTRING
    summary_jsonSTRING