Nodes/AutoExpress/AutoExpress Edit Instructions
ComfyUI Node

AutoExpress Edit Instructions

Stop repainting the face, hand Qwen a sentence instead

By deepratna-awale·Created 3 years ago·Updated about 2 hours ago· 27
AutoExpress Edit Instructions
    • instructions
    • names
    • count
    • denoise
    ◄expressionsall►
    ◄styleillustration►
    ◄intensity-1.00►
    ◄extra_instruction►

    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:

    1. A fixed prefix - Change only the facial expression.
    2. 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…).
    3. 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.
    4. 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 like joy, anger, surprise. Case-insensitive, and it's a filter, not a validator: a typo'd name quietly yields fewer images.
    • style - illustration or photo. Get this wrong and you'll spend an hour wondering why your photograph came back cel-shaded.
    • intensity - leave at -1 for 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.png instead of expression_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.

    CategoryAutoExpress

    Inputs (4)

    NameTypeDefaultDescription
    expressionsSTRINGall'all', or a comma separated list such as: joy, anger, surprise
    styleCOMBOillustrationillustration keeps the art style; photo keeps a realistic photo from turning into a cartoon.
    intensityFLOAT-1.00-1–1How 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_instructionSTRINGAdded to every instruction, e.g. 'Keep the glasses on.'

    Outputs (4)

    NameTypeDescription
    instructionsSTRINGOne edit instruction per expression. Connect to TextEncodeQwenImageEditPlus's prompt.
    namesSTRINGExpression names, in the same order as the instructions.
    countINTNumber of expressions.
    denoiseFLOATKSampler denoise per expression for the intensity: lower keeps more of the original face.