51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
from .angles import CAMERA_MAPS, get_qwen_prompt
|
|
|
|
# Node stable, version officielle
|
|
NODE_NAME = "QwenCameraSelector"
|
|
NODE_VERSION = "1.0.0"
|
|
|
|
class QwenCameraSelector:
|
|
|
|
CATEGORY = "Camera/Qwen"
|
|
RETURN_TYPES = ("STRING", "STRING")
|
|
RETURN_NAMES = ("prompt", "prompt_preview")
|
|
FUNCTION = "run"
|
|
OUTPUT_TOOLTIPS = (
|
|
"Prompt string for Qwen-Multiple-Angle camera settings",
|
|
"Preview of the full prompt (connect to Text Display node to see it)"
|
|
)
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
required = {}
|
|
|
|
for key in ["azimuth", "elevation", "distance"]:
|
|
map_data = CAMERA_MAPS[key]["map"]
|
|
default = CAMERA_MAPS[key]["default"]
|
|
options = [str(k) for k in map_data.keys()]
|
|
|
|
# Tooltip “friendly”
|
|
if key in ["azimuth", "elevation"]:
|
|
tooltip_lines = [f"{k}° → {v}" for k, v in map_data.items()]
|
|
else: # distance
|
|
tooltip_lines = [f"{v} ({k})" for k, v in map_data.items()]
|
|
tooltip = "\n".join(tooltip_lines)
|
|
|
|
default_key = str([k for k, v in map_data.items() if v == default][0])
|
|
required[key] = (options, {"default": default_key, "tooltip": tooltip})
|
|
|
|
return {"required": required}
|
|
|
|
def run(self, azimuth, elevation, distance):
|
|
az = int(azimuth)
|
|
el = int(elevation)
|
|
dist = distance
|
|
|
|
camera_prompt = get_qwen_prompt(az, el, dist)
|
|
final_prompt = "<sks> " + camera_prompt
|
|
|
|
# Debug console (optionnel)
|
|
print("[QwenCameraSelector] Prompt:", final_prompt)
|
|
|
|
return (final_prompt, final_prompt)
|