Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Overbill1683
Stable Diffusion Webui
提交
7f5212fb
S
Stable Diffusion Webui
项目概览
Overbill1683
/
Stable Diffusion Webui
11 个月 前同步成功
通知
1754
Star
81
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
分析
仓库
DevOps
项目成员
Pages
S
Stable Diffusion Webui
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Pages
分析
分析
仓库分析
DevOps
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
提交
体验新版 GitCode,发现更多精彩内容 >>
提交
7f5212fb
编写于
10月 30, 2022
作者:
E
evshiron
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into feat/progress-api
上级
6b719c49
d6997202
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
59 addition
and
10 deletion
+59
-10
CODEOWNERS
CODEOWNERS
+12
-0
localizations/fr_FR.json
localizations/fr_FR.json
+0
-0
modules/api/api.py
modules/api/api.py
+10
-4
modules/api/models.py
modules/api/models.py
+7
-0
modules/processing.py
modules/processing.py
+9
-3
modules/scripts.py
modules/scripts.py
+21
-3
未找到文件。
CODEOWNERS
浏览文件 @
7f5212fb
* @AUTOMATIC1111
/localizations/ar_AR.json @xmodar @blackneoo
/localizations/de_DE.json @LunixWasTaken
/localizations/es_ES.json @innovaciones
/localizations/fr_FR.json @tumbly
/localizations/it_IT.json @EugenioBuffo
/localizations/ja_JP.json @yuuki76
/localizations/ko_KR.json @36DB
/localizations/pt_BR.json @M-art-ucci
/localizations/ru_RU.json @kabachuha
/localizations/tr_TR.json @camenduru
/localizations/zh_CN.json @dtlnor @bgluminous
/localizations/zh_TW.json @benlisquare
localizations/fr
-
FR.json
→
localizations/fr
_
FR.json
浏览文件 @
7f5212fb
文件已移动
modules/api/api.py
浏览文件 @
7f5212fb
...
...
@@ -37,7 +37,7 @@ from modules import devices
from
modules.api.models
import
*
from
modules.processing
import
StableDiffusionProcessingTxt2Img
,
StableDiffusionProcessingImg2Img
,
process_images
from
modules.sd_samplers
import
all_samplers
from
modules.extras
import
run_extras
from
modules.extras
import
run_extras
,
run_pnginfo
# copy from wrap_gradio_gpu_call of webui.py
# because queue lock will be acquired in api handlers
...
...
@@ -90,6 +90,7 @@ class Api:
self
.
app
.
add_api_route
(
"/sdapi/v1/img2img"
,
self
.
img2imgapi
,
methods
=
[
"POST"
],
response_model
=
ImageToImageResponse
)
self
.
app
.
add_api_route
(
"/sdapi/v1/extra-single-image"
,
self
.
extras_single_image_api
,
methods
=
[
"POST"
],
response_model
=
ExtrasSingleImageResponse
)
self
.
app
.
add_api_route
(
"/sdapi/v1/extra-batch-images"
,
self
.
extras_batch_images_api
,
methods
=
[
"POST"
],
response_model
=
ExtrasBatchImagesResponse
)
self
.
app
.
add_api_route
(
"/sdapi/v1/png-info"
,
self
.
pnginfoapi
,
methods
=
[
"POST"
],
response_model
=
PNGInfoResponse
)
self
.
app
.
add_api_route
(
"/sdapi/v1/progress"
,
self
.
progressapi
,
methods
=
[
"GET"
])
def
text2imgapi
(
self
,
txt2imgreq
:
StableDiffusionTxt2ImgProcessingAPI
):
...
...
@@ -188,6 +189,14 @@ class Api:
return
ExtrasBatchImagesResponse
(
images
=
list
(
map
(
encode_pil_to_base64
,
result
[
0
])),
html_info
=
result
[
1
])
def
pnginfoapi
(
self
,
req
:
PNGInfoRequest
):
if
(
not
req
.
image
.
strip
()):
return
PNGInfoResponse
(
info
=
""
)
result
=
run_pnginfo
(
decode_base64_to_image
(
req
.
image
.
strip
()))
return
PNGInfoResponse
(
info
=
result
[
1
])
def
progressapi
(
self
):
# copy from check_progress_call of ui.py
...
...
@@ -210,9 +219,6 @@ class Api:
return
ProgressResponse
(
progress
=
progress
,
eta_relative
=
eta_relative
,
state
=
shared
.
state
.
js
())
def
pnginfoapi
(
self
):
raise
NotImplementedError
def
launch
(
self
,
server_name
,
port
):
self
.
app
.
include_router
(
self
.
router
)
uvicorn
.
run
(
self
.
app
,
host
=
server_name
,
port
=
port
)
modules/api/models.py
浏览文件 @
7f5212fb
import
inspect
from
click
import
prompt
from
pydantic
import
BaseModel
,
Field
,
create_model
from
typing
import
Any
,
Optional
from
typing_extensions
import
Literal
...
...
@@ -150,6 +151,12 @@ class ExtrasBatchImagesRequest(ExtrasBaseRequest):
class
ExtrasBatchImagesResponse
(
ExtraBaseResponse
):
images
:
list
[
str
]
=
Field
(
title
=
"Images"
,
description
=
"The generated images in base64 format."
)
class
PNGInfoRequest
(
BaseModel
):
image
:
str
=
Field
(
title
=
"Image"
,
description
=
"The base64 encoded PNG image"
)
class
PNGInfoResponse
(
BaseModel
):
info
:
str
=
Field
(
title
=
"Image info"
,
description
=
"A string with all the info the image had"
)
class
ProgressResponse
(
BaseModel
):
progress
:
float
eta_relative
:
float
...
...
modules/processing.py
浏览文件 @
7f5212fb
...
...
@@ -478,7 +478,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
model_hijack
.
embedding_db
.
load_textual_inversion_embeddings
()
if
p
.
scripts
is
not
None
:
p
.
scripts
.
run_alwayson_script
s
(
p
)
p
.
scripts
.
proces
s
(
p
)
infotexts
=
[]
output_images
=
[]
...
...
@@ -501,7 +501,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
seeds
=
p
.
all_seeds
[
n
*
p
.
batch_size
:(
n
+
1
)
*
p
.
batch_size
]
subseeds
=
p
.
all_subseeds
[
n
*
p
.
batch_size
:(
n
+
1
)
*
p
.
batch_size
]
if
(
len
(
prompts
)
==
0
)
:
if
len
(
prompts
)
==
0
:
break
with
devices
.
autocast
():
...
...
@@ -590,7 +590,13 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
images
.
save_image
(
grid
,
p
.
outpath_grids
,
"grid"
,
p
.
all_seeds
[
0
],
p
.
all_prompts
[
0
],
opts
.
grid_format
,
info
=
infotext
(),
short_filename
=
not
opts
.
grid_extended_filename
,
p
=
p
,
grid
=
True
)
devices
.
torch_gc
()
return
Processed
(
p
,
output_images
,
p
.
all_seeds
[
0
],
infotext
()
+
""
.
join
([
"
\n\n
"
+
x
for
x
in
comments
]),
subseed
=
p
.
all_subseeds
[
0
],
all_prompts
=
p
.
all_prompts
,
all_seeds
=
p
.
all_seeds
,
all_subseeds
=
p
.
all_subseeds
,
index_of_first_image
=
index_of_first_image
,
infotexts
=
infotexts
)
res
=
Processed
(
p
,
output_images
,
p
.
all_seeds
[
0
],
infotext
()
+
""
.
join
([
"
\n\n
"
+
x
for
x
in
comments
]),
subseed
=
p
.
all_subseeds
[
0
],
all_prompts
=
p
.
all_prompts
,
all_seeds
=
p
.
all_seeds
,
all_subseeds
=
p
.
all_subseeds
,
index_of_first_image
=
index_of_first_image
,
infotexts
=
infotexts
)
if
p
.
scripts
is
not
None
:
p
.
scripts
.
postprocess
(
p
,
res
)
return
res
class
StableDiffusionProcessingTxt2Img
(
StableDiffusionProcessing
):
...
...
modules/scripts.py
浏览文件 @
7f5212fb
...
...
@@ -64,7 +64,16 @@ class Script:
def
process
(
self
,
p
,
*
args
):
"""
This function is called before processing begins for AlwaysVisible scripts.
scripts. You can modify the processing object (p) here, inject hooks, etc.
You can modify the processing object (p) here, inject hooks, etc.
args contains all values returned by components from ui()
"""
pass
def
postprocess
(
self
,
p
,
processed
,
*
args
):
"""
This function is called after processing ends for AlwaysVisible scripts.
args contains all values returned by components from ui()
"""
pass
...
...
@@ -289,13 +298,22 @@ class ScriptRunner:
return
processed
def
run_alwayson_script
s
(
self
,
p
):
def
proces
s
(
self
,
p
):
for
script
in
self
.
alwayson_scripts
:
try
:
script_args
=
p
.
script_args
[
script
.
args_from
:
script
.
args_to
]
script
.
process
(
p
,
*
script_args
)
except
Exception
:
print
(
f
"Error running alwayson script:
{
script
.
filename
}
"
,
file
=
sys
.
stderr
)
print
(
f
"Error running process:
{
script
.
filename
}
"
,
file
=
sys
.
stderr
)
print
(
traceback
.
format_exc
(),
file
=
sys
.
stderr
)
def
postprocess
(
self
,
p
,
processed
):
for
script
in
self
.
alwayson_scripts
:
try
:
script_args
=
p
.
script_args
[
script
.
args_from
:
script
.
args_to
]
script
.
postprocess
(
p
,
processed
,
*
script_args
)
except
Exception
:
print
(
f
"Error running postprocess:
{
script
.
filename
}
"
,
file
=
sys
.
stderr
)
print
(
traceback
.
format_exc
(),
file
=
sys
.
stderr
)
def
reload_sources
(
self
,
cache
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录