| | import streamlit as st |
| | from PIL import Image |
| | from model import load_pipeline, generate_3d_model, convert_to_gif |
| | import os |
| |
|
| | |
| | pipe = load_pipeline() |
| |
|
| | st.title("3D Model Generator with GIF Export") |
| | prompt = st.text_input("Enter a prompt for the 3D model:", "a shark") |
| | output_obj_path = "generated_3d_model.obj" |
| | output_gif_path = "generated_3d_model.gif" |
| |
|
| | if st.button("Generate 3D Model and Convert to GIF"): |
| | with st.spinner("Generating 3D model..."): |
| | obj_path = generate_3d_model(pipe, prompt, output_path=output_obj_path) |
| | |
| | |
| | mesh = trimesh.load(obj_path) |
| | images = [] |
| | |
| | |
| | for angle in range(0, 360, 30): |
| | scene = mesh.scene() |
| | scene.set_camera(angles=(angle, angle)) |
| | data = scene.save_image(resolution=(256, 256)) |
| | images.append(Image.open(BytesIO(data))) |
| | |
| | |
| | gif_path = convert_to_gif(images, gif_path=output_gif_path) |
| | |
| | |
| | st.image(gif_path, caption="Generated 3D Model GIF") |
| | |
| | |
| | with open(gif_path, "rb") as file: |
| | st.download_button( |
| | label="Download GIF", |
| | data=file, |
| | file_name="generated_3d_model.gif", |
| | mime="image/gif" |
| | ) |
| |
|
| | with open(obj_path, "rb") as file: |
| | st.download_button( |
| | label="Download 3D Model (.obj)", |
| | data=file, |
| | file_name="generated_3d_model.obj", |
| | mime="application/octet-stream" |
| | ) |
| |
|