diff --git a/comfy_extras/nodes_string.py b/comfy_extras/nodes_string.py index 925a40da8..97485c8c5 100644 --- a/comfy_extras/nodes_string.py +++ b/comfy_extras/nodes_string.py @@ -1,10 +1,41 @@ import re import json +import string from typing_extensions import override from comfy_api.latest import ComfyExtension, io +class StringFormat(io.ComfyNode): + @classmethod + def define_schema(cls) -> io.Schema: + autogrow = io.Autogrow.TemplateNames( + input=io.AnyType.Input("value"), + names=list(string.ascii_lowercase), + min=0, + ) + return io.Schema( + node_id="StringFormat", + display_name="Format Text", + category="text", + search_aliases=["string", "format"], + description="Same as Python's string format method. Supports all of Python's format options and features.", + inputs=[ + io.Autogrow.Input("values", template=autogrow), + io.String.Input("f_string", default="{a}", multiline=True), + ], + outputs=[ + io.String.Output(), + ], + ) + + @classmethod + def execute( + cls, values: io.Autogrow.Type, f_string: str + ) -> io.NodeOutput: + return io.NodeOutput(f_string.format(**values)) + + class StringConcatenate(io.ComfyNode): @classmethod def define_schema(cls): @@ -413,6 +444,7 @@ class StringExtension(ComfyExtension): @override async def get_node_list(self) -> list[type[io.ComfyNode]]: return [ + StringFormat, StringConcatenate, StringSubstring, StringLength, diff --git a/openapi.yaml b/openapi.yaml index bc1ae16fa..2658b9b86 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -4162,7 +4162,8 @@ paths: description: Display name for the API key description: type: string - description: User-provided description for the key + description: User-provided description of the key's purpose + maxLength: 5000 responses: "201": description: API key created @@ -7680,6 +7681,7 @@ components: required: - id - name + - description properties: id: type: string @@ -7687,8 +7689,8 @@ components: type: string description: type: string - nullable: true - description: User-provided description + maxLength: 5000 + description: User-provided description of the key's purpose. Always present in responses; empty string when no description was supplied on create. prefix: type: string description: First few characters of the key for identification @@ -7709,6 +7711,7 @@ components: required: - id - name + - description - key properties: id: @@ -7717,8 +7720,8 @@ components: type: string description: type: string - nullable: true - description: User-provided description + maxLength: 5000 + description: User-provided description of the key's purpose. Always present in responses; empty string when no description was supplied on create. key: type: string description: Full API key value (only returned on creation)