5ec8981df4
Adds an addition file to read environment variables from when the webui.sh is run from macOS.
169 lines
4.5 KiB
Bash
Executable file
169 lines
4.5 KiB
Bash
Executable file
#!/bin/bash
|
|
#################################################
|
|
# Please do not make any changes to this file, #
|
|
# change the variables in webui-user.sh instead #
|
|
#################################################
|
|
|
|
# If run from macOS, load defaults from webui-macos-env.sh
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
if [[ -f webui-macos-env.sh ]]
|
|
then
|
|
source ./webui-macos-env.sh
|
|
fi
|
|
fi
|
|
|
|
# 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
|
|
|
|
if [[ -z "${LAUNCH_SCRIPT}" ]]
|
|
then
|
|
LAUNCH_SCRIPT="launch.py"
|
|
fi
|
|
|
|
# this script cannot be run as root by default
|
|
can_run_as_root=0
|
|
|
|
# read any command line flags to the webui.sh script
|
|
while getopts "f" flag > /dev/null 2>&1
|
|
do
|
|
case ${flag} in
|
|
f) can_run_as_root=1;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
# Disable sentry logging
|
|
export ERROR_REPORTING=FALSE
|
|
|
|
# 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 && can_run_as_root -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 prerequisites
|
|
for preq in "${GIT}" "${python_cmd}"
|
|
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
|
|
|
|
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; }
|
|
else
|
|
printf "\n%s\n" "${delimiter}"
|
|
printf "Clone stable-diffusion-webui"
|
|
printf "\n%s\n" "${delimiter}"
|
|
"${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
|
|
|
|
if [[ ! -z "${ACCELERATE}" ]] && [ ${ACCELERATE}="True" ] && [ -x "$(command -v accelerate)" ]
|
|
then
|
|
printf "\n%s\n" "${delimiter}"
|
|
printf "Accelerating launch.py..."
|
|
printf "\n%s\n" "${delimiter}"
|
|
accelerate launch --num_cpu_threads_per_process=6 "${LAUNCH_SCRIPT}" "$@"
|
|
else
|
|
printf "\n%s\n" "${delimiter}"
|
|
printf "Launching launch.py..."
|
|
printf "\n%s\n" "${delimiter}"
|
|
"${python_cmd}" "${LAUNCH_SCRIPT}" "$@"
|
|
fi
|