Spaces:
Sleeping
Sleeping
| 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() | |