mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-09-07 22:37:07 +08:00
Add Pixverse and updated Kling types (#75)
This commit is contained in:
parent
3404de63a8
commit
983a1653f3
@ -1,6 +1,6 @@
|
|||||||
# generated by datamodel-codegen:
|
# generated by datamodel-codegen:
|
||||||
# filename: filtered-openapi.yaml
|
# filename: filtered-openapi.yaml
|
||||||
# timestamp: 2025-04-29T23:44:54+00:00
|
# timestamp: 2025-04-30T19:05:50+00:00
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
@ -150,43 +150,6 @@ class IdeogramGenerateResponse(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Duration(str, Enum):
|
|
||||||
field_5 = '5'
|
|
||||||
field_10 = '10'
|
|
||||||
|
|
||||||
|
|
||||||
class Mode(str, Enum):
|
|
||||||
std = 'std'
|
|
||||||
pro = 'pro'
|
|
||||||
|
|
||||||
|
|
||||||
class ModelName(str, Enum):
|
|
||||||
kling_v1 = 'kling-v1'
|
|
||||||
kling_v1_5 = 'kling-v1-5'
|
|
||||||
kling_v1_6 = 'kling-v1-6'
|
|
||||||
|
|
||||||
|
|
||||||
class KlingDualCharacterEffectInput(BaseModel):
|
|
||||||
duration: Duration = Field(
|
|
||||||
...,
|
|
||||||
description='Video Length in seconds. Both 5 and 10-second videos are supported.',
|
|
||||||
)
|
|
||||||
images: List[str] = Field(
|
|
||||||
...,
|
|
||||||
description='Reference Image Group. Must contain exactly 2 images. First image will be positioned on left side, second on right side of the composite. Each image follows the same requirements as single image effects.',
|
|
||||||
max_length=2,
|
|
||||||
min_length=2,
|
|
||||||
)
|
|
||||||
mode: Optional[Mode] = Field(
|
|
||||||
'std',
|
|
||||||
description='Video generation mode. std (Standard Mode) is cost-effective, pro (Professional Mode) generates videos with longer duration and higher quality.',
|
|
||||||
)
|
|
||||||
model_name: Optional[ModelName] = Field(
|
|
||||||
'kling-v1',
|
|
||||||
description='Model Name. Can be kling-v1, kling-v1-5, or kling-v1-6.',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class KlingErrorResponse(BaseModel):
|
class KlingErrorResponse(BaseModel):
|
||||||
code: int = Field(
|
code: int = Field(
|
||||||
...,
|
...,
|
||||||
@ -259,6 +222,11 @@ class CameraControl(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Duration(str, Enum):
|
||||||
|
field_5 = '5'
|
||||||
|
field_10 = '10'
|
||||||
|
|
||||||
|
|
||||||
class Trajectory(BaseModel):
|
class Trajectory(BaseModel):
|
||||||
x: Optional[int] = Field(
|
x: Optional[int] = Field(
|
||||||
None,
|
None,
|
||||||
@ -278,6 +246,18 @@ class DynamicMask(BaseModel):
|
|||||||
trajectories: Optional[List[Trajectory]] = None
|
trajectories: Optional[List[Trajectory]] = None
|
||||||
|
|
||||||
|
|
||||||
|
class Mode(str, Enum):
|
||||||
|
std = 'std'
|
||||||
|
pro = 'pro'
|
||||||
|
|
||||||
|
|
||||||
|
class ModelName(str, Enum):
|
||||||
|
kling_v1 = 'kling-v1'
|
||||||
|
kling_v1_5 = 'kling-v1-5'
|
||||||
|
kling_v1_6 = 'kling-v1-6'
|
||||||
|
kling_v2_master = 'kling-v2-master'
|
||||||
|
|
||||||
|
|
||||||
class KlingImage2VideoRequest(BaseModel):
|
class KlingImage2VideoRequest(BaseModel):
|
||||||
aspect_ratio: Optional[AspectRatio] = '16:9'
|
aspect_ratio: Optional[AspectRatio] = '16:9'
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
callback_url: Optional[AnyUrl] = Field(
|
||||||
@ -362,247 +342,6 @@ class KlingImage2VideoResponse(BaseModel):
|
|||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
request_id: Optional[str] = Field(None, description='Request ID')
|
||||||
|
|
||||||
|
|
||||||
class AspectRatio1(str, Enum):
|
|
||||||
field_16_9 = '16:9'
|
|
||||||
field_9_16 = '9:16'
|
|
||||||
field_1_1 = '1:1'
|
|
||||||
field_4_3 = '4:3'
|
|
||||||
field_3_4 = '3:4'
|
|
||||||
field_3_2 = '3:2'
|
|
||||||
field_2_3 = '2:3'
|
|
||||||
field_21_9 = '21:9'
|
|
||||||
|
|
||||||
|
|
||||||
class ImageReference(str, Enum):
|
|
||||||
subject = 'subject'
|
|
||||||
face = 'face'
|
|
||||||
|
|
||||||
|
|
||||||
class ModelName2(str, Enum):
|
|
||||||
kling_v1 = 'kling-v1'
|
|
||||||
kling_v1_5 = 'kling-v1-5'
|
|
||||||
|
|
||||||
|
|
||||||
class KlingImageGenerationsRequest(BaseModel):
|
|
||||||
aspect_ratio: Optional[AspectRatio1] = Field(
|
|
||||||
'16:9', description='Aspect ratio of the generated images'
|
|
||||||
)
|
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
|
||||||
None, description='The callback notification address'
|
|
||||||
)
|
|
||||||
human_fidelity: Optional[float] = Field(
|
|
||||||
0.45, description='Subject reference similarity', ge=0.0, le=1.0
|
|
||||||
)
|
|
||||||
image: Optional[str] = Field(
|
|
||||||
None, description='Reference Image - Base64 encoded string or image URL'
|
|
||||||
)
|
|
||||||
image_fidelity: Optional[float] = Field(
|
|
||||||
0.5, description='Reference intensity for user-uploaded images', ge=0.0, le=1.0
|
|
||||||
)
|
|
||||||
image_reference: Optional[ImageReference] = Field(
|
|
||||||
None, description='Image reference type'
|
|
||||||
)
|
|
||||||
model_name: Optional[ModelName2] = Field('kling-v1', description='Model Name')
|
|
||||||
n: Optional[int] = Field(1, description='Number of generated images', ge=1, le=9)
|
|
||||||
negative_prompt: Optional[str] = Field(
|
|
||||||
None, description='Negative text prompt', max_length=200
|
|
||||||
)
|
|
||||||
prompt: str = Field(..., description='Positive text prompt', max_length=500)
|
|
||||||
|
|
||||||
|
|
||||||
class Image(BaseModel):
|
|
||||||
index: Optional[int] = Field(None, description='Image Number (0-9)')
|
|
||||||
url: Optional[AnyUrl] = Field(None, description='URL for generated image')
|
|
||||||
|
|
||||||
|
|
||||||
class TaskResult1(BaseModel):
|
|
||||||
images: Optional[List[Image]] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Data1(BaseModel):
|
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
|
||||||
task_result: Optional[TaskResult1] = None
|
|
||||||
task_status: Optional[TaskStatus] = None
|
|
||||||
task_status_msg: Optional[str] = Field(None, description='Task status information')
|
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingImageGenerationsResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
|
||||||
data: Optional[Data1] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
|
||||||
|
|
||||||
|
|
||||||
class AudioType(str, Enum):
|
|
||||||
file = 'file'
|
|
||||||
url = 'url'
|
|
||||||
|
|
||||||
|
|
||||||
class Mode2(str, Enum):
|
|
||||||
text2video = 'text2video'
|
|
||||||
audio2video = 'audio2video'
|
|
||||||
|
|
||||||
|
|
||||||
class VoiceLanguage(str, Enum):
|
|
||||||
zh = 'zh'
|
|
||||||
en = 'en'
|
|
||||||
|
|
||||||
|
|
||||||
class Input(BaseModel):
|
|
||||||
audio_file: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Local Path of Audio File. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB. Base64 code.',
|
|
||||||
)
|
|
||||||
audio_type: Optional[AudioType] = Field(
|
|
||||||
None,
|
|
||||||
description='Method of Transmitting Audio Files for Lip-Sync. Required when mode is audio2video.',
|
|
||||||
)
|
|
||||||
audio_url: Optional[AnyUrl] = Field(
|
|
||||||
None,
|
|
||||||
description='Audio File Download URL. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB.',
|
|
||||||
)
|
|
||||||
mode: Mode2 = Field(
|
|
||||||
...,
|
|
||||||
description='Video Generation Mode. text2video: Text-to-video generation mode; audio2video: Audio-to-video generation mode',
|
|
||||||
)
|
|
||||||
text: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.',
|
|
||||||
)
|
|
||||||
video_id: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='The ID of the video generated by Kling AI. Only supports 5-second and 10-second videos generated within the last 30 days.',
|
|
||||||
)
|
|
||||||
video_url: Optional[AnyUrl] = Field(
|
|
||||||
None,
|
|
||||||
description='Get link for uploaded video. Video files support .mp4/.mov, file size does not exceed 100MB, video length between 2-10s.',
|
|
||||||
)
|
|
||||||
voice_id: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Voice ID. Required when mode is text2video. The system offers a variety of voice options to choose from.',
|
|
||||||
)
|
|
||||||
voice_language: Optional[VoiceLanguage] = Field(
|
|
||||||
'zh', description='The voice language corresponds to the Voice ID.'
|
|
||||||
)
|
|
||||||
voice_speed: Optional[float] = Field(
|
|
||||||
1,
|
|
||||||
description='Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.',
|
|
||||||
ge=0.8,
|
|
||||||
le=2.0,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class KlingLipSyncRequest(BaseModel):
|
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
|
||||||
None,
|
|
||||||
description='The callback notification address. Server will notify when the task status changes.',
|
|
||||||
)
|
|
||||||
input: Input
|
|
||||||
|
|
||||||
|
|
||||||
class TaskResult2(BaseModel):
|
|
||||||
videos: Optional[List[Video]] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Data2(BaseModel):
|
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
|
||||||
task_info: Optional[TaskInfo] = None
|
|
||||||
task_result: Optional[TaskResult2] = None
|
|
||||||
task_status: Optional[TaskStatus] = None
|
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingLipSyncResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
|
||||||
data: Optional[Data2] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
|
||||||
|
|
||||||
|
|
||||||
class ResourcePackType(str, Enum):
|
|
||||||
decreasing_total = 'decreasing_total'
|
|
||||||
constant_period = 'constant_period'
|
|
||||||
|
|
||||||
|
|
||||||
class Status(str, Enum):
|
|
||||||
toBeOnline = 'toBeOnline'
|
|
||||||
online = 'online'
|
|
||||||
expired = 'expired'
|
|
||||||
runOut = 'runOut'
|
|
||||||
|
|
||||||
|
|
||||||
class ResourcePackSubscribeInfo(BaseModel):
|
|
||||||
effective_time: Optional[int] = Field(
|
|
||||||
None, description='Effective time, Unix timestamp in ms'
|
|
||||||
)
|
|
||||||
invalid_time: Optional[int] = Field(
|
|
||||||
None, description='Expiration time, Unix timestamp in ms'
|
|
||||||
)
|
|
||||||
purchase_time: Optional[int] = Field(
|
|
||||||
None, description='Purchase time, Unix timestamp in ms'
|
|
||||||
)
|
|
||||||
remaining_quantity: Optional[float] = Field(
|
|
||||||
None, description='Remaining quantity (updated with a 12-hour delay)'
|
|
||||||
)
|
|
||||||
resource_pack_id: Optional[str] = Field(None, description='Resource package ID')
|
|
||||||
resource_pack_name: Optional[str] = Field(None, description='Resource package name')
|
|
||||||
resource_pack_type: Optional[ResourcePackType] = Field(
|
|
||||||
None,
|
|
||||||
description='Resource package type (decreasing_total=decreasing total, constant_period=constant periodicity)',
|
|
||||||
)
|
|
||||||
status: Optional[Status] = Field(None, description='Resource Package Status')
|
|
||||||
total_quantity: Optional[float] = Field(None, description='Total quantity')
|
|
||||||
|
|
||||||
|
|
||||||
class Data3(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code; 0 indicates success')
|
|
||||||
msg: Optional[str] = Field(None, description='Error information')
|
|
||||||
resource_pack_subscribe_infos: Optional[List[ResourcePackSubscribeInfo]] = Field(
|
|
||||||
None, description='Resource package list'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class KlingResourcePackageResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code; 0 indicates success')
|
|
||||||
data: Optional[Data3] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error information')
|
|
||||||
request_id: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Request ID, generated by the system, used to track requests and troubleshoot problems',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class Duration2(str, Enum):
|
|
||||||
field_5 = '5'
|
|
||||||
|
|
||||||
|
|
||||||
class ModelName3(str, Enum):
|
|
||||||
kling_v1_6 = 'kling-v1-6'
|
|
||||||
|
|
||||||
|
|
||||||
class KlingSingleImageEffectInput(BaseModel):
|
|
||||||
duration: Duration2 = Field(
|
|
||||||
..., description='Video Length in seconds. Only 5-second videos are supported.'
|
|
||||||
)
|
|
||||||
image: str = Field(
|
|
||||||
...,
|
|
||||||
description='Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1.',
|
|
||||||
)
|
|
||||||
model_name: ModelName3 = Field(
|
|
||||||
...,
|
|
||||||
description='Model Name. Only kling-v1-6 is supported for single image effects.',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class AspectRatio2(str, Enum):
|
|
||||||
field_16_9 = '16:9'
|
|
||||||
field_9_16 = '9:16'
|
|
||||||
field_1_1 = '1:1'
|
|
||||||
|
|
||||||
|
|
||||||
class Config1(BaseModel):
|
class Config1(BaseModel):
|
||||||
horizontal: Optional[float] = Field(None, ge=-10.0, le=10.0)
|
horizontal: Optional[float] = Field(None, ge=-10.0, le=10.0)
|
||||||
pan: Optional[float] = Field(None, ge=-10.0, le=10.0)
|
pan: Optional[float] = Field(None, ge=-10.0, le=10.0)
|
||||||
@ -617,23 +356,14 @@ class CameraControl1(BaseModel):
|
|||||||
type: Optional[Type] = Field(None, description='Predefined camera movements type')
|
type: Optional[Type] = Field(None, description='Predefined camera movements type')
|
||||||
|
|
||||||
|
|
||||||
class Duration3(str, Enum):
|
class ModelName1(str, Enum):
|
||||||
field_5 = '5'
|
|
||||||
field_10 = '10'
|
|
||||||
|
|
||||||
|
|
||||||
class Mode3(str, Enum):
|
|
||||||
std = 'std'
|
|
||||||
pro = 'pro'
|
|
||||||
|
|
||||||
|
|
||||||
class ModelName4(str, Enum):
|
|
||||||
kling_v1 = 'kling-v1'
|
kling_v1 = 'kling-v1'
|
||||||
kling_v1_6 = 'kling-v1-6'
|
kling_v1_6 = 'kling-v1-6'
|
||||||
|
kling_v2_master = 'kling-v2-master'
|
||||||
|
|
||||||
|
|
||||||
class KlingText2VideoRequest(BaseModel):
|
class KlingText2VideoRequest(BaseModel):
|
||||||
aspect_ratio: Optional[AspectRatio2] = '16:9'
|
aspect_ratio: Optional[AspectRatio] = '16:9'
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
callback_url: Optional[AnyUrl] = Field(
|
||||||
None, description='The callback notification address'
|
None, description='The callback notification address'
|
||||||
)
|
)
|
||||||
@ -641,10 +371,10 @@ class KlingText2VideoRequest(BaseModel):
|
|||||||
cfg_scale: Optional[float] = Field(
|
cfg_scale: Optional[float] = Field(
|
||||||
0.5, description='Flexibility in video generation', ge=0.0, le=1.0
|
0.5, description='Flexibility in video generation', ge=0.0, le=1.0
|
||||||
)
|
)
|
||||||
duration: Optional[Duration3] = '5'
|
duration: Optional[Duration] = '5'
|
||||||
external_task_id: Optional[str] = Field(None, description='Customized Task ID')
|
external_task_id: Optional[str] = Field(None, description='Customized Task ID')
|
||||||
mode: Optional[Mode3] = Field('std', description='Video generation mode')
|
mode: Optional[Mode] = Field('std', description='Video generation mode')
|
||||||
model_name: Optional[ModelName4] = Field('kling-v1', description='Model Name')
|
model_name: Optional[ModelName1] = Field('kling-v1', description='Model Name')
|
||||||
negative_prompt: Optional[str] = Field(
|
negative_prompt: Optional[str] = Field(
|
||||||
None, description='Negative text prompt', max_length=2500
|
None, description='Negative text prompt', max_length=2500
|
||||||
)
|
)
|
||||||
@ -653,168 +383,22 @@ class KlingText2VideoRequest(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TaskResult3(BaseModel):
|
class TaskResult1(BaseModel):
|
||||||
videos: Optional[List[Video]] = None
|
videos: Optional[List[Video]] = None
|
||||||
|
|
||||||
|
|
||||||
class Data4(BaseModel):
|
class Data1(BaseModel):
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
created_at: Optional[int] = Field(None, description='Task creation time')
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
task_id: Optional[str] = Field(None, description='Task ID')
|
||||||
task_info: Optional[TaskInfo] = None
|
task_info: Optional[TaskInfo] = None
|
||||||
task_result: Optional[TaskResult3] = None
|
task_result: Optional[TaskResult1] = None
|
||||||
task_status: Optional[TaskStatus] = None
|
task_status: Optional[TaskStatus] = None
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
updated_at: Optional[int] = Field(None, description='Task update time')
|
||||||
|
|
||||||
|
|
||||||
class KlingText2VideoResponse(BaseModel):
|
class KlingText2VideoResponse(BaseModel):
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
code: Optional[int] = Field(None, description='Error code')
|
||||||
data: Optional[Data4] = None
|
data: Optional[Data1] = None
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVideoEffectsInput(
|
|
||||||
RootModel[Union[KlingSingleImageEffectInput, KlingDualCharacterEffectInput]]
|
|
||||||
):
|
|
||||||
root: Union[KlingSingleImageEffectInput, KlingDualCharacterEffectInput]
|
|
||||||
|
|
||||||
|
|
||||||
class EffectScene(str, Enum):
|
|
||||||
bloombloom = 'bloombloom'
|
|
||||||
dizzydizzy = 'dizzydizzy'
|
|
||||||
fuzzyfuzzy = 'fuzzyfuzzy'
|
|
||||||
squish = 'squish'
|
|
||||||
expansion = 'expansion'
|
|
||||||
hug = 'hug'
|
|
||||||
kiss = 'kiss'
|
|
||||||
heart_gesture = 'heart_gesture'
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVideoEffectsRequest(BaseModel):
|
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
|
||||||
None,
|
|
||||||
description='The callback notification address for the result of this task.',
|
|
||||||
)
|
|
||||||
effect_scene: EffectScene = Field(
|
|
||||||
...,
|
|
||||||
description='Scene Name. Single Image Effects (bloombloom, dizzydizzy, fuzzyfuzzy, squish, expansion) or Dual-character Effects (hug, kiss, heart_gesture).',
|
|
||||||
)
|
|
||||||
external_task_id: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Customized Task ID. Must be unique within a single user account.',
|
|
||||||
)
|
|
||||||
input: Optional[KlingVideoEffectsInput] = None
|
|
||||||
|
|
||||||
|
|
||||||
class TaskResult4(BaseModel):
|
|
||||||
videos: Optional[List[Video]] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Data5(BaseModel):
|
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
|
||||||
task_info: Optional[TaskInfo] = None
|
|
||||||
task_result: Optional[TaskResult4] = None
|
|
||||||
task_status: Optional[TaskStatus] = None
|
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVideoEffectsResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
|
||||||
data: Optional[Data5] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVideoExtendRequest(BaseModel):
|
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
|
||||||
None,
|
|
||||||
description='The callback notification address. Server will notify when the task status changes.',
|
|
||||||
)
|
|
||||||
cfg_scale: Optional[float] = Field(
|
|
||||||
0.5,
|
|
||||||
description="Flexibility in video generation. The higher the value, the lower the model's flexibility and the stronger the relevance to the user's prompt.",
|
|
||||||
ge=0.0,
|
|
||||||
le=1.0,
|
|
||||||
)
|
|
||||||
negative_prompt: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Negative text prompt for elements to avoid in the extended video',
|
|
||||||
max_length=2500,
|
|
||||||
)
|
|
||||||
prompt: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Positive text prompt for guiding the video extension',
|
|
||||||
max_length=2500,
|
|
||||||
)
|
|
||||||
video_id: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TaskResult5(BaseModel):
|
|
||||||
videos: Optional[List[Video]] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Data6(BaseModel):
|
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
|
||||||
task_info: Optional[TaskInfo] = None
|
|
||||||
task_result: Optional[TaskResult5] = None
|
|
||||||
task_status: Optional[TaskStatus] = None
|
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVideoExtendResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
|
||||||
data: Optional[Data6] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
|
||||||
|
|
||||||
|
|
||||||
class ModelName5(str, Enum):
|
|
||||||
kolors_virtual_try_on_v1 = 'kolors-virtual-try-on-v1'
|
|
||||||
kolors_virtual_try_on_v1_5 = 'kolors-virtual-try-on-v1-5'
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVirtualTryOnRequest(BaseModel):
|
|
||||||
callback_url: Optional[AnyUrl] = Field(
|
|
||||||
None, description='The callback notification address'
|
|
||||||
)
|
|
||||||
cloth_image: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description='Reference clothing image - Base64 encoded string or image URL',
|
|
||||||
)
|
|
||||||
human_image: str = Field(
|
|
||||||
..., description='Reference human image - Base64 encoded string or image URL'
|
|
||||||
)
|
|
||||||
model_name: Optional[ModelName5] = Field(
|
|
||||||
'kolors-virtual-try-on-v1', description='Model Name'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class Image1(BaseModel):
|
|
||||||
index: Optional[int] = Field(None, description='Image Number')
|
|
||||||
url: Optional[AnyUrl] = Field(None, description='URL for generated image')
|
|
||||||
|
|
||||||
|
|
||||||
class TaskResult6(BaseModel):
|
|
||||||
images: Optional[List[Image1]] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Data7(BaseModel):
|
|
||||||
created_at: Optional[int] = Field(None, description='Task creation time')
|
|
||||||
task_id: Optional[str] = Field(None, description='Task ID')
|
|
||||||
task_result: Optional[TaskResult6] = None
|
|
||||||
task_status: Optional[TaskStatus] = None
|
|
||||||
task_status_msg: Optional[str] = Field(None, description='Task status information')
|
|
||||||
updated_at: Optional[int] = Field(None, description='Task update time')
|
|
||||||
|
|
||||||
|
|
||||||
class KlingVirtualTryOnResponse(BaseModel):
|
|
||||||
code: Optional[int] = Field(None, description='Error code')
|
|
||||||
data: Optional[Data7] = None
|
|
||||||
message: Optional[str] = Field(None, description='Error message')
|
message: Optional[str] = Field(None, description='Error message')
|
||||||
request_id: Optional[str] = Field(None, description='Request ID')
|
request_id: Optional[str] = Field(None, description='Request ID')
|
||||||
|
|
||||||
@ -938,7 +522,8 @@ class GenerationType3(str, Enum):
|
|||||||
|
|
||||||
class LumaVideoModel(str, Enum):
|
class LumaVideoModel(str, Enum):
|
||||||
ray_2 = 'ray-2'
|
ray_2 = 'ray-2'
|
||||||
ray_2_flash = 'ray-2-flash'
|
ray_flash_2 = 'ray-flash-2'
|
||||||
|
ray_1_6 = 'ray-1-6'
|
||||||
|
|
||||||
|
|
||||||
class LumaVideoModelOutputDuration1(str, Enum):
|
class LumaVideoModelOutputDuration1(str, Enum):
|
||||||
@ -993,7 +578,7 @@ class MinimaxFileRetrieveResponse(BaseModel):
|
|||||||
file: File
|
file: File
|
||||||
|
|
||||||
|
|
||||||
class Status1(str, Enum):
|
class Status(str, Enum):
|
||||||
Queueing = 'Queueing'
|
Queueing = 'Queueing'
|
||||||
Preparing = 'Preparing'
|
Preparing = 'Preparing'
|
||||||
Processing = 'Processing'
|
Processing = 'Processing'
|
||||||
@ -1007,7 +592,7 @@ class MinimaxTaskResultResponse(BaseModel):
|
|||||||
None,
|
None,
|
||||||
description='After the task status changes to Success, this field returns the file ID corresponding to the generated video.',
|
description='After the task status changes to Success, this field returns the file ID corresponding to the generated video.',
|
||||||
)
|
)
|
||||||
status: Status1 = Field(
|
status: Status = Field(
|
||||||
...,
|
...,
|
||||||
description="Task status: 'Queueing' (in queue), 'Preparing' (task is preparing), 'Processing' (generating), 'Success' (task completed successfully), or 'Fail' (task failed).",
|
description="Task status: 'Queueing' (in queue), 'Preparing' (task is preparing), 'Processing' (generating), 'Success' (task completed successfully), or 'Fail' (task failed).",
|
||||||
)
|
)
|
||||||
@ -1209,7 +794,7 @@ class OpenAIImageGenerationResponse(BaseModel):
|
|||||||
usage: Optional[Usage] = None
|
usage: Optional[Usage] = None
|
||||||
|
|
||||||
|
|
||||||
class AspectRatio3(RootModel[float]):
|
class AspectRatio2(RootModel[float]):
|
||||||
root: float = Field(
|
root: float = Field(
|
||||||
...,
|
...,
|
||||||
description='Aspect ratio (width / height)',
|
description='Aspect ratio (width / height)',
|
||||||
@ -1226,7 +811,7 @@ class IngredientsMode(str, Enum):
|
|||||||
bytes_aliased = bytes
|
bytes_aliased = bytes
|
||||||
|
|
||||||
class PikaBodyGenerate22C2vGenerate22PikascenesPost(BaseModel):
|
class PikaBodyGenerate22C2vGenerate22PikascenesPost(BaseModel):
|
||||||
aspectRatio: Optional[AspectRatio3] = Field(
|
aspectRatio: Optional[AspectRatio2] = Field(
|
||||||
None, description='Aspect ratio (width / height)', title='Aspectratio'
|
None, description='Aspect ratio (width / height)', title='Aspectratio'
|
||||||
)
|
)
|
||||||
duration: Optional[int] = Field(5, title='Duration')
|
duration: Optional[int] = Field(5, title='Duration')
|
||||||
@ -1261,7 +846,7 @@ class PikaBodyGenerate22KeyframeGenerate22PikaframesPost(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class PikaBodyGenerate22T2vGenerate22T2vPost(BaseModel):
|
class PikaBodyGenerate22T2vGenerate22T2vPost(BaseModel):
|
||||||
aspectRatio: Optional[AspectRatio3] = Field(
|
aspectRatio: Optional[AspectRatio2] = Field(
|
||||||
None, description='Aspect ratio (width / height)', title='Aspectratio'
|
None, description='Aspect ratio (width / height)', title='Aspectratio'
|
||||||
)
|
)
|
||||||
duration: Optional[int] = Field(5, title='Duration')
|
duration: Optional[int] = Field(5, title='Duration')
|
||||||
@ -1288,7 +873,169 @@ class PikaVideoResponse(BaseModel):
|
|||||||
url: str = Field(..., title='Url')
|
url: str = Field(..., title='Url')
|
||||||
|
|
||||||
|
|
||||||
|
class Resp(BaseModel):
|
||||||
|
img_id: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseImageUploadResponse(BaseModel):
|
||||||
|
ErrCode: Optional[int] = None
|
||||||
|
ErrMsg: Optional[str] = None
|
||||||
|
Resp_1: Optional[Resp] = Field(None, alias='Resp')
|
||||||
|
|
||||||
|
|
||||||
|
class Duration2(int, Enum):
|
||||||
|
integer_5 = 5
|
||||||
|
integer_8 = 8
|
||||||
|
|
||||||
|
|
||||||
|
class Model1(str, Enum):
|
||||||
|
v3_5 = 'v3.5'
|
||||||
|
|
||||||
|
|
||||||
|
class MotionMode(str, Enum):
|
||||||
|
normal = 'normal'
|
||||||
|
fast = 'fast'
|
||||||
|
|
||||||
|
|
||||||
|
class Quality1(str, Enum):
|
||||||
|
field_360p = '360p'
|
||||||
|
field_540p = '540p'
|
||||||
|
field_720p = '720p'
|
||||||
|
field_1080p = '1080p'
|
||||||
|
|
||||||
|
|
||||||
|
class Style1(str, Enum):
|
||||||
|
anime = 'anime'
|
||||||
|
field_3d_animation = '3d_animation'
|
||||||
|
clay = 'clay'
|
||||||
|
comic = 'comic'
|
||||||
|
cyberpunk = 'cyberpunk'
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseImageVideoRequest(BaseModel):
|
||||||
|
duration: Duration2
|
||||||
|
img_id: int
|
||||||
|
model: Model1
|
||||||
|
motion_mode: Optional[MotionMode] = None
|
||||||
|
prompt: str
|
||||||
|
quality: Quality1
|
||||||
|
seed: Optional[int] = None
|
||||||
|
style: Optional[Style1] = None
|
||||||
|
template_id: Optional[int] = None
|
||||||
|
water_mark: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
|
class AspectRatio4(str, Enum):
|
||||||
|
field_16_9 = '16:9'
|
||||||
|
field_4_3 = '4:3'
|
||||||
|
field_1_1 = '1:1'
|
||||||
|
field_3_4 = '3:4'
|
||||||
|
field_9_16 = '9:16'
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseTextVideoRequest(BaseModel):
|
||||||
|
aspect_ratio: AspectRatio4
|
||||||
|
duration: Duration2
|
||||||
|
model: Model1
|
||||||
|
motion_mode: Optional[MotionMode] = None
|
||||||
|
negative_prompt: Optional[str] = None
|
||||||
|
prompt: str
|
||||||
|
quality: Quality1
|
||||||
|
seed: Optional[int] = None
|
||||||
|
style: Optional[Style1] = None
|
||||||
|
template_id: Optional[int] = None
|
||||||
|
water_mark: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseTransitionVideoRequest(BaseModel):
|
||||||
|
duration: Duration2
|
||||||
|
first_frame_img: int
|
||||||
|
last_frame_img: int
|
||||||
|
model: Model1
|
||||||
|
motion_mode: MotionMode
|
||||||
|
prompt: str
|
||||||
|
quality: Quality1
|
||||||
|
seed: int
|
||||||
|
style: Optional[Style1] = None
|
||||||
|
template_id: Optional[int] = None
|
||||||
|
water_mark: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
|
class Resp1(BaseModel):
|
||||||
|
video_id: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseVideoResponse(BaseModel):
|
||||||
|
ErrCode: Optional[int] = None
|
||||||
|
ErrMsg: Optional[str] = None
|
||||||
|
Resp: Optional[Resp1] = None
|
||||||
|
|
||||||
|
|
||||||
|
class Status1(int, Enum):
|
||||||
|
integer_1 = 1
|
||||||
|
integer_5 = 5
|
||||||
|
integer_6 = 6
|
||||||
|
integer_7 = 7
|
||||||
|
integer_8 = 8
|
||||||
|
|
||||||
|
|
||||||
|
class Resp2(BaseModel):
|
||||||
|
create_time: Optional[str] = None
|
||||||
|
id: Optional[int] = None
|
||||||
|
modify_time: Optional[str] = None
|
||||||
|
negative_prompt: Optional[str] = None
|
||||||
|
outputHeight: Optional[int] = None
|
||||||
|
outputWidth: Optional[int] = None
|
||||||
|
prompt: Optional[str] = None
|
||||||
|
resolution_ratio: Optional[int] = None
|
||||||
|
seed: Optional[int] = None
|
||||||
|
size: Optional[int] = None
|
||||||
|
status: Optional[Status1] = Field(
|
||||||
|
None,
|
||||||
|
description='Video generation status codes:\n* 1 - Generation successful\n* 5 - Generating\n* 6 - Deleted\n* 7 - Contents moderation failed\n* 8 - Generation failed\n',
|
||||||
|
)
|
||||||
|
style: Optional[str] = None
|
||||||
|
url: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class PixverseVideoResultResponse(BaseModel):
|
||||||
|
ErrCode: Optional[int] = None
|
||||||
|
ErrMsg: Optional[str] = None
|
||||||
|
Resp: Optional[Resp2] = None
|
||||||
|
|
||||||
|
|
||||||
|
class RGBColorItem(RootModel[int]):
|
||||||
|
root: int = Field(..., ge=0, le=255)
|
||||||
|
|
||||||
|
|
||||||
|
class RGBColor(RootModel[List[RGBColorItem]]):
|
||||||
|
root: List[RGBColorItem] = Field(
|
||||||
|
...,
|
||||||
|
description='RGB color values',
|
||||||
|
examples=[[255, 0, 0]],
|
||||||
|
max_length=3,
|
||||||
|
min_length=3,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Controls(BaseModel):
|
||||||
|
artistic_level: Optional[int] = Field(
|
||||||
|
None,
|
||||||
|
description='Defines artistic tone of your image. At a simple level, the person looks straight at the camera in a static and clean style. Dynamic and eccentric levels introduce movement and creativity.',
|
||||||
|
ge=0,
|
||||||
|
le=5,
|
||||||
|
)
|
||||||
|
background_color: Optional[RGBColor] = None
|
||||||
|
colors: Optional[List[RGBColor]] = Field(
|
||||||
|
None, description='An array of preferable colors'
|
||||||
|
)
|
||||||
|
no_text: Optional[bool] = Field(None, description='Do not embed text layouts')
|
||||||
|
|
||||||
|
|
||||||
class RecraftImageGenerationRequest(BaseModel):
|
class RecraftImageGenerationRequest(BaseModel):
|
||||||
|
controls: Optional[Controls] = Field(
|
||||||
|
None, description='The controls for the generated image'
|
||||||
|
)
|
||||||
model: str = Field(
|
model: str = Field(
|
||||||
..., description='The model to use for generation (e.g., "recraftv3")'
|
..., description='The model to use for generation (e.g., "recraftv3")'
|
||||||
)
|
)
|
||||||
@ -1400,7 +1147,7 @@ class Error(BaseModel):
|
|||||||
message: Optional[str] = Field(None, description='Error message')
|
message: Optional[str] = Field(None, description='Error message')
|
||||||
|
|
||||||
|
|
||||||
class Video5(BaseModel):
|
class Video2(BaseModel):
|
||||||
bytesBase64Encoded: Optional[str] = Field(
|
bytesBase64Encoded: Optional[str] = Field(
|
||||||
None, description='Base64-encoded video content'
|
None, description='Base64-encoded video content'
|
||||||
)
|
)
|
||||||
@ -1422,7 +1169,7 @@ class Response(BaseModel):
|
|||||||
raiMediaFilteredReasons: Optional[List[str]] = Field(
|
raiMediaFilteredReasons: Optional[List[str]] = Field(
|
||||||
None, description='Reasons why media was filtered by responsible AI policies'
|
None, description='Reasons why media was filtered by responsible AI policies'
|
||||||
)
|
)
|
||||||
videos: Optional[List[Video5]] = None
|
videos: Optional[List[Video2]] = None
|
||||||
|
|
||||||
|
|
||||||
class Veo2GenVidPollResponse(BaseModel):
|
class Veo2GenVidPollResponse(BaseModel):
|
||||||
@ -1436,20 +1183,20 @@ class Veo2GenVidPollResponse(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Image2(BaseModel):
|
class Image(BaseModel):
|
||||||
bytesBase64Encoded: str
|
bytesBase64Encoded: str
|
||||||
gcsUri: Optional[str] = None
|
gcsUri: Optional[str] = None
|
||||||
mimeType: Optional[str] = None
|
mimeType: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class Image3(BaseModel):
|
class Image1(BaseModel):
|
||||||
bytesBase64Encoded: Optional[str] = None
|
bytesBase64Encoded: Optional[str] = None
|
||||||
gcsUri: str
|
gcsUri: str
|
||||||
mimeType: Optional[str] = None
|
mimeType: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class Instance(BaseModel):
|
class Instance(BaseModel):
|
||||||
image: Optional[Union[Image2, Image3]] = Field(
|
image: Optional[Union[Image, Image1]] = Field(
|
||||||
None, description='Optional image to guide video generation'
|
None, description='Optional image to guide video generation'
|
||||||
)
|
)
|
||||||
prompt: str = Field(..., description='Text description of the video')
|
prompt: str = Field(..., description='Text description of the video')
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
from inspect import cleandoc
|
|
||||||
from typing import Union, Optional
|
from typing import Union, Optional
|
||||||
import math
|
import math
|
||||||
import logging
|
import logging
|
||||||
@ -128,7 +127,7 @@ def _get_camera_control_inputs() -> dict[str, tuple[IO, InputTypeOptions]]:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class KlingNodeABC(ComfyNodeABC):
|
class KlingNodeBase(ComfyNodeABC):
|
||||||
"""Base class for Kling nodes."""
|
"""Base class for Kling nodes."""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -162,13 +161,12 @@ class KlingNodeABC(ComfyNodeABC):
|
|||||||
return "Invalid camera control configs"
|
return "Invalid camera control configs"
|
||||||
return True
|
return True
|
||||||
|
|
||||||
DESCRIPTION = cleandoc(__doc__ or "")
|
|
||||||
FUNCTION = "api_call"
|
FUNCTION = "api_call"
|
||||||
CATEGORY = "api node/video/Kling"
|
CATEGORY = "api node/video/Kling"
|
||||||
API_NODE = True
|
API_NODE = True
|
||||||
|
|
||||||
|
|
||||||
class KlingTextToVideoNode(KlingNodeABC):
|
class KlingTextToVideoNode(KlingNodeBase):
|
||||||
"""
|
"""
|
||||||
Kling Text to Video Node.
|
Kling Text to Video Node.
|
||||||
"""
|
"""
|
||||||
@ -227,6 +225,7 @@ class KlingTextToVideoNode(KlingNodeABC):
|
|||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TYPES = ("VIDEO",)
|
RETURN_TYPES = ("VIDEO",)
|
||||||
|
DESCRIPTION = "Kling Text to Video Node"
|
||||||
|
|
||||||
def api_call(
|
def api_call(
|
||||||
self,
|
self,
|
||||||
@ -301,7 +300,7 @@ class KlingTextToVideoNode(KlingNodeABC):
|
|||||||
return download_url_to_video_output(video_url)
|
return download_url_to_video_output(video_url)
|
||||||
|
|
||||||
|
|
||||||
class KlingImage2VideoNode(KlingNodeABC):
|
class KlingImage2VideoNode(KlingNodeBase):
|
||||||
"""
|
"""
|
||||||
Kling Image to Video Node.
|
Kling Image to Video Node.
|
||||||
"""
|
"""
|
||||||
@ -372,6 +371,7 @@ class KlingImage2VideoNode(KlingNodeABC):
|
|||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TYPES = ("VIDEO",)
|
RETURN_TYPES = ("VIDEO",)
|
||||||
|
DESCRIPTION = "Kling Image to Video Node"
|
||||||
|
|
||||||
def api_call(
|
def api_call(
|
||||||
self,
|
self,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user