TextTo3D_2.0 / app.py
curryporkchop's picture
Update app.py
d5d7958 verified
import gradio as gr
from gradio_client import Client, handle_file
# Create a client for the external 3D generation API hosted on "tencent/Hunyuan3D-2"
api_client = Client("tencent/Hunyuan3D-2")
def generate_3d(caption: str, image, steps: float, guidance_scale: float, seed: float, octree_resolution: str, check_box_rembg: bool):
"""
Calls the external /generation_all API endpoint to generate 3D outputs.
Returns a tuple of:
[0] White Mesh file (filepath),
[1] Textured Mesh file (filepath),
[2] HTML output string,
[3] Additional HTML output string.
"""
# If no image is provided, use a default image URL
if image is None:
image = "https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png"
image_path = handle_file(image)
result = api_client.predict(
caption=caption,
image=image_path,
steps=steps,
guidance_scale=guidance_scale,
seed=seed,
octree_resolution=octree_resolution,
check_box_rembg=check_box_rembg,
api_name="/generation_all"
)
return result
# Build the UI using Gradio Blocks for a more organized layout.
with gr.Blocks(title="3D Generator") as demo:
gr.Markdown("# 3D Generator")
gr.Markdown("Generate 3D models using the external `/generation_all` API from `tencent/Hunyuan3D-2`.")
with gr.Row():
with gr.Column():
caption_input = gr.Textbox(
label="Text Prompt (Caption)",
placeholder="Enter your caption here",
lines=2
)
image_input = gr.Image(
label="Input Image",
type="filepath"
)
with gr.Column():
steps_input = gr.Slider(
minimum=1, maximum=100, step=1, value=50,
label="Inference Steps"
)
guidance_scale_input = gr.Slider(
minimum=1.0, maximum=10.0, step=0.1, value=5.5,
label="Guidance Scale"
)
seed_input = gr.Slider(
minimum=0, maximum=10000, step=1, value=1234,
label="Seed"
)
octree_resolution_input = gr.Dropdown(
choices=["256", "384", "512"],
value="256",
label="Octree Resolution"
)
check_box_rembg_input = gr.Checkbox(
label="Remove Background",
value=True
)
generate_button = gr.Button("Generate 3D Model")
gr.Markdown("### Generated Outputs")
with gr.Row():
white_mesh_output = gr.File(label="Download White Mesh")
textured_mesh_output = gr.File(label="Download Textured Mesh")
output_html1 = gr.HTML(label="Output HTML 1")
output_html2 = gr.HTML(label="Output HTML 2")
# Connect the button click event to the generate_3d function.
generate_button.click(
fn=generate_3d,
inputs=[
caption_input, image_input, steps_input,
guidance_scale_input, seed_input,
octree_resolution_input, check_box_rembg_input
],
outputs=[
white_mesh_output, textured_mesh_output,
output_html1, output_html2
]
)
gr.Markdown("## Enjoy your generated 3D models!")
if __name__ == "__main__":
# Launch the app with a public share link (if desired)
demo.launch(share=True)