100 lines
3.7 KiB
Python
100 lines
3.7 KiB
Python
"""
|
|
K3 图生视频 自研节点(方案A:经典 INPUT_TYPES 前端壳子)
|
|
复刻 Kling 3.0 Video 的前端参数,多镜头通过下拉选择控制分镜数量。
|
|
后端请求尚未实现。
|
|
"""
|
|
|
|
try:
|
|
from comfy_api.latest import InputImpl
|
|
import folder_paths
|
|
_FOLDER_PATHS_OK = True
|
|
except Exception:
|
|
_FOLDER_PATHS_OK = False
|
|
|
|
|
|
# ── 常量 ──────────────────────────────────────────────────────────────────────
|
|
|
|
_MULTI_SHOT_OPTIONS = [
|
|
"disabled",
|
|
"1 storyboard",
|
|
"2 storyboards",
|
|
"3 storyboards",
|
|
"4 storyboards",
|
|
"5 storyboards",
|
|
"6 storyboards",
|
|
]
|
|
|
|
_MODELS = ["kling-v3"]
|
|
_MODES = ["std", "pro", "4k"]
|
|
|
|
|
|
# ── 节点 ──────────────────────────────────────────────────────────────────────
|
|
|
|
class K3Video:
|
|
"""K3 图生视频 自研(前端壳子,后端待实现)"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
required = {
|
|
# 多镜头模式选择
|
|
"多镜头": (_MULTI_SHOT_OPTIONS, {
|
|
"default": "disabled",
|
|
"tooltip": "disabled:单段模式;N storyboards:启用 N 段分镜。",
|
|
}),
|
|
# 单段模式字段(多镜头 disabled 时使用)
|
|
"提示词": ("STRING", {"multiline": True, "default": ""}),
|
|
"负向提示词": ("STRING", {"multiline": True, "default": ""}),
|
|
"时长": ([5, 10, 15], {
|
|
"default": 5,
|
|
"tooltip": "单段模式时长(秒);多镜头模式下由各分镜时长决定。",
|
|
}),
|
|
# 通用参数
|
|
"生成音频": (["关闭", "打开"], {"default": "关闭"}),
|
|
"模型": (_MODELS, {"default": "kling-v3"}),
|
|
"模式": (_MODES, {"default": "std"}),
|
|
"seed": ("INT", {
|
|
"default": 0, "min": 0, "max": 2147483647,
|
|
"tooltip": "seed 仅控制节点是否重新运行,结果本身不可复现。",
|
|
}),
|
|
}
|
|
|
|
# 分镜字段放最后,按 分镜N_提示词 / 分镜N_时长 交替排列
|
|
for i in range(1, 7):
|
|
required[f"分镜{i}_提示词"] = ("STRING", {
|
|
"multiline": True, "default": "",
|
|
"tooltip": f"第 {i} 段分镜提示词,最多 512 字符。",
|
|
})
|
|
required[f"分镜{i}_时长"] = ("INT", {
|
|
"default": 4, "min": 1, "max": 15,
|
|
"display": "slider",
|
|
"tooltip": f"第 {i} 段分镜时长(秒)。",
|
|
})
|
|
|
|
optional = {
|
|
"起始帧": ("IMAGE",),
|
|
"尾帧": ("IMAGE",),
|
|
}
|
|
|
|
return {"required": required, "optional": optional}
|
|
|
|
RETURN_TYPES = ("VIDEO",)
|
|
RETURN_NAMES = ("视频",)
|
|
FUNCTION = "generate"
|
|
CATEGORY = "comfyui_o1key/KVideo"
|
|
|
|
async def generate(self, 多镜头, 提示词, 负向提示词, 时长,
|
|
生成音频, 模型, 模式, seed,
|
|
起始帧=None, 尾帧=None, **kwargs):
|
|
raise NotImplementedError("K3 图生视频 自研:后端尚未实现。")
|
|
|
|
|
|
# ── 节点注册 ──────────────────────────────────────────────────────────────────
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"K3Video": K3Video,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"K3Video": "K3 图生视频 自研",
|
|
}
|