├── LICENSE ├── README.md ├── horse.png └── simple_stable_diffusion.ipynb /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Hack Club 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # simple stable diffusion 🌄 2 | 3 | get stable diffusion running in <10 minutes in colab: 4 | 5 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/hackclub/simple-stable-diffusion/blob/main/simple_stable_diffusion.ipynb) 6 | 7 | this notebook contains: 8 | 1. the absolute minimum code needed to generate images with stable diffusion 9 | 2. tips for writing good prompts 10 | 11 | currently this notebook only works on colab and not when run locally; a pr changing this would be appreciated 12 | 13 | ## what is stable diffusion? 14 | 15 | [stable diffusion](https://github.com/CompVis/stable-diffusion) is a text-to-image model similar to [dall·e 2](https://openai.com/dall-e-2/); that is, it inputs a text description and uses ai to output a matching image 16 | 17 | for instance, the following image was generated with stable diffusion using the prompt `gallant thoroughbred, a surrealist painting by Andy Warhol, mystical, ominous`: 18 | 19 | ![gallant thoroughbred, a surrealist painting by Andy Warhol, mystical, ominous](horse.png) 20 | 21 | it is generally considered to be of similar quality to dall·e, but is: 22 | 1. more computationally efficient 23 | 2. available to the public (ie can be run locally, not just through openai's playground) 24 | 25 | a more in-depth explanation of stable diffusion's architecture can be found in [this notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/stable_diffusion.ipynb) or [here](https://www.louisbouchard.ai/latent-diffusion-models/) 26 | -------------------------------------------------------------------------------- /horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackclub/simple-stable-diffusion/46d13f2dee2df38992dd4e2dcb149cdd64da9d9b/horse.png -------------------------------------------------------------------------------- /simple_stable_diffusion.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "rCQUegQeVsUY" 7 | }, 8 | "source": [ 9 | "### Setup (I)\n", 10 | "\n", 11 | "Before running any of the below blocks, **follow these steps:**\n", 12 | "1. Create an account at https://huggingface.co\n", 13 | "2. Create an access token with write permissions at https://huggingface.co/settings/tokens\n", 14 | "3. Register that you agree to the terms at https://huggingface.co/CompVis/stable-diffusion-v1-4" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "QYOlvQ1nQL7c" 21 | }, 22 | "source": [ 23 | "### Setup (II)\n", 24 | "\n", 25 | "Make sure you are using a GPU runtime to run this notebook, so inference is much faster. If the following command fails, use the `Runtime` menu above and select `Change runtime type`." 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "metadata": { 32 | "id": "zHkHsdtnry57" 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "!nvidia-smi" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "id": "paJt_cx5QgVz" 43 | }, 44 | "source": [ 45 | "Then **run each of the following blocks of code:**" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": null, 51 | "metadata": { 52 | "id": "aIrgth7sqFML" 53 | }, 54 | "outputs": [], 55 | "source": [ 56 | "!pip install diffusers==0.2.4\n", 57 | "!pip install transformers scipy ftfy\n", 58 | "!pip install \"ipywidgets>=7,<8\"\n", 59 | "\n", 60 | "from google.colab import output\n", 61 | "output.enable_custom_widget_manager()\n", 62 | "\n", 63 | "from huggingface_hub import notebook_login\n", 64 | "\n", 65 | "notebook_login()" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": { 72 | "id": "xSKWBKFPArKS" 73 | }, 74 | "outputs": [], 75 | "source": [ 76 | "import torch\n", 77 | "from torch import autocast\n", 78 | "from diffusers import StableDiffusionPipeline\n", 79 | "\n", 80 | "pipe = StableDiffusionPipeline.from_pretrained(\"CompVis/stable-diffusion-v1-4\", revision=\"fp16\", torch_dtype=torch.float16, use_auth_token=True)\n", 81 | "pipe = pipe.to(\"cuda\")" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": { 87 | "id": "e70AUtdj0M9e" 88 | }, 89 | "source": [ 90 | "### Generation\n", 91 | "\n", 92 | "And generate a single image with a given prompt here:" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": { 99 | "id": "yEErJFjlrSWS" 100 | }, 101 | "outputs": [], 102 | "source": [ 103 | "prompt = \"hourly thoroughbred, a surrealist painting by Pablo Picasso, hypnotic, lovecraftian\" # <--- !!!\n", 104 | "\n", 105 | "with autocast(\"cuda\"):\n", 106 | " image = pipe(prompt)[\"sample\"][0]\n", 107 | "\n", 108 | "image" 109 | ] 110 | }, 111 | { 112 | "cell_type": "markdown", 113 | "metadata": { 114 | "id": "6ZcgsflpBoEM" 115 | }, 116 | "source": [ 117 | "If you want to generate a grid of images, **run this once:**" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "id": "REF_yuHprSa1" 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "from PIL import Image\n", 129 | "\n", 130 | "def image_grid(imgs, rows, cols):\n", 131 | " assert len(imgs) == rows*cols\n", 132 | "\n", 133 | " w, h = imgs[0].size\n", 134 | " grid = Image.new('RGB', size=(cols*w, rows*h))\n", 135 | " grid_w, grid_h = grid.size\n", 136 | " \n", 137 | " for i, img in enumerate(imgs):\n", 138 | " grid.paste(img, box=(i%cols*w, i//cols*h))\n", 139 | " return grid" 140 | ] 141 | }, 142 | { 143 | "cell_type": "markdown", 144 | "metadata": { 145 | "id": "AcHccTDWbQRU" 146 | }, 147 | "source": [ 148 | "Then to generate a grid of images with a given prompt:" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": null, 154 | "metadata": { 155 | "id": "Ylscg48YYxfF" 156 | }, 157 | "outputs": [], 158 | "source": [ 159 | "num_cols = 3\n", 160 | "num_rows = 1\n", 161 | "\n", 162 | "prompt = [\"a gorgeous screenshot of a website advertising delicious cans of disgusting inedible sludge, dribbble contest winner, inspirational, made of insects, Russia Today\"] * num_cols * num_rows # <--- !!!\n", 163 | "\n", 164 | "with autocast(\"cuda\"):\n", 165 | " images = pipe(prompt)[\"sample\"]\n", 166 | "\n", 167 | "grid = image_grid(images, rows=num_rows, cols=num_cols)\n", 168 | "grid" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": { 174 | "id": "uf9pbS3kCsUf" 175 | }, 176 | "source": [ 177 | "### Generate non-square images\n", 178 | "\n", 179 | "Stable Diffusion produces images of `512 × 512` pixels by default. But it's very easy to override the default using the `height` and `width` arguments, so you can create rectangular images in portrait or landscape ratios.\n", 180 | "\n", 181 | "These are some recommendations to choose good image sizes:\n", 182 | "- Make sure `height` and `width` are both multiples of `8`.\n", 183 | "- Going below 512 might result in lower quality images.\n", 184 | "- Going over 512 in both directions will repeat image areas (global coherence is lost).\n", 185 | "- The best way to create non-square images is to use `512` in one dimension, and a value larger than that in the other one." 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": null, 191 | "metadata": { 192 | "id": "0SXnxd-ZrSfy" 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "prompt = \"a photograph of an astronaut riding a horse\"\n", 197 | "with autocast(\"cuda\"):\n", 198 | " image = pipe(prompt, height=512, width=768)[\"sample\"][0]\n", 199 | "image" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": { 205 | "id": "-CTHmTXpQNNZ" 206 | }, 207 | "source": [ 208 | "### Seed editing\n", 209 | "\n", 210 | "To see how a minor change to a prompt affects the output, use the same seed -- the output will look otherwise similar." 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": null, 216 | "metadata": { 217 | "id": "NA4JyMefQe6b" 218 | }, 219 | "outputs": [], 220 | "source": [ 221 | "prompt = [\n", 222 | " \"a poster advertising a can of blood, behance contest winner\",\n", 223 | " \"a poster advertising a drink can of blood, behance contest winner\",\n", 224 | " \"a poster advertising a drink can of blood, behance contest winner, chillwave\",\n", 225 | " \"a poster advertising a drink can of blood, behance contest winner, photorealistic\",\n", 226 | "]\n", 227 | "\n", 228 | "with autocast(\"cuda\"):\n", 229 | " images = pipe(prompt, seed=70)[\"sample\"]\n", 230 | "\n", 231 | "grid = image_grid(images, cols=len(prompt), rows=1)\n", 232 | "grid" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": { 238 | "id": "pcP9XQxkmCDC" 239 | }, 240 | "source": [ 241 | "### How to get good images\n", 242 | "\n", 243 | "* Adjust and tinker with your prompt a lot\n", 244 | " * It might take tens to hundreds of different prompts to consistently get the vibe you seek\n", 245 | "* Use this template if you don't know where to start: `[basic description of image], [medium] by [artist], [a lot of comma-separated descriptors]`\n", 246 | " * The `[medium] by [artist]` part could be omitted\n", 247 | " * Here's [a list of the sort of descriptors you would put at the end of prompts](https://github.com/pharmapsychotic/clip-interrogator/blob/main/data/flavors.txt)\n", 248 | " * Pick maybe three to a dozen that seem fitting; as with everything else, adjust them a lot\n", 249 | " * This repo [also has a list of artists and mediums](https://github.com/pharmapsychotic/clip-interrogator/blob/main/data)\n", 250 | " * If you want examples of prompts like this, try [running images through img2prompt](https://replicate.com/methexis-inc/img2prompt)\n", 251 | " * This image:\n", 252 | " * ![sotruesingle.png](data:image/png;base64,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)\n", 253 | " * ...run through img2prompt outputs this prompt: `a black and white logo with the words so true, a raytraced image by Karl Ballmer, reddit, letterism, epic, creative commons attribution, 20 megapixels`\n", 254 | " * (Note that no reasonable person would describe this as a \"raytraced image\" or as \"20 megapixels\". Part of this is inaccuracy on the part of img2prompt; it is also evidence one *really* should experiment a lot)" 255 | ] 256 | } 257 | ], 258 | "metadata": { 259 | "accelerator": "GPU", 260 | "colab": { 261 | "collapsed_sections": [], 262 | "machine_shape": "hm", 263 | "provenance": [] 264 | }, 265 | "gpuClass": "standard", 266 | "kernelspec": { 267 | "display_name": "Python 3.10.4 64-bit", 268 | "language": "python", 269 | "name": "python3" 270 | }, 271 | "language_info": { 272 | "name": "python", 273 | "version": "3.10.4" 274 | }, 275 | "vscode": { 276 | "interpreter": { 277 | "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" 278 | } 279 | } 280 | }, 281 | "nbformat": 4, 282 | "nbformat_minor": 0 283 | } 284 | --------------------------------------------------------------------------------