From 4d5c580dc0069c82c116ed4a85cfd5fee158cf9f Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 05:56:10 -0700
Subject: [PATCH 1/6] fix improts
---
src/airunner/aihandler/offline_client.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/airunner/aihandler/offline_client.py b/src/airunner/aihandler/offline_client.py
index c633ad039..97f6e74df 100644
--- a/src/airunner/aihandler/offline_client.py
+++ b/src/airunner/aihandler/offline_client.py
@@ -2,10 +2,9 @@
import queue
import time
import threading
-from airunner.aihandler.engine import Engine
+from airunner.aihandler.engine import Engine
from airunner.aihandler.logger import Logger as logger
-from airunner.aihandler.runner import SDRunner
class OfflineClient:
From 2d38329cd96cd1cb878db3d75bc10b0aa242eefc Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 10:24:34 -0700
Subject: [PATCH 2/6] improvements to image widget and loading of thumbnails
---
src/airunner/aihandler/logger.py | 2 +-
.../widgets/canvas_plus/canvas_plus_widget.py | 4 +-
.../widgets/image/image_panel_widget.py | 95 +++++++++++++++----
src/airunner/widgets/image/image_widget.py | 29 ++++--
4 files changed, 100 insertions(+), 30 deletions(-)
diff --git a/src/airunner/aihandler/logger.py b/src/airunner/aihandler/logger.py
index a22fe7dcf..7fb4cd976 100644
--- a/src/airunner/aihandler/logger.py
+++ b/src/airunner/aihandler/logger.py
@@ -71,7 +71,7 @@ def error(cls, msg):
cls.logger.error(msg)
-Logger.set_level(logging.DEBUG)
+Logger.set_level(LOG_LEVEL)
Logger.stream_handler.setFormatter(Logger.formatter)
Logger.logger.addHandler(Logger.stream_handler)
logging.getLogger("lightning").setLevel(logging.WARNING)
diff --git a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
index 96d82312e..713376389 100644
--- a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
+++ b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
@@ -8,8 +8,8 @@
from PyQt6.QtCore import Qt, QPoint, QPointF, QRect
from PyQt6.QtGui import QBrush, QColor, QPen, QPixmap, QPainter, QCursor
from PyQt6.QtWidgets import QGraphicsScene, QGraphicsItem, QGraphicsPixmapItem, QGraphicsLineItem
-from airunner.aihandler.logger import Logger
+from airunner.aihandler.logger import Logger
from airunner.aihandler.settings_manager import SettingsManager
from airunner.cursors.circle_brush import CircleCursor
from airunner.data.db import session
@@ -759,4 +759,4 @@ def rotate_90_clockwise(self):
def rotate_90_counterclockwise(self):
if self.current_active_image:
self.current_active_image = self.current_active_image.transpose(Image.ROTATE_90)
- self.do_draw()
\ No newline at end of file
+ self.do_draw()
diff --git a/src/airunner/widgets/image/image_panel_widget.py b/src/airunner/widgets/image/image_panel_widget.py
index 9ec0226fc..2c6baebf9 100644
--- a/src/airunner/widgets/image/image_panel_widget.py
+++ b/src/airunner/widgets/image/image_panel_widget.py
@@ -1,4 +1,5 @@
import os
+import threading
from PyQt6.QtCore import QFileSystemWatcher
@@ -14,8 +15,22 @@ class ImagePanelWidget(BaseWidget):
total_per_page = 50
page_step = 512
last_page = False
+ sorted_files = []
+ start = 0
+ end = 0
+
def __init__(self, *args, **kwargs):
+ """
+ Initializes the ImagePanelWidget.
+
+ Args:
+ *args: Variable length argument list.
+ **kwargs: Arbitrary keyword arguments.
+
+ Returns:
+ None
+ """
super().__init__(*args, **kwargs)
self.ui.scrollArea.verticalScrollBar().valueChanged.connect(self.handle_scroll)
flowLayout = QFlowLayout()
@@ -23,20 +38,31 @@ def __init__(self, *args, **kwargs):
if self.settings_manager.path_settings.image_path != "":
self.show_files()
- # watch the image directory for new files or delete files. if anything changes in the directory call show_files
+ self.initialize_watcher()
+ self.load_files()
+ self.show_files()
+ self.display_thread = threading.Thread(target=self.display_thumbnails)
+
+ def initialize_watcher(self):
+ """
+ Initializes the file system watcher to monitor changes in the image directory.
+
+ 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.
+ """
self.watcher = QFileSystemWatcher()
- # recursively watch the image path
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()
+ #self.show_files()
+ pass
def handle_files_changed(self, event):
- self.show_files()
+ #self.show_files()
+ pass
def clear_files(self):
self.page = 0
@@ -47,21 +73,31 @@ def clear_files(self):
widget.deleteLater()
def show_files(self, clear_images=True, reset_scroll_bar=True, show_folders=True):
- if clear_images:
- self.clear_files()
+ """
+ Displays the files in the image panel widget.
+ Args:
+ clear_images (bool, optional): Whether to clear the existing images. Defaults to True.
+ reset_scroll_bar (bool, optional): Whether to reset the scroll bar position. Defaults to True.
+ show_folders (bool, optional): Whether to show folders in the file list. Defaults to True.
+ """
if reset_scroll_bar:
self.ui.scrollArea.verticalScrollBar().setValue(0)
- start = self.page * self.total_per_page
- end = start + self.total_per_page
-
+ self.start = self.page * self.total_per_page
+ self.end = self.start + self.total_per_page
+
+ self.display_thumbnails()
- # recursively crawl self.settings_manager.path_settings.image_path and build a directory of the files sorted by the first folder name within self.settings_manager.path_settings.image_path
- # for example, self.settings_manager.path_settings.image_path will have several folders, those should be the key in a dictionary, and the value should be a list of files which is sorted by the most recent first
+ def load_files(self):
+ """
+ Load files from the specified image path and sort them based on modification time.
+
+ Returns:
+ None
+ """
files_in_image_path = os.listdir(self.settings_manager.path_settings.image_path)
sorted_files = {}
- # recursively crawl the image path and build a dictionary of the files
for file in files_in_image_path:
if os.path.isdir(os.path.join(self.settings_manager.path_settings.image_path, file)):
sorted_files[file] = []
@@ -70,21 +106,42 @@ def show_files(self, clear_images=True, reset_scroll_bar=True, show_folders=True
section = "txt2img"
files = sorted_files[section]
- # sort the files by the most recent first
files.sort(key=os.path.getmtime, reverse=True)
- self.last_page = end >= len(files)
- for file in files[start:end]:
+ self.sorted_files = files
+
+ def display_thumbnails(self):
+ """
+ Display thumbnails of images from the sorted_files list within the specified range.
+
+ Args:
+ start (int): The starting index of the range.
+ end (int): The ending index of the range.
+ """
+ for file in self.sorted_files[self.start:self.end]:
if file.endswith(".png"):
- image_widget = ImageWidget(self)
+ image_widget = ImageWidget(self, is_thumbnail=True)
image_widget.set_image(os.path.join(self.settings_manager.path_settings.image_path, file))
self.ui.scrollAreaWidgetContents.layout().addWidget(image_widget)
def handle_folder_clicked(self, path):
+ """
+ Handles the event when a folder is clicked.
+
+ Args:
+ path (str): The path of the clicked folder.
+ """
self.show_files()
def handle_scroll(self, value):
- if self.last_page:
- return
+ """
+ Handles the scroll event of the image panel widget.
+
+ Args:
+ value (int): The value of the scroll event.
+
+ Returns:
+ None
+ """
if value >= self.ui.scrollArea.verticalScrollBar().maximum() - self.page_step + 1:
self.page += 1
self.show_files(clear_images=False, reset_scroll_bar=False, show_folders=False)
diff --git a/src/airunner/widgets/image/image_widget.py b/src/airunner/widgets/image/image_widget.py
index 8336a338e..786cfc78b 100644
--- a/src/airunner/widgets/image/image_widget.py
+++ b/src/airunner/widgets/image/image_widget.py
@@ -1,3 +1,4 @@
+import os
import json
from PyQt6.QtGui import QPixmap
@@ -27,12 +28,12 @@ class ImageWidget(BaseWidget):
image_width = 0
image_height = 0
clicked = pyqtSignal()
-
- def thumbnail(self, width=128, height=128):
- if not self.pixmap:
- return None
- return self.pixmap.scaled(width, height, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
+ pixmap = None
+ def __init__(self, *args, **kwargs):
+ self.is_thumbnail = kwargs.pop("is_thumbnail", False)
+ super().__init__(*args, **kwargs)
+
def set_image(self, image_path):
size = self.ui.image_frame.width()
self.image_path = image_path
@@ -40,13 +41,22 @@ def set_image(self, image_path):
self.load_meta_data(image_path)
# Create a QPixmap object
-
+
if isinstance(self.image_path, Image.Image):
qimage = ImageQt(self.image_path) # Convert the PngImageFile to a QImage
pixmap = QPixmap.fromImage(qimage) # Create a QPixmap from the QImage
else:
- pixmap = QPixmap(self.image_path)
- pixmap = pixmap.scaled(size - 20, size - 20, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
+ # check if thumbnail exists at path
+ # if not, create it
+ path = self.image_path + ".thumbnail.png"
+ if not os.path.exists(path):
+ image = Image.open(self.image_path)
+ image.thumbnail((size, size))
+ image.save(path)
+ if self.is_thumbnail:
+ pixmap = QPixmap(path)
+ else:
+ pixmap = QPixmap(self.image_path)
self.pixmap = pixmap
# set width and height
@@ -131,6 +141,7 @@ def load_meta_data(self, image_path):
def send_image_to_grid(self):
#self.app.ui.canvas_plus_widget.load_image(self.image_path)
+ print(self.image_path)
self.app.load_image.emit(self.image_path)
def view_image(self):
@@ -186,6 +197,8 @@ def delete_image(self):
def confirm_delete(self):
delete_image(self.image_path)
+ delete_image(self.image_path + ".thumbnail.png")
+ self.deleteLater()
def cancel_delete(self):
pass
From c80e9b4273b7a4d68bb02ba614c8748b3b7bdf3a Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 10:24:44 -0700
Subject: [PATCH 3/6] removed advanced mode from settings
---
.../windows/settings/airunner_settings.py | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/src/airunner/windows/settings/airunner_settings.py b/src/airunner/windows/settings/airunner_settings.py
index fc7a9cbb2..13f6c8261 100644
--- a/src/airunner/windows/settings/airunner_settings.py
+++ b/src/airunner/windows/settings/airunner_settings.py
@@ -93,17 +93,6 @@ def initialize_window(self):
}
]
},
- {
- "section": "Enable Advanced Mode",
- "files": [
- {
- "name": "enable_advanced_mode",
- "display_name": "Advanced mode",
- "checkable": True,
- "description": "If enabled, advanced generator options will be shown."
- }
- ]
- },
{
"section": "Memory Preferences",
"files": [
@@ -209,8 +198,6 @@ def add_file(self, parent_item, name, display_name, checkable=False, description
checked = self.app.settings_manager.resize_on_paste
elif name == "image_to_new_layer":
checked = self.app.settings_manager.image_to_new_layer
- elif name == "enable_advanced_mode":
- checked = self.app.settings_manager.enable_advanced_mode
elif name == "dark_mode":
checked = self.app.settings_manager.dark_mode_enabled
elif name == "check_for_updates":
@@ -245,9 +232,6 @@ def on_item_clicked(self, index):
elif name == "image_to_new_layer":
checked = item.checkState() == Qt.CheckState.Checked
self.app.settings_manager.set_value("image_to_new_layer", checked)
- elif name == "enable_advanced_mode":
- checked = item.checkState() == Qt.CheckState.Checked
- self.app.settings_manager.set_value("enable_advanced_mode", checked)
elif name == "dark_mode":
checked = item.checkState() == Qt.CheckState.Checked
self.app.settings_manager.set_value("dark_mode_enabled", checked)
From f9f027bc927b56bcb1de44955cfd402ba95f76de Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 10:25:15 -0700
Subject: [PATCH 4/6] modified buttons and layout of main window
---
src/airunner/windows/main/main_window.py | 94 +--
.../windows/main/templates/main_window.ui | 711 +++++-------------
.../windows/main/templates/main_window_ui.py | 230 ++----
3 files changed, 292 insertions(+), 743 deletions(-)
diff --git a/src/airunner/windows/main/main_window.py b/src/airunner/windows/main/main_window.py
index fc6356c68..ce7bd258f 100644
--- a/src/airunner/windows/main/main_window.py
+++ b/src/airunner/windows/main/main_window.py
@@ -77,7 +77,7 @@ class MainWindow(
button_clicked_signal = pyqtSignal(dict)
status_widget = None
splitters = None
-
+ header_widget_spacer = None
deterministic_window = None
_tabs = {
@@ -304,14 +304,13 @@ def __init__(self, *args, **kwargs):
self.initialize_panel_tabs()
self.initialize_tool_section_buttons()
- self.toggle_header_buttons()
if self.settings_manager.mode == Mode.IMAGE.value:
self.image_generation_toggled()
elif self.settings_manager.mode == Mode.LANGUAGE_PROCESSOR.value:
self.language_processing_toggled()
else:
- self.model_manager_toggled()
+ self.model_manager_toggled(True)
# This is used to check the state of the window and save splitter sizes if they have changed
self.start_splitter_timer()
@@ -705,11 +704,7 @@ def set_stylesheet(self):
stylesheet = f.read()
self.setStyleSheet(stylesheet)
for icon_data in [
- ("image-file-icon", "image_generation_button"),
("tech-icon", "model_manager_button"),
- ("photo-editor-icon", "image_generators_button"),
- ("video-editor-icon", "txt2vid_button"),
- ("prompt-editor-icon", "prompt_builder_button"),
("pencil-icon", "toggle_brush_button"),
("eraser-icon", "toggle_eraser_button"),
("frame-grid-icon", "toggle_grid_button"),
@@ -1351,10 +1346,13 @@ def language_processing_toggled(self):
self.activate_language_processing_section()
self.set_all_section_buttons()
- def model_manager_toggled(self):
- self.settings_manager.set_value("mode", Mode.MODEL_MANAGER.value)
- self.activate_model_manager_section()
- self.set_all_section_buttons()
+ def model_manager_toggled(self, val):
+ if not val:
+ self.image_generators_toggled()
+ else:
+ self.settings_manager.set_value("mode", Mode.MODEL_MANAGER.value)
+ self.activate_model_manager_section()
+ self.set_all_section_buttons()
def set_button_checked(self, name, val=True, block_signals=True):
widget = getattr(self.ui, f"{name}_button")
@@ -1365,75 +1363,24 @@ def set_button_checked(self, name, val=True, block_signals=True):
widget.blockSignals(False)
def set_all_section_buttons(self):
- self.set_button_checked("image_generation", self.settings_manager.mode == Mode.IMAGE.value)
self.set_button_checked("model_manager", self.settings_manager.mode == Mode.MODEL_MANAGER.value)
- self.toggle_header_buttons()
-
- def toggle_header_buttons(self):
- if self.settings_manager.mode == Mode.IMAGE.value:
- self.ui.image_generator_header_tools.show()
- self.ui.text_generator_header_tools.hide()
- elif self.settings_manager.mode == Mode.LANGUAGE_PROCESSOR.value:
- self.ui.image_generator_header_tools.hide()
- self.ui.text_generator_header_tools.show()
- else:
- self.ui.image_generator_header_tools.hide()
- self.ui.text_generator_header_tools.hide()
- def toggle_llm_button_signals(self, blocked):
- self.ui.chat_button.blockSignals(blocked)
- self.ui.llm_preferences_button.blockSignals(blocked)
- self.ui.llm_settings_button.blockSignals(blocked)
- #self.ui.llm_quantization_button.blockSignals(blocked)
-
def activate_image_generation_section(self):
self.ui.mode_tab_widget.setCurrentIndex(0)
- self.toggle_tool_section_buttons_visibility()
def activate_language_processing_section(self):
self.ui.mode_tab_widget.setCurrentIndex(1)
- self.toggle_tool_section_buttons_visibility()
def activate_model_manager_section(self):
- self.ui.mode_tab_widget.setCurrentIndex(2)
- self.toggle_tool_section_buttons_visibility()
+ self.ui.center_tab.setCurrentIndex(2)
def initialize_tool_section_buttons(self):
- self.toggle_tool_section_buttons_visibility()
- self.set_button_checked("image_generators", False)
- self.set_button_checked("txt2vid", False)
- self.set_button_checked("prompt_builder", False)
- if self.settings_manager.mode == Mode.IMAGE.value:
- if self.settings_manager.generator_section == GeneratorSection.TXT2VID.value:
- self.set_button_checked("txt2vid")
- elif self.settings_manager.generator_section == GeneratorSection.PROMPT_BUILDER.value:
- self.set_button_checked("prompt_builder")
- else:
- self.set_button_checked("image_generators")
+ pass
- header_widget_spacer = None
- def toggle_tool_section_buttons_visibility(self):
- image_mode = self.settings_manager.mode == Mode.IMAGE.value
- lang_mode = self.settings_manager.mode == Mode.LANGUAGE_PROCESSOR.value
- self.ui.image_generator_header_tools.setVisible(image_mode or lang_mode)
- self.ui.text_generator_header_tools.setVisible(image_mode or lang_mode)
- visible = image_mode or lang_mode
-
- # add a horizontal spacer to the right of the self.ui.header_widget
- if not visible:
- if not self.header_widget_spacer:
- self.header_widget_spacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
- self.ui.scrollAreaWidgetContents_3.layout().addItem(self.header_widget_spacer)
- elif visible and self.header_widget_spacer:
- self.ui.scrollAreaWidgetContents_3.layout().removeItem(self.header_widget_spacer)
-
def set_all_image_generator_buttons(self):
is_image_generators = self.settings_manager.generator_section == GeneratorSection.TXT2IMG.value
is_txt2vid = self.settings_manager.generator_section == GeneratorSection.TXT2VID.value
is_prompt_builder = self.settings_manager.generator_section == GeneratorSection.PROMPT_BUILDER.value
- self.set_button_checked("image_generators", is_image_generators)
- self.set_button_checked("txt2vid", is_txt2vid)
- self.set_button_checked("prompt_builder", is_prompt_builder)
def image_generators_toggled(self):
self.image_generation_toggled()
@@ -1455,14 +1402,17 @@ def text_to_video_toggled(self):
self.set_all_image_generator_buttons()
self.change_content_widget()
- def prompt_builder_toggled(self):
- self.image_generation_toggled()
- self.settings_manager.set_value(f"generator_section", GeneratorSection.PROMPT_BUILDER.value)
- active_tab_obj = session.query(TabSection).filter(TabSection.panel == "center_tab").first()
- active_tab_obj.active_tab = "Prompt Builder"
- save_session()
- self.set_all_image_generator_buttons()
- self.change_content_widget()
+ def toggle_prompt_builder(self, val):
+ if not val:
+ self.image_generators_toggled()
+ else:
+ self.image_generation_toggled()
+ self.settings_manager.set_value(f"generator_section", GeneratorSection.PROMPT_BUILDER.value)
+ active_tab_obj = session.query(TabSection).filter(TabSection.panel == "center_tab").first()
+ active_tab_obj.active_tab = "Prompt Builder"
+ save_session()
+ self.set_all_image_generator_buttons()
+ self.change_content_widget()
def redraw(self):
self.set_stylesheet()
diff --git a/src/airunner/windows/main/templates/main_window.ui b/src/airunner/windows/main/templates/main_window.ui
index b941ec9f9..9df4feef8 100644
--- a/src/airunner/windows/main/templates/main_window.ui
+++ b/src/airunner/windows/main/templates/main_window.ui
@@ -7,8 +7,8 @@
0
0
- 1144
- 964
+ 1201
+ 970
@@ -128,8 +128,8 @@
0
0
- 1140
- 48
+ 1197
+ 46
@@ -148,94 +148,6 @@
0
- -
-
-
-
- 0
- 0
-
-
-
-
- 48
- 48
-
-
-
-
- 48
- 48
-
-
-
- PointingHandCursor
-
-
- Image Generation
-
-
-
-
-
-
- :/icons/light/image-file-icon.svg:/icons/light/image-file-icon.svg
-
-
-
- 32
- 32
-
-
-
- true
-
-
- true
-
-
-
- -
-
-
-
- 48
- 48
-
-
-
-
- 48
- 48
-
-
-
- PointingHandCursor
-
-
- Model manager
-
-
-
-
-
-
- :/icons/light/tech-icon.svg:/icons/light/tech-icon.svg
-
-
-
- 32
- 32
-
-
-
- true
-
-
- true
-
-
-
-
@@ -257,19 +169,6 @@
0
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
@@ -297,132 +196,6 @@
0
- -
-
-
-
- 48
- 48
-
-
-
-
- 48
- 48
-
-
-
- PointingHandCursor
-
-
- Image generators
-
-
-
-
-
-
- :/icons/light/photo-editor-icon.svg:/icons/light/photo-editor-icon.svg
-
-
-
- 24
- 24
-
-
-
- true
-
-
- false
-
-
- true
-
-
-
- -
-
-
-
- 48
- 48
-
-
-
-
- 48
- 48
-
-
-
- PointingHandCursor
-
-
- Text to Video
-
-
-
-
-
-
- :/icons/light/video-editor-icon.svg:/icons/light/video-editor-icon.svg
-
-
-
- 24
- 24
-
-
-
- true
-
-
- true
-
-
-
- -
-
-
-
- 48
- 48
-
-
-
-
- 48
- 48
-
-
-
- PointingHandCursor
-
-
- Prompt Builder
-
-
-
-
-
-
- :/icons/light/prompt-editor-icon.svg:/icons/light/prompt-editor-icon.svg
-
-
-
- 24
- 24
-
-
-
- true
-
-
- true
-
-
-
-
@@ -441,30 +214,6 @@
0
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
@@ -718,6 +467,19 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
@@ -853,11 +615,6 @@
-
-
- Video
-
-
Prompt Builder
@@ -880,6 +637,28 @@
+
+
+ Model Manager
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+
@@ -894,8 +673,8 @@
0
0
- 386
- 835
+ 407
+ 841
@@ -1284,6 +1063,9 @@
PointingHandCursor
+
+ Toggle AI Mode
+
@@ -1293,7 +1075,7 @@
- 20
+ 18
20
@@ -1312,6 +1094,60 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 45
+
+
+
+
+ 50
+ 45
+
+
+
+ PointingHandCursor
+
+
+ Model manager
+
+
+
+
+
+
+ :/icons/light/tech-icon.svg:/icons/light/tech-icon.svg
+
+
+
+ 18
+ 18
+
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
-
@@ -1374,28 +1210,6 @@
-
-
- Model Manager
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
- -
-
-
-
-
@@ -1408,7 +1222,7 @@
0
0
- 1144
+ 1201
22
@@ -1509,6 +1323,7 @@
+
@@ -2768,38 +2583,6 @@
-
- image_generation_button
- pressed()
- MainWindow
- image_generation_toggled()
-
-
- 19
- 61
-
-
- 0
- 16
-
-
-
-
- model_manager_button
- pressed()
- MainWindow
- model_manager_toggled()
-
-
- 97
- 70
-
-
- 770
- 0
-
-
-
center_tab
currentChanged(int)
@@ -2816,198 +2599,6 @@
-
- file_new_button
- clicked()
- MainWindow
- action_new_document_triggered()
-
-
- 916
- 64
-
-
- 1002
- 0
-
-
-
-
- undo_button
- clicked()
- MainWindow
- action_undo_triggered()
-
-
- 1093
- 64
-
-
- 1002
- 105
-
-
-
-
- redo_button
- clicked()
- MainWindow
- action_redo_triggered()
-
-
- 1135
- 64
-
-
- 1002
- 86
-
-
-
-
- export_button
- clicked()
- MainWindow
- action_export_image_triggered()
-
-
- 1042
- 64
-
-
- 1002
- 28
-
-
-
-
- image_generators_button
- pressed()
- MainWindow
- image_generators_toggled()
-
-
- 667
- 70
-
-
- 0
- 297
-
-
-
-
- txt2vid_button
- pressed()
- MainWindow
- text_to_video_toggled()
-
-
- 715
- 70
-
-
- 0
- 415
-
-
-
-
- prompt_builder_button
- pressed()
- MainWindow
- prompt_builder_toggled()
-
-
- 763
- 70
-
-
- 0
- 482
-
-
-
-
- image_generation_button
- released()
- MainWindow
- image_generation_toggled()
-
-
- 24
- 46
-
-
- 583
- 473
-
-
-
-
- model_manager_button
- released()
- MainWindow
- model_manager_toggled()
-
-
- 97
- 69
-
-
- 0
- 222
-
-
-
-
- image_generators_button
- released()
- MainWindow
- image_generators_toggled()
-
-
- 667
- 70
-
-
- 754
- 0
-
-
-
-
- txt2vid_button
- released()
- MainWindow
- text_to_video_toggled()
-
-
- 715
- 70
-
-
- 1002
- 57
-
-
-
-
- prompt_builder_button
- released()
- MainWindow
- prompt_builder_toggled()
-
-
- 763
- 70
-
-
- 1002
- 651
-
-
-
settings_button
clicked()
@@ -3015,8 +2606,8 @@
action_show_settings()
- 1138
- 491
+ 1195
+ 551
1002
@@ -3031,7 +2622,7 @@
action_toggle_grid(bool)
- 1138
+ 1195
315
@@ -3047,7 +2638,7 @@
action_toggle_active_grid_area(bool)
- 1138
+ 1195
153
@@ -3063,7 +2654,7 @@
action_toggle_eraser(bool)
- 1138
+ 1195
255
@@ -3079,7 +2670,7 @@
action_toggle_brush(bool)
- 1138
+ 1195
204
@@ -3143,12 +2734,12 @@
action_center_clicked()
- 1120
+ 1177
350
806
- -15
+ 0
@@ -3159,11 +2750,91 @@
action_ai_toggled(bool)
- 1110
+ 1167
412
917
+ 0
+
+
+
+
+ file_new_button
+ clicked()
+ MainWindow
+ action_new_document_triggered()
+
+
+ 45
+ 63
+
+
+ 1002
+ 0
+
+
+
+
+ export_button
+ clicked()
+ MainWindow
+ action_export_image_triggered()
+
+
+ 171
+ 63
+
+
+ 1002
+ 28
+
+
+
+
+ undo_button
+ clicked()
+ MainWindow
+ action_undo_triggered()
+
+
+ 222
+ 63
+
+
+ 1002
+ 105
+
+
+
+
+ redo_button
+ clicked()
+ MainWindow
+ action_redo_triggered()
+
+
+ 264
+ 63
+
+
+ 1002
+ 86
+
+
+
+
+ model_manager_button
+ toggled(bool)
+ MainWindow
+ model_manager_toggled(bool)
+
+
+ 1156
+ 469
+
+
+ 1021
-11
@@ -3247,7 +2918,7 @@
action_show_llm()
image_generation_toggled()
language_processing_toggled()
- model_manager_toggled()
+ model_manager_toggled(bool)
image_generators_toggled()
text_to_video_toggled()
prompt_builder_toggled()
diff --git a/src/airunner/windows/main/templates/main_window_ui.py b/src/airunner/windows/main/templates/main_window_ui.py
index 1c2c1ff46..a85a04c2e 100644
--- a/src/airunner/windows/main/templates/main_window_ui.py
+++ b/src/airunner/windows/main/templates/main_window_ui.py
@@ -12,7 +12,7 @@
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1144, 964)
+ MainWindow.resize(1201, 970)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -58,43 +58,12 @@ def setupUi(self, MainWindow):
self.scrollArea_3.setWidgetResizable(True)
self.scrollArea_3.setObjectName("scrollArea_3")
self.scrollAreaWidgetContents_3 = QtWidgets.QWidget()
- self.scrollAreaWidgetContents_3.setGeometry(QtCore.QRect(0, 0, 1140, 48))
+ self.scrollAreaWidgetContents_3.setGeometry(QtCore.QRect(0, 0, 1197, 46))
self.scrollAreaWidgetContents_3.setObjectName("scrollAreaWidgetContents_3")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents_3)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.image_generation_button = QtWidgets.QPushButton(parent=self.scrollAreaWidgetContents_3)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.image_generation_button.sizePolicy().hasHeightForWidth())
- self.image_generation_button.setSizePolicy(sizePolicy)
- self.image_generation_button.setMinimumSize(QtCore.QSize(48, 48))
- self.image_generation_button.setMaximumSize(QtCore.QSize(48, 48))
- self.image_generation_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
- self.image_generation_button.setText("")
- icon1 = QtGui.QIcon()
- icon1.addPixmap(QtGui.QPixmap(":/icons/light/image-file-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.image_generation_button.setIcon(icon1)
- self.image_generation_button.setIconSize(QtCore.QSize(32, 32))
- self.image_generation_button.setCheckable(True)
- self.image_generation_button.setFlat(True)
- self.image_generation_button.setObjectName("image_generation_button")
- self.horizontalLayout_2.addWidget(self.image_generation_button)
- self.model_manager_button = QtWidgets.QPushButton(parent=self.scrollAreaWidgetContents_3)
- self.model_manager_button.setMinimumSize(QtCore.QSize(48, 48))
- self.model_manager_button.setMaximumSize(QtCore.QSize(48, 48))
- self.model_manager_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
- self.model_manager_button.setText("")
- icon2 = QtGui.QIcon()
- icon2.addPixmap(QtGui.QPixmap(":/icons/light/tech-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.model_manager_button.setIcon(icon2)
- self.model_manager_button.setIconSize(QtCore.QSize(32, 32))
- self.model_manager_button.setCheckable(True)
- self.model_manager_button.setFlat(True)
- self.model_manager_button.setObjectName("model_manager_button")
- self.horizontalLayout_2.addWidget(self.model_manager_button)
self.text_generator_header_tools = QtWidgets.QFrame(parent=self.scrollAreaWidgetContents_3)
self.text_generator_header_tools.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.text_generator_header_tools.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
@@ -102,8 +71,6 @@ def setupUi(self, MainWindow):
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.text_generator_header_tools)
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
- spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
- self.horizontalLayout_5.addItem(spacerItem)
self.horizontalLayout_2.addWidget(self.text_generator_header_tools)
self.image_generator_header_tools = QtWidgets.QFrame(parent=self.scrollAreaWidgetContents_3)
self.image_generator_header_tools.setFrameShape(QtWidgets.QFrame.Shape.NoFrame)
@@ -113,61 +80,12 @@ def setupUi(self, MainWindow):
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setSpacing(0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
- self.image_generators_button = QtWidgets.QPushButton(parent=self.image_generator_header_tools)
- self.image_generators_button.setMinimumSize(QtCore.QSize(48, 48))
- self.image_generators_button.setMaximumSize(QtCore.QSize(48, 48))
- self.image_generators_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
- self.image_generators_button.setText("")
- icon3 = QtGui.QIcon()
- icon3.addPixmap(QtGui.QPixmap(":/icons/light/photo-editor-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.image_generators_button.setIcon(icon3)
- self.image_generators_button.setIconSize(QtCore.QSize(24, 24))
- self.image_generators_button.setCheckable(True)
- self.image_generators_button.setChecked(False)
- self.image_generators_button.setFlat(True)
- self.image_generators_button.setObjectName("image_generators_button")
- self.horizontalLayout_4.addWidget(self.image_generators_button)
- self.txt2vid_button = QtWidgets.QPushButton(parent=self.image_generator_header_tools)
- self.txt2vid_button.setMinimumSize(QtCore.QSize(48, 48))
- self.txt2vid_button.setMaximumSize(QtCore.QSize(48, 48))
- self.txt2vid_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
- self.txt2vid_button.setText("")
- icon4 = QtGui.QIcon()
- icon4.addPixmap(QtGui.QPixmap(":/icons/light/video-editor-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.txt2vid_button.setIcon(icon4)
- self.txt2vid_button.setIconSize(QtCore.QSize(24, 24))
- self.txt2vid_button.setCheckable(True)
- self.txt2vid_button.setFlat(True)
- self.txt2vid_button.setObjectName("txt2vid_button")
- self.horizontalLayout_4.addWidget(self.txt2vid_button)
- self.prompt_builder_button = QtWidgets.QPushButton(parent=self.image_generator_header_tools)
- self.prompt_builder_button.setMinimumSize(QtCore.QSize(48, 48))
- self.prompt_builder_button.setMaximumSize(QtCore.QSize(48, 48))
- self.prompt_builder_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
- self.prompt_builder_button.setText("")
- icon5 = QtGui.QIcon()
- icon5.addPixmap(QtGui.QPixmap(":/icons/light/prompt-editor-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.prompt_builder_button.setIcon(icon5)
- self.prompt_builder_button.setIconSize(QtCore.QSize(24, 24))
- self.prompt_builder_button.setCheckable(True)
- self.prompt_builder_button.setFlat(True)
- self.prompt_builder_button.setObjectName("prompt_builder_button")
- self.horizontalLayout_4.addWidget(self.prompt_builder_button)
self.image_generator_header_tool_buttons = QtWidgets.QWidget(parent=self.image_generator_header_tools)
self.image_generator_header_tool_buttons.setObjectName("image_generator_header_tool_buttons")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.image_generator_header_tool_buttons)
self.horizontalLayout_3.setContentsMargins(6, 0, 6, 0)
self.horizontalLayout_3.setSpacing(6)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
- spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
- self.horizontalLayout_3.addItem(spacerItem1)
- self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_6.setObjectName("horizontalLayout_6")
- self.section_label = QtWidgets.QLabel(parent=self.image_generator_header_tool_buttons)
- self.section_label.setText("")
- self.section_label.setObjectName("section_label")
- self.horizontalLayout_6.addWidget(self.section_label)
- self.horizontalLayout_3.addLayout(self.horizontalLayout_6)
self.file_new_button = QtWidgets.QPushButton(parent=self.image_generator_header_tool_buttons)
self.file_new_button.setMinimumSize(QtCore.QSize(36, 36))
self.file_new_button.setMaximumSize(QtCore.QSize(36, 36))
@@ -251,6 +169,8 @@ def setupUi(self, MainWindow):
self.redo_button.setFlat(True)
self.redo_button.setObjectName("redo_button")
self.horizontalLayout_3.addWidget(self.redo_button)
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.horizontalLayout_3.addItem(spacerItem)
self.horizontalLayout_4.addWidget(self.image_generator_header_tool_buttons)
self.horizontalLayout_2.addWidget(self.image_generator_header_tools)
self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3)
@@ -310,9 +230,6 @@ def setupUi(self, MainWindow):
self.image_browser.setObjectName("image_browser")
self.gridLayout_10.addWidget(self.canvas_splitter, 0, 0, 1, 1)
self.center_tab.addTab(self.tab_image, "")
- self.tab_txt2vid = QtWidgets.QWidget()
- self.tab_txt2vid.setObjectName("tab_txt2vid")
- self.center_tab.addTab(self.tab_txt2vid, "")
self.tab_prompt_builder = QtWidgets.QWidget()
self.tab_prompt_builder.setObjectName("tab_prompt_builder")
self.gridLayout_16 = QtWidgets.QGridLayout(self.tab_prompt_builder)
@@ -322,12 +239,21 @@ def setupUi(self, MainWindow):
self.prompt_builder.setObjectName("prompt_builder")
self.gridLayout_16.addWidget(self.prompt_builder, 0, 0, 1, 1)
self.center_tab.addTab(self.tab_prompt_builder, "")
+ self.tab = QtWidgets.QWidget()
+ self.tab.setObjectName("tab")
+ self.gridLayout_7 = QtWidgets.QGridLayout(self.tab)
+ self.gridLayout_7.setContentsMargins(0, 0, 0, 0)
+ self.gridLayout_7.setObjectName("gridLayout_7")
+ self.model_manager = ModelManagerWidget(parent=self.tab)
+ self.model_manager.setObjectName("model_manager")
+ self.gridLayout_7.addWidget(self.model_manager, 0, 0, 1, 1)
+ self.center_tab.addTab(self.tab, "")
self.gridLayout_5.addWidget(self.center_tab, 0, 0, 1, 1)
self.scrollArea = QtWidgets.QScrollArea(parent=self.content_splitter)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
- self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 386, 835))
+ self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 407, 841))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout.setObjectName("gridLayout")
@@ -391,9 +317,9 @@ def setupUi(self, MainWindow):
self.toggle_active_grid_area_button.setMaximumSize(QtCore.QSize(50, 45))
self.toggle_active_grid_area_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.toggle_active_grid_area_button.setText("")
- icon6 = QtGui.QIcon()
- icon6.addPixmap(QtGui.QPixmap(":/icons/light/object-selected-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.toggle_active_grid_area_button.setIcon(icon6)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/light/object-selected-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.toggle_active_grid_area_button.setIcon(icon1)
self.toggle_active_grid_area_button.setIconSize(QtCore.QSize(18, 18))
self.toggle_active_grid_area_button.setCheckable(True)
self.toggle_active_grid_area_button.setFlat(True)
@@ -409,9 +335,9 @@ def setupUi(self, MainWindow):
self.toggle_brush_button.setMaximumSize(QtCore.QSize(50, 45))
self.toggle_brush_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.toggle_brush_button.setText("")
- icon7 = QtGui.QIcon()
- icon7.addPixmap(QtGui.QPixmap(":/icons/light/pencil-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.toggle_brush_button.setIcon(icon7)
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(":/icons/light/pencil-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.toggle_brush_button.setIcon(icon2)
self.toggle_brush_button.setIconSize(QtCore.QSize(18, 18))
self.toggle_brush_button.setCheckable(True)
self.toggle_brush_button.setFlat(True)
@@ -427,9 +353,9 @@ def setupUi(self, MainWindow):
self.toggle_eraser_button.setMaximumSize(QtCore.QSize(50, 45))
self.toggle_eraser_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.toggle_eraser_button.setText("")
- icon8 = QtGui.QIcon()
- icon8.addPixmap(QtGui.QPixmap(":/icons/light/eraser-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.toggle_eraser_button.setIcon(icon8)
+ icon3 = QtGui.QIcon()
+ icon3.addPixmap(QtGui.QPixmap(":/icons/light/eraser-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.toggle_eraser_button.setIcon(icon3)
self.toggle_eraser_button.setIconSize(QtCore.QSize(18, 18))
self.toggle_eraser_button.setCheckable(True)
self.toggle_eraser_button.setFlat(True)
@@ -455,9 +381,9 @@ def setupUi(self, MainWindow):
self.toggle_grid_button.setMaximumSize(QtCore.QSize(50, 45))
self.toggle_grid_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.toggle_grid_button.setText("")
- icon9 = QtGui.QIcon()
- icon9.addPixmap(QtGui.QPixmap(":/icons/light/frame-grid-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.toggle_grid_button.setIcon(icon9)
+ icon4 = QtGui.QIcon()
+ icon4.addPixmap(QtGui.QPixmap(":/icons/light/frame-grid-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.toggle_grid_button.setIcon(icon4)
self.toggle_grid_button.setIconSize(QtCore.QSize(18, 18))
self.toggle_grid_button.setCheckable(True)
self.toggle_grid_button.setFlat(True)
@@ -473,9 +399,9 @@ def setupUi(self, MainWindow):
self.focus_button.setMaximumSize(QtCore.QSize(50, 45))
self.focus_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.focus_button.setText("")
- icon10 = QtGui.QIcon()
- icon10.addPixmap(QtGui.QPixmap(":/icons/light/circle-center-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.focus_button.setIcon(icon10)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(":/icons/light/circle-center-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.focus_button.setIcon(icon5)
self.focus_button.setIconSize(QtCore.QSize(18, 18))
self.focus_button.setFlat(True)
self.focus_button.setObjectName("focus_button")
@@ -494,10 +420,10 @@ def setupUi(self, MainWindow):
self.ai_button.setMinimumSize(QtCore.QSize(50, 45))
self.ai_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.ai_button.setText("")
- icon11 = QtGui.QIcon()
- icon11.addPixmap(QtGui.QPixmap(":/icons/light/artificial-intelligence-ai-chip-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.ai_button.setIcon(icon11)
- self.ai_button.setIconSize(QtCore.QSize(20, 20))
+ icon6 = QtGui.QIcon()
+ icon6.addPixmap(QtGui.QPixmap(":/icons/light/artificial-intelligence-ai-chip-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.ai_button.setIcon(icon6)
+ self.ai_button.setIconSize(QtCore.QSize(18, 20))
self.ai_button.setCheckable(True)
self.ai_button.setFlat(True)
self.ai_button.setObjectName("ai_button")
@@ -507,6 +433,29 @@ def setupUi(self, MainWindow):
self.line_3.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.line_3.setObjectName("line_3")
self.verticalLayout.addWidget(self.line_3)
+ self.model_manager_button = QtWidgets.QPushButton(parent=self.button_menu)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.MinimumExpanding)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.model_manager_button.sizePolicy().hasHeightForWidth())
+ self.model_manager_button.setSizePolicy(sizePolicy)
+ self.model_manager_button.setMinimumSize(QtCore.QSize(50, 45))
+ self.model_manager_button.setMaximumSize(QtCore.QSize(50, 45))
+ self.model_manager_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
+ self.model_manager_button.setText("")
+ icon7 = QtGui.QIcon()
+ icon7.addPixmap(QtGui.QPixmap(":/icons/light/tech-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.model_manager_button.setIcon(icon7)
+ self.model_manager_button.setIconSize(QtCore.QSize(18, 18))
+ self.model_manager_button.setCheckable(True)
+ self.model_manager_button.setFlat(True)
+ self.model_manager_button.setObjectName("model_manager_button")
+ self.verticalLayout.addWidget(self.model_manager_button)
+ self.line_5 = QtWidgets.QFrame(parent=self.button_menu)
+ self.line_5.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+ self.line_5.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+ self.line_5.setObjectName("line_5")
+ self.verticalLayout.addWidget(self.line_5)
self.settings_button = QtWidgets.QPushButton(parent=self.button_menu)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
@@ -517,32 +466,23 @@ def setupUi(self, MainWindow):
self.settings_button.setMaximumSize(QtCore.QSize(50, 45))
self.settings_button.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
self.settings_button.setText("")
- icon12 = QtGui.QIcon()
- icon12.addPixmap(QtGui.QPixmap(":/icons/light/setting-line-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.settings_button.setIcon(icon12)
+ icon8 = QtGui.QIcon()
+ icon8.addPixmap(QtGui.QPixmap(":/icons/light/setting-line-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.settings_button.setIcon(icon8)
self.settings_button.setIconSize(QtCore.QSize(18, 18))
self.settings_button.setFlat(True)
self.settings_button.setObjectName("settings_button")
self.verticalLayout.addWidget(self.settings_button)
- spacerItem2 = QtWidgets.QSpacerItem(20, 431, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout.addItem(spacerItem2)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 431, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout.addItem(spacerItem1)
self.gridLayout_4.addWidget(self.button_menu, 0, 1, 1, 1)
self.mode_tab_widget.addTab(self.art, "")
- self.tab_5 = QtWidgets.QWidget()
- self.tab_5.setObjectName("tab_5")
- self.gridLayout_6 = QtWidgets.QGridLayout(self.tab_5)
- self.gridLayout_6.setContentsMargins(0, 0, 0, 0)
- self.gridLayout_6.setObjectName("gridLayout_6")
- self.model_manager = ModelManagerWidget(parent=self.tab_5)
- self.model_manager.setObjectName("model_manager")
- self.gridLayout_6.addWidget(self.model_manager, 0, 0, 1, 1)
- self.mode_tab_widget.addTab(self.tab_5, "")
self.gridLayout_3.addWidget(self.main_splitter, 1, 0, 1, 1)
self.main_splitter.raise_()
self.header_widget.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1144, 22))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 1201, 22))
font = QtGui.QFont()
font.setPointSize(11)
self.menubar.setFont(font)
@@ -579,15 +519,15 @@ def setupUi(self, MainWindow):
self.actionPaste = QtGui.QAction(parent=MainWindow)
self.actionPaste.setObjectName("actionPaste")
self.actionUndo = QtGui.QAction(parent=MainWindow)
- icon13 = QtGui.QIcon()
- icon13.addPixmap(QtGui.QPixmap("/home/joe/Projects/imagetopixel/airunner/src/airunner/../../src/airunner/windows/main/templates/../../../../../../../../../../../../../../.designer/src/icons/007-undo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.actionUndo.setIcon(icon13)
+ icon9 = QtGui.QIcon()
+ icon9.addPixmap(QtGui.QPixmap("/home/joe/Projects/imagetopixel/airunner/src/airunner/../../src/airunner/windows/main/templates/../../../../../../../../../../../../../../.designer/src/icons/007-undo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionUndo.setIcon(icon9)
self.actionUndo.setWhatsThis("")
self.actionUndo.setObjectName("actionUndo")
self.actionRedo = QtGui.QAction(parent=MainWindow)
- icon14 = QtGui.QIcon()
- icon14.addPixmap(QtGui.QPixmap("/home/joe/Projects/imagetopixel/airunner/src/airunner/../../src/airunner/windows/main/templates/../../../../../../../../../../../../../../.designer/src/icons/008-redo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.actionRedo.setIcon(icon14)
+ icon10 = QtGui.QIcon()
+ icon10.addPixmap(QtGui.QPixmap("/home/joe/Projects/imagetopixel/airunner/src/airunner/../../src/airunner/windows/main/templates/../../../../../../../../../../../../../../.designer/src/icons/008-redo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionRedo.setIcon(icon10)
self.actionRedo.setObjectName("actionRedo")
self.actionGrid = QtGui.QAction(parent=MainWindow)
self.actionGrid.setObjectName("actionGrid")
@@ -703,10 +643,10 @@ def setupUi(self, MainWindow):
self.actionClear_all_prompts = QtGui.QAction(parent=MainWindow)
self.actionClear_all_prompts.setObjectName("actionClear_all_prompts")
self.actionUndo_2 = QtGui.QAction(parent=MainWindow)
- self.actionUndo_2.setIcon(icon13)
+ self.actionUndo_2.setIcon(icon9)
self.actionUndo_2.setObjectName("actionUndo_2")
self.actionRedo_2 = QtGui.QAction(parent=MainWindow)
- self.actionRedo_2.setIcon(icon14)
+ self.actionRedo_2.setIcon(icon10)
self.actionRedo_2.setObjectName("actionRedo_2")
self.actionCut = QtGui.QAction(parent=MainWindow)
self.actionCut.setObjectName("actionCut")
@@ -822,6 +762,7 @@ def setupUi(self, MainWindow):
self.menuBrowse_Models_Path.addAction(self.actionUpscale)
self.menuBrowse_Models_Path.addAction(self.actionTxt2vid)
self.menuView.addAction(self.actionPrompt_Browser)
+ self.menuView.addSeparator()
self.menuView.addAction(self.actionHuggingface_Cache_manager)
self.menuView.addAction(self.actionBrowse_AI_Runner_Path)
self.menuView.addAction(self.menuBrowse_Models_Path.menuAction())
@@ -878,21 +819,7 @@ def setupUi(self, MainWindow):
self.actionDeterministic_Batches.triggered.connect(MainWindow.action_show_deterministic_batches) # type: ignore
self.actionStandard_Batches.triggered.connect(MainWindow.action_show_standard_batches) # type: ignore
self.actionLLM_beta.triggered.connect(MainWindow.action_show_llm) # type: ignore
- self.image_generation_button.pressed.connect(MainWindow.image_generation_toggled) # type: ignore
- self.model_manager_button.pressed.connect(MainWindow.model_manager_toggled) # type: ignore
self.center_tab.currentChanged['int'].connect(MainWindow.center_panel_tab_index_changed) # type: ignore
- self.file_new_button.clicked.connect(MainWindow.action_new_document_triggered) # type: ignore
- self.undo_button.clicked.connect(MainWindow.action_undo_triggered) # type: ignore
- self.redo_button.clicked.connect(MainWindow.action_redo_triggered) # type: ignore
- self.export_button.clicked.connect(MainWindow.action_export_image_triggered) # type: ignore
- self.image_generators_button.pressed.connect(MainWindow.image_generators_toggled) # type: ignore
- self.txt2vid_button.pressed.connect(MainWindow.text_to_video_toggled) # type: ignore
- self.prompt_builder_button.pressed.connect(MainWindow.prompt_builder_toggled) # type: ignore
- self.image_generation_button.released.connect(MainWindow.image_generation_toggled) # type: ignore
- self.model_manager_button.released.connect(MainWindow.model_manager_toggled) # type: ignore
- self.image_generators_button.released.connect(MainWindow.image_generators_toggled) # type: ignore
- self.txt2vid_button.released.connect(MainWindow.text_to_video_toggled) # type: ignore
- self.prompt_builder_button.released.connect(MainWindow.prompt_builder_toggled) # type: ignore
self.settings_button.clicked.connect(MainWindow.action_show_settings) # type: ignore
self.toggle_grid_button.toggled['bool'].connect(MainWindow.action_toggle_grid) # type: ignore
self.toggle_active_grid_area_button.toggled['bool'].connect(MainWindow.action_toggle_active_grid_area) # type: ignore
@@ -903,16 +830,16 @@ def setupUi(self, MainWindow):
self.actionReport_vulnerability.triggered.connect(MainWindow.action_open_vulnerability_report) # type: ignore
self.focus_button.clicked.connect(MainWindow.action_center_clicked) # type: ignore
self.ai_button.toggled['bool'].connect(MainWindow.action_ai_toggled) # type: ignore
+ self.file_new_button.clicked.connect(MainWindow.action_new_document_triggered) # type: ignore
+ self.export_button.clicked.connect(MainWindow.action_export_image_triggered) # type: ignore
+ self.undo_button.clicked.connect(MainWindow.action_undo_triggered) # type: ignore
+ self.redo_button.clicked.connect(MainWindow.action_redo_triggered) # type: ignore
+ self.model_manager_button.toggled['bool'].connect(MainWindow.model_manager_toggled) # type: ignore
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "AI Runner"))
- self.image_generation_button.setToolTip(_translate("MainWindow", "Image Generation"))
- self.model_manager_button.setToolTip(_translate("MainWindow", "Model manager"))
- self.image_generators_button.setToolTip(_translate("MainWindow", "Image generators"))
- self.txt2vid_button.setToolTip(_translate("MainWindow", "Text to Video"))
- self.prompt_builder_button.setToolTip(_translate("MainWindow", "Prompt Builder"))
self.file_new_button.setToolTip(_translate("MainWindow", "New"))
self.open_button.setToolTip(_translate("MainWindow", "Open"))
self.save_button.setToolTip(_translate("MainWindow", "Save"))
@@ -920,8 +847,8 @@ def retranslateUi(self, MainWindow):
self.undo_button.setToolTip(_translate("MainWindow", "Undo"))
self.redo_button.setToolTip(_translate("MainWindow", "Redo"))
self.center_tab.setTabText(self.center_tab.indexOf(self.tab_image), _translate("MainWindow", "Canvas"))
- self.center_tab.setTabText(self.center_tab.indexOf(self.tab_txt2vid), _translate("MainWindow", "Video"))
self.center_tab.setTabText(self.center_tab.indexOf(self.tab_prompt_builder), _translate("MainWindow", "Prompt Builder"))
+ self.center_tab.setTabText(self.center_tab.indexOf(self.tab), _translate("MainWindow", "Model Manager"))
self.tool_tab_widget.setTabText(self.tool_tab_widget.indexOf(self.tab_pen), _translate("MainWindow", "Pen"))
self.tool_tab_widget.setTabText(self.tool_tab_widget.indexOf(self.tab_active_grid), _translate("MainWindow", "Active Grid"))
self.toggle_active_grid_area_button.setToolTip(_translate("MainWindow", "Active grid area selection tool"))
@@ -929,9 +856,10 @@ def retranslateUi(self, MainWindow):
self.toggle_eraser_button.setToolTip(_translate("MainWindow", "Eraser tool"))
self.toggle_grid_button.setToolTip(_translate("MainWindow", "Toggle Grid"))
self.focus_button.setToolTip(_translate("MainWindow", "Recenter canvas"))
+ self.ai_button.setToolTip(_translate("MainWindow", "Toggle AI Mode"))
+ self.model_manager_button.setToolTip(_translate("MainWindow", "Model manager"))
self.settings_button.setToolTip(_translate("MainWindow", "AI Runner Settings"))
self.mode_tab_widget.setTabText(self.mode_tab_widget.indexOf(self.art), _translate("MainWindow", "Image Generation"))
- self.mode_tab_widget.setTabText(self.mode_tab_widget.indexOf(self.tab_5), _translate("MainWindow", "Model Manager"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.menuEdit.setTitle(_translate("MainWindow", "Edit"))
self.menuFilters.setTitle(_translate("MainWindow", "Filters"))
From d166e73ea94f5be218ce1333339443cce8ed9a30 Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 10:25:24 -0700
Subject: [PATCH 5/6] added handle_prompt_builder_button_toggled
---
src/airunner/widgets/generator_form/generator_form_widget.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/airunner/widgets/generator_form/generator_form_widget.py b/src/airunner/widgets/generator_form/generator_form_widget.py
index 446e62d0d..7f6e25699 100644
--- a/src/airunner/widgets/generator_form/generator_form_widget.py
+++ b/src/airunner/widgets/generator_form/generator_form_widget.py
@@ -603,4 +603,7 @@ def update_prompt(self, prompt):
self.ui.prompt.setPlainText(prompt)
def update_negative_prompt(self, prompt):
- self.ui.negative_prompt.setPlainText(prompt)
\ No newline at end of file
+ self.ui.negative_prompt.setPlainText(prompt)
+
+ def handle_prompt_builder_button_toggled(self, val):
+ self.app.toggle_prompt_builder(val)
\ No newline at end of file
From 7ae78be0decd261f54c42ca07d6a71bc350387ec Mon Sep 17 00:00:00 2001
From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com>
Date: Tue, 9 Jan 2024 10:25:37 -0700
Subject: [PATCH 6/6] updated generator form widget
---
.../generator_form/templates/generatorform.ui | 53 +++++++++++++++----
.../templates/generatorform_ui.py | 13 ++++-
2 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/src/airunner/widgets/generator_form/templates/generatorform.ui b/src/airunner/widgets/generator_form/templates/generatorform.ui
index 3eff2d839..342f41a8c 100644
--- a/src/airunner/widgets/generator_form/templates/generatorform.ui
+++ b/src/airunner/widgets/generator_form/templates/generatorform.ui
@@ -37,7 +37,7 @@
-
- 0
+ 1
@@ -123,6 +123,20 @@
+ -
+
+
+
+
+
+
+ :/icons/light/prompt-editor-icon.svg:/icons/light/prompt-editor-icon.svg
+
+
+ true
+
+
+
-
@@ -232,16 +246,16 @@
- 8
+ 0
- 8
+ 0
- 8
+ 0
- 8
+ 0
-
@@ -288,8 +302,8 @@
handle_interrupt_button_clicked()
- 350
- 1053
+ 349
+ 1052
0
@@ -304,8 +318,8 @@
handle_generate_button_clicked()
- 39
- 1053
+ 41
+ 1052
0
@@ -336,8 +350,8 @@
handle_negative_prompt_changed()
- 270
- 1024
+ 272
+ 1023
93
@@ -345,6 +359,22 @@
+
+ prompt_builder_button
+ toggled(bool)
+ generator_form
+ handle_prompt_builder_button_toggled(bool)
+
+
+ 251
+ 49
+
+
+ 212
+ -12
+
+
+
handle_prompt_changed()
@@ -359,5 +389,6 @@
save_settings()
handle_pipeline_changed(QString)
handle_version_changed(QString)
+ handle_prompt_builder_button_toggled(bool)
diff --git a/src/airunner/widgets/generator_form/templates/generatorform_ui.py b/src/airunner/widgets/generator_form/templates/generatorform_ui.py
index fb3317724..747e441f8 100644
--- a/src/airunner/widgets/generator_form/templates/generatorform_ui.py
+++ b/src/airunner/widgets/generator_form/templates/generatorform_ui.py
@@ -50,6 +50,14 @@ def setupUi(self, generator_form):
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem)
+ self.prompt_builder_button = QtWidgets.QPushButton(parent=self.layoutWidget)
+ self.prompt_builder_button.setText("")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/light/prompt-editor-icon.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.prompt_builder_button.setIcon(icon)
+ self.prompt_builder_button.setCheckable(True)
+ self.prompt_builder_button.setObjectName("prompt_builder_button")
+ self.horizontalLayout_6.addWidget(self.prompt_builder_button)
self.pushButton = QtWidgets.QPushButton(parent=self.layoutWidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout_6.addWidget(self.pushButton)
@@ -100,7 +108,7 @@ def setupUi(self, generator_form):
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.gridLayout_5 = QtWidgets.QGridLayout(self.tab_2)
- self.gridLayout_5.setContentsMargins(8, 8, 8, 8)
+ self.gridLayout_5.setContentsMargins(0, 0, 0, 0)
self.gridLayout_5.setObjectName("gridLayout_5")
self.widget = ChatPromptWidget(parent=self.tab_2)
self.widget.setObjectName("widget")
@@ -109,12 +117,13 @@ def setupUi(self, generator_form):
self.gridLayout_4.addWidget(self.generator_form_tabs, 0, 0, 1, 1)
self.retranslateUi(generator_form)
- self.generator_form_tabs.setCurrentIndex(0)
+ self.generator_form_tabs.setCurrentIndex(1)
self.pushButton.clicked.connect(generator_form.action_clicked_button_save_prompts) # type: ignore
self.interrupt_button.clicked.connect(generator_form.handle_interrupt_button_clicked) # type: ignore
self.generate_button.clicked.connect(generator_form.handle_generate_button_clicked) # type: ignore
self.prompt.textChanged.connect(generator_form.handle_prompt_changed) # type: ignore
self.negative_prompt.textChanged.connect(generator_form.handle_negative_prompt_changed) # type: ignore
+ self.prompt_builder_button.toggled['bool'].connect(generator_form.handle_prompt_builder_button_toggled) # type: ignore
QtCore.QMetaObject.connectSlotsByName(generator_form)
def retranslateUi(self, generator_form):