Moved settings to root directory

This commit is contained in:
Dilan Boskan 2021-06-15 10:23:31 +02:00
parent fc9edfeebf
commit 0f18bb7633
10 changed files with 89 additions and 27 deletions

1
.gitignore vendored
View File

@ -3,6 +3,7 @@ __pycache__
UIFileConverter.ps1 UIFileConverter.ps1
developer_notes.txt developer_notes.txt
languages languages
settings.ini
# Do not include model files and logs # Do not include model files and logs
src/resources/user/models/**/*.pth src/resources/user/models/**/*.pth
src/resources/models/**/*.pth src/resources/models/**/*.pth

View File

@ -55,8 +55,8 @@ class CustomApplication(QtWidgets.QApplication):
# -Create Managers- # -Create Managers-
self.logger = Logger() self.logger = Logger()
self.settings = QtCore.QSettings(const.APPLICATION_SHORTNAME, const.APPLICATION_NAME) self.settings = QtCore.QSettings(ResourcePaths.settingsIniFile, QtCore.QSettings.Format.IniFormat)
#self.settings.clear() # self.settings.clear()
self.resources = ResourcePaths() self.resources = ResourcePaths()
self.translator = Translator(self) self.translator = Translator(self)
self.themeManager = ThemeManager(self) self.themeManager = ThemeManager(self)
@ -105,7 +105,6 @@ class CustomApplication(QtWidgets.QApplication):
for combobox in window.findChildren(QtWidgets.QComboBox): for combobox in window.findChildren(QtWidgets.QComboBox):
# Monkeypatch showPopup function # Monkeypatch showPopup function
combobox.showPopup = lambda wig=combobox, func=combobox.showPopup: self.improved_combobox_showPopup(wig, func) # nopep8 combobox.showPopup = lambda wig=combobox, func=combobox.showPopup: self.improved_combobox_showPopup(wig, func) # nopep8
if combobox.isEditable(): if combobox.isEditable():
# Align editable comboboxes to center # Align editable comboboxes to center
combobox.lineEdit().setAlignment(Qt.AlignCenter) combobox.lineEdit().setAlignment(Qt.AlignCenter)
@ -184,7 +183,7 @@ class CustomApplication(QtWidgets.QApplication):
seperation_data['save_instrumentals'] = self.windows['settings'].ui.checkBox_autoSaveInstrumentals.isChecked() seperation_data['save_instrumentals'] = self.windows['settings'].ui.checkBox_autoSaveInstrumentals.isChecked()
seperation_data['save_vocals'] = self.windows['settings'].ui.checkBox_autoSaveVocals.isChecked() seperation_data['save_vocals'] = self.windows['settings'].ui.checkBox_autoSaveVocals.isChecked()
# Combobox # Combobox
seperation_data['model'] = self.windows['settings'].ui.comboBox_instrumental.currentData() seperation_data['model'] = self.windows['settings'].ui.comboBox_instrumental.currentData()['path']
seperation_data['modelDataPath'] = r"D:\Dilan\GitHub\ultimatevocalremovergui\src\inference\modelparams\2band_48000.json" seperation_data['modelDataPath'] = r"D:\Dilan\GitHub\ultimatevocalremovergui\src\inference\modelparams\2band_48000.json"
seperation_data['isVocal'] = False seperation_data['isVocal'] = False
# Lineedit (Constants) # Lineedit (Constants)

View File

@ -7,6 +7,7 @@ from PySide2 import QtCore
# -Root imports- # -Root imports-
from .inference import converter from .inference import converter
from collections import OrderedDict from collections import OrderedDict
import torch
__is_light_theme = bool(QtCore.QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", __is_light_theme = bool(QtCore.QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
QtCore.QSettings.NativeFormat).value("AppsUseLightTheme")) QtCore.QSettings.NativeFormat).value("AppsUseLightTheme"))
@ -20,7 +21,6 @@ APPLICATION_NAME = 'Ultimate Vocal Remover'
JSON_TO_NAME = OrderedDict(**{ JSON_TO_NAME = OrderedDict(**{
# -Conversion- # -Conversion-
# Boolean # Boolean
'gpuConversion': 'checkBox_gpuConversion',
'postProcess': 'checkBox_postProcess', 'postProcess': 'checkBox_postProcess',
'tta': 'checkBox_tta', 'tta': 'checkBox_tta',
'outputImage': 'checkBox_outputImage', 'outputImage': 'checkBox_outputImage',
@ -34,6 +34,7 @@ JSON_TO_NAME = OrderedDict(**{
'vocalModelName': 'comboBox_vocal', 'vocalModelName': 'comboBox_vocal',
'windowSize': 'comboBox_winSize', 'windowSize': 'comboBox_winSize',
}) })
CUDA_AVAILABLE = torch.cuda.is_available()
DEFAULT_SETTINGS = { DEFAULT_SETTINGS = {
# --Independent Data (Data not directly connected with widgets)-- # --Independent Data (Data not directly connected with widgets)--
'inputPaths': [], 'inputPaths': [],
@ -48,7 +49,6 @@ DEFAULT_SETTINGS = {
['ALL', { ['ALL', {
# -Conversion- # -Conversion-
# Boolean # Boolean
'gpuConversion': True,
'postProcess': True, 'postProcess': True,
'tta': True, 'tta': True,
'outputImage': True, 'outputImage': True,
@ -58,14 +58,11 @@ DEFAULT_SETTINGS = {
'aggressiveness': 0.1, 'aggressiveness': 0.1,
'highEndProcess': 'Bypass', 'highEndProcess': 'Bypass',
# -Models- # -Models-
# 'instrumentalModelName': 'comboBox_instrumental',
# 'vocalModelName': 'comboBox_vocal',
'windowSize': 1024, 'windowSize': 1024,
}], }],
['NONE', { ['NONE', {
# -Conversion- # -Conversion-
# Boolean # Boolean
'gpuConversion': False,
'postProcess': False, 'postProcess': False,
'tta': False, 'tta': False,
'outputImage': False, 'outputImage': False,
@ -75,8 +72,6 @@ DEFAULT_SETTINGS = {
'aggressiveness': -0.1, 'aggressiveness': -0.1,
'highEndProcess': 'Mirroring', 'highEndProcess': 'Mirroring',
# -Models- # -Models-
# 'instrumentalModelName': 'comboBox_instrumental',
# 'vocalModelName': 'comboBox_vocal',
'windowSize': 352, 'windowSize': 352,
}] }]
], ],
@ -87,7 +82,7 @@ DEFAULT_SETTINGS = {
# --Settings window -> Seperation Settings-- # --Settings window -> Seperation Settings--
# -Conversion- # -Conversion-
# Boolean # Boolean
'checkBox_gpuConversion': converter.default_data['gpuConversion'], 'checkBox_gpuConversion': CUDA_AVAILABLE,
'checkBox_postProcess': converter.default_data['postProcess'], 'checkBox_postProcess': converter.default_data['postProcess'],
'checkBox_tta': converter.default_data['tta'], 'checkBox_tta': converter.default_data['tta'],
'checkBox_outputImage': converter.default_data['outputImage'], 'checkBox_outputImage': converter.default_data['outputImage'],

View File

@ -78,6 +78,7 @@ class ResourcePaths:
customInstrumentalModelsDir = os.path.join(abs_path, USER_FOLDER, MODELS_FOLDER, INSTRUMENTAL_FOLDER_NAME) customInstrumentalModelsDir = os.path.join(abs_path, USER_FOLDER, MODELS_FOLDER, INSTRUMENTAL_FOLDER_NAME)
customVocalModelsDir = os.path.join(abs_path, USER_FOLDER, MODELS_FOLDER, VOCAL_FOLDER_NAME) customVocalModelsDir = os.path.join(abs_path, USER_FOLDER, MODELS_FOLDER, VOCAL_FOLDER_NAME)
tempDir = os.path.join(abs_path, USER_FOLDER, TEMP_MUSIC_FILES_FOLDER) tempDir = os.path.join(abs_path, USER_FOLDER, TEMP_MUSIC_FILES_FOLDER)
settingsIniFile = os.path.join(abs_path, USER_FOLDER, 'settings.ini')
class Logger(logging.Logger): class Logger(logging.Logger):

View File

@ -0,0 +1,39 @@
[settingswindow]
size=@Size(940 600)
pos=@Point(1960 229)
checkBox_gpuConversion=false
checkBox_tta=true
checkBox_modelFolder=true
checkBox_outputImage=true
checkBox_postProcess=true
checkBox_deepExtraction=true
comboBox_instrumental=MGM-v5-2Band-32000-BETA1
comboBox_vocal=
comboBox_winSize=1024
doubleSpinBox_aggressiveness=0.1
comboBox_highEndProcess=Bypass
comboBox_presets=ALL
checkBox_notifiyOnFinish=false
checkBox_notifyUpdates=true
checkBox_settingsStartup=false
checkBox_disableAnimations=false
checkBox_disableShortcuts=false
checkBox_multithreading=false
comboBox_command=Aus
checkBox_autoSaveInstrumentals=true
checkBox_autoSaveVocals=true
[mainwindow]
size=@Size(947 559)
pos=@Point(185 175)
isMaximized=false
[user]
exportDirectory=C:/Users/boska/Desktop
language=de_DE
inputPaths=@Invalid()
inputsDirectory=C:/Users/boska/Desktop
presets=@Variant(\0\0\0\x7f\0\0\0\x18PySide::PyObjectWrapper\0\0\0\0\xc3\x80\x3X\x3\0\0\0\x41LLq\0}q\x1(X\xe\0\0\0\x61ggressivenessq\x2G?\xb9\x99\x99\x99\x99\x99\x9aX\xe\0\0\0\x64\x65\x65pExtractionq\x3\x88X\xe\0\0\0highEndProcessq\x4X\x6\0\0\0\x42ypassq\x5X\v\0\0\0modelFolderq\x6\x88X\v\0\0\0outputImageq\a\x88X\v\0\0\0postProcessq\b\x88X\x3\0\0\0ttaq\t\x88X\n\0\0\0windowSizeq\nM\0\x4u\x86q\v.), @Variant(\0\0\0\x7f\0\0\0\x18PySide::PyObjectWrapper\0\0\0\0\xc7\x80\x3X\x4\0\0\0NONEq\0}q\x1(X\xe\0\0\0\x61ggressivenessq\x2G\xbf\xb9\x99\x99\x99\x99\x99\x9aX\xe\0\0\0\x64\x65\x65pExtractionq\x3\x89X\xe\0\0\0highEndProcessq\x4X\t\0\0\0Mirroringq\x5X\v\0\0\0modelFolderq\x6\x89X\v\0\0\0outputImageq\a\x89X\v\0\0\0postProcessq\b\x89X\x3\0\0\0ttaq\t\x89X\n\0\0\0windowSizeq\nM`\x1u\x86q\v.)
presets_loadDir=C:/Users/boska/Desktop
presets_saveDir=C:/Users/boska/Desktop
theme=dark

View File

@ -174,6 +174,12 @@ class Ui_MainWindow(object):
self.comboBox_presets.setObjectName(u"comboBox_presets") self.comboBox_presets.setObjectName(u"comboBox_presets")
self.comboBox_presets.setMinimumSize(QSize(135, 25)) self.comboBox_presets.setMinimumSize(QSize(135, 25))
self.comboBox_presets.setMaximumSize(QSize(135, 16777215)) self.comboBox_presets.setMaximumSize(QSize(135, 16777215))
self.comboBox_presets.setStyleSheet(u"QComboBox::down-arrow {\n"
" image: none;\n"
"}\n"
"QComboBox::drop-down {\n"
" border-width: 0px;\n"
"}")
self.verticalLayout_10.addWidget(self.comboBox_presets) self.verticalLayout_10.addWidget(self.comboBox_presets)

View File

@ -60,13 +60,14 @@ class MainWindow(QtWidgets.QWidget):
self.ui.setupUi(self) self.ui.setupUi(self)
self.app = app self.app = app
self.logger = app.logger self.logger = app.logger
self.settings = QtCore.QSettings(const.APPLICATION_SHORTNAME, const.APPLICATION_NAME) self.settings = self.app.settings
self.setWindowIcon(QtGui.QIcon(ResourcePaths.images.icon)) self.setWindowIcon(QtGui.QIcon(ResourcePaths.images.icon))
# -Other Variables- # -Other Variables-
# Independent data # Independent data
self.inputPaths: list = self.settings.value('user/inputPaths', self.inputPaths: list = self.settings.value('user/inputPaths',
const.DEFAULT_SETTINGS['inputPaths']) const.DEFAULT_SETTINGS['inputPaths'],
type=list)
self.inputsDirectory: str = self.settings.value('user/inputsDirectory', self.inputsDirectory: str = self.settings.value('user/inputsDirectory',
const.DEFAULT_SETTINGS['inputsDirectory'], const.DEFAULT_SETTINGS['inputsDirectory'],
type=str) type=str)

View File

@ -33,7 +33,7 @@ class PresetsEditorWindow(QtWidgets.QWidget):
self.ui.setupUi(self) self.ui.setupUi(self)
self.app = app self.app = app
self.logger = app.logger self.logger = app.logger
self.settings = QtCore.QSettings(const.APPLICATION_SHORTNAME, const.APPLICATION_NAME) self.settings = self.app.settings
self.setWindowModality(Qt.WindowModality.ApplicationModal) self.setWindowModality(Qt.WindowModality.ApplicationModal)
# -Other Variables- # -Other Variables-
@ -139,6 +139,7 @@ class PresetsEditorWindow(QtWidgets.QWidget):
# Get current settings # Get current settings
settingsManager = self.app.settingsWindow.settingsManager settingsManager = self.app.settingsWindow.settingsManager
widget_settings = settingsManager.get_settings(page_idx=0) widget_settings = settingsManager.get_settings(page_idx=0)
del widget_settings['checkBox_gpuConversion']
del widget_settings['comboBox_presets'] del widget_settings['comboBox_presets']
name_to_json = {v: k for k, v in const.JSON_TO_NAME.items()} # Invert dict name_to_json = {v: k for k, v in const.JSON_TO_NAME.items()} # Invert dict

View File

@ -15,6 +15,7 @@ import datetime as dt
from collections import OrderedDict from collections import OrderedDict
import torch import torch
# System # System
import hashlib
import os import os
# Code annotation # Code annotation
from typing import (Dict, Union, Optional) from typing import (Dict, Union, Optional)
@ -37,7 +38,7 @@ class SettingsWindow(QtWidgets.QWidget):
self.ui.setupUi(self) self.ui.setupUi(self)
self.app = app self.app = app
self.logger = app.logger self.logger = app.logger
self.settings = QtCore.QSettings(const.APPLICATION_SHORTNAME, const.APPLICATION_NAME) self.settings = self.app.settings
self.settingsManager = SettingsManager(win=self) self.settingsManager = SettingsManager(win=self)
self.setWindowIcon(QtGui.QIcon(ResourcePaths.images.settings)) self.setWindowIcon(QtGui.QIcon(ResourcePaths.images.settings))
@ -53,7 +54,6 @@ class SettingsWindow(QtWidgets.QWidget):
const.DEFAULT_SETTINGS['exportDirectory'], const.DEFAULT_SETTINGS['exportDirectory'],
type=str) type=str)
self.search_for_preset = True self.search_for_preset = True
self.CUDA_AVAILABLE = torch.cuda.is_available()
# -Widget Binds- # -Widget Binds-
def pushButton_clearCommand_clicked(self): def pushButton_clearCommand_clicked(self):
@ -207,10 +207,6 @@ class SettingsWindow(QtWidgets.QWidget):
for json_key, value in settings.items(): for json_key, value in settings.items():
widget_object_name = const.JSON_TO_NAME[json_key] widget_object_name = const.JSON_TO_NAME[json_key]
if not self.CUDA_AVAILABLE and widget_object_name == "checkBox_gpuConversion":
# CUDA not available, should not change the preset though
continue
if (str(current_settings[widget_object_name]) != str(value)): if (str(current_settings[widget_object_name]) != str(value)):
break break
else: else:
@ -219,9 +215,6 @@ class SettingsWindow(QtWidgets.QWidget):
else: else:
self.ui.comboBox_presets.setCurrentIndex(0) self.ui.comboBox_presets.setCurrentIndex(0)
if not self.CUDA_AVAILABLE:
self.ui.checkBox_gpuConversion.setChecked(False)
# -Window Setup Methods- # -Window Setup Methods-
def setup_window(self): def setup_window(self):
@ -377,7 +370,7 @@ class SettingsWindow(QtWidgets.QWidget):
open_settings = self.settings.value('settingswindow/checkBox_settingsStartup', open_settings = self.settings.value('settingswindow/checkBox_settingsStartup',
const.DEFAULT_SETTINGS['checkBox_settingsStartup'], const.DEFAULT_SETTINGS['checkBox_settingsStartup'],
bool) bool)
if not self.CUDA_AVAILABLE: if not const.CUDA_AVAILABLE:
self.ui.checkBox_gpuConversion.setEnabled(False) self.ui.checkBox_gpuConversion.setEnabled(False)
self.ui.checkBox_gpuConversion.setToolTip("CUDA is not available on your system") self.ui.checkBox_gpuConversion.setToolTip("CUDA is not available on your system")
@ -445,7 +438,7 @@ class SettingsWindow(QtWidgets.QWidget):
mainWindowPresetWidget.clear() mainWindowPresetWidget.clear()
self.ui.comboBox_presets.addItem('Custom') self.ui.comboBox_presets.addItem('Custom')
mainWindowPresetWidget.addItem('Custom') mainWindowPresetWidget.addItem('Custom')
for preset_name in self.app.windows['presetsEditor'].get_presets().keys(): for i, preset_name in enumerate(self.app.windows['presetsEditor'].get_presets().keys()):
# Add text to combobox # Add text to combobox
self.ui.comboBox_presets.addItem(preset_name) self.ui.comboBox_presets.addItem(preset_name)
mainWindowPresetWidget.addItem(preset_name) mainWindowPresetWidget.addItem(preset_name)
@ -463,6 +456,19 @@ class SettingsWindow(QtWidgets.QWidget):
Update the list of models to select from in the Update the list of models to select from in the
seperation settings page based on the selected AI Engine seperation settings page based on the selected AI Engine
""" """
def get_model_id(path: str) -> str:
buffer_size = 65536
sha1 = hashlib.sha1()
with open(path, 'rb') as f:
while True:
data = f.read(buffer_size)
if not data:
break
sha1.update(data)
return sha1.hexdigest()
def fill_model_comboBox(widget: QtWidgets.QComboBox, folder: str): def fill_model_comboBox(widget: QtWidgets.QComboBox, folder: str):
""" """
Fill the combobox for the model Fill the combobox for the model
@ -475,10 +481,15 @@ class SettingsWindow(QtWidgets.QWidget):
continue continue
# Get data # Get data
full_path = os.path.join(folder, f) full_path = os.path.join(folder, f)
model_id = get_model_id(full_path)
print(model_id)
model_name = os.path.splitext(os.path.basename(f))[0] model_name = os.path.splitext(os.path.basename(f))[0]
# Add item to combobox # Add item to combobox
widget.addItem(model_name, widget.addItem(model_name,
full_path) {
'path': full_path,
'id': model_id
})
if model_name == currently_selected_model_name: if model_name == currently_selected_model_name:
# This model was selected before clearing the # This model was selected before clearing the
# QComboBox, so reselect # QComboBox, so reselect

View File

@ -393,6 +393,14 @@
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
<property name="styleSheet">
<string notr="true">QComboBox::down-arrow {
image: none;
}
QComboBox::drop-down {
border-width: 0px;
}</string>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>