From 8ad6c0cc73fa0a5578b518e516046988f14ef3d0 Mon Sep 17 00:00:00 2001 From: bigcat88 Date: Fri, 20 Feb 2026 16:07:09 +0200 Subject: [PATCH] Add minLength/maxLength validation for String inputs --- comfy_api/latest/_io.py | 5 +++++ execution.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/comfy_api/latest/_io.py b/comfy_api/latest/_io.py index 189d7d9bc..a4a85569b 100644 --- a/comfy_api/latest/_io.py +++ b/comfy_api/latest/_io.py @@ -326,11 +326,14 @@ class String(ComfyTypeIO): '''String input.''' def __init__(self, id: str, display_name: str=None, optional=False, tooltip: str=None, lazy: bool=None, multiline=False, placeholder: str=None, default: str=None, dynamic_prompts: bool=None, + min_length: int=None, max_length: int=None, socketless: bool=None, force_input: bool=None, extra_dict=None, raw_link: bool=None, advanced: bool=None): super().__init__(id, display_name, optional, tooltip, lazy, default, socketless, None, force_input, extra_dict, raw_link, advanced) self.multiline = multiline self.placeholder = placeholder self.dynamic_prompts = dynamic_prompts + self.min_length = min_length + self.max_length = max_length self.default: str def as_dict(self): @@ -338,6 +341,8 @@ class String(ComfyTypeIO): "multiline": self.multiline, "placeholder": self.placeholder, "dynamicPrompts": self.dynamic_prompts, + "minLength": self.min_length, + "maxLength": self.max_length, }) @comfytype(io_type="COMBO") diff --git a/execution.py b/execution.py index 75b021892..c0839be3d 100644 --- a/execution.py +++ b/execution.py @@ -938,6 +938,34 @@ async def validate_inputs(prompt_id, prompt, item, validated): errors.append(error) continue + if input_type == "STRING": + if "minLength" in extra_info and len(val.strip()) < extra_info["minLength"]: + error = { + "type": "value_shorter_than_min_length", + "message": "Value length {} shorter than min length of {}".format(len(val.strip()), extra_info["minLength"]), + "details": f"{x}", + "extra_info": { + "input_name": x, + "input_config": info, + "received_value": val, + } + } + errors.append(error) + continue + if "maxLength" in extra_info and len(val) > extra_info["maxLength"]: + error = { + "type": "value_longer_than_max_length", + "message": "Value length {} longer than max length of {}".format(len(val), extra_info["maxLength"]), + "details": f"{x}", + "extra_info": { + "input_name": x, + "input_config": info, + "received_value": val, + } + } + errors.append(error) + continue + if isinstance(input_type, list) or input_type == io.Combo.io_type: if input_type == io.Combo.io_type: combo_options = extra_info.get("options", [])