in gradio_app.py [0:0]
def launch(port, listen=False):
with gr.Blocks(title="threestudio - Web Demo") as demo:
with gr.Row():
pid = gr.State()
with gr.Column(scale=1):
header = gr.Markdown(
"""
# threestudio
- Select a model from the dropdown menu.
- Input a text prompt.
- Hit Run!
"""
)
# model selection dropdown
model_selector = gr.Dropdown(
value=model_choices[0],
choices=model_choices,
label="Select a model",
)
# prompt input
prompt_input = gr.Textbox(value=DEFAULT_PROMPT, label="Input prompt")
# guidance scale slider
guidance_scale_input = gr.Slider(
minimum=0.0,
maximum=100.0,
value=load_model_config_attrs(model_selector.value)[
"guidance_scale"
],
step=0.5,
label="Guidance scale",
)
# seed slider
seed_input = gr.Slider(
minimum=0, maximum=2147483647, value=0, step=1, label="Seed"
)
max_steps_input = gr.Slider(
minimum=1,
maximum=5000,
value=5000,
step=1,
label="Number of training steps",
)
# full config viewer
with gr.Accordion("See full configurations", open=False):
config_editor = gr.Code(
value=load_model_config(model_selector.value),
language="yaml",
interactive=False,
)
# load config on model selection change
model_selector.change(
fn=on_model_selector_change,
inputs=model_selector,
outputs=[config_editor, guidance_scale_input],
)
run_btn = gr.Button(value="Run", variant="primary")
stop_btn = gr.Button(value="Stop", variant="stop", visible=False)
# generation status
status = gr.Textbox(
value="Hit the Run button to start.",
label="Status",
lines=1,
max_lines=1,
)
with gr.Column(scale=1):
with gr.Accordion("See terminal logs", open=False):
# logs
logs = gr.Textbox(label="Logs", lines=10)
# validation image display
output_image = gr.Image(value=None, label="Image")
# testing video display
output_video = gr.Video(value=None, label="Video")
# export mesh display
output_mesh = gr.Model3D(value=None, label="3D Mesh")
run_event = run_btn.click(
fn=run,
inputs=[
model_selector,
config_editor,
prompt_input,
guidance_scale_input,
seed_input,
max_steps_input,
],
outputs=[
pid,
status,
logs,
output_image,
output_video,
output_mesh,
run_btn,
stop_btn,
],
)
stop_btn.click(
fn=stop_run, inputs=[pid], outputs=[run_btn, stop_btn], cancels=[run_event]
)
launch_args = {"server_port": port}
if listen:
launch_args["server_name"] = "0.0.0.0"
demo.queue().launch(**launch_args)