Upload 2 files
Browse files- gerador_prompt.py +171 -49
- listas_prompts.py +213 -160
gerador_prompt.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
| 1 |
# -*- coding: utf-8 -*-
|
| 2 |
import tkinter as tk
|
| 3 |
-
from tkinter import scrolledtext, filedialog, ttk
|
| 4 |
-
import random, json
|
| 5 |
from safetensors import safe_open
|
| 6 |
|
| 7 |
# importa listas
|
| 8 |
-
from listas_prompts import corpos_exemplo, cenarios_exemplo, posicoes_exemplo, lighting_prompts
|
|
|
|
|
|
|
| 9 |
|
| 10 |
|
| 11 |
class PromptGeneratorApp:
|
|
@@ -13,6 +15,10 @@ class PromptGeneratorApp:
|
|
| 13 |
self.root = root
|
| 14 |
self.root.title("Gerador Automático de Prompts")
|
| 15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
# Notebook com abas
|
| 17 |
self.notebook = ttk.Notebook(root)
|
| 18 |
self.notebook.pack(fill="both", expand=True)
|
|
@@ -25,24 +31,37 @@ class PromptGeneratorApp:
|
|
| 25 |
self.tab_keywords = tk.Frame(self.notebook)
|
| 26 |
self.notebook.add(self.tab_keywords, text="Localizador de Keywords (LoRA)")
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
self.build_prompt_tab()
|
| 29 |
self.build_keywords_tab()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
# ----------------- Aba 1 -----------------
|
| 32 |
def build_prompt_tab(self):
|
| 33 |
-
# Bloco 1 - Corpo
|
| 34 |
self.frame_corpo = self.create_block(self.tab_prompt, "Corpo", corpos_exemplo, 0)
|
| 35 |
-
|
| 36 |
-
# Bloco 2 - Cenário
|
| 37 |
self.frame_cenario = self.create_block(self.tab_prompt, "Cenário", cenarios_exemplo, 1)
|
| 38 |
-
|
| 39 |
-
# Bloco 3 - Posição
|
| 40 |
self.frame_posicao = self.create_block(self.tab_prompt, "Posição", posicoes_exemplo, 2)
|
| 41 |
-
|
| 42 |
-
# Bloco 4 - Iluminação
|
| 43 |
self.frame_lighting = self.create_block(self.tab_prompt, "Iluminação", lighting_prompts, 3)
|
| 44 |
|
| 45 |
-
# Botão gerar
|
| 46 |
self.btn_generate = tk.Button(
|
| 47 |
self.tab_prompt, text="Gerar Prompt Final",
|
| 48 |
command=self.generate_prompt,
|
|
@@ -50,13 +69,11 @@ class PromptGeneratorApp:
|
|
| 50 |
)
|
| 51 |
self.btn_generate.grid(row=4, column=0, columnspan=3, pady=10, sticky="nsew")
|
| 52 |
|
| 53 |
-
# Caixa resultado
|
| 54 |
self.output = scrolledtext.ScrolledText(
|
| 55 |
self.tab_prompt, wrap=tk.WORD, width=100, height=10, font=("Arial", 10)
|
| 56 |
)
|
| 57 |
self.output.grid(row=5, column=0, columnspan=3, padx=10, pady=10)
|
| 58 |
|
| 59 |
-
# Botão copiar
|
| 60 |
self.btn_copy = tk.Button(
|
| 61 |
self.tab_prompt, text="Copiar para Área de Transferência",
|
| 62 |
command=self.copy_to_clipboard,
|
|
@@ -65,22 +82,17 @@ class PromptGeneratorApp:
|
|
| 65 |
self.btn_copy.grid(row=6, column=0, columnspan=3, pady=5, sticky="nsew")
|
| 66 |
|
| 67 |
def create_block(self, parent, title, data_list, row):
|
| 68 |
-
frame = tk.LabelFrame(
|
| 69 |
-
parent, text=title, padx=10, pady=10, font=("Arial", 11, "bold")
|
| 70 |
-
)
|
| 71 |
frame.grid(row=row, column=0, columnspan=3, padx=10, pady=5, sticky="ew")
|
| 72 |
|
| 73 |
-
# Campo de texto multilinha
|
| 74 |
text_entry = tk.Text(frame, width=80, height=4, font=("Arial", 10), wrap=tk.WORD)
|
| 75 |
text_entry.grid(row=0, column=0, padx=5, pady=5)
|
| 76 |
|
| 77 |
-
# Palavras-chave extras
|
| 78 |
keywords_label = tk.Label(frame, text="Palavras-chave:")
|
| 79 |
keywords_label.grid(row=1, column=0, sticky="w", padx=5)
|
| 80 |
keywords_entry = tk.Entry(frame, width=80, font=("Arial", 9))
|
| 81 |
keywords_entry.grid(row=2, column=0, padx=5, pady=3)
|
| 82 |
|
| 83 |
-
# Peso
|
| 84 |
weight_label = tk.Label(frame, text="Peso:")
|
| 85 |
weight_label.grid(row=0, column=1, padx=5)
|
| 86 |
weight = tk.DoubleVar(value=1.0)
|
|
@@ -88,13 +100,11 @@ class PromptGeneratorApp:
|
|
| 88 |
textvariable=weight, width=5)
|
| 89 |
weight_spin.grid(row=0, column=2, padx=5)
|
| 90 |
|
| 91 |
-
# Botão Random
|
| 92 |
def set_random():
|
| 93 |
text_entry.delete("1.0", tk.END)
|
| 94 |
text_entry.insert(tk.END, random.choice(data_list))
|
| 95 |
|
| 96 |
-
random_btn = tk.Button(frame, text="Random",
|
| 97 |
-
command=set_random, bg="#2196F3", fg="white")
|
| 98 |
random_btn.grid(row=0, column=3, padx=5)
|
| 99 |
|
| 100 |
return {"entry": text_entry, "keywords": keywords_entry, "weight": weight}
|
|
@@ -106,7 +116,7 @@ class PromptGeneratorApp:
|
|
| 106 |
combined = main_text
|
| 107 |
if keywords:
|
| 108 |
combined += ", " + keywords
|
| 109 |
-
if combined:
|
| 110 |
return f"({combined}:{block['weight'].get():.1f})"
|
| 111 |
return ""
|
| 112 |
|
|
@@ -116,7 +126,6 @@ class PromptGeneratorApp:
|
|
| 116 |
lighting = build_block(self.frame_lighting)
|
| 117 |
|
| 118 |
final_prompt = ", ".join([p for p in [corpo, cenario, posicao, lighting] if p])
|
| 119 |
-
|
| 120 |
self.output.delete(1.0, tk.END)
|
| 121 |
self.output.insert(tk.END, final_prompt)
|
| 122 |
|
|
@@ -127,27 +136,54 @@ class PromptGeneratorApp:
|
|
| 127 |
|
| 128 |
# ----------------- Aba 2 -----------------
|
| 129 |
def build_keywords_tab(self):
|
| 130 |
-
# Botão para carregar LoRA
|
| 131 |
self.btn_load_lora = tk.Button(
|
| 132 |
self.tab_keywords, text="Importar LoRA (.safetensors)",
|
| 133 |
command=self.load_lora,
|
| 134 |
bg="#2196F3", fg="white", font=("Arial", 12, "bold")
|
| 135 |
)
|
| 136 |
-
self.btn_load_lora.pack(pady=
|
| 137 |
|
| 138 |
-
# Caixa de texto para exibir keywords
|
| 139 |
self.keywords_output = scrolledtext.ScrolledText(
|
| 140 |
self.tab_keywords, wrap=tk.WORD, width=100, height=20, font=("Arial", 10)
|
| 141 |
)
|
| 142 |
self.keywords_output.pack(padx=10, pady=10, fill="both", expand=True)
|
| 143 |
|
| 144 |
-
#
|
| 145 |
-
self.
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
)
|
| 150 |
-
self.
|
| 151 |
|
| 152 |
def load_lora(self):
|
| 153 |
file_path = filedialog.askopenfilename(
|
|
@@ -156,41 +192,127 @@ class PromptGeneratorApp:
|
|
| 156 |
)
|
| 157 |
if not file_path:
|
| 158 |
return
|
| 159 |
-
|
| 160 |
try:
|
| 161 |
with safe_open(file_path, framework="pt") as f:
|
| 162 |
metadata = f.metadata()
|
| 163 |
self.keywords_output.delete(1.0, tk.END)
|
| 164 |
-
|
| 165 |
if metadata and "ss_tag_frequency" in metadata:
|
| 166 |
tags_raw = metadata["ss_tag_frequency"]
|
| 167 |
-
|
| 168 |
-
# Converte de string JSON -> dict se necessário
|
| 169 |
-
if isinstance(tags_raw, str):
|
| 170 |
-
tags = json.loads(tags_raw)
|
| 171 |
-
else:
|
| 172 |
-
tags = tags_raw
|
| 173 |
-
|
| 174 |
self.keywords_output.insert(tk.END, f"Arquivo: {file_path}\n\n")
|
| 175 |
self.keywords_output.insert(tk.END, "🔹 Keywords encontradas:\n\n")
|
| 176 |
|
|
|
|
| 177 |
for dataset, tag_dict in tags.items():
|
| 178 |
sorted_tags = sorted(tag_dict.items(), key=lambda x: -x[1])
|
| 179 |
for tag, count in sorted_tags:
|
| 180 |
self.keywords_output.insert(tk.END, f"{tag} ({count})\n")
|
|
|
|
| 181 |
|
|
|
|
|
|
|
|
|
|
| 182 |
else:
|
| 183 |
self.keywords_output.insert(tk.END, "⚠️ Nenhuma keyword encontrada neste LoRA.")
|
| 184 |
-
|
| 185 |
except Exception as e:
|
| 186 |
self.keywords_output.insert(tk.END, f"❌ Erro ao ler o arquivo:\n{e}")
|
| 187 |
|
| 188 |
-
def
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
|
| 195 |
|
| 196 |
if __name__ == "__main__":
|
|
|
|
| 1 |
# -*- coding: utf-8 -*-
|
| 2 |
import tkinter as tk
|
| 3 |
+
from tkinter import scrolledtext, filedialog, ttk, messagebox
|
| 4 |
+
import random, json, os, shutil
|
| 5 |
from safetensors import safe_open
|
| 6 |
|
| 7 |
# importa listas
|
| 8 |
+
from listas_prompts import corpos_exemplo, cenarios_exemplo, posicoes_exemplo, lighting_prompts, negativos_exemplo
|
| 9 |
+
|
| 10 |
+
CONFIG_FILE = "config.json"
|
| 11 |
|
| 12 |
|
| 13 |
class PromptGeneratorApp:
|
|
|
|
| 15 |
self.root = root
|
| 16 |
self.root.title("Gerador Automático de Prompts")
|
| 17 |
|
| 18 |
+
# Config (salva pastas)
|
| 19 |
+
self.config = self.load_config()
|
| 20 |
+
self.current_lora = None # último arquivo LoRA importado
|
| 21 |
+
|
| 22 |
# Notebook com abas
|
| 23 |
self.notebook = ttk.Notebook(root)
|
| 24 |
self.notebook.pack(fill="both", expand=True)
|
|
|
|
| 31 |
self.tab_keywords = tk.Frame(self.notebook)
|
| 32 |
self.notebook.add(self.tab_keywords, text="Localizador de Keywords (LoRA)")
|
| 33 |
|
| 34 |
+
# Aba 3: Prompts Negativos
|
| 35 |
+
self.tab_negativos = tk.Frame(self.notebook)
|
| 36 |
+
self.notebook.add(self.tab_negativos, text="Prompts Negativos")
|
| 37 |
+
|
| 38 |
self.build_prompt_tab()
|
| 39 |
self.build_keywords_tab()
|
| 40 |
+
self.build_negativos_tab()
|
| 41 |
+
|
| 42 |
+
# ----------------- Config -----------------
|
| 43 |
+
def load_config(self):
|
| 44 |
+
config = {"comfy_folder": "", "fooocus_folder": ""}
|
| 45 |
+
if os.path.exists(CONFIG_FILE):
|
| 46 |
+
try:
|
| 47 |
+
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
|
| 48 |
+
loaded = json.load(f)
|
| 49 |
+
config.update(loaded)
|
| 50 |
+
except Exception:
|
| 51 |
+
pass
|
| 52 |
+
return config
|
| 53 |
+
|
| 54 |
+
def save_config(self):
|
| 55 |
+
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
|
| 56 |
+
json.dump(self.config, f, indent=4)
|
| 57 |
|
| 58 |
# ----------------- Aba 1 -----------------
|
| 59 |
def build_prompt_tab(self):
|
|
|
|
| 60 |
self.frame_corpo = self.create_block(self.tab_prompt, "Corpo", corpos_exemplo, 0)
|
|
|
|
|
|
|
| 61 |
self.frame_cenario = self.create_block(self.tab_prompt, "Cenário", cenarios_exemplo, 1)
|
|
|
|
|
|
|
| 62 |
self.frame_posicao = self.create_block(self.tab_prompt, "Posição", posicoes_exemplo, 2)
|
|
|
|
|
|
|
| 63 |
self.frame_lighting = self.create_block(self.tab_prompt, "Iluminação", lighting_prompts, 3)
|
| 64 |
|
|
|
|
| 65 |
self.btn_generate = tk.Button(
|
| 66 |
self.tab_prompt, text="Gerar Prompt Final",
|
| 67 |
command=self.generate_prompt,
|
|
|
|
| 69 |
)
|
| 70 |
self.btn_generate.grid(row=4, column=0, columnspan=3, pady=10, sticky="nsew")
|
| 71 |
|
|
|
|
| 72 |
self.output = scrolledtext.ScrolledText(
|
| 73 |
self.tab_prompt, wrap=tk.WORD, width=100, height=10, font=("Arial", 10)
|
| 74 |
)
|
| 75 |
self.output.grid(row=5, column=0, columnspan=3, padx=10, pady=10)
|
| 76 |
|
|
|
|
| 77 |
self.btn_copy = tk.Button(
|
| 78 |
self.tab_prompt, text="Copiar para Área de Transferência",
|
| 79 |
command=self.copy_to_clipboard,
|
|
|
|
| 82 |
self.btn_copy.grid(row=6, column=0, columnspan=3, pady=5, sticky="nsew")
|
| 83 |
|
| 84 |
def create_block(self, parent, title, data_list, row):
|
| 85 |
+
frame = tk.LabelFrame(parent, text=title, padx=10, pady=10, font=("Arial", 11, "bold"))
|
|
|
|
|
|
|
| 86 |
frame.grid(row=row, column=0, columnspan=3, padx=10, pady=5, sticky="ew")
|
| 87 |
|
|
|
|
| 88 |
text_entry = tk.Text(frame, width=80, height=4, font=("Arial", 10), wrap=tk.WORD)
|
| 89 |
text_entry.grid(row=0, column=0, padx=5, pady=5)
|
| 90 |
|
|
|
|
| 91 |
keywords_label = tk.Label(frame, text="Palavras-chave:")
|
| 92 |
keywords_label.grid(row=1, column=0, sticky="w", padx=5)
|
| 93 |
keywords_entry = tk.Entry(frame, width=80, font=("Arial", 9))
|
| 94 |
keywords_entry.grid(row=2, column=0, padx=5, pady=3)
|
| 95 |
|
|
|
|
| 96 |
weight_label = tk.Label(frame, text="Peso:")
|
| 97 |
weight_label.grid(row=0, column=1, padx=5)
|
| 98 |
weight = tk.DoubleVar(value=1.0)
|
|
|
|
| 100 |
textvariable=weight, width=5)
|
| 101 |
weight_spin.grid(row=0, column=2, padx=5)
|
| 102 |
|
|
|
|
| 103 |
def set_random():
|
| 104 |
text_entry.delete("1.0", tk.END)
|
| 105 |
text_entry.insert(tk.END, random.choice(data_list))
|
| 106 |
|
| 107 |
+
random_btn = tk.Button(frame, text="Random", command=set_random, bg="#2196F3", fg="white")
|
|
|
|
| 108 |
random_btn.grid(row=0, column=3, padx=5)
|
| 109 |
|
| 110 |
return {"entry": text_entry, "keywords": keywords_entry, "weight": weight}
|
|
|
|
| 116 |
combined = main_text
|
| 117 |
if keywords:
|
| 118 |
combined += ", " + keywords
|
| 119 |
+
if combined:
|
| 120 |
return f"({combined}:{block['weight'].get():.1f})"
|
| 121 |
return ""
|
| 122 |
|
|
|
|
| 126 |
lighting = build_block(self.frame_lighting)
|
| 127 |
|
| 128 |
final_prompt = ", ".join([p for p in [corpo, cenario, posicao, lighting] if p])
|
|
|
|
| 129 |
self.output.delete(1.0, tk.END)
|
| 130 |
self.output.insert(tk.END, final_prompt)
|
| 131 |
|
|
|
|
| 136 |
|
| 137 |
# ----------------- Aba 2 -----------------
|
| 138 |
def build_keywords_tab(self):
|
|
|
|
| 139 |
self.btn_load_lora = tk.Button(
|
| 140 |
self.tab_keywords, text="Importar LoRA (.safetensors)",
|
| 141 |
command=self.load_lora,
|
| 142 |
bg="#2196F3", fg="white", font=("Arial", 12, "bold")
|
| 143 |
)
|
| 144 |
+
self.btn_load_lora.pack(pady=5)
|
| 145 |
|
|
|
|
| 146 |
self.keywords_output = scrolledtext.ScrolledText(
|
| 147 |
self.tab_keywords, wrap=tk.WORD, width=100, height=20, font=("Arial", 10)
|
| 148 |
)
|
| 149 |
self.keywords_output.pack(padx=10, pady=10, fill="both", expand=True)
|
| 150 |
|
| 151 |
+
# Campo de top 10 keywords
|
| 152 |
+
tk.Label(self.tab_keywords, text="Top 10 Keywords (para colar no Gerador):").pack(pady=3)
|
| 153 |
+
self.top10_output = tk.Text(self.tab_keywords, width=100, height=2, font=("Arial", 10))
|
| 154 |
+
self.top10_output.pack(padx=10, pady=5)
|
| 155 |
+
|
| 156 |
+
# Linha para ComfyUI
|
| 157 |
+
frame_comfy = tk.Frame(self.tab_keywords)
|
| 158 |
+
frame_comfy.pack(pady=5, fill="x")
|
| 159 |
+
self.btn_comfy_folder = tk.Button(
|
| 160 |
+
frame_comfy, text="Pasta ComfyUI",
|
| 161 |
+
command=self.select_comfy_folder, bg="#9C27B0", fg="white"
|
| 162 |
+
)
|
| 163 |
+
self.btn_comfy_folder.pack(side="left", padx=5)
|
| 164 |
+
self.lbl_comfy = tk.Label(frame_comfy, text=self.config.get("comfy_folder", ""))
|
| 165 |
+
self.lbl_comfy.pack(side="left", padx=5)
|
| 166 |
+
self.btn_send_comfy = tk.Button(
|
| 167 |
+
frame_comfy, text="Enviar ComfyUI",
|
| 168 |
+
command=self.send_comfy, bg="#4CAF50", fg="white"
|
| 169 |
+
)
|
| 170 |
+
self.btn_send_comfy.pack(side="right", padx=5)
|
| 171 |
+
|
| 172 |
+
# Linha para FooocusAI
|
| 173 |
+
frame_fooocus = tk.Frame(self.tab_keywords)
|
| 174 |
+
frame_fooocus.pack(pady=5, fill="x")
|
| 175 |
+
self.btn_fooocus_folder = tk.Button(
|
| 176 |
+
frame_fooocus, text="Pasta FooocusAI",
|
| 177 |
+
command=self.select_fooocus_folder, bg="#673AB7", fg="white"
|
| 178 |
+
)
|
| 179 |
+
self.btn_fooocus_folder.pack(side="left", padx=5)
|
| 180 |
+
self.lbl_fooocus = tk.Label(frame_fooocus, text=self.config.get("fooocus_folder", ""))
|
| 181 |
+
self.lbl_fooocus.pack(side="left", padx=5)
|
| 182 |
+
self.btn_send_fooocus = tk.Button(
|
| 183 |
+
frame_fooocus, text="Enviar FooocusAI",
|
| 184 |
+
command=self.send_fooocus, bg="#4CAF50", fg="white"
|
| 185 |
)
|
| 186 |
+
self.btn_send_fooocus.pack(side="right", padx=5)
|
| 187 |
|
| 188 |
def load_lora(self):
|
| 189 |
file_path = filedialog.askopenfilename(
|
|
|
|
| 192 |
)
|
| 193 |
if not file_path:
|
| 194 |
return
|
| 195 |
+
self.current_lora = file_path
|
| 196 |
try:
|
| 197 |
with safe_open(file_path, framework="pt") as f:
|
| 198 |
metadata = f.metadata()
|
| 199 |
self.keywords_output.delete(1.0, tk.END)
|
| 200 |
+
self.top10_output.delete("1.0", tk.END)
|
| 201 |
if metadata and "ss_tag_frequency" in metadata:
|
| 202 |
tags_raw = metadata["ss_tag_frequency"]
|
| 203 |
+
tags = json.loads(tags_raw) if isinstance(tags_raw, str) else tags_raw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
self.keywords_output.insert(tk.END, f"Arquivo: {file_path}\n\n")
|
| 205 |
self.keywords_output.insert(tk.END, "🔹 Keywords encontradas:\n\n")
|
| 206 |
|
| 207 |
+
all_tags = []
|
| 208 |
for dataset, tag_dict in tags.items():
|
| 209 |
sorted_tags = sorted(tag_dict.items(), key=lambda x: -x[1])
|
| 210 |
for tag, count in sorted_tags:
|
| 211 |
self.keywords_output.insert(tk.END, f"{tag} ({count})\n")
|
| 212 |
+
all_tags.append((tag, count))
|
| 213 |
|
| 214 |
+
# Pega top 10 keywords
|
| 215 |
+
top10 = [tag for tag, count in sorted(all_tags, key=lambda x: -x[1])[:10]]
|
| 216 |
+
self.top10_output.insert(tk.END, ", ".join(top10))
|
| 217 |
else:
|
| 218 |
self.keywords_output.insert(tk.END, "⚠️ Nenhuma keyword encontrada neste LoRA.")
|
|
|
|
| 219 |
except Exception as e:
|
| 220 |
self.keywords_output.insert(tk.END, f"❌ Erro ao ler o arquivo:\n{e}")
|
| 221 |
|
| 222 |
+
def copy_file_to(self, dest_folder):
|
| 223 |
+
if not self.current_lora:
|
| 224 |
+
messagebox.showwarning("Aviso", "Importe primeiro um arquivo LoRA.")
|
| 225 |
+
return
|
| 226 |
+
if not dest_folder:
|
| 227 |
+
messagebox.showwarning("Aviso", "Selecione a pasta de destino primeiro.")
|
| 228 |
+
return
|
| 229 |
+
filename = os.path.basename(self.current_lora)
|
| 230 |
+
dest_file = os.path.join(dest_folder, filename)
|
| 231 |
+
if os.path.exists(dest_file):
|
| 232 |
+
messagebox.showwarning("Aviso", f"O arquivo já existe no destino:\n{dest_file}")
|
| 233 |
+
else:
|
| 234 |
+
shutil.copy2(self.current_lora, dest_file)
|
| 235 |
+
messagebox.showinfo("Sucesso", f"Arquivo copiado para:\n{dest_file}")
|
| 236 |
+
|
| 237 |
+
def select_comfy_folder(self):
|
| 238 |
+
folder = filedialog.askdirectory(title="Selecione a pasta do ComfyUI")
|
| 239 |
+
if folder:
|
| 240 |
+
self.config["comfy_folder"] = folder
|
| 241 |
+
self.lbl_comfy.config(text=folder)
|
| 242 |
+
self.save_config()
|
| 243 |
+
|
| 244 |
+
def select_fooocus_folder(self):
|
| 245 |
+
folder = filedialog.askdirectory(title="Selecione a pasta do FooocusAI")
|
| 246 |
+
if folder:
|
| 247 |
+
self.config["fooocus_folder"] = folder
|
| 248 |
+
self.lbl_fooocus.config(text=folder)
|
| 249 |
+
self.save_config()
|
| 250 |
+
|
| 251 |
+
def send_comfy(self):
|
| 252 |
+
self.copy_file_to(self.config.get("comfy_folder", ""))
|
| 253 |
+
|
| 254 |
+
def send_fooocus(self):
|
| 255 |
+
self.copy_file_to(self.config.get("fooocus_folder", ""))
|
| 256 |
+
|
| 257 |
+
# ----------------- Aba 3 -----------------
|
| 258 |
+
def build_negativos_tab(self):
|
| 259 |
+
topics = ["Anime", "Realismo", "SFW", "NSFW", "Olhos", "Rosto"]
|
| 260 |
+
|
| 261 |
+
frame1 = tk.Frame(self.tab_negativos)
|
| 262 |
+
frame1.pack(pady=5, fill="x")
|
| 263 |
+
tk.Label(frame1, text="Selecione o tipo de negativo (Bloco 1):").pack(anchor="w")
|
| 264 |
+
self.combo1 = ttk.Combobox(frame1, values=topics, state="readonly")
|
| 265 |
+
self.combo1.pack(fill="x", padx=5)
|
| 266 |
+
self.text1 = tk.Text(frame1, width=100, height=5, font=("Arial", 10))
|
| 267 |
+
self.text1.pack(padx=5, pady=5)
|
| 268 |
+
|
| 269 |
+
frame2 = tk.Frame(self.tab_negativos)
|
| 270 |
+
frame2.pack(pady=5, fill="x")
|
| 271 |
+
tk.Label(frame2, text="Selecione o tipo de negativo (Bloco 2):").pack(anchor="w")
|
| 272 |
+
self.combo2 = ttk.Combobox(frame2, values=topics, state="readonly")
|
| 273 |
+
self.combo2.pack(fill="x", padx=5)
|
| 274 |
+
self.text2 = tk.Text(frame2, width=100, height=5, font=("Arial", 10))
|
| 275 |
+
self.text2.pack(padx=5, pady=5)
|
| 276 |
+
|
| 277 |
+
self.btn_generate_neg = tk.Button(
|
| 278 |
+
self.tab_negativos, text="Gerar Negativo",
|
| 279 |
+
command=self.generate_negativo,
|
| 280 |
+
bg="#F44336", fg="white", font=("Arial", 12, "bold")
|
| 281 |
+
)
|
| 282 |
+
self.btn_generate_neg.pack(pady=10)
|
| 283 |
+
|
| 284 |
+
self.neg_output = scrolledtext.ScrolledText(
|
| 285 |
+
self.tab_negativos, wrap=tk.WORD, width=100, height=8, font=("Arial", 10)
|
| 286 |
+
)
|
| 287 |
+
self.neg_output.pack(padx=10, pady=10)
|
| 288 |
+
|
| 289 |
+
self.btn_copy_neg = tk.Button(
|
| 290 |
+
self.tab_negativos, text="Copiar para Área de Transferência",
|
| 291 |
+
command=self.copy_neg_to_clipboard,
|
| 292 |
+
bg="#FF9800", fg="white", font=("Arial", 10, "bold")
|
| 293 |
+
)
|
| 294 |
+
self.btn_copy_neg.pack(pady=5)
|
| 295 |
+
|
| 296 |
+
self.combo1.bind("<<ComboboxSelected>>", lambda e: self.fill_text(self.combo1, self.text1))
|
| 297 |
+
self.combo2.bind("<<ComboboxSelected>>", lambda e: self.fill_text(self.combo2, self.text2))
|
| 298 |
+
|
| 299 |
+
def fill_text(self, combo, text_widget):
|
| 300 |
+
idx = combo.current()
|
| 301 |
+
if idx >= 0:
|
| 302 |
+
text_widget.delete("1.0", tk.END)
|
| 303 |
+
text_widget.insert(tk.END, negativos_exemplo[idx])
|
| 304 |
+
|
| 305 |
+
def generate_negativo(self):
|
| 306 |
+
t1 = self.text1.get("1.0", tk.END).strip()
|
| 307 |
+
t2 = self.text2.get("1.0", tk.END).strip()
|
| 308 |
+
combined = ", ".join([x for x in [t1, t2] if x])
|
| 309 |
+
self.neg_output.delete("1.0", tk.END)
|
| 310 |
+
self.neg_output.insert(tk.END, combined)
|
| 311 |
+
|
| 312 |
+
def copy_neg_to_clipboard(self):
|
| 313 |
+
self.root.clipboard_clear()
|
| 314 |
+
self.root.clipboard_append(self.neg_output.get("1.0", tk.END).strip())
|
| 315 |
+
self.root.update()
|
| 316 |
|
| 317 |
|
| 318 |
if __name__ == "__main__":
|
listas_prompts.py
CHANGED
|
@@ -402,170 +402,202 @@ cenarios_exemplo = [
|
|
| 402 |
]
|
| 403 |
|
| 404 |
posicoes_exemplo = [
|
| 405 |
-
"
|
| 406 |
-
"
|
| 407 |
-
"
|
| 408 |
-
"
|
| 409 |
-
"
|
| 410 |
-
"
|
| 411 |
-
"
|
| 412 |
-
"
|
| 413 |
-
"
|
| 414 |
-
"
|
| 415 |
-
"
|
| 416 |
-
"
|
| 417 |
-
"
|
| 418 |
-
"
|
| 419 |
-
"
|
| 420 |
-
"
|
| 421 |
-
"
|
| 422 |
-
"
|
| 423 |
-
"
|
| 424 |
-
"
|
| 425 |
-
"
|
| 426 |
-
"
|
| 427 |
-
"
|
| 428 |
-
"
|
| 429 |
-
"
|
| 430 |
-
"
|
| 431 |
-
"
|
| 432 |
-
"
|
| 433 |
-
"
|
| 434 |
-
"
|
| 435 |
-
"
|
| 436 |
-
"
|
| 437 |
-
"
|
| 438 |
-
"
|
| 439 |
-
"
|
| 440 |
-
"
|
| 441 |
-
"
|
| 442 |
-
"
|
| 443 |
-
"
|
| 444 |
-
|
| 445 |
-
|
| 446 |
-
"
|
| 447 |
-
"
|
| 448 |
-
"
|
| 449 |
-
"
|
| 450 |
-
"
|
| 451 |
-
"
|
| 452 |
-
"
|
| 453 |
-
"
|
| 454 |
-
"
|
| 455 |
-
"
|
| 456 |
-
"
|
| 457 |
-
"
|
| 458 |
-
"
|
| 459 |
-
"
|
| 460 |
-
"
|
| 461 |
-
"
|
| 462 |
-
"
|
| 463 |
-
"
|
| 464 |
-
"
|
| 465 |
-
"
|
| 466 |
-
"
|
| 467 |
-
"
|
| 468 |
-
"
|
| 469 |
-
"
|
| 470 |
-
"
|
| 471 |
-
"
|
| 472 |
-
"
|
| 473 |
-
"
|
| 474 |
-
"
|
| 475 |
-
"
|
| 476 |
-
"
|
| 477 |
-
"
|
| 478 |
-
"
|
| 479 |
-
"
|
| 480 |
-
"
|
| 481 |
-
"
|
| 482 |
-
"
|
| 483 |
-
"
|
| 484 |
-
"
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
"
|
| 488 |
-
"
|
| 489 |
-
"
|
| 490 |
-
"
|
| 491 |
-
"
|
| 492 |
-
"
|
| 493 |
-
"
|
| 494 |
-
"
|
| 495 |
-
"
|
| 496 |
-
"
|
| 497 |
-
"
|
| 498 |
-
"
|
| 499 |
-
"
|
| 500 |
-
"
|
| 501 |
-
"
|
| 502 |
-
"
|
| 503 |
-
|
| 504 |
-
"
|
| 505 |
-
"
|
| 506 |
-
"
|
| 507 |
-
"
|
| 508 |
-
"
|
| 509 |
-
"
|
| 510 |
-
"
|
| 511 |
-
"
|
| 512 |
-
"
|
| 513 |
-
"
|
| 514 |
-
"
|
| 515 |
-
"
|
| 516 |
-
"
|
| 517 |
-
"
|
| 518 |
-
"
|
| 519 |
-
"
|
| 520 |
-
"
|
| 521 |
-
"
|
| 522 |
-
"
|
| 523 |
-
"
|
| 524 |
-
"
|
| 525 |
-
"
|
| 526 |
-
|
| 527 |
-
|
| 528 |
-
"
|
| 529 |
-
"
|
| 530 |
-
"
|
| 531 |
-
"
|
| 532 |
-
"
|
| 533 |
-
"
|
| 534 |
-
"
|
| 535 |
-
"
|
| 536 |
-
"
|
| 537 |
-
"
|
| 538 |
-
"
|
| 539 |
-
"
|
| 540 |
-
"
|
| 541 |
-
"
|
| 542 |
-
"
|
| 543 |
-
"
|
| 544 |
-
"
|
| 545 |
-
"
|
| 546 |
-
"
|
| 547 |
-
"
|
| 548 |
-
"
|
| 549 |
-
"
|
| 550 |
-
"
|
| 551 |
-
"
|
| 552 |
-
"
|
| 553 |
-
"
|
| 554 |
-
"
|
| 555 |
-
"
|
| 556 |
-
"
|
| 557 |
-
"
|
| 558 |
-
"
|
| 559 |
-
"
|
| 560 |
-
"
|
| 561 |
-
"
|
| 562 |
-
"
|
| 563 |
-
"
|
| 564 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 565 |
]
|
| 566 |
|
| 567 |
|
| 568 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 569 |
# listas_lighting.py
|
| 570 |
|
| 571 |
lighting_prompts = [
|
|
@@ -624,4 +656,25 @@ lighting_prompts = [
|
|
| 624 |
"Captured on an iPod Touch camera, low megapixel sensor, blur from hand movement, washed out tones, poor contrast, real lo-fi snapshot",
|
| 625 |
"Shot with a VHS camcorder frame grab, interlaced scan lines, washed tones, soft blur, low resolution noise, nostalgic 90s look",
|
| 626 |
"Captured with a broken sensor DSLR, dead pixels scattered, uneven exposure, odd magenta color shift, visible banding, imperfect raw capture"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 627 |
]
|
|
|
|
| 402 |
]
|
| 403 |
|
| 404 |
posicoes_exemplo = [
|
| 405 |
+
"Missionary sex position, woman lying on back, man on top, deep vaginal penetration, intense eye contact, bodies pressed together, hands gripping sheets, rhythmic thrusting",
|
| 406 |
+
"Doggy style sex position, woman on all fours, man thrusting from behind, vaginal penetration, hips bouncing, hair pulled back, breasts swinging forward, energetic motion",
|
| 407 |
+
"Cowgirl sex position, woman on top straddling man, vaginal penetration, grinding hips in circular motion, breasts bouncing, hands on his chest, dominant playful gaze",
|
| 408 |
+
"Reverse cowgirl sex position, woman straddling man facing away, vaginal penetration, hips bouncing up and down, arching her back, hands on thighs, man gripping her waist",
|
| 409 |
+
"Spooning sex position, lying on side, man behind woman, vaginal penetration, slow thrusting, intimate embrace, kissing her neck, bodies pressed close",
|
| 410 |
+
"Standing sex position, man standing, woman lifted with legs wrapped around his waist, vaginal penetration, back against the wall, passionate kissing, gripping tightly",
|
| 411 |
+
"Bridge sex position, woman lying on back with hips raised like a bridge, man kneeling and thrusting inside, vaginal penetration from elevated hips, arching motion, stretching legs wide",
|
| 412 |
+
"Lotus sex position, both partners seated cross-legged facing each other, vaginal penetration, deep intimacy, arms wrapped around, rhythmic rocking, intense closeness",
|
| 413 |
+
"Flat doggy style sex position, woman lying flat stomach down, hips slightly raised, man on top penetrating from behind, vaginal thrusting, pressing her body against the bed",
|
| 414 |
+
"Edge of bed sex position, woman lying back on edge of bed, man standing between legs, vaginal penetration, pushing hips forward, gripping her thighs",
|
| 415 |
+
"Chair straddle sex position, man sitting on chair, woman straddling lap, vaginal penetration, grinding motion, breasts pressed against chest, arms around neck",
|
| 416 |
+
"Reverse standing sex position, woman bent over table, man behind penetrating vaginally, hips slapping, breasts hanging forward, hands gripping table edge",
|
| 417 |
+
"Butterfly sex position, woman lying on her back at edge of bed, legs lifted and spread wide, man standing and penetrating vaginally, pushing her thighs apart",
|
| 418 |
+
"Legs on shoulders sex position, woman lying back, legs raised over man’s shoulders, vaginal penetration, deep angle thrusts, gripping his arms tightly",
|
| 419 |
+
"X sex position, woman lying on back, legs spread wide in X shape, man on top penetrating vaginally, stretching hips, hands gripping her knees",
|
| 420 |
+
"Piledriver sex position, woman on back with legs bent over shoulders, hips raised, vaginal penetration, man thrusting from above, extreme penetration angle",
|
| 421 |
+
"Seated face-to-face sex position, man sitting cross-legged, woman on his lap, vaginal penetration, slow rocking, deep kissing, arms wrapped around",
|
| 422 |
+
"Reverse spoon sex position, woman behind man, vaginal penetration from behind, legs intertwined, sensual rocking motion",
|
| 423 |
+
"Wall standing sex position, woman pressed against wall, man behind penetrating vaginally, lifting her slightly, intense thrusts, breasts pressed against wall",
|
| 424 |
+
"Couch sex position, woman lying across couch arm, man penetrating from behind, thrusting hips, holding her waist",
|
| 425 |
+
"Bridge reverse sex position, man lying on back with hips raised, woman on top straddling, vaginal penetration, bouncing motion, hands on his thighs",
|
| 426 |
+
"Lap dance sex position, man sitting, woman straddling lap facing away, vaginal penetration, grinding back and forth, hands on knees",
|
| 427 |
+
"Lifted carry sex position, man standing lifting woman, vaginal penetration while holding her legs, bouncing motion, kissing passionately",
|
| 428 |
+
"Desk sex position, woman bent forward over desk, man behind thrusting vaginally, gripping hips, papers scattered",
|
| 429 |
+
"Floor missionary sex position, woman lying on rug, man on top penetrating, soft lighting, deep thrusting motion",
|
| 430 |
+
"Crossbody sex position, woman lying sideways, man entering from side, vaginal penetration, one leg hooked over his hip",
|
| 431 |
+
"Ballet lift sex position, man holding woman with legs spread in air, vaginal penetration while standing, dramatic pose",
|
| 432 |
+
"Cliffhanger bed sex position, woman upside down with hips at edge, man standing penetrating vaginally downward, deep angle",
|
| 433 |
+
"Side saddle sex position, woman straddling man sideways, vaginal penetration, grinding hips slowly, breasts rubbing against chest",
|
| 434 |
+
"Face-down spread sex position, woman lying face-down, hips lifted with pillow, man on top thrusting vaginally, pressing her into bed",
|
| 435 |
+
"Reverse lotus sex position, woman sitting on top cross-legged, man lying back, vaginal penetration, rocking motion",
|
| 436 |
+
"Bridge arch sex position, woman arching back dramatically while man penetrates, hips lifted high, vaginal thrusting from below",
|
| 437 |
+
"Chair edge sex position, woman sitting on edge of chair, man kneeling between legs penetrating vaginally, gripping thighs",
|
| 438 |
+
"Bent over couch sex position, woman leaning over couch arm, man behind thrusting vaginally, breasts swinging, rhythmic motion",
|
| 439 |
+
"Squat sex position, woman squatting over man lying on back, vaginal penetration, bouncing motion, gripping his knees",
|
| 440 |
+
"Backwards spoon sex position, man lying behind, woman lifting leg high, vaginal penetration from behind, intimate thrusting",
|
| 441 |
+
"Kitchen counter sex position, woman sitting on counter, legs wrapped around man, vaginal penetration, deep kissing, hands gripping waist",
|
| 442 |
+
"Lap grind reverse sex position, man sitting, woman straddling lap facing away, vaginal penetration, grinding hips, arching back",
|
| 443 |
+
"Leg lock sex position, woman wrapping legs tightly around man’s waist, vaginal penetration, deep thrusting, intense closeness"
|
| 444 |
+
|
| 445 |
+
|
| 446 |
+
"Bridge doggy sex position, woman in arch position with hips raised, man thrusting vaginally from behind, breasts bouncing forward",
|
| 447 |
+
"Wall lift sex position, man lifting woman against wall, vaginal penetration, hips bouncing, arms gripping shoulders",
|
| 448 |
+
"Reverse edge sex position, woman lying back on table edge, man standing penetrating vaginally, holding legs wide apart",
|
| 449 |
+
"Over the shoulder sex position, man holding woman’s leg high over shoulder, vaginal penetration at steep angle, gripping thighs",
|
| 450 |
+
"Straddle pin sex position, man pinning woman down while straddling, vaginal penetration, rough thrusting, wrists held",
|
| 451 |
+
"Leg split sex position, woman lying back with legs stretched wide apart, man penetrating vaginally, gripping her ankles",
|
| 452 |
+
"Upside down lap sex position, woman upside down across man’s lap, vaginal penetration, breasts hanging, gripping thighs",
|
| 453 |
+
"Mirror sex position, woman facing mirror, man penetrating from behind, watching reflection, breasts bouncing",
|
| 454 |
+
"Bridge twist sex position, woman twisting hips upward, man kneeling penetrating vaginally, intense hip motion",
|
| 455 |
+
"On all fours reverse sex position, woman on hands and knees facing up bed, man penetrating vaginally from below angle",
|
| 456 |
+
"Cross lift sex position, man lifting woman sideways across body, vaginal penetration, dramatic acrobatic pose",
|
| 457 |
+
"Bed straddle sex position, man sitting back, woman straddling on top, vaginal penetration, slow grinding",
|
| 458 |
+
"Bent leg doggy sex position, woman on all fours with one leg lifted, man penetrating from behind, dynamic thrusts",
|
| 459 |
+
"Arch over pillow sex position, woman lying on stomach with pillow under hips, man penetrating vaginally, deep thrusts",
|
| 460 |
+
"Side arch sex position, woman lying sideways arching hips, man penetrating vaginally from side, gripping thighs",
|
| 461 |
+
"Chair reverse sex position, woman sitting reverse on chair, man kneeling between legs, vaginal penetration",
|
| 462 |
+
"Face to floor sex position, woman pressed face-down to bed, man penetrating from behind, rough thrusting motion",
|
| 463 |
+
"Bridge straddle sex position, woman bridging hips high, man straddling and penetrating vaginally, intense pelvic angle",
|
| 464 |
+
"Over desk lift sex position, man lifting woman onto desk edge, vaginal penetration, gripping her legs wide",
|
| 465 |
+
"Reverse couch sex position, woman sitting back on couch arm, man penetrating vaginally from below",
|
| 466 |
+
"Leg wrap couch sex position, woman wrapping legs around man while seated on couch, vaginal penetration",
|
| 467 |
+
"Bed kneel sex position, woman kneeling on bed, man entering from behind, vaginal penetration, breasts bouncing",
|
| 468 |
+
"Bridge couch sex position, woman arching back over couch, man penetrating vaginally, gripping waist tightly",
|
| 469 |
+
"Chair grind sex position, woman grinding on man’s lap, vaginal penetration, bouncing breasts, hands gripping chair arms",
|
| 470 |
+
"Leg hook sex position, woman hooking leg around man’s shoulder, vaginal penetration, steep thrust angle",
|
| 471 |
+
"Side wrap sex position, woman wrapping one leg over man’s hip while lying, vaginal penetration, deep intimacy",
|
| 472 |
+
"Standing rear sex position, woman bent over while standing, man behind thrusting vaginally, gripping hips",
|
| 473 |
+
"Over armrest sex position, woman bent over armrest, man penetrating vaginally from behind, rhythmic thrusts",
|
| 474 |
+
"Reverse table sex position, woman lying back across table, man standing penetrating vaginally, pushing thighs apart",
|
| 475 |
+
"Bridge face-up sex position, woman arching face up, man thrusting vaginally from above, breasts bouncing",
|
| 476 |
+
"Squat grind sex position, woman squatting on man, vaginal penetration, grinding hips, breasts bouncing",
|
| 477 |
+
"Lift and pin sex position, man lifting woman and pinning against wall, vaginal penetration, intense motion",
|
| 478 |
+
"Reverse kneel sex position, woman kneeling facing away, man penetrating vaginally from behind, gripping waist",
|
| 479 |
+
"Bed roll sex position, woman lying sideways, man rolling over her while thrusting vaginally, intense grinding",
|
| 480 |
+
"Crossed legs sex position, woman crossing legs around man’s waist, vaginal penetration, deep thrusts",
|
| 481 |
+
"Face sitting sex position, woman sitting on man’s face while he penetrates vaginally from below",
|
| 482 |
+
"Reverse stand sex position, woman standing bent forward, man behind thrusting vaginally, gripping her arms",
|
| 483 |
+
"Leg hold arch sex position, man holding both of woman’s legs up while thrusting vaginally, deep penetration",
|
| 484 |
+
"Edge kneel sex position, woman kneeling on edge of bed, man behind thrusting vaginally, pressing her forward"
|
| 485 |
+
|
| 486 |
+
|
| 487 |
+
"Lift and thrust sex position, man lifting woman onto his hips, vaginal penetration while walking, bouncing",
|
| 488 |
+
"Reverse chair straddle sex position, woman straddling chair backward, man penetrating vaginally from behind",
|
| 489 |
+
"Couch straddle sex position, woman straddling man on couch, vaginal penetration, breasts bouncing, kissing",
|
| 490 |
+
"Leg press sex position, woman pressing knees to chest, man thrusting vaginally from above, intense penetration",
|
| 491 |
+
"Overhead lift sex position, man lifting woman overhead, vaginal penetration, acrobatic position",
|
| 492 |
+
"Bridge against wall sex position, woman arching back against wall, man thrusting vaginally, gripping thighs",
|
| 493 |
+
"Reverse spoon twist sex position, woman twisting hips while spooning, man penetrating vaginally from behind",
|
| 494 |
+
"Bed arch grip sex position, woman gripping headboard, arching hips, man penetrating vaginally from behind",
|
| 495 |
+
"Chair lift sex position, man lifting woman onto chair, vaginal penetration, bouncing hips, kissing passionately",
|
| 496 |
+
"Floor grind sex position, woman lying flat on floor, man straddling and penetrating vaginally, pressing her down",
|
| 497 |
+
"Reverse lap grind sex position, woman grinding back on man’s lap, vaginal penetration, arching her back",
|
| 498 |
+
"Over table arch sex position, woman arched back across table, man standing penetrating vaginally, gripping her waist",
|
| 499 |
+
"Bridge kneel sex position, woman kneeling with hips arched, man thrusting vaginally from behind, breasts bouncing",
|
| 500 |
+
"Reverse lift couch sex position, man lifting woman onto couch arm, vaginal penetration, bouncing motion",
|
| 501 |
+
"Pinned down sex position, man pinning woman’s wrists above head, vaginal penetration from above, rough thrusts",
|
| 502 |
+
"Leg lock twist sex position, woman twisting hips with legs locked around man, vaginal penetration, deep thrusts",
|
| 503 |
+
"Bed arch thrust sex position, woman arching hips high, man penetrating vaginally from behind, rhythmic motion",
|
| 504 |
+
"Reverse grind chair sex position, woman grinding backwards on chair seat, man penetrating vaginally",
|
| 505 |
+
"Lift against counter sex position, man lifting woman onto counter, vaginal penetration, gripping legs wide apart",
|
| 506 |
+
"Arch spread sex position, woman spreading legs wide arching hips, man thrusting vaginally from above",
|
| 507 |
+
"Double penetration sex position, woman on all fours, one man penetrating vaginally from behind while another penetrates orally, intense rhythm, hair pulled, hands gripping sheets, menage, threesome, two males one female",
|
| 508 |
+
"Sandwich sex position, woman bent over, one man in front receiving oral, another man behind penetrating vaginally, deep thrusts, synchronized motion, menage, threesome, two males one female",
|
| 509 |
+
"Couch threesome sex position, woman straddling one man on the couch while the second man penetrates from behind, breasts bouncing, hands gripping thighs, menage, threesome, two males one female",
|
| 510 |
+
"Double missionary sex position, woman lying on back, one man between her legs penetrating vaginally, the other man straddling her chest for oral, intense closeness, menage, threesome, two males one female",
|
| 511 |
+
"Standing lift sex position, one man lifting woman against wall while penetrating vaginally, second man receives oral as she grips both bodies, menage, threesome, two males one female",
|
| 512 |
+
"Reverse cowgirl double sex position, woman straddling one man facing away while another man penetrates from behind, breasts bouncing, loud moans, menage, threesome, two males one female",
|
| 513 |
+
"Edge of bed double sex position, woman lying back, one man between her legs thrusting vaginally, another man standing near head receiving oral, menage, threesome, two males one female",
|
| 514 |
+
"Doggy style double sex position, woman on all fours, one man behind thrusting vaginally, second man in front receiving oral, hair pulled tight, menage, threesome, two males one female",
|
| 515 |
+
"Lap sandwich sex position, woman straddling one man on a chair, riding vaginally, while second man stands behind penetrating anally, close embrace, menage, threesome, two males one female",
|
| 516 |
+
"Floor threesome sex position, woman on back, one man thrusting vaginally, second man sitting over her chest for oral, arms restrained, menage, threesome, two males one female",
|
| 517 |
+
"Standing spitroast sex position, woman bent forward, one man behind thrusting vaginally, another in front receiving oral, gripping hips tight, menage, threesome, two males one female",
|
| 518 |
+
"Double face-to-face sex position, woman riding one man while leaning forward giving oral to the second man, sweat dripping, loud breathing, menage, threesome, two males one female",
|
| 519 |
+
"Over the table double sex position, woman bent over table, one man thrusting from behind, another man standing in front gripping hair during oral, menage, threesome, two males one female",
|
| 520 |
+
"Lotus triple sex position, woman cross-legged on one man’s lap, vaginal penetration, second man kneeling in front receiving oral, arms wrapped, menage, threesome, two males one female",
|
| 521 |
+
"Double bridge sex position, woman arching back, one man thrusting vaginally, another kneeling at her face for oral, breasts bouncing, menage, threesome, two males one female",
|
| 522 |
+
"Couch reverse sex position, woman lying back on couch arm, one man thrusting from below vaginally, another standing near head gripping her mouth, menage, threesome, two males one female",
|
| 523 |
+
"Double squatting sex position, woman squatting over one man on floor while second man penetrates vaginally from behind, bouncing motion, menage, threesome, two males one female",
|
| 524 |
+
"Bed spread sex position, woman on back with legs wide apart, one man thrusting vaginally, another kneeling on chest for oral, hands pinned, menage, threesome, two males one female",
|
| 525 |
+
"Wall double sex position, woman pressed against wall, one man lifting her for vaginal penetration, second man standing for oral, breasts pressed, menage, threesome, two males one female"
|
| 526 |
+
|
| 527 |
+
|
| 528 |
+
"Reverse threesome sex position, woman on top of one man in missionary, while second man penetrates from behind, double stimulation, menage, threesome, two males one female",
|
| 529 |
+
"Chair triple sex position, woman straddling one man on chair vaginally, another man standing behind gripping her hips and thrusting anally, menage, threesome, two males one female",
|
| 530 |
+
"Double spoon sex position, woman lying on side, one man penetrating vaginally from behind, another lying in front receiving oral, menage, threesome, two males one female",
|
| 531 |
+
"Kneel spitroast sex position, woman on knees, one man standing in front receiving oral, another behind thrusting vaginally, hair pulled, menage, threesome, two males one female",
|
| 532 |
+
"Desk triple sex position, woman bent forward over desk, one man thrusting vaginally from behind, second man in front pushing deep into mouth, menage, threesome, two males one female",
|
| 533 |
+
"Face-up double sex position, woman lying face-up on bed, one man thrusting vaginally, another sitting over chest for oral, gripping wrists, menage, threesome, two males one female",
|
| 534 |
+
"Lifted double sex position, woman lifted by one man penetrating vaginally, another man in front receiving oral, bouncing against wall, menage, threesome, two males one female",
|
| 535 |
+
"Reverse kneel sex position, woman kneeling on all fours, one man thrusting vaginally from behind, another man receiving oral in front, menage, threesome, two males one female",
|
| 536 |
+
"Bridge spitroast sex position, woman arching hips high, one man thrusting vaginally, another standing over her face receiving oral, menage, threesome, two males one female",
|
| 537 |
+
"Couch grind double sex position, woman grinding on man seated vaginally, second man behind thrusting, breasts bouncing wildly, menage, threesome, two males one female",
|
| 538 |
+
"Bed pin double sex position, woman pinned down by one man thrusting vaginally, another man straddling her face for oral, rough pace, menage, threesome, two males one female",
|
| 539 |
+
"Double couch lift sex position, woman straddling one man sitting on couch while another man holds her legs open and thrusts from behind, breasts bouncing, loud moans, menage, threesome, two males one female",
|
| 540 |
+
"Face-down double sex position, woman pressed into mattress face-down, one man thrusting vaginally from behind, second man kneeling by her head for oral, hands gripping sheets, menage, threesome, two males one female",
|
| 541 |
+
"Reverse spitroast sex position, woman riding one man cowgirl style while bending forward giving oral to another man standing in front, hips grinding fast, menage, threesome, two males one female",
|
| 542 |
+
"Wall arch double sex position, woman lifted by one man against wall for vaginal penetration while another presses into her mouth, intense rhythm, menage, threesome, two males one female",
|
| 543 |
+
"Overhead double sex position, woman held upside down by two men, one thrusting vaginally while other receives oral, acrobatic intense pose, menage, threesome, two males one female",
|
| 544 |
+
"Chair double grind sex position, woman grinding on lap of seated man while second man thrusts from behind, breasts pressed forward, moaning loudly, menage, threesome, two males one female",
|
| 545 |
+
"Kneeling threeway sex position, woman kneeling between two men, one behind thrusting vaginally, one in front pushing deep into mouth, hands pulling hair, menage, threesome, two males one female",
|
| 546 |
+
"Side split double sex position, woman lying sideways with one leg raised high, one man penetrating vaginally, another man kneeling at her mouth for oral, menage, threesome, two males one female",
|
| 547 |
+
"Bed sandwich sex position, woman lying on top of one man, vaginal penetration from below, second man entering from behind in deep thrusts, menage, threesome, two males one female",
|
| 548 |
+
"Arch double press sex position, woman arching hips upward on bed, one man thrusting vaginally, another kneeling over her chest for oral, menage, threesome, two males one female",
|
| 549 |
+
"Reverse lotus double sex position, woman straddling one man cross-legged while another man penetrates from behind, arms wrapped tightly, menage, threesome, two males one female",
|
| 550 |
+
"Lift and lock double sex position, woman lifted by one man for vaginal penetration, second man pressing into mouth while she wraps arms around both, menage, threesome, two males one female",
|
| 551 |
+
"Edge spitroast sex position, woman bent over bed edge, one man thrusting vaginally from behind, second man standing in front gripping her hair during oral, menage, threesome, two males one female",
|
| 552 |
+
"Chair kneel double sex position, woman kneeling on chair facing one man for oral while second man penetrates vaginally from behind, breasts swinging, menage, threesome, two males one female",
|
| 553 |
+
"Bridge press triple sex position, woman arching back dramatically, one man thrusting vaginally, another sitting near her face, hips bouncing, menage, threesome, two males one female",
|
| 554 |
+
"Couch twist double sex position, woman lying twisted sideways across couch, one man thrusting vaginally, second man pressing into mouth, menage, threesome, two males one female",
|
| 555 |
+
"Standing locked double sex position, woman held between two men standing, one thrusting vaginally, other pushing deep into her throat, menage, threesome, two males one female",
|
| 556 |
+
"Table arch double sex position, woman arched back on table edge, one man between her legs thrusting vaginally, second man in front for oral, menage, threesome, two males one female",
|
| 557 |
+
"Floor lift spitroast sex position, woman lifted at hips by one man thrusting vaginally while second man stands over her head for oral, menage, threesome, two males one female",
|
| 558 |
+
"Double bed kneel sex position, woman on all fours on bed, one man thrusting vaginally from behind, another kneeling in front pressing into her mouth, menage, threesome, two males one female",
|
| 559 |
+
"Chair arch spitroast sex position, woman arching back over chair, one man thrusting vaginally, another pushing into her mouth while gripping neck, menage, threesome, two males one female",
|
| 560 |
+
"Leg lift double sex position, woman on back with both legs raised, one man thrusting vaginally, another kneeling over her face for oral, menage, threesome, two males one female",
|
| 561 |
+
"Wall double pin sex position, woman pinned by one man against wall thrusting vaginally, second man holding head steady for oral, menage, threesome, two males one female",
|
| 562 |
+
"Couch ride double sex position, woman riding one man reverse cowgirl while second man penetrates from behind, breasts bouncing forward, menage, threesome, two males one female",
|
| 563 |
+
"Bed kneel spitroast sex position, woman kneeling on bed, one man thrusting vaginally from behind, another standing in front for oral, menage, threesome, two males one female",
|
| 564 |
+
"Double chair lift sex position, woman lifted between two men, one penetrating vaginally, another pushing into mouth, bouncing together, menage, threesome, two males one female",
|
| 565 |
+
"Arch grind spitroast sex position, woman grinding hips upward, one man thrusting vaginally, second man standing for oral, sweaty and intense, menage, threesome, two males one female",
|
| 566 |
+
"Side lock double sex position, woman lying on side, one man thrusting vaginally, second man kneeling at face pressing deep, legs hooked, menage, threesome, two males one female",
|
| 567 |
+
"Over sofa double sex position, woman bent forward over sofa arm, one man thrusting from behind, second man standing for oral, hands gripping waist, menage, threesome, two males one female",
|
| 568 |
+
"Reverse straddle double sex position, woman straddling one man’s lap facing away, vaginal penetration, while another man penetrates her mouth in front, menage, threesome, two males one female"
|
| 569 |
+
|
| 570 |
+
|
| 571 |
+
"Bridge face-up twist sex position, woman arching face up twisting hips, man thrusting vaginally, breasts bouncing, intense angle",
|
| 572 |
+
"Over desk pin sex position, woman pinned over desk, man penetrating vaginally from behind, hands gripping desk edge, rough motion",
|
| 573 |
+
"Leg lift press sex position, woman on back with legs lifted high, man thrusting vaginally at steep angle, gripping her ankles",
|
| 574 |
+
"Couch kneel sex position, woman kneeling on couch, man behind thrusting vaginally, breasts swinging, passionate embrace",
|
| 575 |
+
"Reverse arch sex position, woman lying back arched dramatically, man penetrating vaginally from above, hips raised, deep thrusts",
|
| 576 |
+
"Chair squat sex position, woman squatting on chair seat, man kneeling between legs penetrating vaginally, gripping thighs tightly",
|
| 577 |
+
"Bed twist sex position, woman lying twisted sideways, man penetrating vaginally from behind, deep rhythmic thrusts",
|
| 578 |
+
"Floor arch sex position, woman lying flat on floor arching hips, man penetrating vaginally, breasts bouncing, hands gripping",
|
| 579 |
+
"Wall grind sex position, woman pressed against wall, man thrusting vaginally while grinding hips, kissing passionately",
|
| 580 |
+
"Over lap sex position, woman bent over man’s lap, vaginal penetration from behind, spanking motion, breasts pressed",
|
| 581 |
+
"Leg wrap stand sex position, woman standing wrapping legs around man’s waist, vaginal penetration, deep thrusts, arms tight",
|
| 582 |
+
"Bridge lift sex position, woman lifted in bridge arc, man thrusting vaginally from below, breasts bouncing, stretching thighs",
|
| 583 |
+
"Reverse squat sex position, woman squatting over man’s lap facing away, vaginal penetration, hips bouncing, breasts hanging",
|
| 584 |
+
"Chair arch sex position, woman arching back over chair, man thrusting vaginally from above, intense pelvic motion",
|
| 585 |
+
"Bed press sex position, woman pressed face-down into bed, man thrusting vaginally from behind, rough pace, breasts swinging",
|
| 586 |
+
"Leg lock twist arch sex position, woman twisting hips while locking legs around man, vaginal penetration, deep motion",
|
| 587 |
+
"Over edge arch sex position, woman lying back over bed edge, man thrusting vaginally from above, breasts bouncing forward",
|
| 588 |
+
"Floor kneel sex position, woman kneeling on floor, man behind thrusting vaginally, hands gripping hips tightly",
|
| 589 |
+
"Side twist sex position, woman lying on side twisting hips upward, man penetrating vaginally from above, deep thrusts",
|
| 590 |
+
"Couch arch sex position, woman arching back over couch, man thrusting vaginally, breasts bouncing, waist gripped tightly"
|
| 591 |
]
|
| 592 |
|
| 593 |
|
| 594 |
|
| 595 |
+
|
| 596 |
+
|
| 597 |
+
|
| 598 |
+
|
| 599 |
+
|
| 600 |
+
|
| 601 |
# listas_lighting.py
|
| 602 |
|
| 603 |
lighting_prompts = [
|
|
|
|
| 656 |
"Captured on an iPod Touch camera, low megapixel sensor, blur from hand movement, washed out tones, poor contrast, real lo-fi snapshot",
|
| 657 |
"Shot with a VHS camcorder frame grab, interlaced scan lines, washed tones, soft blur, low resolution noise, nostalgic 90s look",
|
| 658 |
"Captured with a broken sensor DSLR, dead pixels scattered, uneven exposure, odd magenta color shift, visible banding, imperfect raw capture"
|
| 659 |
+
]
|
| 660 |
+
|
| 661 |
+
# Exemplos de prompts negativos
|
| 662 |
+
negativos_exemplo = [
|
| 663 |
+
# Anime
|
| 664 |
+
"worst quality, low quality, blurry, distorted anatomy, missing limbs, deformed hands, extra fingers, poorly drawn face, bad proportions, messy lineart, broken perspective, watermark, signature",
|
| 665 |
+
|
| 666 |
+
# Realismo
|
| 667 |
+
"unnatural skin texture, plastic look, overexposed, underexposed, oversaturated, low resolution, distorted proportions, uncanny valley face, incorrect shadows, inconsistent lighting, blur, jpeg artifacts",
|
| 668 |
+
|
| 669 |
+
# SFW (remover conteúdo adulto, deixar a imagem segura)
|
| 670 |
+
"nsfw, nude, nudity, naked, sex, intercourse, porn, hentai, erotic, lewd, genitals, breasts, nipples, pussy, penis, blowjob, penetration, cum, explicit content, sexual activity",
|
| 671 |
+
|
| 672 |
+
# NSFW (remover censura e elementos que escondem o conteúdo adulto)
|
| 673 |
+
"censored, mosaic censor, blur censor, text censor, black bar, pixelated censor, underwear, bra, panties, covered, clothes blocking nudity, swimsuit blocking genitals, fig leaf, hands covering private parts",
|
| 674 |
+
|
| 675 |
+
# Olhos
|
| 676 |
+
"blurry eyes, deformed pupils, asymmetrical eyes, crossed eyes, lazy eye, unnatural reflections, missing iris, wrong eye color, glowing eyes, distorted sclera, extra eyes, low detail eyes",
|
| 677 |
+
|
| 678 |
+
# Rosto
|
| 679 |
+
"asymmetrical face, deformed mouth, blurry lips, broken nose, distorted jawline, melted face, low detail face, uncanny expression, misplaced features, incorrect perspective, missing teeth, bad proportions"
|
| 680 |
]
|