Character Reference Pack
Four reference photos in, one locked character prompt out
- face
- body
- clothing
- rear
- anchor
- character_lock
- anchor_prompt
- negative
- image_1
- image_2
- image_3
- image_4
- image_5
- report
If you have ever tried to keep a character's face, body and outfit straight across forty generated shots, you already know the failure mode: the face drifts, the jacket changes shade, and by image twelve you've invented a new person. Character Reference Pack [Eclipse] is the node that turns a pile of separate reference images into one written character definition plus a correctly numbered set of Qwen image slots. It generates nothing. It is pure prompt and wiring discipline, which is exactly what character consistency workflows are missing most of the time.
What it actually does
The node sits between your references and a Qwen image encoder. You feed it up to five images - face (required), plus optional body, clothing, rear and anchor - and it produces role instructions that tell the model which numbered image does what. The role prompts and the general negative come from prompts/character_references.json, which Eclipse extracts on first startup into its own repo folder. Edit that file and the next execution picks it up; no restart.
It has two lives, and mixing them up is the main way people confuse themselves:
- First pass (assembly). Leave
anchorempty. Wireanchor_promptto your encoder's positive,image_1…image_5to the encoder's image inputs, and generate one clean full-body review character against thesceneyou set. - Second pass (dataset). Connect that approved image into
anchor, then sendcharacter_lockto Character Shot Planner instead ofanchor_prompt. Now the review pose and the studio scene are gone, and what's left is the part you want repeated: identity, physique, wardrobe.
That distinction is the whole point of having two prompt outputs. anchor_prompt is the complete positive for the review shot; character_lock deliberately excludes the fixed pose and the scene so the planner can vary camera and pose without fighting your text.
Inputs worth setting
width and height (832×1216 by default, 256–2048 in multiples of 32) set the padded reference canvas. Images are padded, never stretched or cropped, so nothing about your subject gets mangled - but share the same dimensions between your assembly Pack and your dataset Pack or the numbering and framing drift.
Then it's prose, all multiline: identity (age, hair, distinctive features), body_description (relative proportions - chest-to-waist, limb lengths), outfit (fixed wardrobe, and explicit choices for missing pieces; clear the sample cardigan-and-jeans if you're using a clothing reference), scene (review image only), and extra_rules, which is appended to both prompts. Keep poses out of extra_rules if you want the planner to vary them.
face is marked optional in the widget but the node won't execute without it. body and clothing are genuinely optional - skip them and physique and wardrobe come from your written text instead.
Outputs
character_lock→ Character Shot Planner'scharacter_lock(dataset phase).anchor_prompt→ the assembly encoder's positive (first phase).negative→ the same encoder's negative. The file's general assembly negative, separate from each Prepare node's per-role negative.image_1…image_5→ the Qwen encoder's image inputs. These sockets have no fixed role. Active roles are packed consecutively:anchorif supplied, then face, body, clothing, rear.report→ the actual image-number-to-role map, canvas size and omitted references. Send it to Show Any before you debug anything.
Install
ComfyUI Manager → search ComfyUI_Eclipse → install, or clone it yourself:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse
pip install -r ComfyUI_Eclipse/requirements.txt
Portable installs should use python_embeded\python.exe -m pip install -r custom_nodes\ComfyUI_Eclipse\requirements.txt. Restart ComfyUI. The declared dependencies are modest - torch, numpy, Pillow, opencv-python, safetensors, pilgram, PyYAML, aiohttp - but requirements.txt also pins faster-whisper and stable-ts for Eclipse's lyric/transcription nodes. If you don't want that weight, install the small list by hand.
Where people get burned
Everything here is prompt text and a single image per input - batches are not supported, so a face sheet fed into face is one image, not five. And the reported role order is the only authority on what image_3 means; if you re-solve the graph by hand later, check report again rather than assuming. Finally, these are model instructions, not a guarantee: the README is blunt that role separation needs review, and the node doesn't measure BMI or infer concealed anatomy. On 2026 models the honest expectation is that an edit-model pass with a good reference does more for likeness than any amount of stacked adapter cleverness - pack the references properly here, then let Qwen-Edit do the heavy lifting.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 832256–2048 | Reference canvas width, 256–2048 in multiples of 32. Images are padded without stretching or cropping. For native Qwen 2.1, use encoder resolution=0 and its latent output to preserve this canvas size. |
| height | INT | 1216256–2048 | Reference canvas height, 256–2048 in multiples of 32. Together with width, sets the padded reference dimensions. Share these settings between assembly and dataset Packs for consistent sizing. |
| identity | STRING | The same adult character throughout the dataset. | Identity details preserved in review and dataset prompts, such as age, hair and distinctive features. Supplements the face image; does not generate a face reference by itself. |
| body_description | STRING | Describe visible build and relative proportions to preserve, such as chest-to-waist relationship or limb lengths. Supplements a body image, or guides physique without one. Not a measured BMI or numeric anatomy control. | |
| outfit | STRING | Plain grey cardigan, blue jeans and white sneakers. | Fixed wardrobe and explicit choices for missing items. Keep consistent with the clothing reference and its completion inventory; clear the example outfit when using a different reference. Used for assembly and later shots, not for the separate clothing extraction sampler. |
| scene | STRING | Plain white studio background and light floor, soft natural light. | Background and lighting for anchor_prompt's review image only. Not included in character_lock: set the planner's scene separately for dataset shots, or connect one shared text node to both. |
| extra_rules | STRING | Additional instructions appended to both character_lock and anchor_prompt. File role/assembly rules still apply; this is not a full override. Avoid fixed poses here if the planner should vary them. | |
| faceopt | IMAGE | Required to execute: one face reference controlling identity, hair and skin tone. Connect the face Select output or a direct image. This role does not control body proportions or wardrobe. | |
| bodyopt | IMAGE | Optional single image controlling visible physique/proportions. Its face and clothing are excluded by the role prompt, but model adherence needs review. Without it, physique comes from the body description/approved character. | |
| clothingopt | IMAGE | Optional outfit reference or completed garment flat lay. Controls garments, materials, colors and accessories, not the original wearer. Check missing pieces before assembly; keep written outfit choices consistent. Underwear stays beneath opaque outer layers when worn. | |
| rearopt | IMAGE | Optional compatible back-view reference for rear hair and garment details when visible. Does not force rear-facing shots or override the selected face, physique or wardrobe. | |
| anchoropt | IMAGE | Approved assembled character image, not a text prompt. Leave empty in the first Pack that creates the review character. Connect the reviewed image here in the dataset Pack to preserve the combined look. Becomes image_1; pose/framing may still vary. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| character_lock | STRING | Shared identity, physique, wardrobe and numbered reference-role instructions. Connect to Character Shot Planner's character_lock for varied dataset shots. Excludes the fixed full-body review pose and Pack scene. |
| anchor_prompt | STRING | Complete positive prompt to generate the first full-body REVIEW CHARACTER. Connect to the assembly encoder. Normally unused on the second/dataset Pack, whose character_lock goes to the planner instead. This is text, not the anchor image. |
| negative | STRING | General assembly/dataset negative from prompts/character_references.json. Connect to the corresponding encoder's negative input. Separate from each Prepare node's role-specific negative override. |
| image_1 | IMAGE | Connect to Qwen encoder image1. Active roles are packed consecutively: anchor if supplied, then face, body, clothing, rear. This socket has no fixed role; check report. Unused slots return no image. Keep paired with this Pack's prompt. |
| image_2 | IMAGE | Connect to Qwen encoder image2. Active roles are packed consecutively: anchor if supplied, then face, body, clothing, rear. This socket has no fixed role; check report. Unused slots return no image. Keep paired with this Pack's prompt. |
| image_3 | IMAGE | Connect to Qwen encoder image3. Active roles are packed consecutively: anchor if supplied, then face, body, clothing, rear. This socket has no fixed role; check report. Unused slots return no image. Keep paired with this Pack's prompt. |
| image_4 | IMAGE | Connect to Qwen encoder image4. Active roles are packed consecutively: anchor if supplied, then face, body, clothing, rear. This socket has no fixed role; check report. Unused slots return no image. Keep paired with this Pack's prompt. |
| image_5 | IMAGE | Connect to Qwen encoder image5. Active roles are packed consecutively: anchor if supplied, then face, body, clothing, rear. This socket has no fixed role; check report. Unused slots return no image. Keep paired with this Pack's prompt. |
| report | STRING | Lists actual image-number-to-role mapping, canvas size and omitted optional references. Connect to Show Any when checking which image the prompt calls image1, image2, etc. |