Skip to content

Commit d17d2f6

Browse files
committed
feat(V3-io): allow Enum classes for Combo options
1 parent 8aea746 commit d17d2f6

File tree

9 files changed

+88
-74
lines changed

9 files changed

+88
-74
lines changed

comfy_api/latest/_io.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,11 +336,25 @@ class Combo(ComfyTypeIO):
336336
class Input(WidgetInput):
337337
"""Combo input (dropdown)."""
338338
Type = str
339-
def __init__(self, id: str, options: list[str]=None, display_name: str=None, optional=False, tooltip: str=None, lazy: bool=None,
340-
default: str=None, control_after_generate: bool=None,
341-
upload: UploadType=None, image_folder: FolderType=None,
342-
remote: RemoteOptions=None,
343-
socketless: bool=None):
339+
def __init__(
340+
self,
341+
id: str,
342+
options: list[str] | list[int] | type[Enum] = None,
343+
display_name: str=None,
344+
optional=False,
345+
tooltip: str=None,
346+
lazy: bool=None,
347+
default: str | int | Enum = None,
348+
control_after_generate: bool=None,
349+
upload: UploadType=None,
350+
image_folder: FolderType=None,
351+
remote: RemoteOptions=None,
352+
socketless: bool=None,
353+
):
354+
if isinstance(options, type) and issubclass(options, Enum):
355+
options = [v.value for v in options]
356+
if isinstance(default, Enum):
357+
default = default.value
344358
super().__init__(id, display_name, optional, tooltip, lazy, default, socketless)
345359
self.multiselect = False
346360
self.options = options

comfy_api_nodes/nodes_bytedance.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ def define_schema(cls):
249249
inputs=[
250250
comfy_io.Combo.Input(
251251
"model",
252-
options=[model.value for model in Text2ImageModelName],
253-
default=Text2ImageModelName.seedream_3.value,
252+
options=Text2ImageModelName,
253+
default=Text2ImageModelName.seedream_3,
254254
tooltip="Model name",
255255
),
256256
comfy_io.String.Input(
@@ -382,8 +382,8 @@ def define_schema(cls):
382382
inputs=[
383383
comfy_io.Combo.Input(
384384
"model",
385-
options=[model.value for model in Image2ImageModelName],
386-
default=Image2ImageModelName.seededit_3.value,
385+
options=Image2ImageModelName,
386+
default=Image2ImageModelName.seededit_3,
387387
tooltip="Model name",
388388
),
389389
comfy_io.Image.Input(
@@ -676,8 +676,8 @@ def define_schema(cls):
676676
inputs=[
677677
comfy_io.Combo.Input(
678678
"model",
679-
options=[model.value for model in Text2VideoModelName],
680-
default=Text2VideoModelName.seedance_1_pro.value,
679+
options=Text2VideoModelName,
680+
default=Text2VideoModelName.seedance_1_pro,
681681
tooltip="Model name",
682682
),
683683
comfy_io.String.Input(
@@ -793,8 +793,8 @@ def define_schema(cls):
793793
inputs=[
794794
comfy_io.Combo.Input(
795795
"model",
796-
options=[model.value for model in Image2VideoModelName],
797-
default=Image2VideoModelName.seedance_1_pro.value,
796+
options=Image2VideoModelName,
797+
default=Image2VideoModelName.seedance_1_pro,
798798
tooltip="Model name",
799799
),
800800
comfy_io.String.Input(

comfy_api_nodes/nodes_kling.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ def define_schema(cls) -> comfy_io.Schema:
647647
category="api node/video/Kling",
648648
description="Allows specifying configuration options for Kling Camera Controls and motion control effects.",
649649
inputs=[
650-
comfy_io.Combo.Input("camera_control_type", options=[i.value for i in KlingCameraControlType]),
650+
comfy_io.Combo.Input("camera_control_type", options=KlingCameraControlType),
651651
comfy_io.Float.Input(
652652
"horizontal_movement",
653653
default=0.0,
@@ -772,7 +772,7 @@ def define_schema(cls) -> comfy_io.Schema:
772772
comfy_io.Float.Input("cfg_scale", default=1.0, min=0.0, max=1.0),
773773
comfy_io.Combo.Input(
774774
"aspect_ratio",
775-
options=[i.value for i in KlingVideoGenAspectRatio],
775+
options=KlingVideoGenAspectRatio,
776776
default="16:9",
777777
),
778778
comfy_io.Combo.Input(
@@ -840,7 +840,7 @@ def define_schema(cls) -> comfy_io.Schema:
840840
comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0),
841841
comfy_io.Combo.Input(
842842
"aspect_ratio",
843-
options=[i.value for i in KlingVideoGenAspectRatio],
843+
options=KlingVideoGenAspectRatio,
844844
default="16:9",
845845
),
846846
comfy_io.Custom("CAMERA_CONTROL").Input(
@@ -903,17 +903,17 @@ def define_schema(cls) -> comfy_io.Schema:
903903
comfy_io.String.Input("negative_prompt", multiline=True, tooltip="Negative text prompt"),
904904
comfy_io.Combo.Input(
905905
"model_name",
906-
options=[i.value for i in KlingVideoGenModelName],
906+
options=KlingVideoGenModelName,
907907
default="kling-v2-master",
908908
),
909909
comfy_io.Float.Input("cfg_scale", default=0.8, min=0.0, max=1.0),
910-
comfy_io.Combo.Input("mode", options=[i.value for i in KlingVideoGenMode], default="std"),
910+
comfy_io.Combo.Input("mode", options=KlingVideoGenMode, default=KlingVideoGenMode.std),
911911
comfy_io.Combo.Input(
912912
"aspect_ratio",
913-
options=[i.value for i in KlingVideoGenAspectRatio],
914-
default="16:9",
913+
options=KlingVideoGenAspectRatio,
914+
default=KlingVideoGenAspectRatio.field_16_9,
915915
),
916-
comfy_io.Combo.Input("duration", options=[i.value for i in KlingVideoGenDuration], default="5"),
916+
comfy_io.Combo.Input("duration", options=KlingVideoGenDuration, default=KlingVideoGenDuration.field_5),
917917
],
918918
outputs=[
919919
comfy_io.Video.Output(),
@@ -984,8 +984,8 @@ def define_schema(cls) -> comfy_io.Schema:
984984
comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0),
985985
comfy_io.Combo.Input(
986986
"aspect_ratio",
987-
options=[i.value for i in KlingVideoGenAspectRatio],
988-
default="16:9",
987+
options=KlingVideoGenAspectRatio,
988+
default=KlingVideoGenAspectRatio.field_16_9,
989989
),
990990
comfy_io.Custom("CAMERA_CONTROL").Input(
991991
"camera_control",

comfy_api_nodes/nodes_luma.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ def define_schema(cls) -> comfy_io.Schema:
181181
),
182182
comfy_io.Combo.Input(
183183
"model",
184-
options=[model.value for model in LumaImageModel],
184+
options=LumaImageModel,
185185
),
186186
comfy_io.Combo.Input(
187187
"aspect_ratio",
188-
options=[ratio.value for ratio in LumaAspectRatio],
188+
options=LumaAspectRatio,
189189
default=LumaAspectRatio.ratio_16_9,
190190
),
191191
comfy_io.Int.Input(
@@ -366,7 +366,7 @@ def define_schema(cls) -> comfy_io.Schema:
366366
),
367367
comfy_io.Combo.Input(
368368
"model",
369-
options=[model.value for model in LumaImageModel],
369+
options=LumaImageModel,
370370
),
371371
comfy_io.Int.Input(
372372
"seed",
@@ -466,21 +466,21 @@ def define_schema(cls) -> comfy_io.Schema:
466466
),
467467
comfy_io.Combo.Input(
468468
"model",
469-
options=[model.value for model in LumaVideoModel],
469+
options=LumaVideoModel,
470470
),
471471
comfy_io.Combo.Input(
472472
"aspect_ratio",
473-
options=[ratio.value for ratio in LumaAspectRatio],
473+
options=LumaAspectRatio,
474474
default=LumaAspectRatio.ratio_16_9,
475475
),
476476
comfy_io.Combo.Input(
477477
"resolution",
478-
options=[resolution.value for resolution in LumaVideoOutputResolution],
478+
options=LumaVideoOutputResolution,
479479
default=LumaVideoOutputResolution.res_540p,
480480
),
481481
comfy_io.Combo.Input(
482482
"duration",
483-
options=[dur.value for dur in LumaVideoModelOutputDuration],
483+
options=LumaVideoModelOutputDuration,
484484
),
485485
comfy_io.Boolean.Input(
486486
"loop",
@@ -595,7 +595,7 @@ def define_schema(cls) -> comfy_io.Schema:
595595
),
596596
comfy_io.Combo.Input(
597597
"model",
598-
options=[model.value for model in LumaVideoModel],
598+
options=LumaVideoModel,
599599
),
600600
# comfy_io.Combo.Input(
601601
# "aspect_ratio",
@@ -604,7 +604,7 @@ def define_schema(cls) -> comfy_io.Schema:
604604
# ),
605605
comfy_io.Combo.Input(
606606
"resolution",
607-
options=[resolution.value for resolution in LumaVideoOutputResolution],
607+
options=LumaVideoOutputResolution,
608608
default=LumaVideoOutputResolution.res_540p,
609609
),
610610
comfy_io.Combo.Input(

comfy_api_nodes/nodes_pika.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,10 @@ def get_base_inputs_types() -> list[comfy_io.Input]:
174174
comfy_io.String.Input("negative_prompt", multiline=True),
175175
comfy_io.Int.Input("seed", min=0, max=0xFFFFFFFF, control_after_generate=True),
176176
comfy_io.Combo.Input(
177-
"resolution", options=[resolution.value for resolution in PikaResolutionEnum], default="1080p"
177+
"resolution", options=PikaResolutionEnum, default=PikaResolutionEnum.field_1080p
178178
),
179179
comfy_io.Combo.Input(
180-
"duration", options=[duration.value for duration in PikaDurationEnum], default=5
180+
"duration", options=PikaDurationEnum, default=PikaDurationEnum.integer_5
181181
),
182182
]
183183

@@ -616,7 +616,7 @@ def define_schema(cls) -> comfy_io.Schema:
616616
inputs=[
617617
comfy_io.Image.Input("image", tooltip="The reference image to apply the Pikaffect to."),
618618
comfy_io.Combo.Input(
619-
"pikaffect", options=[pikaffect.value for pikaffect in Pikaffect], default="Cake-ify"
619+
"pikaffect", options=Pikaffect, default="Cake-ify"
620620
),
621621
comfy_io.String.Input("prompt_text", multiline=True),
622622
comfy_io.String.Input("negative_prompt", multiline=True),

comfy_api_nodes/nodes_pixverse.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def define_schema(cls) -> comfy_io.Schema:
8585
display_name="PixVerse Template",
8686
category="api node/video/PixVerse",
8787
inputs=[
88-
comfy_io.Combo.Input("template", options=[list(pixverse_templates.keys())]),
88+
comfy_io.Combo.Input("template", options=list(pixverse_templates.keys())),
8989
],
9090
outputs=[comfy_io.Custom(PixverseIO.TEMPLATE).Output(display_name="pixverse_template")],
9191
)
@@ -120,20 +120,20 @@ def define_schema(cls) -> comfy_io.Schema:
120120
),
121121
comfy_io.Combo.Input(
122122
"aspect_ratio",
123-
options=[ratio.value for ratio in PixverseAspectRatio],
123+
options=PixverseAspectRatio,
124124
),
125125
comfy_io.Combo.Input(
126126
"quality",
127-
options=[resolution.value for resolution in PixverseQuality],
127+
options=PixverseQuality,
128128
default=PixverseQuality.res_540p,
129129
),
130130
comfy_io.Combo.Input(
131131
"duration_seconds",
132-
options=[dur.value for dur in PixverseDuration],
132+
options=PixverseDuration,
133133
),
134134
comfy_io.Combo.Input(
135135
"motion_mode",
136-
options=[mode.value for mode in PixverseMotionMode],
136+
options=PixverseMotionMode,
137137
),
138138
comfy_io.Int.Input(
139139
"seed",
@@ -262,16 +262,16 @@ def define_schema(cls) -> comfy_io.Schema:
262262
),
263263
comfy_io.Combo.Input(
264264
"quality",
265-
options=[resolution.value for resolution in PixverseQuality],
265+
options=PixverseQuality,
266266
default=PixverseQuality.res_540p,
267267
),
268268
comfy_io.Combo.Input(
269269
"duration_seconds",
270-
options=[dur.value for dur in PixverseDuration],
270+
options=PixverseDuration,
271271
),
272272
comfy_io.Combo.Input(
273273
"motion_mode",
274-
options=[mode.value for mode in PixverseMotionMode],
274+
options=PixverseMotionMode,
275275
),
276276
comfy_io.Int.Input(
277277
"seed",
@@ -403,16 +403,16 @@ def define_schema(cls) -> comfy_io.Schema:
403403
),
404404
comfy_io.Combo.Input(
405405
"quality",
406-
options=[resolution.value for resolution in PixverseQuality],
406+
options=PixverseQuality,
407407
default=PixverseQuality.res_540p,
408408
),
409409
comfy_io.Combo.Input(
410410
"duration_seconds",
411-
options=[dur.value for dur in PixverseDuration],
411+
options=PixverseDuration,
412412
),
413413
comfy_io.Combo.Input(
414414
"motion_mode",
415-
options=[mode.value for mode in PixverseMotionMode],
415+
options=PixverseMotionMode,
416416
),
417417
comfy_io.Int.Input(
418418
"seed",

comfy_api_nodes/nodes_runway.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,11 @@ def define_schema(cls):
200200
),
201201
comfy_io.Combo.Input(
202202
"duration",
203-
options=[model.value for model in Duration],
203+
options=Duration,
204204
),
205205
comfy_io.Combo.Input(
206206
"ratio",
207-
options=[model.value for model in RunwayGen3aAspectRatio],
207+
options=RunwayGen3aAspectRatio,
208208
),
209209
comfy_io.Int.Input(
210210
"seed",
@@ -300,11 +300,11 @@ def define_schema(cls):
300300
),
301301
comfy_io.Combo.Input(
302302
"duration",
303-
options=[model.value for model in Duration],
303+
options=Duration,
304304
),
305305
comfy_io.Combo.Input(
306306
"ratio",
307-
options=[model.value for model in RunwayGen4TurboAspectRatio],
307+
options=RunwayGen4TurboAspectRatio,
308308
),
309309
comfy_io.Int.Input(
310310
"seed",
@@ -408,11 +408,11 @@ def define_schema(cls):
408408
),
409409
comfy_io.Combo.Input(
410410
"duration",
411-
options=[model.value for model in Duration],
411+
options=Duration,
412412
),
413413
comfy_io.Combo.Input(
414414
"ratio",
415-
options=[model.value for model in RunwayGen3aAspectRatio],
415+
options=RunwayGen3aAspectRatio,
416416
),
417417
comfy_io.Int.Input(
418418
"seed",

comfy_api_nodes/nodes_stability.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ def define_schema(cls):
8282
),
8383
comfy_io.Combo.Input(
8484
"aspect_ratio",
85-
options=[x.value for x in StabilityAspectRatio],
86-
default=StabilityAspectRatio.ratio_1_1.value,
85+
options=StabilityAspectRatio,
86+
default=StabilityAspectRatio.ratio_1_1,
8787
tooltip="Aspect ratio of generated image.",
8888
),
8989
comfy_io.Combo.Input(
@@ -217,12 +217,12 @@ def define_schema(cls):
217217
),
218218
comfy_io.Combo.Input(
219219
"model",
220-
options=[x.value for x in Stability_SD3_5_Model],
220+
options=Stability_SD3_5_Model,
221221
),
222222
comfy_io.Combo.Input(
223223
"aspect_ratio",
224-
options=[x.value for x in StabilityAspectRatio],
225-
default=StabilityAspectRatio.ratio_1_1.value,
224+
options=StabilityAspectRatio,
225+
default=StabilityAspectRatio.ratio_1_1,
226226
tooltip="Aspect ratio of generated image.",
227227
),
228228
comfy_io.Combo.Input(

0 commit comments

Comments
 (0)