{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "ycYWcsEKc6w7" }, "source": [ "# Stable Diffusion AI Notebook (Release 2.0.0)\n", "\n", "\"stable-diffusion-ai\"
\n", "#### Instructions:\n", "1. Execute each cell in order to mount a Dream bot and create images from text.
\n", "2. Once cells 1-8 were run correctly you'll be executing a terminal in cell #9, you'll need to enter `python scripts/dream.py` command to run Dream bot.
\n", "3. After launching dream bot, you'll see:
`Dream > ` in terminal.
Insert a command, eg. `Dream > Astronaut floating in a distant galaxy`, or type `-h` for help.\n", "3. After completion you'll see your generated images in path `stable-diffusion/outputs/img-samples/`, you can also show last generated images in cell #10.\n", "4. To quit Dream bot use `q` command.
\n", "---\n", "Note: It takes some time to load, but after installing all dependencies you can use the bot all time you want while colab instance is up.
\n", "Requirements: For this notebook to work you need to have [Stable-Diffusion-v-1-4](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original) stored in your Google Drive, it will be needed in cell #7\n", "##### For more details visit Github repository: [invoke-ai/InvokeAI](https://github.com/invoke-ai/InvokeAI)\n", "---\n" ] }, { "cell_type": "markdown", "metadata": { "id": "dr32VLxlnouf" }, "source": [ "## ◢ Installation" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "a2Z5Qu_o8VtQ" }, "outputs": [], "source": [ "#@title 1. Check current GPU assigned\n", "!nvidia-smi -L\n", "!nvidia-smi" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "vbI9ZsQHzjqF" }, "outputs": [], "source": [ "#@title 2. Download stable-diffusion Repository\n", "from os.path import exists\n", "\n", "!git clone --quiet https://github.com/invoke-ai/InvokeAI.git # Original repo\n", "%cd /content/InvokeAI/\n", "!git checkout --quiet tags/v2.0.0" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "QbXcGXYEFSNB" }, "outputs": [], "source": [ "#@title 3. Install dependencies\n", "import gc\n", "\n", "!wget https://raw.githubusercontent.com/invoke-ai/InvokeAI/development/environments-and-requirements/requirements-base.txt\n", "!wget https://raw.githubusercontent.com/invoke-ai/InvokeAI/development/environments-and-requirements/requirements-win-colab-cuda.txt\n", "!pip install colab-xterm\n", "!pip install -r requirements-lin-win-colab-CUDA.txt\n", "!pip install clean-fid torchtext\n", "!pip install transformers\n", "gc.collect()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "8rSMhgnAttQa" }, "outputs": [], "source": [ "#@title 4. Restart Runtime\n", "exit()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "ChIDWxLVHGGJ" }, "outputs": [], "source": [ "#@title 5. Load small ML models required\n", "import gc\n", "%cd /content/InvokeAI/\n", "!python scripts/preload_models.py\n", "gc.collect()" ] }, { "cell_type": "markdown", "metadata": { "id": "795x1tMoo8b1" }, "source": [ "## ◢ Configuration" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "YEWPV-sF1RDM" }, "outputs": [], "source": [ "#@title 6. Mount google Drive\n", "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "zRTJeZ461WGu" }, "outputs": [], "source": [ "#@title 7. Drive Path to model\n", "#@markdown Path should start with /content/drive/path-to-your-file
\n", "#@markdown Note: Model should be downloaded from https://huggingface.co
\n", "#@markdown Lastest release: [Stable-Diffusion-v-1-4](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original)\n", "from os.path import exists\n", "\n", "model_path = \"\" #@param {type:\"string\"}\n", "if exists(model_path):\n", " print(\"✅ Valid directory\")\n", "else: \n", " print(\"❌ File doesn't exist\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "UY-NNz4I8_aG" }, "outputs": [], "source": [ "#@title 8. Symlink to model\n", "\n", "from os.path import exists\n", "import os \n", "\n", "# Folder creation if it doesn't exist\n", "if exists(\"/content/InvokeAI/models/ldm/stable-diffusion-v1\"):\n", " print(\"❗ Dir stable-diffusion-v1 already exists\")\n", "else:\n", " %mkdir /content/InvokeAI/models/ldm/stable-diffusion-v1\n", " print(\"✅ Dir stable-diffusion-v1 created\")\n", "\n", "# Symbolic link if it doesn't exist\n", "if exists(\"/content/InvokeAI/models/ldm/stable-diffusion-v1/model.ckpt\"):\n", " print(\"❗ Symlink already created\")\n", "else: \n", " src = model_path\n", " dst = '/content/InvokeAI/models/ldm/stable-diffusion-v1/model.ckpt'\n", " os.symlink(src, dst) \n", " print(\"✅ Symbolic link created successfully\")" ] }, { "cell_type": "markdown", "metadata": { "id": "Mc28N0_NrCQH" }, "source": [ "## ◢ Execution" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "ir4hCrMIuUpl" }, "outputs": [], "source": [ "#@title 9. Run Terminal and Execute Dream bot\n", "#@markdown Steps:
\n", "#@markdown 1. Execute command `python scripts/invoke.py` to run InvokeAI.
\n", "#@markdown 2. After initialized you'll see `Dream>` line.
\n", "#@markdown 3. Example text: `Astronaut floating in a distant galaxy`
\n", "#@markdown 4. To quit Dream bot use: `q` command.
\n", "\n", "%load_ext colabxterm\n", "%xterm\n", "gc.collect()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "qnLohSHmKoGk" }, "outputs": [], "source": [ "#@title 10. Show the last 15 generated images\n", "import glob\n", "import matplotlib.pyplot as plt\n", "import matplotlib.image as mpimg\n", "%matplotlib inline\n", "\n", "images = []\n", "for img_path in sorted(glob.glob('/content/InvokeAI/outputs/img-samples/*.png'), reverse=True):\n", " images.append(mpimg.imread(img_path))\n", "\n", "images = images[:15] \n", "\n", "plt.figure(figsize=(20,10))\n", "\n", "columns = 5\n", "for i, image in enumerate(images):\n", " ax = plt.subplot(len(images) / columns + 1, columns, i + 1)\n", " ax.axes.xaxis.set_visible(False)\n", " ax.axes.yaxis.set_visible(False)\n", " ax.axis('off')\n", " plt.imshow(image)\n", " gc.collect()\n", "\n" ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "private_outputs": true, "provenance": [] }, "gpuClass": "standard", "kernelspec": { "display_name": "Python 3.9.12 64-bit", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.9.12" }, "vscode": { "interpreter": { "hash": "4e870c5c5fe42db7e2c5647ae5af656ff3391bf8c2b729cbf7fa0e16ca8cb5af" } } }, "nbformat": 4, "nbformat_minor": 0 }