From b83ad2385675d44b3aca9a1134cf046328da8334 Mon Sep 17 00:00:00 2001 From: QualiaRain <44004657+QualiaRain@users.noreply.github.com> Date: Mon, 22 Jun 2026 07:03:30 -0400 Subject: [PATCH] fix(control): update stale processor names after rename update_settings() and the XYZ [Control] Processor axis still used pre-rename names ('MediaPipe Face', 'DWPose', 'SegmentAnything') that no longer exist as config keys after 8d4ebcd5e. - update_settings(): update stale keys to 'MediaPipe Face (Legacy)', 'DWPose (Legacy)', 'SegmentAnything 1.0' -- the KeyError at 'MediaPipe Face' (line 182) was silently dropping all settings after position 13 on every panel change - DWPose (Legacy) config: add missing 'model' key so update_settings can persist the Pose Model radio value without crashing - processor.processors list: remove stale 'DWPose' entry (already present as 'DWPose (Legacy)') that caused XYZ [Control] Processor to offer an unloadable option Fixes #4953 Co-Authored-By: Claude --- modules/control/processor.py | 1 - modules/control/processors.py | 33 +++++++++------------------------ 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/modules/control/processor.py b/modules/control/processor.py index 02e7e9604..817d2252b 100644 --- a/modules/control/processor.py +++ b/modules/control/processor.py @@ -17,7 +17,6 @@ processors = [ 'None', # pose 'OpenPose', - 'DWPose', 'RTMW', 'RTMO', 'ViTPose', diff --git a/modules/control/processors.py b/modules/control/processors.py index 34ef10cef..3dce586af 100644 --- a/modules/control/processors.py +++ b/modules/control/processors.py @@ -52,7 +52,7 @@ config = { 'Shuffle': {'class': None, 'group': 'Other', 'checkpoint': False, 'params': {}}, # legacy models 'MediaPipe Face (Legacy)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}}, - 'DWPose (Legacy)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}}, + 'DWPose (Legacy)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'model': 'Tiny', 'params': {'min_confidence': 0.3}}, 'TEED (Legacy)': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'fal/teed'}, 'params': {}}, 'Anyline (Legacy)': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'TheMistoAI/MistoLine'}, 'params': {}}, 'Normal Bae (Legacy)': {'class': None, 'group': 'Normal', 'checkpoint': True, 'params': {}}, @@ -98,7 +98,7 @@ def delay_load_config(): # pose models 'OpenPose': {'class': OpenposeDetector, 'group': 'Pose', 'checkpoint': True, 'params': {'include_body': True, 'include_hand': False, 'include_face': False}}, 'MediaPipe Face (Legacy)': {'class': MediapipeFaceDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}}, - 'DWPose (Legacy)': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}}, + 'DWPose (Legacy)': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'model': 'Tiny', 'params': {'min_confidence': 0.3}}, 'RTMW': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3, 'draw_body_pose': True, 'draw_hand_pose': True, 'draw_face_pose': True}}, 'RTMO': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}}, 'ViTPose': {'class': ViTPoseDetector, 'group': 'Pose', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'usyd-community/vitpose-plus-base'}, 'params': {'min_confidence': 0.3}}, @@ -179,13 +179,13 @@ def update_settings(*settings): update(['Leres Depth', 'params', 'boost'], settings[11]) update(['Leres Depth', 'params', 'thr_a'], settings[12]) update(['Leres Depth', 'params', 'thr_b'], settings[13]) - update(['MediaPipe Face', 'params', 'max_faces'], settings[14]) - update(['MediaPipe Face', 'params', 'min_confidence'], settings[15]) + update(['MediaPipe Face (Legacy)', 'params', 'max_faces'], settings[14]) + update(['MediaPipe Face (Legacy)', 'params', 'min_confidence'], settings[15]) update(['Canny', 'params', 'low_threshold'], settings[16]) update(['Canny', 'params', 'high_threshold'], settings[17]) - update(['DWPose', 'model'], settings[18]) - update(['DWPose', 'params', 'min_confidence'], settings[19]) - update(['SegmentAnything', 'model'], settings[20]) + update(['DWPose (Legacy)', 'model'], settings[18]) + update(['DWPose (Legacy)', 'params', 'min_confidence'], settings[19]) + update(['SegmentAnything 1.0', 'model'], settings[20]) update(['Edge', 'params', 'pf'], settings[21]) update(['Edge', 'params', 'mode'], settings[22]) update(['Zoe Depth', 'params', 'gamma_corrected'], settings[23]) @@ -264,23 +264,8 @@ class Processor: # log.debug(f'Control Processor loading: id="{processor_id}" class={cls.__name__}') debug(f'Control Processor config={self.load_config}') jobid = state.begin('Load processor') - if processor_id == 'DWPose': - det_ckpt = 'https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_l_8x8_300e_coco/yolox_l_8x8_300e_coco_20211126_140236-d3bd2b23.pth' - if 'Tiny' == config['DWPose']['model']: - pose_config = 'config/rtmpose-t_8xb64-270e_coco-ubody-wholebody-256x192.py' - pose_ckpt = 'https://huggingface.co/yzd-v/DWPose/resolve/main/dw-tt_ucoco.pth' - elif 'Medium' == config['DWPose']['model']: - pose_config = 'config/rtmpose-m_8xb64-270e_coco-ubody-wholebody-256x192.py' - pose_ckpt = 'https://huggingface.co/yzd-v/DWPose/resolve/main/dw-mm_ucoco.pth' - elif 'Large' == config['DWPose']['model']: - pose_config = 'config/rtmpose-l_8xb32-270e_coco-ubody-wholebody-384x288.py' - pose_ckpt = 'https://huggingface.co/yzd-v/DWPose/resolve/main/dw-ll_ucoco_384.pth' - else: - log.error(f'Control Processor load failed: id="{processor_id}" error=unknown model type') - return f'Processor failed to load: {processor_id}' - self.model = cls(det_ckpt=det_ckpt, pose_config=pose_config, pose_ckpt=pose_ckpt, device="cpu") - elif processor_id in ('DWPose (ONNX)', 'RTMW', 'RTMO'): - model_type = {'DWPose (ONNX)': 'DWPose', 'RTMW': 'RTMW-l', 'RTMO': 'RTMO-l'}[processor_id] + if processor_id in ('DWPose (Legacy)', 'RTMW', 'RTMO'): + model_type = {'DWPose (Legacy)': 'DWPose', 'RTMW': 'RTMW-l', 'RTMO': 'RTMO-l'}[processor_id] self.model = cls.from_pretrained(model_type, **self.load_config) elif processor_id == 'SegmentAnything 1.0': if 'Base' == config[processor_id]['model']: