AutoExpress Edit Instructions
Stop repainting the face, hand Qwen a sentence instead
- instructions
- names
- count
- denoise
What this node is for
AutoExpress exists to answer one boring, expensive question: how do I get 28 facial expressions of the same character without redrawing the character 28 times? The pack's default answer is to repaint the face with Impact Pack's FaceDetailer, which works fine on anime and badly on anything halfway real. This node is the other answer. Instead of a mask and an expression LoRA, it hands your image to Qwen-Image-Edit-2509 and asks, in plain English, for the face to change.
That matters because inpainting a face is a local edit with a hard ceiling. Expression changes live in the denoise 0.3–0.6 band; above it you break likeness, and ADetailer-style passes "barely move a real face at any setting" - the AutoExpress author says the same after a pile of test renders. An instruction editor doesn't hit that ceiling. It rewrites the face from a sentence, keeps the rest, and needs no detector, no YOLO model, no Civitai LoRA download.
The cost is VRAM and speed. Qwen-Image-Edit-2509 is a 20B model; the fp8 build plus its ~9 GB text encoder wants about 24 GB. A 16 GB card runs it under --lowvram and pays for it in wall clock.
How it works
The node builds one instruction sentence per expression, out of four moving parts:
- A fixed prefix -
Change only the facial expression. - The expression sentence itself, from
autoexpress_core/resources/edit_instructions.json. There are two wordings for every emotion, one mild and one full-strength (The character is furious: eyebrows drawn sharply down and together…). - An intensity line - nothing at the "normal" tier,
Keep the change subtle and natural…below it,Make the expression strong and clearly readable.above it. - A fixed suffix telling the model to keep the same character, face shape, art style, line work, colours, hair, clothing, head angle and background.
style changes both the prefix and the suffix. On illustration you get the generic wording; on photo it becomes Edit this photograph: change only the person's facial expression. and the suffix ends with Do not stylize or cartoonize. - because without that nudge Qwen happily turns your photo into a drawing, which is a thing the author hit often enough to hard-code a fix for.
intensity then picks the wording tier and the denoise. Illustrations start at 0.55 denoise and climb to 1.0 by the time you're at 0.75 intensity. Photos are aggressively tamed: 0.2 + intensity, so the photo default of 0.07 lands around 0.27. Below 1.0 denoise the sampler starts from the input image's latent, and that is the whole trick for keeping the face intact.
The inputs that matter
- expressions -
all, or a comma-separated list likejoy, anger, surprise. Case-insensitive, and it's a filter, not a validator: a typo'd name quietly yields fewer images. - style -
illustrationorphoto. Get this wrong and you'll spend an hour wondering why your photograph came back cel-shaded. - intensity - leave at
-1for the family default (0.5 drawn, 0.07 photo) unless you're deliberately pushing. - extra_instruction - appended to every instruction.
Keep the glasses on.is the canonical use.
Four outputs, and three are easy to ignore:
- instructions (a list) → the prompt input of
TextEncodeQwenImageEditPlus. - denoise (also a list) →
KSampler's denoise. People skip this and then wonder where the subtlety went; you want the node's values, not your own 1.0. - names → Save Expressions / Sprite Sheet, so files are called
joy.pnginstead ofexpression_00.png. - count → just the number of expressions.
Installing it
Grab the pack, then grab the models - this is the part that bites.
cd ComfyUI/custom_nodes
git clone https://github.com/deepratna-awale/AutoExpress
# or: ComfyUI Manager → search "AutoExpress"
cd ComfyUI/custom_nodes/AutoExpress
python -m autoexpress_core.instruction_edit download /path/to/ComfyUI
Swap download for check to see what's missing. That drops qwen_image_edit_2509_fp8_e4m3fn into models/diffusion_models, qwen_2.5_vl_7b_fp8_scaled into models/text_encoders, qwen_image_vae into models/vae, and optionally the Qwen-Image-Edit-2509 Lightning 8-step LoRA into models/loras.
With Lightning: 8 steps, CFG 1. Without: 40 steps, CFG 4. Same graph otherwise.
Where people get burned
The pack has a root install.sh, and it is not the ComfyUI installer - it's the standalone Flask app's, and it starts with sudo apt update && sudo apt upgrade. Never run it inside a working ComfyUI box. ComfyUI needs nothing beyond Pillow and requests, which you already have.
Also: you don't need Impact Pack for this node. No FaceDetailer, no Ultralytics Subpack, no face_yolov8m.pt. If you installed both routes, keep them in separate graphs - mixing wires between them is the fastest way to a confusing result.
Expect drift if you chain edits. Qwen-Edit re-emits the whole frame every time, so the honest workflow is one edit from your original image per expression, not an edit of an edit.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| expressions | STRING | all | 'all', or a comma separated list such as: joy, anger, surprise |
| style | COMBO | illustration | illustration keeps the art style; photo keeps a realistic photo from turning into a cartoon. |
| intensity | FLOAT | -1.00-1–1 | How strong the expression is, 0 (barely) to 1 (exaggerated). -1 uses the model family's default: 0.5 for anime and furry models, much lower for realistic ones, where strong expressions look uncanny. |
| extra_instruction | STRING | Added to every instruction, e.g. 'Keep the glasses on.' |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| instructions | STRING | One edit instruction per expression. Connect to TextEncodeQwenImageEditPlus's prompt. |
| names | STRING | Expression names, in the same order as the instructions. |
| count | INT | Number of expressions. |
| denoise | FLOAT | KSampler denoise per expression for the intensity: lower keeps more of the original face. |