Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
Stable Diffusion Webui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
novelai-storage
Stable Diffusion Webui
Commits
adf723a9
Commit
adf723a9
authored
Mar 12, 2023
by
AUTOMATIC1111
Committed by
GitHub
Mar 12, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #8492 from zhanghua000/absolute-path
fix: gradio's ValueError about fetching extensions files
parents
ddc503d1
d25c4b13
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
46 additions
and
31 deletions
+46
-31
launch.py
launch.py
+12
-7
modules/sd_vae_approx.py
modules/sd_vae_approx.py
+4
-1
modules/ui.py
modules/ui.py
+2
-1
test/basic_features/extras_test.py
test/basic_features/extras_test.py
+5
-3
test/basic_features/img2img_test.py
test/basic_features/img2img_test.py
+5
-3
test/server_poll.py
test/server_poll.py
+4
-2
webui.sh
webui.sh
+14
-14
No files found.
launch.py
View file @
adf723a9
...
@@ -7,6 +7,11 @@ import shlex
...
@@ -7,6 +7,11 @@ import shlex
import
platform
import
platform
import
argparse
import
argparse
import
json
import
json
try
:
from
modules.paths
import
script_path
,
data_path
except
ModuleNotFoundError
:
script_path
=
os
.
path
.
dirname
(
__file__
)
data_path
=
os
.
getcwd
()
dir_repos
=
"repositories"
dir_repos
=
"repositories"
dir_extensions
=
"extensions"
dir_extensions
=
"extensions"
...
@@ -122,7 +127,7 @@ def is_installed(package):
...
@@ -122,7 +127,7 @@ def is_installed(package):
def
repo_dir
(
name
):
def
repo_dir
(
name
):
return
os
.
path
.
join
(
dir_repos
,
name
)
return
os
.
path
.
join
(
script_path
,
dir_repos
,
name
)
def
run_python
(
code
,
desc
=
None
,
errdesc
=
None
):
def
run_python
(
code
,
desc
=
None
,
errdesc
=
None
):
...
@@ -215,7 +220,7 @@ def list_extensions(settings_file):
...
@@ -215,7 +220,7 @@ def list_extensions(settings_file):
disabled_extensions
=
set
(
settings
.
get
(
'disabled_extensions'
,
[]))
disabled_extensions
=
set
(
settings
.
get
(
'disabled_extensions'
,
[]))
return
[
x
for
x
in
os
.
listdir
(
dir_extensions
)
if
x
not
in
disabled_extensions
]
return
[
x
for
x
in
os
.
listdir
(
os
.
path
.
join
(
data_path
,
dir_extensions
)
)
if
x
not
in
disabled_extensions
]
def
run_extensions_installers
(
settings_file
):
def
run_extensions_installers
(
settings_file
):
...
@@ -306,7 +311,7 @@ def prepare_environment():
...
@@ -306,7 +311,7 @@ def prepare_environment():
if
not
is_installed
(
"pyngrok"
)
and
ngrok
:
if
not
is_installed
(
"pyngrok"
)
and
ngrok
:
run_pip
(
"install pyngrok"
,
"ngrok"
)
run_pip
(
"install pyngrok"
,
"ngrok"
)
os
.
makedirs
(
dir_repos
,
exist_ok
=
True
)
os
.
makedirs
(
os
.
path
.
join
(
script_path
,
dir_repos
)
,
exist_ok
=
True
)
git_clone
(
stable_diffusion_repo
,
repo_dir
(
'stable-diffusion-stability-ai'
),
"Stable Diffusion"
,
stable_diffusion_commit_hash
)
git_clone
(
stable_diffusion_repo
,
repo_dir
(
'stable-diffusion-stability-ai'
),
"Stable Diffusion"
,
stable_diffusion_commit_hash
)
git_clone
(
taming_transformers_repo
,
repo_dir
(
'taming-transformers'
),
"Taming Transformers"
,
taming_transformers_commit_hash
)
git_clone
(
taming_transformers_repo
,
repo_dir
(
'taming-transformers'
),
"Taming Transformers"
,
taming_transformers_commit_hash
)
...
@@ -317,7 +322,7 @@ def prepare_environment():
...
@@ -317,7 +322,7 @@ def prepare_environment():
if
not
is_installed
(
"lpips"
):
if
not
is_installed
(
"lpips"
):
run_pip
(
f
"install -r {os.path.join(repo_dir('CodeFormer'), 'requirements.txt')}"
,
"requirements for CodeFormer"
)
run_pip
(
f
"install -r {os.path.join(repo_dir('CodeFormer'), 'requirements.txt')}"
,
"requirements for CodeFormer"
)
run_pip
(
f
"install -r {
requirements_file
}"
,
"requirements for Web UI"
)
run_pip
(
f
"install -r {
os.path.join(script_path, requirements_file)
}"
,
"requirements for Web UI"
)
run_extensions_installers
(
settings_file
=
args
.
ui_settings_file
)
run_extensions_installers
(
settings_file
=
args
.
ui_settings_file
)
...
@@ -325,7 +330,7 @@ def prepare_environment():
...
@@ -325,7 +330,7 @@ def prepare_environment():
version_check
(
commit
)
version_check
(
commit
)
if
update_all_extensions
:
if
update_all_extensions
:
git_pull_recursive
(
dir_extensions
)
git_pull_recursive
(
os
.
path
.
join
(
data_path
,
dir_extensions
)
)
if
"--exit"
in
sys
.
argv
:
if
"--exit"
in
sys
.
argv
:
print
(
"Exiting because of --exit argument"
)
print
(
"Exiting because of --exit argument"
)
...
@@ -341,7 +346,7 @@ def tests(test_dir):
...
@@ -341,7 +346,7 @@ def tests(test_dir):
sys
.
argv
.
append
(
"--api"
)
sys
.
argv
.
append
(
"--api"
)
if
"--ckpt"
not
in
sys
.
argv
:
if
"--ckpt"
not
in
sys
.
argv
:
sys
.
argv
.
append
(
"--ckpt"
)
sys
.
argv
.
append
(
"--ckpt"
)
sys
.
argv
.
append
(
"./test/test_files/empty.pt"
)
sys
.
argv
.
append
(
os
.
path
.
join
(
script_path
,
"test/test_files/empty.pt"
)
)
if
"--skip-torch-cuda-test"
not
in
sys
.
argv
:
if
"--skip-torch-cuda-test"
not
in
sys
.
argv
:
sys
.
argv
.
append
(
"--skip-torch-cuda-test"
)
sys
.
argv
.
append
(
"--skip-torch-cuda-test"
)
if
"--disable-nan-check"
not
in
sys
.
argv
:
if
"--disable-nan-check"
not
in
sys
.
argv
:
...
@@ -350,7 +355,7 @@ def tests(test_dir):
...
@@ -350,7 +355,7 @@ def tests(test_dir):
print
(
f
"Launching Web UI in another process for testing with arguments: {' '.join(sys.argv[1:])}"
)
print
(
f
"Launching Web UI in another process for testing with arguments: {' '.join(sys.argv[1:])}"
)
os
.
environ
[
'COMMANDLINE_ARGS'
]
=
""
os
.
environ
[
'COMMANDLINE_ARGS'
]
=
""
with
open
(
'test/stdout.txt'
,
"w"
,
encoding
=
"utf8"
)
as
stdout
,
open
(
'test/stderr.txt'
,
"w"
,
encoding
=
"utf8"
)
as
stderr
:
with
open
(
os
.
path
.
join
(
script_path
,
'test/stdout.txt'
),
"w"
,
encoding
=
"utf8"
)
as
stdout
,
open
(
os
.
path
.
join
(
script_path
,
'test/stderr.txt'
)
,
"w"
,
encoding
=
"utf8"
)
as
stderr
:
proc
=
subprocess
.
Popen
([
sys
.
executable
,
*
sys
.
argv
],
stdout
=
stdout
,
stderr
=
stderr
)
proc
=
subprocess
.
Popen
([
sys
.
executable
,
*
sys
.
argv
],
stdout
=
stdout
,
stderr
=
stderr
)
import
test.server_poll
import
test.server_poll
...
...
modules/sd_vae_approx.py
View file @
adf723a9
...
@@ -35,8 +35,11 @@ def model():
...
@@ -35,8 +35,11 @@ def model():
global
sd_vae_approx_model
global
sd_vae_approx_model
if
sd_vae_approx_model
is
None
:
if
sd_vae_approx_model
is
None
:
model_path
=
os
.
path
.
join
(
paths
.
models_path
,
"VAE-approx"
,
"model.pt"
)
sd_vae_approx_model
=
VAEApprox
()
sd_vae_approx_model
=
VAEApprox
()
sd_vae_approx_model
.
load_state_dict
(
torch
.
load
(
os
.
path
.
join
(
paths
.
models_path
,
"VAE-approx"
,
"model.pt"
),
map_location
=
'cpu'
if
devices
.
device
.
type
!=
'cuda'
else
None
))
if
not
os
.
path
.
exists
(
model_path
):
model_path
=
os
.
path
.
join
(
paths
.
script_path
,
"models"
,
"VAE-approx"
,
"model.pt"
)
sd_vae_approx_model
.
load_state_dict
(
torch
.
load
(
model_path
,
map_location
=
'cpu'
if
devices
.
device
.
type
!=
'cuda'
else
None
))
sd_vae_approx_model
.
eval
()
sd_vae_approx_model
.
eval
()
sd_vae_approx_model
.
to
(
devices
.
device
,
devices
.
dtype
)
sd_vae_approx_model
.
to
(
devices
.
device
,
devices
.
dtype
)
...
...
modules/ui.py
View file @
adf723a9
...
@@ -1751,7 +1751,8 @@ def create_ui():
...
@@ -1751,7 +1751,8 @@ def create_ui():
def
reload_javascript
():
def
reload_javascript
():
head
=
f
'<script type="text/javascript" src="file={os.path.abspath("script.js")}?{os.path.getmtime("script.js")}"></script>
\n
'
script_js
=
os
.
path
.
join
(
script_path
,
"script.js"
)
head
=
f
'<script type="text/javascript" src="file={os.path.abspath(script_js)}?{os.path.getmtime(script_js)}"></script>
\n
'
inline
=
f
"{localization.localization_js(shared.opts.localization)};"
inline
=
f
"{localization.localization_js(shared.opts.localization)};"
if
cmd_opts
.
theme
is
not
None
:
if
cmd_opts
.
theme
is
not
None
:
...
...
test/basic_features/extras_test.py
View file @
adf723a9
import
os
import
unittest
import
unittest
import
requests
import
requests
from
gradio.processing_utils
import
encode_pil_to_base64
from
gradio.processing_utils
import
encode_pil_to_base64
from
PIL
import
Image
from
PIL
import
Image
from
modules.paths
import
script_path
class
TestExtrasWorking
(
unittest
.
TestCase
):
class
TestExtrasWorking
(
unittest
.
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
...
@@ -19,7 +21,7 @@ class TestExtrasWorking(unittest.TestCase):
...
@@ -19,7 +21,7 @@ class TestExtrasWorking(unittest.TestCase):
"upscaler_1"
:
"None"
,
"upscaler_1"
:
"None"
,
"upscaler_2"
:
"None"
,
"upscaler_2"
:
"None"
,
"extras_upscaler_2_visibility"
:
0
,
"extras_upscaler_2_visibility"
:
0
,
"image"
:
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/img2img_basic.png"
))
"image"
:
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
))
}
}
def
test_simple_upscaling_performed
(
self
):
def
test_simple_upscaling_performed
(
self
):
...
@@ -31,7 +33,7 @@ class TestPngInfoWorking(unittest.TestCase):
...
@@ -31,7 +33,7 @@ class TestPngInfoWorking(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
url_png_info
=
"http://localhost:7860/sdapi/v1/extra-single-image"
self
.
url_png_info
=
"http://localhost:7860/sdapi/v1/extra-single-image"
self
.
png_info
=
{
self
.
png_info
=
{
"image"
:
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/img2img_basic.png"
))
"image"
:
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
))
}
}
def
test_png_info_performed
(
self
):
def
test_png_info_performed
(
self
):
...
@@ -42,7 +44,7 @@ class TestInterrogateWorking(unittest.TestCase):
...
@@ -42,7 +44,7 @@ class TestInterrogateWorking(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
url_interrogate
=
"http://localhost:7860/sdapi/v1/extra-single-image"
self
.
url_interrogate
=
"http://localhost:7860/sdapi/v1/extra-single-image"
self
.
interrogate
=
{
self
.
interrogate
=
{
"image"
:
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/img2img_basic.png"
)),
"image"
:
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
)),
"model"
:
"clip"
"model"
:
"clip"
}
}
...
...
test/basic_features/img2img_test.py
View file @
adf723a9
import
os
import
unittest
import
unittest
import
requests
import
requests
from
gradio.processing_utils
import
encode_pil_to_base64
from
gradio.processing_utils
import
encode_pil_to_base64
from
PIL
import
Image
from
PIL
import
Image
from
modules.paths
import
script_path
class
TestImg2ImgWorking
(
unittest
.
TestCase
):
class
TestImg2ImgWorking
(
unittest
.
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
url_img2img
=
"http://localhost:7860/sdapi/v1/img2img"
self
.
url_img2img
=
"http://localhost:7860/sdapi/v1/img2img"
self
.
simple_img2img
=
{
self
.
simple_img2img
=
{
"init_images"
:
[
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/img2img_basic.png"
))],
"init_images"
:
[
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
))],
"resize_mode"
:
0
,
"resize_mode"
:
0
,
"denoising_strength"
:
0.75
,
"denoising_strength"
:
0.75
,
"mask"
:
None
,
"mask"
:
None
,
...
@@ -47,11 +49,11 @@ class TestImg2ImgWorking(unittest.TestCase):
...
@@ -47,11 +49,11 @@ class TestImg2ImgWorking(unittest.TestCase):
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
def
test_inpainting_masked_performed
(
self
):
def
test_inpainting_masked_performed
(
self
):
self
.
simple_img2img
[
"mask"
]
=
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/mask_basic.png"
))
self
.
simple_img2img
[
"mask"
]
=
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
))
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
def
test_inpainting_with_inverted_masked_performed
(
self
):
def
test_inpainting_with_inverted_masked_performed
(
self
):
self
.
simple_img2img
[
"mask"
]
=
encode_pil_to_base64
(
Image
.
open
(
r"test/test_files/mask_basic.png"
))
self
.
simple_img2img
[
"mask"
]
=
encode_pil_to_base64
(
Image
.
open
(
os
.
path
.
join
(
script_path
,
r"test/test_files/img2img_basic.png"
)
))
self
.
simple_img2img
[
"inpainting_mask_invert"
]
=
True
self
.
simple_img2img
[
"inpainting_mask_invert"
]
=
True
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
self
.
assertEqual
(
requests
.
post
(
self
.
url_img2img
,
json
=
self
.
simple_img2img
)
.
status_code
,
200
)
...
...
test/server_poll.py
View file @
adf723a9
import
unittest
import
unittest
import
requests
import
requests
import
time
import
time
import
os
from
modules.paths
import
script_path
def
run_tests
(
proc
,
test_dir
):
def
run_tests
(
proc
,
test_dir
):
...
@@ -15,8 +17,8 @@ def run_tests(proc, test_dir):
...
@@ -15,8 +17,8 @@ def run_tests(proc, test_dir):
break
break
if
proc
.
poll
()
is
None
:
if
proc
.
poll
()
is
None
:
if
test_dir
is
None
:
if
test_dir
is
None
:
test_dir
=
"test"
test_dir
=
os
.
path
.
join
(
script_path
,
"test"
)
suite
=
unittest
.
TestLoader
()
.
discover
(
test_dir
,
pattern
=
"*_test.py"
,
top_level_dir
=
"test"
)
suite
=
unittest
.
TestLoader
()
.
discover
(
test_dir
,
pattern
=
"*_test.py"
,
top_level_dir
=
test_dir
)
result
=
unittest
.
TextTestRunner
(
verbosity
=
2
)
.
run
(
suite
)
result
=
unittest
.
TextTestRunner
(
verbosity
=
2
)
.
run
(
suite
)
return
len
(
result
.
failures
)
+
len
(
result
.
errors
)
return
len
(
result
.
failures
)
+
len
(
result
.
errors
)
else
:
else
:
...
...
webui.sh
View file @
adf723a9
...
@@ -6,19 +6,18 @@
...
@@ -6,19 +6,18 @@
# If run from macOS, load defaults from webui-macos-env.sh
# If run from macOS, load defaults from webui-macos-env.sh
if
[[
"
$OSTYPE
"
==
"darwin"
*
]]
;
then
if
[[
"
$OSTYPE
"
==
"darwin"
*
]]
;
then
if
[[
-f
webui-macos-env.sh
]]
if
[[
-f
"
$(
dirname
$0
)
/webui-macos-env.sh"
]]
then
then
source
./webui-macos-env.sh
source
"
$(
dirname
$0
)
/webui-macos-env.sh"
fi
fi
fi
fi
# Read variables from webui-user.sh
# Read variables from webui-user.sh
# shellcheck source=/dev/null
# shellcheck source=/dev/null
if
[[
-f
webui-user.sh
]]
if
[[
-f
"
$(
dirname
$0
)
/webui-user.sh"
]]
then
then
source
./webui-user.sh
source
"
$(
dirname
$0
)
/webui-user.sh"
fi
fi
# Set defaults
# Set defaults
# Install directory without trailing slash
# Install directory without trailing slash
if
[[
-z
"
${
install_dir
}
"
]]
if
[[
-z
"
${
install_dir
}
"
]]
...
@@ -47,12 +46,12 @@ fi
...
@@ -47,12 +46,12 @@ fi
# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
if
[[
-z
"
${
venv_dir
}
"
]]
if
[[
-z
"
${
venv_dir
}
"
]]
then
then
venv_dir
=
"venv"
venv_dir
=
"
${
install_dir
}
/
${
clone_dir
}
/
venv"
fi
fi
if
[[
-z
"
${
LAUNCH_SCRIPT
}
"
]]
if
[[
-z
"
${
LAUNCH_SCRIPT
}
"
]]
then
then
LAUNCH_SCRIPT
=
"launch.py"
LAUNCH_SCRIPT
=
"
${
install_dir
}
/
${
clone_dir
}
/
launch.py"
fi
fi
# this script cannot be run as root by default
# this script cannot be run as root by default
...
@@ -140,22 +139,23 @@ then
...
@@ -140,22 +139,23 @@ then
exit
1
exit
1
fi
fi
cd
"
${
install_dir
}
"
/
||
{
printf
"
\e
[1m
\e
[31mERROR: Can't cd to %s/, aborting...
\e
[0m"
"
${
install_dir
}
"
;
exit
1
;
}
if
[[
!
-d
"
${
install_dir
}
/
${
clone_dir
}
"
]]
if
[[
-d
"
${
clone_dir
}
"
]]
then
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
"
\n
%s
\n
"
"
${
delimiter
}
"
printf
"Clone stable-diffusion-webui"
printf
"Clone stable-diffusion-webui"
printf
"
\n
%s
\n
"
"
${
delimiter
}
"
printf
"
\n
%s
\n
"
"
${
delimiter
}
"
"
${
GIT
}
"
clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
"
${
clone
_dir
}
"
mkdir
-p
"
${
install
_dir
}
"
cd
"
${
clone_dir
}
"
/
||
{
printf
"
\e
[1m
\e
[31mERROR: Can't cd to %s/%s/, aborting...
\e
[0m"
"
${
install_dir
}
"
"
${
clone_dir
}
"
;
exit
1
;
}
"
${
GIT
}
"
clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
"
${
install_dir
}
/
${
clone_dir
}
"
fi
fi
printf
"
\n
%s
\n
"
"
${
delimiter
}
"
printf
"
\n
%s
\n
"
"
${
delimiter
}
"
printf
"Create and activate python venv"
printf
"Create and activate python venv"
printf
"
\n
%s
\n
"
"
${
delimiter
}
"
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
;
}
# Make venv_dir absolute
if
[[
"
${
venv_dir
}
"
!=
/
*
]]
then
venv_dir
=
"
${
install_dir
}
/
${
clone_dir
}
/
${
venv_dir
}
"
fi
if
[[
!
-d
"
${
venv_dir
}
"
]]
if
[[
!
-d
"
${
venv_dir
}
"
]]
then
then
"
${
python_cmd
}
"
-m
venv
"
${
venv_dir
}
"
"
${
python_cmd
}
"
-m
venv
"
${
venv_dir
}
"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment