diff --git a/README.md b/README.md
index 8d108733ea..a2b101be6e 100644
--- a/README.md
+++ b/README.md
@@ -152,6 +152,14 @@ Note that loading GFPGAN consumes additional GPU memory, and will add
a few seconds to image generation. However, if can afford a 3090s with
24Gi, the results are well worth it.
+## Google Colab
+
+Stable Diffusion AI Notebook:
+Open and follow instructions to use an isolated environment running Dream.
+
+Output example:
+![Colab Notebook](static/colab_notebook.png)
+
## Barebones Web Server
As of version 1.10, this distribution comes with a bare bones web
diff --git a/Stable_Diffusion_AI_Notebook.ipynb b/Stable_Diffusion_AI_Notebook.ipynb
new file mode 100644
index 0000000000..defc158346
--- /dev/null
+++ b/Stable_Diffusion_AI_Notebook.ipynb
@@ -0,0 +1,256 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Stable_Diffusion_AI_Notebook.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "private_outputs": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "accelerator": "GPU",
+ "gpuClass": "standard"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Stable Diffusion AI Notebook\n",
+ "\n",
+ "
\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 to enter `pipenv run 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 display 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 #6\n",
+ "##### For more details visit Github repository: [lstein/stable-diffusion](https://github.com/lstein/stable-diffusion)\n",
+ "---\n"
+ ],
+ "metadata": {
+ "id": "ycYWcsEKc6w7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 1. Check current GPU assigned\n",
+ "!nvidia-smi -L\n",
+ "!nvidia-smi"
+ ],
+ "metadata": {
+ "cellView": "form",
+ "id": "a2Z5Qu_o8VtQ"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "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",
+ "if exists(\"/content/stable-diffusion/\")==True:\n",
+ " print(\"Already downloaded repo\")\n",
+ "else:\n",
+ " !git clone --quiet https://github.com/lstein/stable-diffusion.git # Original repo\n",
+ " %cd stable-diffusion/\n",
+ " !git checkout --quiet tags/release-1.09\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 3. Install Python 3.8 \n",
+ "%%capture --no-stderr\n",
+ "import gc\n",
+ "!apt-get -qq install python3.8\n",
+ "gc.collect()"
+ ],
+ "metadata": {
+ "id": "daHlozvwKesj",
+ "cellView": "form"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 4. Install dependencies from file in a VirtualEnv\n",
+ "#@markdown Be patient, it takes ~ 5 - 7min
\n",
+ "%%capture --no-stderr\n",
+ "#Virtual environment\n",
+ "!pip install pipenv -q\n",
+ "!pip install colab-xterm\n",
+ "%load_ext colabxterm\n",
+ "!pipenv --python 3.8\n",
+ "!pipenv install -r requirements.txt --skip-lock\n",
+ "gc.collect()\n"
+ ],
+ "metadata": {
+ "cellView": "form",
+ "id": "QbXcGXYEFSNB"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 5. Mount google Drive\n",
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ],
+ "metadata": {
+ "cellView": "form",
+ "id": "YEWPV-sF1RDM"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 6. 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)==True:\n",
+ " print(\"✅ Valid directory\")\n",
+ "else: \n",
+ " print(\"❌ File doesn't exist\")"
+ ],
+ "metadata": {
+ "cellView": "form",
+ "id": "zRTJeZ461WGu"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 7. 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/stable-diffusion/models/ldm/stable-diffusion-v1\")==True:\n",
+ " print(\"❗ Dir stable-diffusion-v1 already exists\")\n",
+ "else:\n",
+ " %mkdir /content/stable-diffusion/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/stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt\")==True:\n",
+ " print(\"❗ Symlink already created\")\n",
+ "else: \n",
+ " src = model_path\n",
+ " dst = '/content/stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt'\n",
+ " os.symlink(src, dst) \n",
+ " print(\"✅ Symbolic link created successfully\")"
+ ],
+ "metadata": {
+ "id": "UY-NNz4I8_aG",
+ "cellView": "form"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 8. Load small ML models required\n",
+ "%%capture --no-stderr\n",
+ "!pipenv run scripts/preload_models.py\n",
+ "gc.collect()"
+ ],
+ "metadata": {
+ "cellView": "form",
+ "id": "ChIDWxLVHGGJ"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 9. Run Terminal and Execute Dream bot\n",
+ "#@markdown Steps:
\n",
+ "#@markdown 1. Execute command `pipenv run scripts/dream.py` to run dream bot.
\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",
+ "#Run from virtual env\n",
+ "\n",
+ "%xterm\n",
+ "gc.collect()"
+ ],
+ "metadata": {
+ "id": "ir4hCrMIuUpl",
+ "cellView": "form"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#@title 10. Show generated images\n",
+ "\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 glob.glob('/content/stable-diffusion/outputs/img-samples/*.png'):\n",
+ " images.append(mpimg.imread(img_path))\n",
+ "\n",
+ "# Remove ticks and labels on x-axis and y-axis both\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": {
+ "cellView": "form",
+ "id": "qnLohSHmKoGk"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/static/colab_notebook.png b/static/colab_notebook.png
new file mode 100644
index 0000000000..933664a86f
Binary files /dev/null and b/static/colab_notebook.png differ