from diffusers import StableDiffusionPipeline import torch import requests import base64 import gradio as gr import os from gradio.components import Textbox HF_TOKEN = os.getenv('HF_TOKEN') hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "movie-img-generator") auth_token = os.environ.get("auth_token") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=auth_token) pipe = pipe.to(device) generator = torch.Generator(device=device) seed = generator.seed() def improve_image(img): url = "https://hf.space/embed/abidlabs/GFPGAN/+/api/predict" img_to_str = gr.processing_utils.encode_pil_to_base64(img) inputs = {'data': [img_to_str, 2]} resp = requests.post(url, json = inputs) resp_img = gr.processing_utils.decode_base64_to_image(resp.json()['data'][0]) return resp_img def generate(celebrity, setting): prompt = "A movie poster with title and caption of {} in {}".format(celebrity, setting) image = pipe(prompt, latents=torch.randn((1, 4, 64, 64), generator=torch.manual_seed(12)), guidance_scale=7).images[0] enhanced_img = improve_image(image) return enhanced_img demo = gr.Interface( title="🎬 Movie Poster Image Generator", description="Generate an image of a celebrity in a cinematic setting by entering in any celebrity name and selecting a TV show/movie to see what image is generated!🍿", inputs=[gr.Textbox(lines=1, label="Enter a celebrity name:"), gr.Dropdown(["Stranger Things", "Mean Girls", "Titanic", "The Big Bang Theory", "Game of Thrones"], label="Select a setting:"),], outputs="image", fn=generate, allow_flagging="manual", flagging_options=["Wrong Celebrity", "Wrong Setting", "Image Not Clear"], flagging_callback=hf_writer ) demo.launch(debug=True)