diff --git a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
index 713376389..61294b7e5 100644
--- a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
+++ b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
@@ -150,6 +150,7 @@ def paint(self, painter: QPainter, option, widget=None):
self.pixmap.fill(QColor(0, 0, 0, 1))
if self.settings_manager.active_grid_settings.render_border:
+ print(self.active_grid_area_rect)
size = 4
painter.setPen(QPen(
self.active_grid_area_color,
@@ -187,8 +188,6 @@ def change_fill_opacity(self, value):
def mouseReleaseEvent(self, event):
super().mouseReleaseEvent(event)
pos = self.pos()
- self.settings_manager.set_value("active_grid_settings.pos_x", pos.x())
- self.settings_manager.set_value("active_grid_settings.pos_y", pos.y())
class CanvasPlusWidget(CanvasBaseWidget):
diff --git a/src/airunner/widgets/canvas_plus/standard_image_widget.py b/src/airunner/widgets/canvas_plus/standard_image_widget.py
index 845e9b017..e576708a4 100644
--- a/src/airunner/widgets/canvas_plus/standard_image_widget.py
+++ b/src/airunner/widgets/canvas_plus/standard_image_widget.py
@@ -43,6 +43,7 @@ def canvas_widget(self):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
+ self.ui.settings_tab_widget.tabBar().hide()
self.ui.advanced_settings.hide()
self.load_upscale_options()
self.set_controlnet_settings_properties()
@@ -107,6 +108,7 @@ def handle_image_data(self, data):
def load_image_from_path(self, image_path):
image = Image.open(image_path)
self.load_image_from_object(image=image, image_path=image_path)
+ self.app.ui.image_browser.add_image(image_path)
def load_image_from_object(self, image, image_path=NotImplemented):
self.set_pixmap(image=image, image_path=image_path)
@@ -401,6 +403,8 @@ def initialize_generator_form(self, override_id=None):
def handle_settings_manager_changed(self, key, val, settings_manager):
if key == "generator_settings_override_id":
self.initialize_generator_form(val)
+ elif key == "ai_mode":
+ self.ui.settings_tab_widget.setCurrentIndex(1 if self.settings_manager.ai_mode else 0)
def initialize(self):
self.set_form_values()
diff --git a/src/airunner/widgets/canvas_plus/templates/standard_image_widget.ui b/src/airunner/widgets/canvas_plus/templates/standard_image_widget.ui
index 072abcc5d..521be74d9 100644
--- a/src/airunner/widgets/canvas_plus/templates/standard_image_widget.ui
+++ b/src/airunner/widgets/canvas_plus/templates/standard_image_widget.ui
@@ -80,7 +80,7 @@
Qt::LeftToRight
- 0
+ 5
@@ -353,16 +353,17 @@
0
-
-
+
QTabWidget::East
- 1
+ 0
-
+
+ ..
Image
@@ -762,7 +763,8 @@
-
+
+ ..
Text
@@ -831,15 +833,15 @@
- LLMSettingsWidget
+ SliderWidget
QWidget
- airunner/widgets/llm/llm_settings_widget
+ airunner/widgets/slider/slider_widget
1
- SliderWidget
+ LLMSettingsWidget
QWidget
- airunner/widgets/slider/slider_widget
+ airunner/widgets/llm/llm_settings_widget
1
diff --git a/src/airunner/widgets/canvas_plus/templates/standard_image_widget_ui.py b/src/airunner/widgets/canvas_plus/templates/standard_image_widget_ui.py
index 82365fdaa..2bfee2847 100644
--- a/src/airunner/widgets/canvas_plus/templates/standard_image_widget_ui.py
+++ b/src/airunner/widgets/canvas_plus/templates/standard_image_widget_ui.py
@@ -150,9 +150,9 @@ def setupUi(self, standard_image_widget):
self.gridLayout_11 = QtWidgets.QGridLayout(self.tab_6)
self.gridLayout_11.setContentsMargins(0, 0, 0, 0)
self.gridLayout_11.setObjectName("gridLayout_11")
- self.tabWidget_2 = QtWidgets.QTabWidget(parent=self.tab_6)
- self.tabWidget_2.setTabPosition(QtWidgets.QTabWidget.TabPosition.East)
- self.tabWidget_2.setObjectName("tabWidget_2")
+ self.settings_tab_widget = QtWidgets.QTabWidget(parent=self.tab_6)
+ self.settings_tab_widget.setTabPosition(QtWidgets.QTabWidget.TabPosition.East)
+ self.settings_tab_widget.setObjectName("settings_tab_widget")
self.tab_7 = QtWidgets.QWidget()
self.tab_7.setObjectName("tab_7")
self.gridLayout_13 = QtWidgets.QGridLayout(self.tab_7)
@@ -324,7 +324,7 @@ def setupUi(self, standard_image_widget):
self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_2)
self.gridLayout_13.addWidget(self.scrollArea_2, 0, 0, 1, 1)
icon = QtGui.QIcon.fromTheme("applications-graphics")
- self.tabWidget_2.addTab(self.tab_7, icon, "")
+ self.settings_tab_widget.addTab(self.tab_7, icon, "")
self.tab_8 = QtWidgets.QWidget()
self.tab_8.setObjectName("tab_8")
self.gridLayout_12 = QtWidgets.QGridLayout(self.tab_8)
@@ -333,8 +333,8 @@ def setupUi(self, standard_image_widget):
self.llm_settings_widget.setObjectName("llm_settings_widget")
self.gridLayout_12.addWidget(self.llm_settings_widget, 0, 0, 1, 1)
icon = QtGui.QIcon.fromTheme("emblem-documents")
- self.tabWidget_2.addTab(self.tab_8, icon, "")
- self.gridLayout_11.addWidget(self.tabWidget_2, 0, 0, 1, 1)
+ self.settings_tab_widget.addTab(self.tab_8, icon, "")
+ self.gridLayout_11.addWidget(self.settings_tab_widget, 0, 0, 1, 1)
icon = QtGui.QIcon.fromTheme("document-properties")
self.tabWidget.addTab(self.tab_6, icon, "")
self.gridLayout_7.addWidget(self.tabWidget, 0, 0, 1, 1)
@@ -358,8 +358,8 @@ def setupUi(self, standard_image_widget):
self.gridLayout_2.addWidget(self.splitter, 0, 0, 1, 1)
self.retranslateUi(standard_image_widget)
- self.tabWidget.setCurrentIndex(0)
- self.tabWidget_2.setCurrentIndex(1)
+ self.tabWidget.setCurrentIndex(5)
+ self.settings_tab_widget.setCurrentIndex(0)
self.upscale_model.currentTextChanged['QString'].connect(standard_image_widget.upscale_model_changed) # type: ignore
self.face_enhance.clicked['bool'].connect(standard_image_widget.face_enhance_toggled) # type: ignore
self.comboBox.currentIndexChanged['int'].connect(standard_image_widget.upscale_number_changed) # type: ignore
@@ -412,8 +412,8 @@ def retranslateUi(self, standard_image_widget):
self.label_6.setText(_translate("standard_image_widget", "Version"))
self.label_3.setText(_translate("standard_image_widget", "Model"))
self.label_4.setText(_translate("standard_image_widget", "Scheduler"))
- self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_7), _translate("standard_image_widget", "Image"))
- self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_8), _translate("standard_image_widget", "Text"))
+ self.settings_tab_widget.setTabText(self.settings_tab_widget.indexOf(self.tab_7), _translate("standard_image_widget", "Image"))
+ self.settings_tab_widget.setTabText(self.settings_tab_widget.indexOf(self.tab_8), _translate("standard_image_widget", "Text"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_6), _translate("standard_image_widget", "Settings"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tab_6), _translate("standard_image_widget", "Stable Diffusion settings"))
from airunner.widgets.brushes.brushes_container import BrushesContainer
diff --git a/src/airunner/widgets/generator_form/generator_form_widget.py b/src/airunner/widgets/generator_form/generator_form_widget.py
index 7f6e25699..c5275e0be 100644
--- a/src/airunner/widgets/generator_form/generator_form_widget.py
+++ b/src/airunner/widgets/generator_form/generator_form_widget.py
@@ -147,6 +147,8 @@ def handle_changed_signal(self, key, value):
self.ui.seed_widget_latents.update_seed()
elif key == "enable_advanced_mode":
self.toggle_advanced_generation()
+ elif key == "ai_mode":
+ self.activate_ai_mode()
"""
Slot functions
diff --git a/src/airunner/widgets/image/image_panel_widget.py b/src/airunner/widgets/image/image_panel_widget.py
index 2c6baebf9..5a576fbad 100644
--- a/src/airunner/widgets/image/image_panel_widget.py
+++ b/src/airunner/widgets/image/image_panel_widget.py
@@ -38,31 +38,24 @@ def __init__(self, *args, **kwargs):
if self.settings_manager.path_settings.image_path != "":
self.show_files()
- self.initialize_watcher()
self.load_files()
self.show_files()
self.display_thread = threading.Thread(target=self.display_thumbnails)
- def initialize_watcher(self):
+ def add_image(self, image_path):
"""
- Initializes the file system watcher to monitor changes in the image directory.
+ Adds an image to the image panel widget.
- This method adds the image directory and its subdirectories to the file system watcher,
- and connects the directoryChanged and fileChanged signals to their respective handler methods.
+ Args:
+ image_path (str): The path of the image to be added.
+
+ Returns:
+ None
"""
- self.watcher = QFileSystemWatcher()
- for root, dirs, files in os.walk(self.settings_manager.path_settings.image_path):
- self.watcher.addPath(root)
- self.watcher.directoryChanged.connect(self.handle_directory_changed)
- self.watcher.fileChanged.connect(self.handle_files_changed)
-
- def handle_directory_changed(self, event):
- #self.show_files()
- pass
-
- def handle_files_changed(self, event):
- #self.show_files()
- pass
+ image_widget = ImageWidget(self, is_thumbnail=True)
+ image_widget.set_image(image_path)
+
+ self.ui.scrollAreaWidgetContents.layout().addWidget(image_widget)
def clear_files(self):
self.page = 0
@@ -102,7 +95,11 @@ def load_files(self):
if os.path.isdir(os.path.join(self.settings_manager.path_settings.image_path, file)):
sorted_files[file] = []
for root, dirs, files_in_dir in os.walk(os.path.join(self.settings_manager.path_settings.image_path, file)):
- sorted_files[file].extend([os.path.join(root, f) for f in files_in_dir])
+ files = []
+ for f in files_in_dir:
+ if ".png.thumbnail.png" not in f:
+ files.append(os.path.join(root, f))
+ sorted_files[file].extend(files)
section = "txt2img"
files = sorted_files[section]
diff --git a/src/airunner/widgets/llm/llm_settings_widget.py b/src/airunner/widgets/llm/llm_settings_widget.py
index 41f2ce8c8..64aeb2095 100644
--- a/src/airunner/widgets/llm/llm_settings_widget.py
+++ b/src/airunner/widgets/llm/llm_settings_widget.py
@@ -40,7 +40,7 @@ def generator_settings(self):
@property
def current_generator(self):
return self.settings_manager.get_value("current_llm_generator")
-
+
def initialize(self):
self.initialize_form()
@@ -72,6 +72,9 @@ def initialize_form(self):
self.ui.early_stopping.blockSignals(True)
self.ui.use_gpu_checkbox.blockSignals(True)
self.ui.override_parameters.blockSignals(True)
+ self.ui.leave_in_vram.blockSignals(True)
+ self.ui.move_to_cpu.blockSignals(True)
+ self.ui.unload_model.blockSignals(True)
self.ui.top_p.initialize_properties()
self.ui.max_length.initialize_properties()
self.ui.max_length.initialize_properties()
@@ -88,6 +91,10 @@ def initialize_form(self):
self.ui.prompt_template.clear()
self.ui.prompt_template.addItems(prompt_templates)
+ self.ui.leave_in_vram.setChecked(not self.settings_manager.unload_unused_model and not self.settings_manager.move_unused_model_to_cpu)
+ self.ui.move_to_cpu.setChecked(self.settings_manager.move_unused_model_to_cpu)
+ self.ui.unload_model.setChecked(self.settings_manager.unload_unused_model)
+
if self.generator:
self.ui.radio_button_2bit.setChecked(self.generator.generator_settings[0].dtype == "2bit")
self.ui.radio_button_4bit.setChecked(self.generator.generator_settings[0].dtype == "4bit")
@@ -125,6 +132,9 @@ def initialize_form(self):
self.ui.use_gpu_checkbox.blockSignals(False)
self.ui.override_parameters.blockSignals(False)
self.ui.prompt_template.blockSignals(False)
+ self.ui.leave_in_vram.blockSignals(False)
+ self.ui.move_to_cpu.blockSignals(False)
+ self.ui.unload_model.blockSignals(False)
def model_text_changed(self, val):
print("model_text_changed", val)
@@ -191,13 +201,12 @@ def use_gpu_toggled(self, val):
def set_dtype_by_gpu(self, use_gpu):
if not use_gpu:
+ if self.generator.generator_settings[0].dtype in ["2bit","4bit", "8bit"]:
+ self.ui.radio_button_16bit.setChecked(True)
self.ui.radio_button_2bit.setEnabled(False)
self.ui.radio_button_4bit.setEnabled(False)
self.ui.radio_button_8bit.setEnabled(False)
self.ui.radio_button_32bit.setEnabled(True)
-
- if self.generator.generator_settings[0].dtype in ["4bit", "8bit"]:
- self.ui.radio_button_16bit.setChecked(True)
else:
self.ui.radio_button_2bit.setEnabled(True)
self.ui.radio_button_4bit.setEnabled(True)
diff --git a/src/airunner/windows/main/main_window.py b/src/airunner/windows/main/main_window.py
index ce7bd258f..a661e3cba 100644
--- a/src/airunner/windows/main/main_window.py
+++ b/src/airunner/windows/main/main_window.py
@@ -1425,4 +1425,3 @@ def action_center_clicked(self):
def action_ai_toggled(self, val):
self.settings_manager.set_value("ai_mode", val)
- self.generator_tab_widget.activate_ai_mode()