Spaces:
Sleeping
Sleeping
File size: 5,584 Bytes
9e13cd7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import gradio as gr
import random
import pandas as pd
import json
import os
import shutil
from datetime import datetime
# Verzeichnisse
DATA_DIR = "data"
PRESET_FILE = os.path.join(DATA_DIR, "presets.json")
BACKUP_DIR = os.path.join(DATA_DIR, "backups")
SESSION_DIR = os.path.join(DATA_DIR, "sessions")
EXPORT_DIR = "exports"
# Sicherstellen, dass alle benötigten Verzeichnisse existieren
os.makedirs(DATA_DIR, exist_ok=True)
os.makedirs(BACKUP_DIR, exist_ok=True)
os.makedirs(SESSION_DIR, exist_ok=True)
os.makedirs(EXPORT_DIR, exist_ok=True)
# Hilfsfunktionen Presets
def load_presets():
with open(PRESET_FILE, "r") as f:
return json.load(f)
def save_presets(presets):
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
backup_file = os.path.join(BACKUP_DIR, f"presets_backup_{timestamp}.json")
shutil.copy(PRESET_FILE, backup_file)
with open(PRESET_FILE, "w") as f:
json.dump(presets, f, indent=4)
# Kamera-/Objektiv-/Film-Datenbank (gekürzt)
camera_lens_film_combinations_master = [
("Canon EOS R5", "Canon RF 50mm f/1.2L USM", "Kodak Portra 400"),
("Nikon Z8", "Nikon Z 50mm f/1.2 S", "Kodak Ektar 100"),
("Sony Alpha 7R V", "Sony FE 85mm f/1.4 GM", "Cinestill 800T"),
("Fujifilm GFX 100 II", "Fujifilm GF 80mm f/1.7 R WR", "Fujifilm Provia 100F"),
("Leica M11", "Leica Summilux-M 50mm f/1.4 ASPH", "Kodak Gold 200")
]
light_conditions_master = [
"Golden Hour", "Blue Hour", "Overcast Light", "Diffused Light", "Backlighting",
"Soft Ambient Light", "Low-Key Lighting", "High-Key Lighting", "Window Light", "Dappled Light"
]
# Prompt Generator
def master_prompt_engine(scene_description, num_prompts, aspect_ratio, quality, stylize, seed):
prompts = []
for _ in range(num_prompts):
camera, lens, film = random.choice(camera_lens_film_combinations_master)
light = random.choice(light_conditions_master)
mj_parameters = f"--ar {aspect_ratio} --q {quality} --s {stylize}"
if seed != "":
mj_parameters += f" --seed {seed}"
prompt = f"{scene_description}, shot with {camera} and {lens}, using {film} film, under {light} {mj_parameters}"
prompts.append(prompt)
return prompts
# Export Funktion inkl. Session Logging + stabiler Rückgabe
def generate_and_export(selected_preset, custom_scene, num_prompts, aspect_ratio, quality, stylize, seed, export_format):
presets = load_presets()
scene_description = custom_scene if selected_preset == "Custom Input" else presets[selected_preset]
prompts = master_prompt_engine(scene_description, num_prompts, aspect_ratio, quality, stylize, seed)
df = pd.DataFrame(prompts, columns=["Prompt"])
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
export_file = os.path.join(EXPORT_DIR, f"prompts_export_{timestamp}.{export_format}")
if export_format == "csv":
df.to_csv(export_file, index=False)
elif export_format == "txt":
with open(export_file, "w") as f:
for line in prompts:
f.write(line + "\n")
elif export_format == "json":
df.to_json(export_file, orient="records", indent=4)
# Session Logging
session_file = os.path.join(SESSION_DIR, f"session_{timestamp}.txt")
with open(session_file, "w") as f:
for line in prompts:
f.write(line + "\n")
prompt_text = "\n".join(prompts)
file_info = f"File successfully saved to: {export_file}"
return file_info, prompt_text
# Preset hinzufügen
def add_preset(new_name, new_description):
presets = load_presets()
if new_name in presets:
return f"Preset '{new_name}' already exists."
presets[new_name] = new_description
save_presets(presets)
return f"Preset '{new_name}' added successfully."
# Preset Liste aktualisieren
def update_preset_list():
presets = load_presets()
return list(presets.keys()) + ["Custom Input"]
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# TischEins.org | Midjourney Prompt Engine")
with gr.Tab("Prompt Generator"):
preset_choice = gr.Dropdown(choices=update_preset_list(), label="Select Preset")
custom_scene = gr.Textbox(label="Or enter your custom scene", placeholder="Describe your scene here...")
num = gr.Slider(1, 500, value=20, step=1, label="Number of Prompts")
aspect_ratio = gr.Textbox(label="Aspect Ratio", value="5:4")
quality = gr.Textbox(label="Quality", value="2")
stylize = gr.Textbox(label="Stylize", value="750")
seed = gr.Textbox(label="Seed (optional)", placeholder="Leave empty for random")
export_format = gr.Dropdown(choices=["csv", "txt", "json"], label="Export Format", value="txt")
btn = gr.Button("Generate Prompts")
export_info = gr.Textbox(label="Export Status")
output_preview = gr.Textbox(label="Generated Prompts", lines=20)
btn.click(fn=generate_and_export, inputs=[preset_choice, custom_scene, num, aspect_ratio, quality, stylize, seed, export_format], outputs=[export_info, output_preview])
with gr.Tab("Preset Manager"):
new_name = gr.Textbox(label="New Preset Name")
new_description = gr.Textbox(label="New Preset Description", lines=3)
add_btn = gr.Button("Add Preset")
add_output = gr.Textbox(label="Preset Manager Status")
add_btn.click(fn=add_preset, inputs=[new_name, new_description], outputs=add_output)
gr.Markdown('<a href="https://tischeins.org" target="_blank">Pro Studio Production Suite by TischEins.org</a>')
demo.launch()
|