TischEins's picture
Upload 3 files
fa32687 verified
import gradio as gr
import pandas as pd
import random
import json
with open("presets.json") as f:
presets = json.load(f)
camera_lens_map = presets # placeholders
# rebuild camera_lens_map and camera_film_map from presets
camera_lens_map = {p: [presets[p]['lens']] for p in presets}
camera_film_map = {p: [presets[p]['film']] for p in presets}
light_conditions = list({p: presets[p]['light'] for p in presets}.values())
mj_versions = ["6","6.1","7"]
scene_variations = ["with dramatic lens flare","with soft bokeh background"] * 10
def apply_preset(p):
pre = presets[p]
return pre['camera'], pre['lens'], pre['film'], pre['light'], pre['scene']
def generate_mid(camera, lens, film, light, mjv, ar, q, s, seed, scene, num):
prompts=[]
for i in range(num):
var = random.choice(scene_variations)
sc = f"{scene}, {var}"
args = f"--ar {ar} --q {q} --s {s}" + (f" --seed {seed}" if seed else "")
prompts.append(f"{sc}, shot with {camera} and {lens}, using {film} film, under {light} {args} --v {mjv}")
return "\n".join(prompts), prompts
def generate_sora(camera, lens, film, light, scene):
var = random.choice(scene_variations)
sc = f"{scene}, {var}"
p = f"A detailed scene of {sc}, captured using a {camera} and {lens}, simulated with {film} film look and {light} lighting."
return p, [p]
def export_txt(prompts):
with open("prompts.txt","w") as f: f.write("\n".join(prompts))
return gr.File.update(value="prompts.txt")
def export_csv(prompts):
df=pd.DataFrame({"Prompt":prompts})
df.to_csv("prompts.csv", index=False)
return gr.File.update(value="prompts.csv")
with gr.Blocks() as demo:
gr.Markdown("## TischEins.org | Midjourney Prompt Engine\nPro Studio Prompt Generator for Midjourney and Sora")
preset = gr.Dropdown(choices=list(presets.keys()), label="Select Preset")
camera = gr.Dropdown(choices=list(camera_lens_map.keys()), label="Camera Model")
lens = gr.Dropdown(choices=[], label="Lens Model")
film = gr.Dropdown(choices=[], label="Color Film Type")
light = gr.Dropdown(choices=light_conditions, label="Light Condition")
preset.change(fn=apply_preset, inputs=preset, outputs=[camera, lens, film, light, scene := gr.Textbox(label="Scene Description")])
camera.change(fn=lambda x: gr.update(choices=camera_lens_map[x]), inputs=camera, outputs=lens)
camera.change(fn=lambda x: gr.update(choices=camera_film_map[x]), inputs=camera, outputs=film)
with gr.Tab("Midjourney"):
mjv = gr.Dropdown(choices=mj_versions, label="Midjourney Version", value="7")
ar = gr.Textbox(label="Aspect Ratio", value="5:4")
q = gr.Textbox(label="Quality", value="2")
s = gr.Textbox(label="Stylize", value="0")
seed = gr.Textbox(label="Seed (optional)")
num = gr.Slider(1,5,value=3,label="Number of Prompts")
out_mid, state_mid = gr.Textbox(lines=10), gr.State([])
gen = gr.Button("Generate")
gen.click(fn=generate_mid, inputs=[camera, lens, film, light, mjv, ar, q, s, seed, scene, num], outputs=[out_mid, state_mid])
txtb = gr.Button("Export TXT"); csvb = gr.Button("Export CSV")
dtxt = gr.File(visible=False); dcsv = gr.File(visible=False)
txtb.click(export_txt, state_mid, dtxt); csvb.click(export_csv, state_mid, dcsv)
with gr.Tab("ChatGPT Sora"):
out_s, state_s = gr.Textbox(lines=5), gr.State([])
gen_s = gr.Button("Generate")
gen_s.click(fn=generate_sora, inputs=[camera, lens, film, light, scene], outputs=[out_s, state_s])
txt_s = gr.Button("Export TXT"); csv_s = gr.Button("Export CSV")
dtxt_s = gr.File(visible=False); dcsv_s = gr.File(visible=False)
txt_s.click(export_txt, state_s, dtxt_s); csv_s.click(export_csv, state_s, dcsv_s)
gr.Markdown('<a href="https://tischeins.org">Pro Studio Mode by TischEins.org</a>')
demo.launch()