import gradio as gr from gradio_pannellum import Pannellum import torch from huggingface_hub import snapshot_download from txt2panoimg import Text2360PanoramaImagePipeline from img2panoimg import Image2360PanoramaImagePipeline from PIL import Image # Download the model model_path = snapshot_download("archerfmy0831/sd-t2i-360panoimage") # Initialize pipelines txt2panoimg = Text2360PanoramaImagePipeline(model_path, torch_dtype=torch.float16) img2panoimg = Image2360PanoramaImagePipeline(model_path, torch_dtype=torch.float16) # Load the default mask image default_mask = Image.open("i2p-mask.jpg").convert("RGB") def text_to_pano(prompt, upscale): input_data = {'prompt': prompt, 'upscale': upscale} output = txt2panoimg(input_data) return output def image_to_pano(image, mask, prompt, upscale): image = image.resize((512, 512)) if mask is None: mask = default_mask.resize((512, 512)) else: mask = mask.resize((512, 512)) input_data = { 'prompt': prompt, 'image': image, 'mask': mask, 'upscale': upscale } output = img2panoimg(input_data) return output def text_to_pano_interface(prompt, upscale): output = text_to_pano(prompt, upscale) return Pannellum().update(panorama=output) def image_to_pano_interface(image, mask, prompt, upscale): output = image_to_pano(image, mask, prompt, upscale) return Pannellum().update(panorama=output) with gr.Blocks() as demo: gr.Markdown("# 360° Panorama Image Generation") with gr.Tab("Text to 360° Panorama"): with gr.Row(): with gr.Column(): t2p_input = gr.Textbox(label="Enter your prompt", lines=3) t2p_upscale = gr.Checkbox(label="Upscale (requires >16GB GPU)") t2p_generate = gr.Button("Generate Panorama") with gr.Column(): t2p_output = Pannellum(label="Generated 360° Panorama") t2p_generate.click( text_to_pano_interface, inputs=[t2p_input, t2p_upscale], outputs=t2p_output ) with gr.Tab("Image to 360° Panorama"): with gr.Row(): with gr.Column(): i2p_image = gr.Image(label="Upload Input Image", type="pil") i2p_mask = gr.Image(label="Upload Mask Image (Optional)", type="pil") i2p_prompt = gr.Textbox(label="Enter your prompt", lines=3) i2p_upscale = gr.Checkbox(label="Upscale (requires >16GB GPU)") i2p_generate = gr.Button("Generate Panorama") with gr.Column(): i2p_output = Pannellum(label="Generated 360° Panorama") i2p_generate.click( image_to_pano_interface, inputs=[i2p_image, i2p_mask, i2p_prompt, i2p_upscale], outputs=i2p_output ) demo.launch()