diff --git a/README.md b/README.md
index 79eac55..93b3ff0 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
- 
+ 
@@ -43,14 +43,29 @@
Click to expand
+### 0.7.0 BETA2
+
+- X/Y/Z is improved! One more parameter is ready: you can now select several face models to create a variation of swaps to choose the best one!
+
+
+
+To use "Face Model" axis - you should enable ReActor and choose any face model as the Source:
+
+
+Full size demo image: [xyz_demo_2.png](https://raw.githubusercontent.com/Gourieff/Assets/main/sd-webui-reactor/xyz_demo_2.png)
+
### 0.7.0 BETA1
-- X/Y/Z Script support (up to 3 axis: CodeFormer Weight, Restorer Visibility, Face Mask Correction)
+- X/Y/Z Script support (up to 3 axes: CodeFormer Weight, Restorer Visibility, Face Mask Correction)
+
+
Full size demo image: [xyz_demo.png](https://raw.githubusercontent.com/Gourieff/Assets/main/sd-webui-reactor/xyz_demo.png)
+__Don't forget to enable ReActor and set any source (to prevent "no source" error)__
+
### 0.7.0 ALPHA1
- You can now blend faces to build blended face models ("Tools->Face Models->Blend") - due to popular demand
diff --git a/README_RU.md b/README_RU.md
index 201255b..111d326 100644
--- a/README_RU.md
+++ b/README_RU.md
@@ -2,7 +2,7 @@
- 
+ 
@@ -42,13 +42,24 @@
Нажмите, чтобы посмотреть
+### 0.7.0 BETA2
+
+- X/Y/Z опция улучшена! Добавлен ещё один параметр: теперь вы можете выбрать несколько моделей лиц для создания вариации замененных лиц, чтобы выбрать наилучшие!
+
+
+
+Чтобы использовать ось "Face Model" - активируйте РеАктор и выбирите любую модель лица в качестве источника:
+
+
+Полноразмерное демо-изображение: [xyz_demo_2.png](https://raw.githubusercontent.com/Gourieff/Assets/main/sd-webui-reactor/xyz_demo_2.png)
+
### 0.7.0 BETA1
- Поддержка X/Y/Z скрипта (до 3-х параметров: CodeFormer Weight, Restorer Visibility, Face Mask Correction)
-Full size demo image: [xyz_demo.png](https://raw.githubusercontent.com/Gourieff/Assets/main/sd-webui-reactor/xyz_demo.png)
+Полноразмерное демо-изображение: [xyz_demo.png](https://raw.githubusercontent.com/Gourieff/Assets/main/sd-webui-reactor/xyz_demo.png)
### 0.7.0 ALPHA1
diff --git a/scripts/reactor_faceswap.py b/scripts/reactor_faceswap.py
index 428f3cf..d02fc68 100644
--- a/scripts/reactor_faceswap.py
+++ b/scripts/reactor_faceswap.py
@@ -256,6 +256,7 @@ class FaceSwapScript(scripts.Script):
self.face_restorer_visibility = shared.opts.data['restorer_visibility'] if 'restorer_visibility' in shared.opts.data.keys() else 1
self.codeformer_weight = shared.opts.data['codeformer_weight'] if 'codeformer_weight' in shared.opts.data.keys() else 0.5
self.mask_face = shared.opts.data['mask_face'] if 'mask_face' in shared.opts.data.keys() else False
+ self.face_model = shared.opts.data['face_model'] if 'face_model' in shared.opts.data.keys() else "None"
logger.debug("*** Set Device")
set_Device(self.device)
diff --git a/scripts/reactor_xyz.py b/scripts/reactor_xyz.py
index 52a801a..75c7e57 100644
--- a/scripts/reactor_xyz.py
+++ b/scripts/reactor_xyz.py
@@ -5,6 +5,11 @@ Thanks @ledahu for contributing
from modules import scripts
from modules.shared import opts
+from scripts.reactor_helpers import (
+ get_model_names,
+ get_facemodels
+)
+
# xyz_grid = [x for x in scripts.scripts_data if x.script_class.__module__ == "xyz_grid.py"][0].module
def find_module(module_names):
@@ -29,6 +34,9 @@ def bool_(string):
def choices_bool():
return ["False", "True"]
+def choices_face_models():
+ return get_model_names(get_facemodels)
+
def float_applier(value_name:str, min_range:float = 0, max_range:float = 1):
"""
Returns a function that applies the given value to the given value_name in opts.data.
@@ -46,17 +54,24 @@ def float_applier(value_name:str, min_range:float = 0, max_range:float = 1):
return apply_float
def bool_applier(value_name:str):
- def apply_bool__(p, x, xs):
+ def apply_bool(p, x, xs):
x_normed = bool_(x)
opts.data[value_name] = x_normed
# print(f'normed = {x_normed}')
- return apply_bool__
+ return apply_bool
+
+def str_applier(value_name:str):
+ def apply_str(p, x, xs):
+ opts.data[value_name] = x
+ return apply_str
+
def add_axis_options(xyz_grid):
extra_axis_options = [
xyz_grid.AxisOption("[ReActor] CodeFormer Weight", float, float_applier("codeformer_weight", 0, 1)),
xyz_grid.AxisOption("[ReActor] Restorer Visibility", float, float_applier("restorer_visibility", 0, 1)),
xyz_grid.AxisOption("[ReActor] Face Mask Correction", str, bool_applier("mask_face"), choices=choices_bool),
+ xyz_grid.AxisOption("[ReActor] Face Models", str, str_applier("face_model"), choices=choices_face_models),
]
set_a = {opt.label for opt in xyz_grid.axis_options}
set_b = {opt.label for opt in extra_axis_options}