File size: 3,861 Bytes
b76c64e
1
{"cells": [{"cell_type": "markdown", "id": 302934307671667531413257853548643485645, "metadata": {}, "source": ["# Gradio Demo: stable-diffusion\n", "### Note: This is a simplified version of the code needed to create the Stable Diffusion demo. See full code here: https://hf.co/spaces/stabilityai/stable-diffusion/tree/main\n", "        "]}, {"cell_type": "code", "execution_count": null, "id": 272996653310673477252411125948039410165, "metadata": {}, "outputs": [], "source": ["!pip install -q gradio diffusers transformers nvidia-ml-py3 ftfy torch"]}, {"cell_type": "code", "execution_count": null, "id": 288918539441861185822528903084949547379, "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "import torch\n", "from diffusers import StableDiffusionPipeline\n", "from PIL import Image  \n", "import os\n", "\n", "auth_token = os.getenv(\"auth_token\")\n", "model_id = \"CompVis/stable-diffusion-v1-4\"\n", "device = \"cpu\"\n", "pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=auth_token, revision=\"fp16\", torch_dtype=torch.float16)\n", "pipe = pipe.to(device)\n", "\n", "def infer(prompt, samples, steps, scale, seed):        \n", "    generator = torch.Generator(device=device).manual_seed(seed)\n", "    images_list = pipe(\n", "        [prompt] * samples,\n", "        num_inference_steps=steps,\n", "        guidance_scale=scale,\n", "        generator=generator,\n", "    )\n", "    images = []\n", "    safe_image = Image.open(r\"unsafe.png\")\n", "    for i, image in enumerate(images_list[\"sample\"]):\n", "        if(images_list[\"nsfw_content_detected\"][i]):\n", "            images.append(safe_image)\n", "        else:\n", "            images.append(image)\n", "    return images\n", "    \n", "\n", "\n", "block = gr.Blocks()\n", "\n", "with block:\n", "    with gr.Group():\n", "        with gr.Box():\n", "            with gr.Row().style(mobile_collapse=False, equal_height=True):\n", "                text = gr.Textbox(\n", "                    label=\"Enter your prompt\",\n", "                    show_label=False,\n", "                    max_lines=1,\n", "                    placeholder=\"Enter your prompt\",\n", "                ).style(\n", "                    border=(True, False, True, True),\n", "                    rounded=(True, False, False, True),\n", "                    container=False,\n", "                )\n", "                btn = gr.Button(\"Generate image\").style(\n", "                    margin=False,\n", "                    rounded=(False, True, True, False),\n", "                )\n", "        gallery = gr.Gallery(\n", "            label=\"Generated images\", show_label=False, elem_id=\"gallery\"\n", "        ).style(grid=[2], height=\"auto\")\n", "\n", "        advanced_button = gr.Button(\"Advanced options\", elem_id=\"advanced-btn\")\n", "\n", "        with gr.Row(elem_id=\"advanced-options\"):\n", "            samples = gr.Slider(label=\"Images\", minimum=1, maximum=4, value=4, step=1)\n", "            steps = gr.Slider(label=\"Steps\", minimum=1, maximum=50, value=45, step=1)\n", "            scale = gr.Slider(\n", "                label=\"Guidance Scale\", minimum=0, maximum=50, value=7.5, step=0.1\n", "            )\n", "            seed = gr.Slider(\n", "                label=\"Seed\",\n", "                minimum=0,\n", "                maximum=2147483647,\n", "                step=1,\n", "                randomize=True,\n", "            )\n", "        text.submit(infer, inputs=[text, samples, steps, scale, seed], outputs=gallery)\n", "        btn.click(infer, inputs=[text, samples, steps, scale, seed], outputs=gallery)\n", "        advanced_button.click(\n", "            None,\n", "            [],\n", "            text,\n", "        )\n", "        \n", "block.launch()"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}