mirror of
https://github.com/karl0ss/ai_image_frame_server.git
synced 2025-08-05 09:58:28 +01:00
94 lines
3.0 KiB
Python
94 lines
3.0 KiB
Python
import random
|
|
import logging
|
|
import nest_asyncio
|
|
from libs.generic import load_recent_prompts, load_config
|
|
import re
|
|
from openwebui_chat_client import OpenWebUIClient
|
|
from datetime import datetime
|
|
|
|
nest_asyncio.apply()
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
LOG_FILE = "./prompts_log.jsonl"
|
|
|
|
user_config = load_config()
|
|
output_folder = user_config["comfyui"]["output_dir"]
|
|
|
|
def create_prompt_on_openwebui(prompt: str, topic: str = "random", model: str = None) -> str:
|
|
"""Sends prompt to OpenWebui and returns the generated response."""
|
|
topic_instruction = ""
|
|
selected_topic = ""
|
|
# Unique list of recent prompts
|
|
recent_prompts = list(set(load_recent_prompts()))
|
|
if topic == "random":
|
|
topics = [t.strip() for t in user_config["comfyui"]["topics"].split(",") if t.strip()]
|
|
selected_topic = random.choice(topics)
|
|
elif topic != "":
|
|
selected_topic = topic
|
|
else:
|
|
# Decide on whether to include a topic (e.g., 30% chance to include)
|
|
topics = [t.strip() for t in user_config["comfyui"]["topics"].split(",") if t.strip()]
|
|
if random.random() < 0.3 and topics:
|
|
selected_topic = random.choice(topics)
|
|
if selected_topic != "":
|
|
topic_instruction = f" Incorporate the theme of '{selected_topic}' into the new prompt."
|
|
|
|
user_content = (
|
|
"Can you generate me a really random image idea, Do not exceed 10 words. Use clear language, not poetic metaphors."
|
|
+ topic_instruction
|
|
+ "Avoid prompts similar to the following:"
|
|
+ "\n".join(f"{i+1}. {p}" for i, p in enumerate(recent_prompts))
|
|
)
|
|
|
|
if model:
|
|
# Use the specified model
|
|
model = model
|
|
else:
|
|
# Select a random model
|
|
model = random.choice(user_config["openwebui"]["models"].split(",")).strip()
|
|
|
|
# Create OpenWebUI client
|
|
client = OpenWebUIClient(
|
|
base_url=user_config["openwebui"]["base_url"],
|
|
token=user_config["openwebui"]["api_key"],
|
|
default_model_id=model
|
|
)
|
|
|
|
# Prepare messages for the chat
|
|
messages = [
|
|
{
|
|
"role": "system",
|
|
"content": (
|
|
"You are a prompt generator for Stable Diffusion. "
|
|
"Generate a detailed and imaginative prompt with a strong visual theme. "
|
|
"Focus on lighting, atmosphere, and artistic style. "
|
|
"Keep the prompt concise, no extra commentary or formatting."
|
|
),
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": user_content,
|
|
},
|
|
]
|
|
|
|
# Send the chat request
|
|
result = client.chat(
|
|
question=user_content,
|
|
chat_title=datetime.now().strftime("%Y-%m-%d %H:%M"),
|
|
folder_name="ai-frame-image-server"
|
|
)
|
|
|
|
if result:
|
|
prompt = result["response"].strip('"')
|
|
else:
|
|
# Fallback if the request fails
|
|
prompt = "A vibrant landscape"
|
|
|
|
match = re.search(r'"([^"]+)"', prompt)
|
|
if not match:
|
|
match = re.search(r":\s*\n*\s*(.+)", prompt)
|
|
if match:
|
|
prompt = match.group(1)
|
|
logging.debug(prompt)
|
|
return prompt |