How to Use DWPose with ControlNet in Stable Diffusion

Copying a pose from a reference photo into a generated image is the single most useful trick in Stable Diffusion, and dwpose with ControlNet is how most people do it today. The idea is simple to say and slightly fiddly to wire up the first time: dwpose reads your reference photo and draws a skeleton map, then a ControlNet OpenPose model forces your generated character to follow that skeleton while the rest of the image follows your prompt. This guide walks through the full ComfyUI workflow end to end, explains which pieces you need, and covers the settings and mistakes that decide how faithful the copied pose turns out.

The Two Halves of Pose Control

Everything in this workflow splits into two jobs, and keeping them separate in your head prevents most beginner confusion. Job one is estimation: dwpose looks at your photo and produces the skeleton map. Job two is control: a ControlNet model reads that map during generation and steers the diffusion process so the new character’s body lands where the skeleton says it should. Dwpose never touches your generated image, and the ControlNet model never looks at your photo. They meet at the skeleton map and nowhere else. That is also why dwpose skeletons plug straight into OpenPose ControlNet models: dwpose draws its maps in the OpenPose style, so the control model cannot tell the difference and does not care.

What You Need in Place

  • ComfyUI with the comfyui_controlnet_aux pack installed, so you have the DWPose Estimator node.
  • An OpenPose ControlNet model file, matched to your base model family: one built for SD 1.5 if you generate with SD 1.5 checkpoints, one built for SDXL if you use SDXL.
  • Your usual checkpoint, VAE and text nodes, plus a reference photo with a clear, complete person in it.

The version match between the ControlNet model and your checkpoint is the detail people get wrong most often. An SD 1.5 OpenPose model wired to an SDXL checkpoint will either error out or quietly do nothing useful.

Step 1: Extract the Pose with the DWPose Estimator

Start with the estimation half. Add a Load Image node with your reference photo and connect it to a DWPose Estimator node. Leave the settings at their defaults for your first run: the standard detector, detect resolution at 512, and body, hands and face detection all switched on. Connect the estimator output to a Preview Image node and queue once. You should see the skeleton: limbs as colored lines, finger fans on the hands, landmark points on the face. Inspect it before you go any further. If a hand is mangled in the skeleton, it will be mangled in your generation too, and fixing it here (with the settings guide linked below) takes seconds compared with re-rolling generations later.

Step 2: Route the Skeleton into ControlNet

Now the control half. In a standard ComfyUI setup you use a Load ControlNet Model node to bring in your OpenPose model, and an Apply ControlNet node to attach it to your conditioning. Feed the positive and negative conditioning through the Apply node, and connect the DWPose Estimator’s image output into the Apply node’s image input. Set the strength to 1.0 for your first attempt. Then run your normal sampling chain: prompt describing the character and scene you want, your checkpoint doing the drawing, and ControlNet quietly insisting that the body follows the skeleton. Many people save the skeleton image out of the estimator and load it as a normal image instead; that works identically and is handy when you want to reuse one pose across many prompts.

Writing the Prompt Around a Pose

Your prompt should describe everything except the pose. Clothing, hair, setting, lighting, art style: all of that is the prompt’s job. The pose itself belongs to ControlNet, and describing it in words as well (“standing with arms raised”) only creates arguments between the text and the skeleton. A good habit is to keep one working prompt and swap reference photos through the dwpose node, generating the same character in a whole series of poses. Consistency of the character comes from your checkpoint, seed discipline and prompt; consistency of the pose comes from the skeleton. Each tool minds its own business.

The Settings That Matter Most

Three controls decide most of your results. Strength (often called control weight) sets how hard ControlNet pushes; 1.0 is the standard starting point, lower values let the model improvise, and higher values can look stiff. The start and end percentages control when during sampling the guidance applies; applying pose guidance early matters most, because the layout of the image is decided in the early steps. And back on the dwpose side, detect resolution decides skeleton quality, especially for hands and faces that are small in the frame. The dedicated settings article below goes through each of these in detail, including per-scenario recipes.

Choosing and Checking Your Reference Photos

Dwpose is good, but it cannot invent body parts your photo hides. Pick references where the person is fully in frame, lit clearly, and not buried under loose clothing that disguises the limbs. Busy backgrounds are fine; the detector is good at finding people. Cropped bodies are the common failure: a photo cut off at the knees produces a skeleton cut off at the knees, and your generated character will inherit that framing. If you only need an upper-body pose, that is a feature. Just choose it on purpose rather than by accident.

Mistakes That Ruin First Attempts

  • Treating the skeleton as decoration. The skeleton is a control signal, not something that should appear in the final art. If sticks show up in your image, the control image got wired in as a normal input somewhere.
  • Mismatched model families. SD 1.5 ControlNet with an SDXL checkpoint, or the reverse. Match the families.
  • Skipping the skeleton check. Five seconds of looking at the map saves whole batches of bad generations.
  • Fighting the pose with the prompt. Describe the character and scene; let the skeleton own the pose.

Reusing One Skeleton Across Many Images

Once you have a skeleton you love, treat it as an asset. Save the estimator’s output as an image file and reload it in later sessions instead of re-running the estimator every time. Artists build small pose libraries this way: a folder of trusted skeletons for standing, sitting, action and close-up work, each one checked once and reused for months. It also makes series work far more consistent, because every image in the set follows the identical map rather than a fresh estimate with slightly different guesses. When a project matters, this five-second habit removes one whole source of randomness from your workflow.

Conclusion

Dwpose plus ControlNet is a clean division of labor: dwpose measures the pose, ControlNet enforces it, and Stable Diffusion handles everything creative in between. Extract a skeleton you have actually looked at, pair it with an OpenPose model that matches your checkpoint family, start at strength 1.0, and write prompts that describe the character rather than the stance. Do those four things and pose copying stops feeling like luck and starts feeling like a tool, one you can point at any photo and trust.

Read next:

3 thoughts on “How to Use DWPose with ControlNet in Stable Diffusion”

  1. Pingback: How to Install DWPose in ComfyUI: Step-by-Step Guide

  2. Pingback: DWPose vs OpenPose: Which Pose Estimator Is Better?

  3. Pingback: How to Use DWPose in AUTOMATIC1111 WebUI ControlNet

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top