Comfy-Org/ComfyUI · error · ValueError

pose_start_percent ({}) must not be greater than pose_end_pe

Error message

pose_start_percent ({}) must not be greater than pose_end_percent ({}).

What it means

The Wan pose-control conditioning node validates that pose_start_percent <= pose_end_percent; the interval [pose_start_percent, pose_end_percent] controls when pose guidance is active during the diffusion schedule. An inverted interval is meaningless and rejected immediately in execute().

Source

Thrown at comfy_extras/nodes_wan.py:1297

                io.Float.Input("pose_start_percent", default=0.0, min=0.0, max=1.0, step=0.01, tooltip="Sampling percent at which the pose influence starts. Outside the window the pose branch is skipped entirely, which also speeds those steps up."),
                io.Float.Input("pose_end_percent", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Sampling percent at which the pose influence ends. Motion is mostly established early, so e.g. 0.7 can loosen fine detail while keeping the choreography."),
                io.Float.Input("reference_image_strength", default=1.0, min=0.0, max=10.0, step=0.01, tooltip="Scales how strongly generated frames attend to the reference image's latent frame. Below 1.0 loosens identity/appearance adherence (e.g. to let the prompt restyle), above tightens it against drift."),
            ],
            outputs=[
                io.Conditioning.Output(display_name="positive"),
                io.Conditioning.Output(display_name="negative"),
                io.Latent.Output(display_name="latent"),
                io.Int.Output(display_name="trim_latent", tooltip="Number of latent frames that should be trimmed before decoding."),
                io.Int.Output(display_name="trim_image", tooltip="Number of overlapping image frames when extending a video."),
                io.Int.Output(display_name="video_frame_offset", tooltip="Frames to seek into the pose video."),
            ],
            is_experimental=True,
        )

    @classmethod
    def execute(cls, positive, negative, vae, width, height, length, batch_size, video_frame_offset, reference_image=None, pose_video=None, clip_vision_output=None, positive_pose=None, clip_vision_output_pose=None, continue_motion=None, pose_strength=1.0, pose_start_percent=0.0, pose_end_percent=1.0, reference_image_strength=1.0) -> io.NodeOutput:
        if pose_start_percent > pose_end_percent:
            raise ValueError("pose_start_percent ({}) must not be greater than pose_end_percent ({}).".format(pose_start_percent, pose_end_percent))
        latent_length = ((length - 1) // 4) + 1
        latent_width = width // 8
        latent_height = height // 8

        if reference_image is None:
            reference_image = torch.zeros((1, height, width, 3))

        ref_image = comfy.utils.common_upscale(reference_image[:1].movedim(-1, 1), width, height, "area", "center").movedim(1, -1)
        ref_latent = vae.encode(ref_image[:, :, :, :3])
        trim_latent = ref_latent.shape[2]

        ref_motion_latent_length = 0
        if continue_motion is None:
            image = torch.ones((length, height, width, 3)) * 0.5
        else:
            continue_motion = continue_motion[-cls.CONTINUE_MOTION_FRAMES:]
            video_frame_offset = max(0, video_frame_offset - continue_motion.shape[0])
            continue_motion = comfy.utils.common_upscale(continue_motion[-length:].movedim(-1, 1), width, height, "area", "center").movedim(1, -1)

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Set pose_start_percent <= pose_end_percent (both are 0.0-1.0 schedule fractions)
  2. If you intended pose only at the end, use e.g. start=0.5, end=1.0
  3. Re-check swapped values in the workflow file

Example fix

# before
node.execute(..., pose_start_percent=0.8, pose_end_percent=0.2)
# after
node.execute(..., pose_start_percent=0.2, pose_end_percent=0.8)
Defensive patterns

Strategy: validation

Validate before calling

if pose_start_percent > pose_end_percent:
    pose_start_percent, pose_end_percent = pose_end_percent, pose_start_percent  # or reject

Prevention

When it happens

Trigger: Setting the pose_start_percent widget above pose_end_percent (e.g. start 0.8, end 0.2); workflows where the two values were swapped during editing; API-submitted prompts with misordered percentages.

Common situations: Hand-editing workflow JSON percentage fields; copying a node configured for late-pose and changing only one slider; intending 'end before start' semantics that the node does not support.

Related errors


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/40f6b640c1c0f364. Report an issue: GitHub.