Add pose selector: pick from world JSON

This commit is contained in:
zeeoale
2026-02-06 16:19:40 +01:00
parent c3ca0ad156
commit eccbaf05d2
+38 -2
View File
@@ -48,7 +48,6 @@ class PromptCreatorNode:
"required": {
"json_name": (sorted(json_files),),
"camera_angle": (camera_angle_list,),
"use_enhancer": (["none", "ollama","llamacpp", "openai", "cohere", "gemini"],),
"enhancer_mode": (enhancer_modes,),
"system_prompt_lock": (["auto", "external"], {"default": "auto"}),
@@ -62,6 +61,8 @@ class PromptCreatorNode:
"custom_intro_id": (["Random","0","1","2","3","4","5","6"], {"default":"Random"}),
"horror_intensity": (["auto"] + [str(i) for i in range(11)],),
"sensuality_level": (["auto", "0", "1", "2", "3"],),
"pose_mode": (["random", "world_pick", "lock"], {"default": "random"}),
"pose_index": ("INT", {"default": 0, "min": 0, "max": 200, "step": 1}),
"lora_triggers": ("STRING", {"default": ""}),
"subject_count": (["1", "2", "3"],),
"lock_last_prompt": (["no", "yes"], {"default": "no"}),
@@ -269,6 +270,7 @@ class PromptCreatorNode:
"system_prompt", "world_name",
"custom_intro",
"camera_angles", "camera_angle",
"poses"
]:
continue
if isinstance(values, list) and values:
@@ -528,7 +530,7 @@ class PromptCreatorNode:
def generate_prompt(self, json_name, camera_angle, use_enhancer, enhancer_mode, system_prompt_lock, add_symbols, seed, gender, identity_profile, external_identity, lock_identity, custom_intro, custom_intro_id, horror_intensity, sensuality_level, lora_triggers, subject_count, lock_last_prompt, multi_object_count, ollama_host, ollama_model):
def generate_prompt(self, json_name, camera_angle, use_enhancer, enhancer_mode, system_prompt_lock, add_symbols, seed, gender, identity_profile, external_identity, lock_identity, custom_intro, custom_intro_id, horror_intensity, sensuality_level, pose_mode, pose_index, lora_triggers, subject_count, lock_last_prompt, multi_object_count, ollama_host, ollama_model):
base_path = os.path.dirname(__file__)
json_path = os.path.join(base_path, "JSON_DATA", json_name)
@@ -590,6 +592,40 @@ class PromptCreatorNode:
prompt = self._build_prompt_from_json(
data, gender, custom_intro, custom_intro_id, horror_intensity, sensuality_level, subject_count, multi_object_count, camera_angle_txt=camera_angle_txt
)
# --- POSE CONTROL ---
poses = data.get("POSES") or data.get("poses") or []
poses = poses if isinstance(poses, list) else []
pose_path = os.path.join(base_path, "history", f"last_pose_{json_name}.txt")
def pick_pose_by_index(i):
if not poses:
return ""
i = max(0, min(int(i), len(poses) - 1))
return str(poses[i]).strip()
chosen_pose = ""
if pose_mode == "world_pick":
chosen_pose = pick_pose_by_index(pose_index)
elif pose_mode == "lock":
if os.path.exists(pose_path):
with open(pose_path, "r", encoding="utf-8") as f:
chosen_pose = f.read().strip()
if not chosen_pose:
chosen_pose = pick_pose_by_index(pose_index)
else: # random
if poses:
chosen_pose = random.choice(poses).strip()
if chosen_pose:
prompt = prompt + ", " + chosen_pose
os.makedirs(os.path.dirname(pose_path), exist_ok=True)
with open(pose_path, "w", encoding="utf-8") as f:
f.write(chosen_pose)
# --- END POSE CONTROL ---
if identity_txt:
prompt = prompt + ", " + identity_txt