mirror of
https://github.com/Bing-su/adetailer.git
synced 2026-01-26 19:29:54 +00:00
Merge branch 'dev'
This commit is contained in:
@@ -17,12 +17,12 @@ repos:
|
||||
- id: mixed-line-ending
|
||||
|
||||
- repo: https://github.com/rbubley/mirrors-prettier
|
||||
rev: v3.3.2
|
||||
rev: v3.3.3
|
||||
hooks:
|
||||
- id: prettier
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.4.9
|
||||
rev: v0.5.6
|
||||
hooks:
|
||||
- id: ruff
|
||||
args: [--fix, --exit-non-zero-on-fix]
|
||||
|
||||
10
CHANGELOG.md
10
CHANGELOG.md
@@ -1,5 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## 2024-08-03
|
||||
|
||||
- v24.8.0
|
||||
- 샘플러 선택칸에 Use same sampler 옵션 추가
|
||||
- 컨트롤넷 유니온 모델을 선택할 수 있게 함
|
||||
|
||||
- webui 1.9.0이상에서 기본 스케줄러가 설정되지 않던 문제 수정
|
||||
- issus #656의 문제 해결을 위해 v24.4.0에 적용되었던 프롬프트 표시 기능을 되돌림
|
||||
- mediapipe에서 에러가 발생하면 추론이 실패한 것으로 처리하고 조용히 넘어감
|
||||
|
||||
## 2024-06-16
|
||||
|
||||
- v24.6.0
|
||||
|
||||
@@ -45,7 +45,7 @@ def pause_total_tqdm():
|
||||
|
||||
|
||||
@contextmanager
|
||||
def preseve_prompts(p: PT):
|
||||
def preserve_prompts(p: PT):
|
||||
all_pt = copy(p.all_prompts)
|
||||
all_ng = copy(p.all_negative_prompts)
|
||||
try:
|
||||
|
||||
15
aaaaaa/ui.py
15
aaaaaa/ui.py
@@ -2,6 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from functools import partial
|
||||
from itertools import chain
|
||||
from types import SimpleNamespace
|
||||
from typing import Any
|
||||
|
||||
@@ -42,6 +43,9 @@ else:
|
||||
"depth": ["depth_midas", "depth_hand_refiner"],
|
||||
}
|
||||
|
||||
union = list(chain.from_iterable(cn_module_choices.values()))
|
||||
cn_module_choices["union"] = union
|
||||
|
||||
|
||||
class Widgets(SimpleNamespace):
|
||||
def tolist(self):
|
||||
@@ -82,7 +86,7 @@ def on_widget_change(state: dict, value: Any, *, attr: str):
|
||||
|
||||
def on_generate_click(state: dict, *values: Any):
|
||||
for attr, value in zip(ALL_ARGS.attrs, values):
|
||||
state[attr] = value
|
||||
state[attr] = value # noqa: PERF403
|
||||
state["is_api"] = ()
|
||||
return state
|
||||
|
||||
@@ -546,11 +550,16 @@ def inpainting(w: Widgets, n: int, is_img2img: bool, webui_info: WebuiInfo):
|
||||
elem_id=eid("ad_use_sampler"),
|
||||
)
|
||||
|
||||
sampler_names = [
|
||||
"Use same sampler",
|
||||
*webui_info.sampler_names,
|
||||
]
|
||||
|
||||
with gr.Row():
|
||||
w.ad_sampler = gr.Dropdown(
|
||||
label="ADetailer sampler" + suffix(n),
|
||||
choices=webui_info.sampler_names,
|
||||
value=webui_info.sampler_names[0],
|
||||
choices=sampler_names,
|
||||
value=sampler_names[1],
|
||||
visible=True,
|
||||
elem_id=eid("ad_sampler"),
|
||||
)
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "24.6.0"
|
||||
__version__ = "24.8.0"
|
||||
|
||||
@@ -21,7 +21,10 @@ def mediapipe_predict(
|
||||
}
|
||||
if model_type in mapping:
|
||||
func = mapping[model_type]
|
||||
return func(image, confidence)
|
||||
try:
|
||||
return func(image, confidence)
|
||||
except Exception:
|
||||
return PredictOutput()
|
||||
msg = f"[-] ADetailer: Invalid mediapipe model type: {model_type}, Available: {list(mapping.keys())!r}"
|
||||
raise RuntimeError(msg)
|
||||
|
||||
|
||||
@@ -8,4 +8,5 @@ cn_model_module = {
|
||||
"tile": "tile_resample",
|
||||
"depth": "depth_midas",
|
||||
}
|
||||
cn_model_regex = re.compile("|".join(cn_model_module.keys()), flags=re.I)
|
||||
_names = [*cn_model_module, "union"]
|
||||
cn_model_regex = re.compile("|".join(_names), flags=re.IGNORECASE)
|
||||
|
||||
@@ -61,13 +61,13 @@ class ControlNetExt:
|
||||
if (not self.cn_available) or model == "None":
|
||||
return
|
||||
|
||||
if module is None or module == "None":
|
||||
if module == "None":
|
||||
module = None
|
||||
if module is None:
|
||||
for m, v in cn_model_module.items():
|
||||
if m in model:
|
||||
module = v
|
||||
break
|
||||
else:
|
||||
module = None
|
||||
|
||||
cn_units = [
|
||||
self.external_cn.ControlNetUnit(
|
||||
|
||||
@@ -20,7 +20,7 @@ from aaaaaa.helper import (
|
||||
change_torch_load,
|
||||
copy_extra_params,
|
||||
pause_total_tqdm,
|
||||
preseve_prompts,
|
||||
preserve_prompts,
|
||||
)
|
||||
from aaaaaa.p_method import (
|
||||
get_i,
|
||||
@@ -374,7 +374,10 @@ class AfterDetailerScript(scripts.Script):
|
||||
|
||||
def get_sampler(self, p, args: ADetailerArgs) -> str:
|
||||
if args.ad_use_sampler:
|
||||
if args.ad_sampler == "Use same sampler":
|
||||
return p.sampler_name
|
||||
return args.ad_sampler
|
||||
|
||||
if hasattr(p, "_ad_orig"):
|
||||
return p._ad_orig.sampler_name
|
||||
return p.sampler_name
|
||||
@@ -382,7 +385,7 @@ class AfterDetailerScript(scripts.Script):
|
||||
def get_scheduler(self, p, args: ADetailerArgs) -> dict[str, str]:
|
||||
"webui >= 1.9.0"
|
||||
if not args.ad_use_sampler:
|
||||
return {}
|
||||
return {"scheduler": getattr(p, "scheduler", "Automatic")}
|
||||
|
||||
if args.ad_scheduler == "Use same scheduler":
|
||||
value = getattr(p, "scheduler", "Automatic")
|
||||
@@ -447,8 +450,8 @@ class AfterDetailerScript(scripts.Script):
|
||||
script_runner = copy(p.scripts)
|
||||
script_args = self.script_args_copy(p.script_args)
|
||||
|
||||
ad_only_seleted_scripts = opts.data.get("ad_only_seleted_scripts", True)
|
||||
if not ad_only_seleted_scripts:
|
||||
ad_only_selected_scripts = opts.data.get("ad_only_selected_scripts", True)
|
||||
if not ad_only_selected_scripts:
|
||||
return script_runner, script_args
|
||||
|
||||
ad_script_names_string: str = opts.data.get("ad_script_names", SCRIPT_DEFAULT)
|
||||
@@ -616,23 +619,18 @@ class AfterDetailerScript(scripts.Script):
|
||||
i2i.negative_prompt = negative_prompt
|
||||
|
||||
@staticmethod
|
||||
def compare_prompt(p, extra_params: dict[str, Any], processed, n: int = 0):
|
||||
if not hasattr(p, "_ad_extra_params_result"):
|
||||
p._ad_extra_params_result = {}
|
||||
|
||||
def compare_prompt(extra_params: dict[str, Any], processed, n: int = 0):
|
||||
pt = "ADetailer prompt" + suffix(n)
|
||||
if pt in extra_params and extra_params[pt] != processed.all_prompts[0]:
|
||||
print(
|
||||
f"[-] ADetailer: applied {ordinal(n + 1)} ad_prompt: {processed.all_prompts[0]!r}"
|
||||
)
|
||||
p._ad_extra_params_result[pt] = processed.all_prompts[0]
|
||||
|
||||
ng = "ADetailer negative prompt" + suffix(n)
|
||||
if ng in extra_params and extra_params[ng] != processed.all_negative_prompts[0]:
|
||||
print(
|
||||
f"[-] ADetailer: applied {ordinal(n + 1)} ad_negative_prompt: {processed.all_negative_prompts[0]!r}"
|
||||
)
|
||||
p._ad_extra_params_result[ng] = processed.all_negative_prompts[0]
|
||||
|
||||
@staticmethod
|
||||
def get_i2i_init_image(p, pp):
|
||||
@@ -784,7 +782,7 @@ class AfterDetailerScript(scripts.Script):
|
||||
finally:
|
||||
p2.close()
|
||||
|
||||
self.compare_prompt(p, p.extra_generation_params, processed, n=n)
|
||||
self.compare_prompt(p.extra_generation_params, processed, n=n)
|
||||
p2 = copy(i2i)
|
||||
p2.init_images = [processed.images[0]]
|
||||
|
||||
@@ -807,7 +805,7 @@ class AfterDetailerScript(scripts.Script):
|
||||
|
||||
if need_call_postprocess(p):
|
||||
dummy = Processed(p, [], p.seed, "")
|
||||
with preseve_prompts(p):
|
||||
with preserve_prompts(p):
|
||||
p.scripts.postprocess(copy(p), dummy)
|
||||
|
||||
is_processed = False
|
||||
@@ -823,17 +821,13 @@ class AfterDetailerScript(scripts.Script):
|
||||
)
|
||||
|
||||
if need_call_process(p):
|
||||
with preseve_prompts(p):
|
||||
with preserve_prompts(p):
|
||||
copy_p = copy(p)
|
||||
if hasattr(p.scripts, "before_process"):
|
||||
p.scripts.before_process(copy_p)
|
||||
p.scripts.before_process(copy_p)
|
||||
p.scripts.process(copy_p)
|
||||
|
||||
self.write_params_txt(params_txt_content)
|
||||
|
||||
if hasattr(p, "_ad_extra_params_result"):
|
||||
p.extra_generation_params.update(p._ad_extra_params_result)
|
||||
|
||||
|
||||
def on_after_component(component, **_kwargs):
|
||||
global txt2img_submit_button, img2img_submit_button
|
||||
@@ -862,7 +856,7 @@ def on_ui_settings():
|
||||
"ad_extra_models_dir",
|
||||
shared.OptionInfo(
|
||||
default="",
|
||||
label="Extra paths to scan adetailer models seperated by vertical bars(|)",
|
||||
label="Extra paths to scan adetailer models separated by vertical bars(|)",
|
||||
component=gr.Textbox,
|
||||
section=section,
|
||||
)
|
||||
@@ -881,7 +875,7 @@ def on_ui_settings():
|
||||
)
|
||||
|
||||
shared.opts.add_option(
|
||||
"ad_only_seleted_scripts",
|
||||
"ad_only_selected_scripts",
|
||||
shared.OptionInfo(
|
||||
True, "Apply only selected scripts to ADetailer", section=section
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user