Character State
One record, reused across every shot
- character_state_json
- positive_anchor
- negative_anchor
- summary_json
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.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| character_name | STRING | Hero | — |
| core_identity_prompt | STRING | hero character design | — |
| body_notes | STRING | clear silhouette, readable anatomy | — |
| face_notes | STRING | recognizable face, stable eye shape | — |
| style_anchor | STRING | cinematic character design | — |
| consistency_tokens_csv | STRING | — | |
| avoid_tokens_csv | STRING | — | |
| default_negative | STRING | bad anatomy, off-model face, unstable costume details | — |
| notes | STRING | — | |
| character_state_jsonopt | STRING | — | |
| reference_notesopt | STRING | — | |
| default_outfit_nameopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| character_state_json | STRING | — |
| positive_anchor | STRING | — |
| negative_anchor | STRING | — |
| summary_json | STRING | — |