File size: 3,921 Bytes
58d514c
 
 
 
 
 
 
 
 
fa32687
 
 
 
58d514c
fa32687
 
 
58d514c
fa32687
 
 
58d514c
fa32687
58d514c
 
fa32687
 
58d514c
fa32687
58d514c
 
fa32687
58d514c
 
fa32687
 
58d514c
 
fa32687
58d514c
 
 
fa32687
58d514c
 
 
 
 
fa32687
 
 
 
 
 
 
 
 
58d514c
fa32687
58d514c
 
 
 
fa32687
 
 
 
58d514c
 
fa32687
 
58d514c
 
fa32687
 
58d514c
 
 
fa32687
58d514c
 
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

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()