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 # Enable remote code execution for custom model code ).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). """ # Generate the model output outputs = pipe(prompt=prompt, guidance_scale=guidance_scale, num_inference_steps=num_inference_steps) # Extract mesh data if the output structure allows vertices = outputs["vertices"][0].detach().cpu().numpy() faces = outputs["faces"][0].detach().cpu().numpy() # Create and save the mesh using trimesh 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