add alternative upscaler, more to come soon!
This commit is contained in:
169
imagevideoupscaler.py
Normal file
169
imagevideoupscaler.py
Normal file
@@ -0,0 +1,169 @@
|
||||
"""
|
||||
* FSRImageVideoUpscalerFrontend - fsrimagevideoupscaler.py
|
||||
*
|
||||
* Created by Janis Hutz 03/14/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
"""
|
||||
|
||||
import sys
|
||||
import bin.handler
|
||||
import multiprocessing
|
||||
import bin.checks
|
||||
import bin.arg_assembly
|
||||
|
||||
arg = bin.arg_assembly.ArgAssembly()
|
||||
checks = bin.checks.Checks()
|
||||
handler = bin.handler.Handler()
|
||||
|
||||
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QFileDialog, QComboBox, QHBoxLayout, QVBoxLayout, QWidget
|
||||
from PyQt5.QtCore import QUrl
|
||||
|
||||
|
||||
class HomeWindow(QMainWindow):
|
||||
def __init__( self, parent=None ):
|
||||
super( HomeWindow, self ).__init__( parent )
|
||||
self.os_type = sys.platform
|
||||
self.save_file = ""
|
||||
self.open_file = ""
|
||||
|
||||
box = QVBoxLayout();
|
||||
actionsBox = QHBoxLayout();
|
||||
|
||||
widget = QWidget();
|
||||
actionsWidget = QWidget();
|
||||
|
||||
self.button = QPushButton( 'Input file' );
|
||||
self.button.clicked.connect( self.filechooser_clicked );
|
||||
self.button_out = QPushButton( 'Output file' );
|
||||
self.button_out.clicked.connect( self.opfilechooser_clicked );
|
||||
self.button_run = QPushButton( 'Upscale' );
|
||||
self.button_run.clicked.connect( self.info_button );
|
||||
|
||||
self.qualitySelector = QComboBox();
|
||||
self.qualitySelector.addItems( ['2x', '1.7x', '1.5x', '1.3x', 'Custom (will respect value below)' ] );
|
||||
|
||||
actionsBox.addWidget( self.button );
|
||||
actionsBox.addWidget( self.button_out );
|
||||
actionsBox.addWidget( self.button_run );
|
||||
actionsWidget.setLayout( actionsBox );
|
||||
|
||||
box.addWidget( self.qualitySelector );
|
||||
box.addWidget( actionsWidget );
|
||||
widget.setLayout( box );
|
||||
|
||||
self.setCentralWidget( widget );
|
||||
|
||||
self.setWindowTitle( 'FSRImageVideoUpscalerFrontend' );
|
||||
|
||||
|
||||
def on_quality_change(self, quality):
|
||||
# get data from quality changer
|
||||
self.tree_iter = quality.get_active_iter()
|
||||
if self.tree_iter is not None:
|
||||
self.model = quality.get_model()
|
||||
self.output = self.model[self.tree_iter][0]
|
||||
|
||||
def filechooser_clicked( self ):
|
||||
self.open_file = QFileDialog.getOpenFileName( self, 'Open input file', '', 'Image & Video files (*.jpg *.png *.mp4 *.mkv *.jpeg)' );
|
||||
|
||||
|
||||
def opfilechooser_clicked( self ):
|
||||
self.path = '';
|
||||
|
||||
if str( self.open_file )[len(self.open_file) - 4:] == '.mp4':
|
||||
self.path = 'video.mp4';
|
||||
elif str( self.open_file )[len(self.open_file) - 4:] == '.mkv':
|
||||
self.path = 'video.mkv';
|
||||
elif str( self.open_file )[len(self.open_file) - 4:] == '.png':
|
||||
self.path = 'image.png';
|
||||
elif str( self.open_file )[len(self.open_file) - 4:] == '.jpg':
|
||||
self.path = 'image.jpg';
|
||||
elif str( self.open_file )[len(self.open_file) - 4:] == '.jpeg':
|
||||
self.path = 'image.jpeg';
|
||||
|
||||
self.open_file_out = QFileDialog.getOpenFileName( self, 'Select output file', '', 'Image & Video files (*.jpg *.png *.mp4 *.mkv *.jpeg)' );
|
||||
|
||||
def info_button(self):
|
||||
self.fileMissingErrorDialog = QDialog( self );
|
||||
self.fileMissingErrorDialog.setWindowTitle( 'Upscaling! This process might take a LONG time!' );
|
||||
self.fileMissingErrorDialog.exec();
|
||||
self.start_clicked();
|
||||
|
||||
def start_clicked(self):
|
||||
self.respawn = True
|
||||
try:
|
||||
if self.scaler.is_alive():
|
||||
self.respawn = False
|
||||
else:
|
||||
self.respawn = True
|
||||
|
||||
except AttributeError:
|
||||
self.respawn = True
|
||||
|
||||
if self.respawn:
|
||||
if str(self.open_file) != "" and str(self.save_file) != "":
|
||||
if checks.perform(self.output, self.custom_quality_selector.get_text(), self.open_file, self.save_file):
|
||||
if self.output == "Custom (will respect value below)":
|
||||
self.quality_selected = "custom"
|
||||
if self.custom_quality_selector.get_text()[len(self.custom_quality_selector.get_text()) - 1] == "x":
|
||||
self.q = f"{self.custom_quality_selector.get_text()} {self.custom_quality_selector.get_text()}"
|
||||
else:
|
||||
self.q = f"{self.custom_quality_selector.get_text()}x {self.custom_quality_selector.get_text()}x"
|
||||
else:
|
||||
self.quality_selected = "default"
|
||||
self.q = str(arg.get(self.output))
|
||||
self.go = True
|
||||
if self.go:
|
||||
self.details.set_text("Starting upscaling process")
|
||||
print("\n\nStarting upscaling process!\n\n")
|
||||
self.info_button()
|
||||
if self.info_response == Gtk.ResponseType.OK:
|
||||
self.details.set_text("Upscaling")
|
||||
self.scaler = multiprocessing.Process(name="scaler",
|
||||
target=handler.handler,
|
||||
args=("./bin/lib/FidelityFX_CLI.exe",
|
||||
self.open_file,
|
||||
self.quality_selected,
|
||||
self.q,
|
||||
self.save_file,)
|
||||
)
|
||||
self.scaler.start()
|
||||
elif self.info_response == Gtk.ResponseType.CANCEL:
|
||||
self.details.set_text("Ready")
|
||||
print("aborted")
|
||||
else:
|
||||
raise Exception
|
||||
else:
|
||||
self.details.set_text("File-checks failed! Please check your entries!")
|
||||
print("File-checks unsuccessful. Please check your entries!")
|
||||
self.checkerror()
|
||||
else:
|
||||
self.details.set_text("No file specified!")
|
||||
print("no file specified")
|
||||
self.fileerror()
|
||||
else:
|
||||
self.runningerror()
|
||||
print("Already running!")
|
||||
|
||||
def runningerror(self):
|
||||
self.runningerrordialog = ErrorDialogRunning(self)
|
||||
self.runningerrordialog.run()
|
||||
self.runningerrordialog.destroy()
|
||||
|
||||
def fileerror(self):
|
||||
self.fileMissingErrorDialog = QDialog( self );
|
||||
self.fileMissingErrorDialog.setWindowTitle( 'Missing file selection! Please ensure you have selected both an input and output file!' );
|
||||
self.fileMissingErrorDialog.exec();
|
||||
|
||||
def checkerror(self):
|
||||
self.checkerrordialog = ErrorDialogCheckFail(self)
|
||||
self.checkerrordialog.run()
|
||||
self.checkerrordialog.destroy()
|
||||
|
||||
|
||||
app = QApplication( sys.argv );
|
||||
ex = HomeWindow();
|
||||
ex.show();
|
||||
sys.exit( app.exec_() );
|
||||
Reference in New Issue
Block a user