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