129 lines
4.4 KiB
Python
129 lines
4.4 KiB
Python
"""
|
|
Camera Control Prompt Node for ComfyUI
|
|
Optimized for dx8152's MultiAngle LoRA
|
|
|
|
Author: Lorenzo Mercu
|
|
Description: Advanced camera control prompt generator
|
|
Features: Multi-directional camera movements, rotations, and special views
|
|
Optimized for: dx8152's MultiAngle LoRA
|
|
"""
|
|
|
|
|
|
class CameraControlPromptNode:
|
|
"""
|
|
Advanced camera control prompt generator for ComfyUI.
|
|
Converts camera parameters into bilingual prompts (Chinese + English).
|
|
Optimized for dx8152's MultiAngle LoRA workflow.
|
|
"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
# MOVIMENTO ORIZZONTALE (left/right) - Dropdown
|
|
"move_horizontal": ("COMBO", {
|
|
"default": "none",
|
|
"options": ["none", "left", "right"]
|
|
}),
|
|
|
|
# MOVIMENTO VERTICALE (up/down) - Dropdown
|
|
"move_vertical": ("COMBO", {
|
|
"default": "none",
|
|
"options": ["none", "up", "down"]
|
|
}),
|
|
|
|
# MOVIMENTO FORWARD - Dropdown
|
|
"move_forward": ("COMBO", {
|
|
"default": "no",
|
|
"options": ["no", "yes"]
|
|
}),
|
|
|
|
# ROTATE SLIDER (-90 a 90, step 45)
|
|
"rotate": ("INT", {
|
|
"default": 0,
|
|
"min": -90,
|
|
"max": 90,
|
|
"step": 45,
|
|
"display": "slider"
|
|
}),
|
|
|
|
# VISTE SPECIALI - Bottoni On/Off
|
|
"view_top_down": ("BOOLEAN", {
|
|
"default": False
|
|
}),
|
|
"view_wide_angle": ("BOOLEAN", {
|
|
"default": False
|
|
}),
|
|
"view_close_up": ("BOOLEAN", {
|
|
"default": False
|
|
}),
|
|
"view_bottom_up": ("BOOLEAN", {
|
|
"default": False
|
|
}),
|
|
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING",)
|
|
RETURN_NAMES = ("prompt",)
|
|
FUNCTION = "generate_prompt"
|
|
CATEGORY = "prompt/camera"
|
|
|
|
def generate_prompt(self, move_horizontal, move_vertical, move_forward, rotate, view_top_down, view_wide_angle, view_close_up, view_bottom_up):
|
|
"""Genera il prompt basato sui parametri camera"""
|
|
|
|
prompt_parts = []
|
|
|
|
# MOVIMENTO ORIZZONTALE (Dropdown: none, left, right)
|
|
if move_horizontal == "left":
|
|
prompt_parts.append("将镜头向左移动 Move the camera left.")
|
|
elif move_horizontal == "right":
|
|
prompt_parts.append("将镜头向右移动 Move the camera right.")
|
|
|
|
# MOVIMENTO VERTICALE (Dropdown: none, up, down)
|
|
if move_vertical == "up":
|
|
prompt_parts.append("将镜头向上移动 Move the camera up.")
|
|
elif move_vertical == "down":
|
|
prompt_parts.append("将镜头向下移动 Move the camera down.")
|
|
|
|
# MOVIMENTO FORWARD (Dropdown: no, yes)
|
|
if move_forward == "yes":
|
|
prompt_parts.append("将镜头向前移动 Move the camera forward.")
|
|
|
|
# ROTATE SLIDER (dynamic label based on value)
|
|
if rotate < 0:
|
|
degrees = abs(rotate)
|
|
prompt_parts.append(f"将镜头向左旋转{degrees}度 Rotate the camera {degrees} degrees to the left.")
|
|
elif rotate > 0:
|
|
degrees = rotate
|
|
prompt_parts.append(f"将镜头向右旋转{degrees}度 Rotate the camera {degrees} degrees to the right.")
|
|
# Se rotate == 0, non aggiunge niente
|
|
|
|
# VISTE SPECIALI (Bottoni On/Off)
|
|
if view_top_down:
|
|
prompt_parts.append("将镜头转为俯视 Turn the camera to a top-down view.")
|
|
|
|
if view_wide_angle:
|
|
prompt_parts.append("将镜头转为广角镜头 Turn the camera to a wide-angle lens.")
|
|
|
|
if view_close_up:
|
|
prompt_parts.append("将镜头转为特写镜头 Turn the camera to a close-up.")
|
|
|
|
if view_bottom_up:
|
|
prompt_parts.append("將相機方向調整為由下而上的視角 Turn the camera to a bottom-up view.")
|
|
|
|
# Concatena tutte le parti con spazio
|
|
final_prompt = " ".join(prompt_parts)
|
|
|
|
return (final_prompt,)
|
|
|
|
|
|
# Mappings per ComfyUI
|
|
NODE_CLASS_MAPPINGS = {
|
|
"CameraControlPromptNode": CameraControlPromptNode
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"CameraControlPromptNode": "Camera Control Prompt Generator"
|
|
}
|