{"record":{"id":"40f6b640c1c0f364","repo":"Comfy-Org/ComfyUI","slug":"pose-start-percent-must-not-be-greater-than-p","errorCode":null,"errorMessage":"pose_start_percent ({}) must not be greater than pose_end_percent ({}).","messagePattern":"pose_start_percent \\((.+?)\\) must not be greater than pose_end_percent \\((.+?)\\)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"comfy_extras/nodes_wan.py","lineNumber":1297,"sourceCode":"                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.\"),\n                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.\"),\n                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.\"),\n            ],\n            outputs=[\n                io.Conditioning.Output(display_name=\"positive\"),\n                io.Conditioning.Output(display_name=\"negative\"),\n                io.Latent.Output(display_name=\"latent\"),\n                io.Int.Output(display_name=\"trim_latent\", tooltip=\"Number of latent frames that should be trimmed before decoding.\"),\n                io.Int.Output(display_name=\"trim_image\", tooltip=\"Number of overlapping image frames when extending a video.\"),\n                io.Int.Output(display_name=\"video_frame_offset\", tooltip=\"Frames to seek into the pose video.\"),\n            ],\n            is_experimental=True,\n        )\n\n    @classmethod\n    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:\n        if pose_start_percent > pose_end_percent:\n            raise ValueError(\"pose_start_percent ({}) must not be greater than pose_end_percent ({}).\".format(pose_start_percent, pose_end_percent))\n        latent_length = ((length - 1) // 4) + 1\n        latent_width = width // 8\n        latent_height = height // 8\n\n        if reference_image is None:\n            reference_image = torch.zeros((1, height, width, 3))\n\n        ref_image = comfy.utils.common_upscale(reference_image[:1].movedim(-1, 1), width, height, \"area\", \"center\").movedim(1, -1)\n        ref_latent = vae.encode(ref_image[:, :, :, :3])\n        trim_latent = ref_latent.shape[2]\n\n        ref_motion_latent_length = 0\n        if continue_motion is None:\n            image = torch.ones((length, height, width, 3)) * 0.5\n        else:\n            continue_motion = continue_motion[-cls.CONTINUE_MOTION_FRAMES:]\n            video_frame_offset = max(0, video_frame_offset - continue_motion.shape[0])\n            continue_motion = comfy.utils.common_upscale(continue_motion[-length:].movedim(-1, 1), width, height, \"area\", \"center\").movedim(1, -1)","sourceCodeStart":1279,"sourceCodeEnd":1315,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy_extras/nodes_wan.py#L1279-L1315","documentation":"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().","triggerScenarios":"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.","commonSituations":"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.","solutions":["Set pose_start_percent <= pose_end_percent (both are 0.0-1.0 schedule fractions)","If you intended pose only at the end, use e.g. start=0.5, end=1.0","Re-check swapped values in the workflow file"],"exampleFix":"# before\nnode.execute(..., pose_start_percent=0.8, pose_end_percent=0.2)\n# after\nnode.execute(..., pose_start_percent=0.2, pose_end_percent=0.8)","handlingStrategy":"validation","validationCode":"if pose_start_percent > pose_end_percent:\n    pose_start_percent, pose_end_percent = pose_end_percent, pose_start_percent  # or reject","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat the two widgets as an ordered interval; change both together","Validate schedule percentages in workflow linters"],"tags":["wan","pose-control","schedule","validation"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}