2022-09-08 13:02:54 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "gfKvWAVnz8OB"
},
"source": [
"# Voldemort's Stable Diffusion WebUI\n",
"\n",
"Adapted from: https://colab.research.google.com/drive/1Iy-xW9t1-OQWhb0hNxueGij8phCyluOh"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## Installation and Setup\n",
"\n",
"You must reinstall everything each time you restart the machine. If already downloaded dependencies will be auto-updated."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "OL82Y4rBjZIV"
},
"outputs": [],
"source": [
"!nvidia-smi"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"### Clone the central repository"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
2022-09-08 19:55:21 -06:00
"id": "sBbcB4vwj_jm",
"tags": []
2022-09-08 13:02:54 -06:00
},
"outputs": [],
"source": [
"import os.path\n",
"\n",
"if not os.path.exists('/notebooks/stable-diffusion-webui'):\n",
2022-09-08 15:49:49 -06:00
" %cd /notebooks/\n",
2022-09-08 13:02:54 -06:00
" !git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui\n",
"else: # update repo if already exists\n",
" print('stable-diffusion-webui already downloaded, updating')\n",
" %cd /notebooks/stable-diffusion-webui\n",
" !git pull"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C68TUpkq0nj_",
"tags": []
},
"source": [
"### Install requirements and download repositories."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "SaAJk33ppFw1",
"scrolled": true,
"tags": []
},
"outputs": [],
"source": [
"%cd /notebooks/stable-diffusion-webui\n",
"\n",
"!pip install -r requirements.txt\n",
"\n",
"if not os.path.exists('/notebooks/stable-diffusion-webui/repositories'): # download repositories if they don't exist\n",
" !mkdir /notebooks/stable-diffusion-webui/repositories\n",
" !git clone https://github.com/CompVis/stable-diffusion.git /notebooks/stable-diffusion-webui/repositories/stable-diffusion\n",
" !git clone https://github.com/CompVis/taming-transformers.git /notebooks/stable-diffusion-webui/repositories/taming-transformers\n",
" !git clone https://github.com/sczhou/CodeFormer.git /notebooks/stable-diffusion-webui/repositories/CodeFormer\n",
"else: # update repositories if they do exist\n",
" print('Updating dependencies')\n",
" for dir in os.listdir('/notebooks/stable-diffusion-webui/repositories'):\n",
" %cd /notebooks/stable-diffusion-webui/repositories/$dir\n",
" !git pull\n",
" \n",
"!pip install -r /notebooks/stable-diffusion-webui/repositories/CodeFormer/requirements.txt\n",
"\n",
"if not os.path.exists('/notebooks/stable-diffusion-webui/GFPGANv1.3.pth'):\n",
" !wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth\n",
"else:\n",
2022-09-08 16:40:35 -06:00
" print('GFPGANv1.3.pth already downloaded')\n",
" \n",
2022-09-09 12:15:51 -06:00
"!mkdir -p /notebooks/models/\n",
"\n",
"# Get some storage back\n",
"!pip cache purge\n",
"!sudo apt-get clean"
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {
2022-09-08 15:49:49 -06:00
"id": "F0EINk5M0s-w",
"tags": []
2022-09-08 13:02:54 -06:00
},
"source": [
"### Download the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2022-09-08 19:55:21 -06:00
"I've provided a few different ways of aquiring the models. Try the torrent option first.\n",
"\n",
2022-09-08 22:08:17 -06:00
"You don't need to repeat this step if you've already downloaded the models.\n",
2022-09-08 19:55:21 -06:00
"\n",
2022-09-09 12:15:51 -06:00
"**Filesize and Storage Disclaimer**\n",
"\n",
"Paperspace free tier has only 5GB of storage space. The standard model is 4GB and waifu is 7.2GB. If you run out of storage space, you have two options:\n",
2022-09-09 12:25:40 -06:00
"1. Add a payment method to your account. Storage overages are billed at \\$0.29/GB and billing occurs monthly and runs at midnight on the first of each month. With a payment method on file, Paperspace will let you use more storage and if you time it right you shouldn't actually be charged for it.\n",
"2. Upgrade to a Pro account. They'll give you 15GB and you'll get longer runtimes and more powerful free GPUs.\n",
2022-09-09 12:26:59 -06:00
"3. Create an account using my referral code `KQLRH37` or [signup link](https://console.paperspace.com/signup?R=KQLRH37). You'll get \\$10 credit that you should be able to put towards the storage overage charges."
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"#### Standard Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2022-09-08 19:55:21 -06:00
"**Torrent**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!apt update\n",
"!apt install -y aria2\n",
"%cd /notebooks/models\n",
2022-09-09 12:49:42 -06:00
"!aria2c --seed-time=0 --max-overall-upload-limit=1K \"magnet:?xt=urn:btih:3A4A612D75ED088EA542ACAC52F9F45987488D1C&tr=udp://tracker.opentrackr.org:1337\""
2022-09-08 19:55:21 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Web Download**\n",
"\n",
2022-09-08 13:02:54 -06:00
"Voldy provided an alternative download if you don't want to use HuggingFace.\n",
"\n",
"[https://drive.google.com/file/d/1wHFgl0ivCmIZv88hVZXkb8oy9qCuaBGA/view](https://drive.google.com/file/d/1wHFgl0ivCmIZv88hVZXkb8oy9qCuaBGA/view)\n",
"\n",
2022-09-08 16:40:35 -06:00
"Download it to your computer then upload it to `/notebooks/models` (make sure it's named `sd-v1-4.ckpt`).\n",
2022-09-08 13:02:54 -06:00
"\n",
"HuggingFace is much faster and reliable but you need to get access to the repo and provide your user token."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "CT_J9L7oqLxG"
},
"outputs": [],
"source": [
2022-09-08 19:55:21 -06:00
"user_token = \"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\"\n",
2022-09-08 13:02:54 -06:00
"\n",
"# ===============================================================================================\n",
"\n",
2022-09-08 15:49:49 -06:00
"user_header = f\"'Authorization: Bearer {user_token}'\"\n",
2022-09-08 16:40:35 -06:00
"!wget --header={user_header} https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /notebooks/models/sd-v1-4.ckpt"
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"#### Waifu Diffusion"
]
},
2022-09-08 15:49:49 -06:00
{
"cell_type": "markdown",
2022-09-08 19:55:21 -06:00
"metadata": {},
2022-09-08 15:49:49 -06:00
"source": [
2022-09-08 19:55:21 -06:00
"**Torrent**"
2022-09-08 15:49:49 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2022-09-08 19:55:21 -06:00
"!apt update\n",
"!apt install -y aria2\n",
"%cd /notebooks/models\n",
2022-09-09 12:49:42 -06:00
"!aria2c --seed-time=0 --max-overall-upload-limit=1K \"magnet:?xt=urn:btih:F45CECF4E9DE86DA83A78DD2CCCD7F27D5557A52&tr=udp://nyquist.localghost.org:6969\""
2022-09-08 15:49:49 -06:00
]
},
2022-09-08 13:02:54 -06:00
{
"cell_type": "markdown",
2022-09-08 19:55:21 -06:00
"metadata": {
"tags": []
},
2022-09-08 13:02:54 -06:00
"source": [
2022-09-08 19:55:21 -06:00
"**Web Download**\n",
2022-09-08 15:49:49 -06:00
"\n",
2022-09-08 19:55:21 -06:00
"Very slow"
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2022-09-08 19:55:21 -06:00
"!wget https://thisanimedoesnotexist.ai/downloads/wd-v1-2-full-ema.ckpt -O /notebooks/models/wd-v1-2-full-ema.ckpt"
2022-09-08 13:02:54 -06:00
]
},
2022-09-09 12:40:33 -06:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Half-size Model**\n",
"\n",
2022-09-09 15:48:47 -06:00
"If you're on free tier try this first, it's 3.5GB."
2022-09-09 12:40:33 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!apt update\n",
"!apt install -y aria2\n",
"%cd /notebooks/models\n",
2022-09-09 12:49:42 -06:00
"!aria2c --seed-time=0 --max-overall-upload-limit=1K \"magnet:?xt=urn:btih:153590FD7E93EE11D8DB951451056C362E3A9150&dn=wd-v1-2-full-ema-pruned.ckpt&tr=udp://nyquist.localghost.org:6969\""
2022-09-09 12:40:33 -06:00
]
},
2022-09-08 13:02:54 -06:00
{
"cell_type": "markdown",
2022-09-08 16:40:35 -06:00
"metadata": {
2022-09-09 12:40:33 -06:00
"jp-MarkdownHeadingCollapsed": true,
2022-09-08 16:40:35 -06:00
"tags": []
},
2022-09-08 13:02:54 -06:00
"source": [
2022-09-08 16:40:35 -06:00
"#### Gradient Dataset Import"
2022-09-08 15:49:49 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Paperspace provides a way to mount external storage to notebooks, called *Datasets*. This is an advanced method but it will save you many GB since you can reuse the same model file across different notebooks.\n",
"\n",
"https://docs.paperspace.com/gradient/cli/datasets"
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mounted_dataset_path = '/datasets/<name>'\n",
2022-09-08 15:49:49 -06:00
"\n",
"# ============================================================\n",
"\n",
2022-09-08 16:40:35 -06:00
"for file in os.listdir(mounted_dataset_path):\n",
" if file.endswith(\"ckpt\"):\n",
" !ln -s $mounted_dataset_path/$file /notebooks/models/$file\n",
" !ls -la --block-size=GB /notebooks/models/$file"
2022-09-08 13:02:54 -06:00
]
},
2022-09-09 10:19:44 -06:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2022-09-09 12:49:42 -06:00
"### Clean up and restart the kernel"
2022-09-09 10:19:44 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2022-09-09 12:49:42 -06:00
"!rm /notebooks/models/*.aria2\n",
"!apt autoremove --purge -y aria2\n",
2022-09-09 10:19:44 -06:00
"import os\n",
"os.kill(os.getpid(), 9)"
]
},
2022-09-08 13:02:54 -06:00
{
"cell_type": "markdown",
"metadata": {
"id": "xt8lbdmC04ox"
},
"source": [
"# Launch the WebUI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2022-09-08 16:51:44 -06:00
"First, enter the name of the model you want to use into `model_name` in the cell below.\n",
"\n",
2022-09-08 19:55:21 -06:00
"Then run the model. You will get a link to nnn.gradio.app, that's your WebUI. Follow it.\n",
"\n",
"If you have any issues, restart the kernel."
2022-09-08 13:02:54 -06:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
2022-09-08 15:49:49 -06:00
"id": "R-xAdMA5wxXd",
"scrolled": true,
"tags": []
2022-09-08 13:02:54 -06:00
},
"outputs": [],
"source": [
2022-09-08 16:40:35 -06:00
"# Possible models:\n",
2022-09-08 16:51:44 -06:00
"# sd-v1-4.ckpt (standard diffusion v1.4)\n",
2022-09-08 19:55:21 -06:00
"# wd-v1-2-full-ema.ckpt (waifu-diffusion v1.2)\n",
2022-09-09 12:40:33 -06:00
"# wd-v1-2-full-ema-pruned.ckpt (waifu-diffusion v1.2 half-size)\n",
2022-09-08 13:02:54 -06:00
"\n",
2022-09-08 16:51:44 -06:00
"model_name = ''\n",
2022-09-08 13:02:54 -06:00
"\n",
2022-09-08 16:40:35 -06:00
"# ========================================================================================================\n",
"\n",
"model_file = f'/notebooks/models/{model_name}'\n",
"\n",
"import sys\n",
2022-09-08 15:49:49 -06:00
"import os\n",
2022-09-08 16:40:35 -06:00
"\n",
"if not os.path.exists(model_file):\n",
" print('Cannot find model file:', model_file)\n",
" sys.exit(1)\n",
2022-09-08 19:55:21 -06:00
"\n",
"if model_name == '':\n",
" print('You forgot to fill out the variable model_file above.')\n",
" sys.exit(1)\n",
"\n",
2022-09-09 15:48:47 -06:00
"!python /notebooks/stable-diffusion-webui/webui.py --share --ckpt $model_file --show-negative-prompt --no-progressbar-hiding"
]
},
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"# Export Generations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This block will compress the outputs with 7zip max compression then delete the originals. It expects you to have `log/` and `outputs/` in `/notebooks/`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!apt install -y p7zip-full\n",
"from datetime import datetime\n",
"import os\n",
"datetime_str = datetime.now().strftime('%m-%d-%Y_%H:%M:%S')\n",
"%cd /notebooks/\n",
"!mkdir $datetime_str\n",
"!mv log $datetime_str\n",
"!mv outputs $datetime_str\n",
"os.system(f'7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on {datetime_str}.7z {datetime_str}/')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"### Delete old output folder\n",
"\n",
"This block will delete the folder you just compressed."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!rm -rf /notebooks/$datetime_str/\n",
"!echo Deleted /notebooks/$datetime_str/"
2022-09-08 15:49:49 -06:00
]
2022-09-08 13:02:54 -06:00
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"private_outputs": true,
"provenance": []
},
"gpuClass": "standard",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 4
}