| import torch |
| from diffusers import DiffusionPipeline |
| import trimesh |
| import numpy as np |
| from PIL import Image |
| from io import BytesIO |
|
|
| def load_pipeline(): |
| """ |
| Load the LGM-full model pipeline from Hugging Face with remote code execution enabled. |
| """ |
| ckpt_id = "dylanebert/LGM-full" |
| pipe = DiffusionPipeline.from_pretrained( |
| ckpt_id, |
| torch_dtype=torch.float32, |
| trust_remote_code=True |
| ).to("cpu") |
| return pipe |
|
|
| def generate_3d_model(pipe, prompt, output_path="output.obj", guidance_scale=7.5, num_inference_steps=32): |
| """ |
| Generate a 3D model from the prompt and save it in a Blender-compatible format (.obj). |
| """ |
| |
| outputs = pipe(prompt=prompt, guidance_scale=guidance_scale, num_inference_steps=num_inference_steps) |
| |
| |
| vertices = outputs["vertices"][0].detach().cpu().numpy() |
| faces = outputs["faces"][0].detach().cpu().numpy() |
| |
| |
| mesh = trimesh.Trimesh(vertices=vertices, faces=faces, process=True) |
| mesh.export(output_path) |
| return output_path |
|
|
| def convert_to_gif(images, gif_path="output.gif"): |
| """ |
| Convert a list of images into a GIF. |
| """ |
| images[0].save( |
| gif_path, save_all=True, append_images=images[1:], loop=0, duration=100 |
| ) |
| return gif_path |
|
|