diff --git a/.gitignore b/.gitignore index 3dd434d..1dffb10 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ __pycache__ /styles.csv /styles.csv.bak /webui-user.bat +/webui-user.sh /interrogate diff --git a/README.md b/README.md index ba2698d..1eeaae2 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,36 @@ RealESRGAN into the directory with ESRGAN models. Thank you. - _*(optional)*_ place `GFPGANv1.3.pth` into webui directory, next to `webui.bat`. - run `webui-user.bat` from Windows Explorer. Run it as a normal user, ***not*** as administrator. +### Linux Automatic installation/launch + +Prequisites: +- For Debian-based: +```commandline +sudo apt install wget git python3 python3-venv +``` +- For Red Hat-based: +```commandline +sudo dnf install wget git python3 +``` + + +- If you want to install to default directory `/home/$(whoami)/stable-diffusion-webui/`, you can launch directly: +```commandline +bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh) +``` + + +- If you want to customize the installation just `git clone` the repo where you want it, +change the variables in `webui-user.sh` and launch in console `bash webui.sh`. + + + +- place `model.ckpt` into webui directory, next to `webui.py`. +- _*(optional)*_ place `GFPGANv1.3.pth` into webui directory, next to `webui.py`. +- run `bash webui.sh`. Run it as a normal user, ***not*** as root. + + + #### Troubleshooting - if your version of Python is not in PATH (or if another version is), edit `webui-user.bat`, and modify the @@ -330,4 +360,4 @@ After that follow the instructions in the `Manual instructions` section starting - Idea for SD upscale - https://github.com/jquesnelle/txt2imghd - CLIP interrogator idea and borrowing some code - https://github.com/pharmapsychotic/clip-interrogator - Initial Gradio script - posted on 4chan by an Anonymous user. Thank you Anonymous user. -- (You) +- (You) \ No newline at end of file diff --git a/webui-user.sh b/webui-user.sh new file mode 100644 index 0000000..36166df --- /dev/null +++ b/webui-user.sh @@ -0,0 +1,40 @@ +#!/bin/bash +########################################### +# Change the variables below to your need:# +########################################### + +# Install directory without trailing slash +install_dir="/home/$(whoami)" + +# Name of the subdirectory (defaults to stable-diffusion-webui) +clone_dir="stable-diffusion-webui" + +# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS=(--medvram --opt-split-attention) +export COMMANDLINE_ARGS=() + +# python3 executable +python_cmd="python3" + +# git executable +export GIT="" + +# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv) +venv_dir="venv" + +# install command for torch +export TORCH_COMMAND=(python3 -m pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113) + +# Requirements file to use for stable-diffusion-webui +export REQS_FILE="" + +# Fixed git repos +export K_DIFFUSION_PACKAGE="" +export GFPGAN_PACKAGE="" + +# Fixed git commits +export STABLE_DIFFUSION_COMMIT_HASH="" +export TAMING_TRANSFORMERS_COMMIT_HASH="" +export CODEFORMER_COMMIT_HASH="" +export BLIP_COMMIT_HASH="" + +########################################### \ No newline at end of file diff --git a/webui.sh b/webui.sh new file mode 100644 index 0000000..0f9fdbe --- /dev/null +++ b/webui.sh @@ -0,0 +1,139 @@ +#!/bin/bash +################################################# +# Please do not make any changes to this file, # +# change the variables in webui-user.sh instead # +################################################# +# Read variables from webui-user.sh +# shellcheck source=/dev/null +if [[ -f webui-user.sh ]] +then + source ./webui-user.sh +fi + +# Set defaults +# Install directory without trailing slash +if [[ -z "${install_dir}" ]] +then + install_dir="/home/$(whoami)" +fi + +# Name of the subdirectory (defaults to stable-diffusion-webui) +if [[ -z "${clone_dir}" ]] +then + clone_dir="stable-diffusion-webui" +fi + +# python3 executable +if [[ -z "${python_cmd}" ]] +then + python_cmd="python3" +fi + +# git executable +if [[ -z "${GIT}" ]] +then + export GIT="git" +fi + +# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv) +if [[ -z "${venv_dir}" ]] +then + venv_dir="venv" +fi + +# install command for torch +if [[ -z "${TORCH_COMMAND}" ]] +then + export TORCH_COMMAND=(python3 -m pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113) +fi + +# Do not reinstall existing pip packages on Debian/Ubuntu +export PIP_IGNORE_INSTALLED=0 + +# Pretty print +delimiter="################################################################" + +printf "\n%s\n" "${delimiter}" +printf "\e[1m\e[32mInstall script for stable-diffusion + Web UI\n" +printf "\e[1m\e[34mTested on Debian 11 (Bullseye)\e[0m" +printf "\n%s\n" "${delimiter}" + +# Do not run as root +if [[ $(id -u) -eq 0 ]] +then + printf "\n%s\n" "${delimiter}" + printf "\e[1m\e[31mERROR: This script must not be launched as root, aborting...\e[0m" + printf "\n%s\n" "${delimiter}" + exit 1 +else + printf "\n%s\n" "${delimiter}" + printf "Running on \e[1m\e[32m%s\e[0m user" "$(whoami)" + printf "\n%s\n" "${delimiter}" +fi + +if [[ -d .git ]] +then + printf "\n%s\n" "${delimiter}" + printf "Repo already cloned, using it as install directory" + printf "\n%s\n" "${delimiter}" + install_dir="${PWD}/../" + clone_dir="${PWD##*/}" +fi + +# Check prequisites +for preq in git python3 +do + if ! hash "${preq}" &>/dev/null + then + printf "\n%s\n" "${delimiter}" + printf "\e[1m\e[31mERROR: %s is not installed, aborting...\e[0m" "${preq}" + printf "\n%s\n" "${delimiter}" + exit 1 + fi +done + +if ! "${python_cmd}" -c "import venv" &>/dev/null +then + printf "\n%s\n" "${delimiter}" + printf "\e[1m\e[31mERROR: python3-venv is not installed, aborting...\e[0m" + printf "\n%s\n" "${delimiter}" + exit 1 +fi + +printf "\n%s\n" "${delimiter}" +printf "Clone or update stable-diffusion-webui" +printf "\n%s\n" "${delimiter}" +cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; } +if [[ -d "${clone_dir}" ]] +then + cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; } + "${GIT}" pull +else + "${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}" + cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; } +fi + +printf "\n%s\n" "${delimiter}" +printf "Create and activate python venv" +printf "\n%s\n" "${delimiter}" +cd "${install_dir}"/"${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; } +if [[ ! -d "${venv_dir}" ]] +then + "${python_cmd}" -m venv "${venv_dir}" + first_launch=1 +fi +# shellcheck source=/dev/null +if [[ -f "${venv_dir}"/bin/activate ]] +then + source "${venv_dir}"/bin/activate +else + printf "\n%s\n" "${delimiter}" + printf "\e[1m\e[31mERROR: Cannot activate python venv, aborting...\e[0m" + printf "\n%s\n" "${delimiter}" + exit 1 +fi + +printf "\n%s\n" "${delimiter}" +printf "Launching launch.py..." +printf "\n%s\n" "${delimiter}" +"${python_cmd}" launch.py