Compare commits

...

10 Commits

Author SHA1 Message Date
w-e-w e936dbb43b allow add middleware after app has started
this should completely fix "Cannot add middleware after an application has started" which can occur due to a race condition
2024-12-28 14:53:59 +09:00
w-e-w 813c3912fc open API docs in new tab (#16754) 2024-12-26 22:19:43 -05:00
w-e-w 078d04ef23 ruff <path> is deprecated. Use ruff check <path> (#16753) 2024-12-26 20:40:15 -05:00
w-e-w 1a773bf2c8 Merge pull request #16751 from Neokmi/master
Fix  Codeformer and gfpgan extension , Inconsistent overlay layer types when visibility value is less than 1
2024-12-26 06:33:04 +09:00
w-e-w f113474a6e lint 2024-12-26 06:26:47 +09:00
klx 6577e063d1 Update postprocessing_gfpgan.py
Fix  gfpgan extension , Inconsistent overlay layer types when visibility value is less than 1
2024-12-26 02:16:05 +08:00
klx 7953c570d9 Update postprocessing_codeformer.py
Fix  Codeformer extension , Inconsistent overlay layer types when visibility value is less than 1
2024-12-26 02:14:49 +08:00
w-e-w f25c3fc9cb fix sd_vae_explanation (#16748) 2024-12-24 15:43:55 -05:00
w-e-w fc0952abb9 Merge pull request #16745 from Sanchows/removed-unused-import-modules-errors
removed unnecessary import 'modules.errors'
2024-12-24 22:58:43 +09:00
Alexander Sachenko b414c62ce4 removed unnecessary import modules.errors 2024-12-24 15:45:10 +03:00
8 changed files with 50 additions and 9 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ jobs:
- name: Install Ruff - name: Install Ruff
run: pip install ruff==0.3.3 run: pip install ruff==0.3.3
- name: Run Ruff - name: Run Ruff
run: ruff . run: ruff check .
lint-js: lint-js:
name: eslint name: eslint
runs-on: ubuntu-latest runs-on: ubuntu-latest
+1 -1
View File
@@ -1,5 +1,5 @@
<div> <div>
<a href="{api_docs}">API</a> <a href="{api_docs}" target="_blank">API</a>
 •   • 
<a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui">GitHub</a> <a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui">GitHub</a>
 •   • 
+1
View File
@@ -50,6 +50,7 @@ def check_versions():
def initialize(): def initialize():
from modules import initialize_util from modules import initialize_util
initialize_util.allow_add_middleware_after_start()
initialize_util.fix_torch_version() initialize_util.fix_torch_version()
initialize_util.fix_pytorch_lightning() initialize_util.fix_pytorch_lightning()
initialize_util.fix_asyncio_event_loop_policy() initialize_util.fix_asyncio_event_loop_policy()
+37 -3
View File
@@ -5,6 +5,8 @@ import sys
import re import re
from modules.timer import startup_timer from modules.timer import startup_timer
from modules import patches
from functools import wraps
def gradio_server_name(): def gradio_server_name():
@@ -191,11 +193,8 @@ def configure_opts_onchange():
def setup_middleware(app): def setup_middleware(app):
from starlette.middleware.gzip import GZipMiddleware from starlette.middleware.gzip import GZipMiddleware
app.middleware_stack = None # reset current middleware to allow modifying user provided list
app.add_middleware(GZipMiddleware, minimum_size=1000) app.add_middleware(GZipMiddleware, minimum_size=1000)
configure_cors_middleware(app) configure_cors_middleware(app)
app.build_middleware_stack() # rebuild middleware stack on-the-fly
def configure_cors_middleware(app): def configure_cors_middleware(app):
@@ -213,3 +212,38 @@ def configure_cors_middleware(app):
cors_options["allow_origin_regex"] = cmd_opts.cors_allow_origins_regex cors_options["allow_origin_regex"] = cmd_opts.cors_allow_origins_regex
app.add_middleware(CORSMiddleware, **cors_options) app.add_middleware(CORSMiddleware, **cors_options)
def allow_add_middleware_after_start():
from starlette.applications import Starlette
def add_middleware_wrapper(func):
"""Patch Starlette.add_middleware to allow for middleware to be added after the app has started
Starlette.add_middleware raises RuntimeError("Cannot add middleware after an application has started") if middleware_stack is not None.
We can force add new middleware by first setting middleware_stack to None, then adding the middleware.
When middleware_stack is None, it will rebuild the middleware_stack on the next request (Lazily build middleware stack).
If packages are updated in the future, things may break, so we have two ways to add middleware after the app has started:
the first way is to just set middleware_stack to None and then retry
the second manually insert the middleware into the user_middleware list without calling add_middleware
"""
@wraps(func)
def wrapper(self, *args, **kwargs):
res = None
try:
res = func(self, *args, **kwargs)
except RuntimeError as _:
try:
self.middleware_stack = None
res = func(self, *args, **kwargs)
except RuntimeError as e:
print(f'Warning: "{e}", Retrying...')
from starlette.middleware import Middleware
self.user_middleware.insert(0, Middleware(*args, **kwargs))
self.middleware_stack = None # ensure middleware_stack in the event of concurrent requests
return res
return wrapper
patches.patch(__name__, obj=Starlette, field="add_middleware", replacement=add_middleware_wrapper(Starlette.add_middleware))
+1 -3
View File
@@ -43,9 +43,7 @@ def check_python_version():
supported_minors = [7, 8, 9, 10, 11] supported_minors = [7, 8, 9, 10, 11]
if not (major == 3 and minor in supported_minors): if not (major == 3 and minor in supported_minors):
import modules.errors errors.print_error_explanation(f"""
modules.errors.print_error_explanation(f"""
INCOMPATIBLE PYTHON VERSION INCOMPATIBLE PYTHON VERSION
This program is tested with 3.10.6 Python, but you have {major}.{minor}.{micro}. This program is tested with 3.10.6 Python, but you have {major}.{minor}.{micro}.
+1 -1
View File
@@ -125,7 +125,7 @@ def ui_reorder_categories():
def callbacks_order_settings(): def callbacks_order_settings():
options = { options = {
"sd_vae_explanation": OptionHTML(""" "callbacks_order_explanation": OptionHTML("""
For categories below, callbacks added to dropdowns happen before others, in order listed. For categories below, callbacks added to dropdowns happen before others, in order listed.
"""), """),
+4
View File
@@ -29,6 +29,10 @@ class ScriptPostprocessingCodeFormer(scripts_postprocessing.ScriptPostprocessing
res = Image.fromarray(restored_img) res = Image.fromarray(restored_img)
if codeformer_visibility < 1.0: if codeformer_visibility < 1.0:
if pp.image.size != res.size:
res = res.resize(pp.image.size)
if pp.image.mode != res.mode:
res = res.convert(pp.image.mode)
res = Image.blend(pp.image, res, codeformer_visibility) res = Image.blend(pp.image, res, codeformer_visibility)
pp.image = res pp.image = res
+4
View File
@@ -26,6 +26,10 @@ class ScriptPostprocessingGfpGan(scripts_postprocessing.ScriptPostprocessing):
res = Image.fromarray(restored_img) res = Image.fromarray(restored_img)
if gfpgan_visibility < 1.0: if gfpgan_visibility < 1.0:
if pp.image.size != res.size:
res = res.resize(pp.image.size)
if pp.image.mode != res.mode:
res = res.convert(pp.image.mode)
res = Image.blend(pp.image, res, gfpgan_visibility) res = Image.blend(pp.image, res, gfpgan_visibility)
pp.image = res pp.image = res