Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
stable-diffusion-webui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
stable-diffusion-webui
Commits
bdc90837
Commit
bdc90837
authored
Oct 27, 2022
by
Roy Shilkrot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a barebones interrogate API
parent
737eb28f
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
45 additions
and
7 deletions
+45
-7
launch.py
launch.py
+1
-1
api.py
modules/api/api.py
+24
-1
models.py
modules/api/models.py
+12
-1
webui.py
webui.py
+8
-4
No files found.
launch.py
View file @
bdc90837
...
@@ -198,7 +198,7 @@ def prepare_enviroment():
...
@@ -198,7 +198,7 @@ def prepare_enviroment():
def
start_webui
():
def
start_webui
():
print
(
f
"Launching Web UI with arguments: {' '.join(sys.argv[1:])}"
)
print
(
f
"Launching Web UI with arguments: {' '.join(sys.argv[1:])}"
)
import
webui
import
webui
webui
.
webui
()
webui
.
webui
_or_api
()
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
...
...
modules/api/api.py
View file @
bdc90837
from
modules.api.models
import
StableDiffusionTxt2ImgProcessingAPI
,
StableDiffusionImg2ImgProcessingAPI
from
modules.api.models
import
StableDiffusionTxt2ImgProcessingAPI
,
StableDiffusionImg2ImgProcessingAPI
,
InterrogateAPI
from
modules.processing
import
StableDiffusionProcessingTxt2Img
,
StableDiffusionProcessingImg2Img
,
process_images
from
modules.processing
import
StableDiffusionProcessingTxt2Img
,
StableDiffusionProcessingImg2Img
,
process_images
from
modules.sd_samplers
import
all_samplers
from
modules.sd_samplers
import
all_samplers
from
modules.extras
import
run_pnginfo
from
modules.extras
import
run_pnginfo
...
@@ -25,6 +25,11 @@ class ImageToImageResponse(BaseModel):
...
@@ -25,6 +25,11 @@ class ImageToImageResponse(BaseModel):
parameters
:
Json
parameters
:
Json
info
:
Json
info
:
Json
class
InterrogateResponse
(
BaseModel
):
caption
:
str
=
Field
(
default
=
None
,
title
=
"Caption"
,
description
=
"The generated caption for the image."
)
parameters
:
Json
info
:
Json
class
Api
:
class
Api
:
def
__init__
(
self
,
app
,
queue_lock
):
def
__init__
(
self
,
app
,
queue_lock
):
...
@@ -33,6 +38,7 @@ class Api:
...
@@ -33,6 +38,7 @@ class Api:
self
.
queue_lock
=
queue_lock
self
.
queue_lock
=
queue_lock
self
.
app
.
add_api_route
(
"/sdapi/v1/txt2img"
,
self
.
text2imgapi
,
methods
=
[
"POST"
])
self
.
app
.
add_api_route
(
"/sdapi/v1/txt2img"
,
self
.
text2imgapi
,
methods
=
[
"POST"
])
self
.
app
.
add_api_route
(
"/sdapi/v1/img2img"
,
self
.
img2imgapi
,
methods
=
[
"POST"
])
self
.
app
.
add_api_route
(
"/sdapi/v1/img2img"
,
self
.
img2imgapi
,
methods
=
[
"POST"
])
self
.
app
.
add_api_route
(
"/sdapi/v1/interrogate"
,
self
.
interrogateapi
,
methods
=
[
"POST"
])
def
__base64_to_image
(
self
,
base64_string
):
def
__base64_to_image
(
self
,
base64_string
):
# if has a comma, deal with prefix
# if has a comma, deal with prefix
...
@@ -118,6 +124,23 @@ class Api:
...
@@ -118,6 +124,23 @@ class Api:
return
ImageToImageResponse
(
images
=
b64images
,
parameters
=
json
.
dumps
(
vars
(
img2imgreq
)),
info
=
processed
.
js
())
return
ImageToImageResponse
(
images
=
b64images
,
parameters
=
json
.
dumps
(
vars
(
img2imgreq
)),
info
=
processed
.
js
())
def
interrogateapi
(
self
,
interrogatereq
:
InterrogateAPI
):
image_b64
=
interrogatereq
.
image
if
image_b64
is
None
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"Image not found"
)
populate
=
interrogatereq
.
copy
(
update
=
{
# Override __init__ params
}
)
img
=
self
.
__base64_to_image
(
image_b64
)
# Override object param
with
self
.
queue_lock
:
processed
=
shared
.
interrogator
.
interrogate
(
img
)
return
InterrogateResponse
(
caption
=
processed
,
parameters
=
json
.
dumps
(
vars
(
interrogatereq
)),
info
=
None
)
def
extrasapi
(
self
):
def
extrasapi
(
self
):
raise
NotImplementedError
raise
NotImplementedError
...
...
modules/api/models.py
View file @
bdc90837
...
@@ -63,7 +63,12 @@ class PydanticModelGenerator:
...
@@ -63,7 +63,12 @@ class PydanticModelGenerator:
self
.
_model_name
=
model_name
self
.
_model_name
=
model_name
if
class_instance
is
not
None
:
self
.
_class_data
=
merge_class_params
(
class_instance
)
self
.
_class_data
=
merge_class_params
(
class_instance
)
else
:
self
.
_class_data
=
{}
self
.
_model_def
=
[
self
.
_model_def
=
[
ModelDef
(
ModelDef
(
field
=
underscore
(
k
),
field
=
underscore
(
k
),
...
@@ -106,3 +111,9 @@ StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
...
@@ -106,3 +111,9 @@ StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
StableDiffusionProcessingImg2Img
,
StableDiffusionProcessingImg2Img
,
[{
"key"
:
"sampler_index"
,
"type"
:
str
,
"default"
:
"Euler"
},
{
"key"
:
"init_images"
,
"type"
:
list
,
"default"
:
None
},
{
"key"
:
"denoising_strength"
,
"type"
:
float
,
"default"
:
0.75
},
{
"key"
:
"mask"
,
"type"
:
str
,
"default"
:
None
},
{
"key"
:
"include_init_images"
,
"type"
:
bool
,
"default"
:
False
,
"exclude"
:
True
}]
[{
"key"
:
"sampler_index"
,
"type"
:
str
,
"default"
:
"Euler"
},
{
"key"
:
"init_images"
,
"type"
:
list
,
"default"
:
None
},
{
"key"
:
"denoising_strength"
,
"type"
:
float
,
"default"
:
0.75
},
{
"key"
:
"mask"
,
"type"
:
str
,
"default"
:
None
},
{
"key"
:
"include_init_images"
,
"type"
:
bool
,
"default"
:
False
,
"exclude"
:
True
}]
)
.
generate_model
()
)
.
generate_model
()
InterrogateAPI
=
PydanticModelGenerator
(
"Interrogate"
,
None
,
[{
"key"
:
"image"
,
"type"
:
str
,
"default"
:
None
}]
)
.
generate_model
()
\ No newline at end of file
webui.py
View file @
bdc90837
...
@@ -146,7 +146,9 @@ def webui():
...
@@ -146,7 +146,9 @@ def webui():
app
.
add_middleware
(
GZipMiddleware
,
minimum_size
=
1000
)
app
.
add_middleware
(
GZipMiddleware
,
minimum_size
=
1000
)
if
(
launch_api
):
if
(
launch_api
):
create_api
(
app
)
print
(
'launching API'
)
api
=
create_api
(
app
)
api
.
launch
(
server_name
=
"0.0.0.0"
if
cmd_opts
.
listen
else
"127.0.0.1"
,
port
=
cmd_opts
.
port
if
cmd_opts
.
port
else
7861
)
wait_on_server
(
demo
)
wait_on_server
(
demo
)
...
@@ -161,10 +163,12 @@ def webui():
...
@@ -161,10 +163,12 @@ def webui():
print
(
'Restarting Gradio'
)
print
(
'Restarting Gradio'
)
def
webui_or_api
():
task
=
[]
if
__name__
==
"__main__"
:
if
cmd_opts
.
nowebui
:
if
cmd_opts
.
nowebui
:
api_only
()
api_only
()
else
:
else
:
webui
()
webui
()
task
=
[]
if
__name__
==
"__main__"
:
webui_or_api
()
\ No newline at end of file
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