Version 1.1 Upload
This commit is contained in:
committed by
GitHub
parent
ef33c287f3
commit
244f7a9e96
+132
-4
@@ -5,6 +5,7 @@ from functools import cache
|
|||||||
from itertools import repeat
|
from itertools import repeat
|
||||||
from json import dumps as json_dumps
|
from json import dumps as json_dumps
|
||||||
from json import load as json_load
|
from json import load as json_load
|
||||||
|
from math import cos, pi # For smooth fade effect
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
from multiprocessing import Queue as multiprocessing_Queue
|
from multiprocessing import Queue as multiprocessing_Queue
|
||||||
from multiprocessing import freeze_support as multiprocessing_freeze_support
|
from multiprocessing import freeze_support as multiprocessing_freeze_support
|
||||||
@@ -83,7 +84,7 @@ def find_by_relative_path(relative_path: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
app_name = "Warlock Studio"
|
app_name = "Warlock Studio"
|
||||||
version = "1.0.0"
|
version = "1.1"
|
||||||
|
|
||||||
background_color = "#121212" # Negro grisáceo profundo
|
background_color = "#121212" # Negro grisáceo profundo
|
||||||
app_name_color = "#FFFFFF" # Blanco puro para el nombre de la app
|
app_name_color = "#FFFFFF" # Blanco puro para el nombre de la app
|
||||||
@@ -1854,7 +1855,8 @@ def upscale_image(
|
|||||||
upscaled_image_path = prepare_output_image_filename(
|
upscaled_image_path = prepare_output_image_filename(
|
||||||
image_path, selected_output_path, selected_AI_model, input_resize_factor, output_resize_factor, selected_image_extension, selected_blending_factor)
|
image_path, selected_output_path, selected_AI_model, input_resize_factor, output_resize_factor, selected_image_extension, selected_blending_factor)
|
||||||
|
|
||||||
write_process_status(process_status_q, f"{file_number}. Upscaling image")
|
write_process_status(
|
||||||
|
process_status_q, f"{file_number}. Upscaling image. Be patient")
|
||||||
upscaled_image = AI_instance.AI_orchestration(starting_image)
|
upscaled_image = AI_instance.AI_orchestration(starting_image)
|
||||||
|
|
||||||
if selected_blending_factor > 0:
|
if selected_blending_factor > 0:
|
||||||
@@ -1920,7 +1922,7 @@ def upscale_video(
|
|||||||
percent_complete = (
|
percent_complete = (
|
||||||
frames_already_upscaled_counter / total_frames_counter) * 100
|
frames_already_upscaled_counter / total_frames_counter) * 100
|
||||||
write_process_status(
|
write_process_status(
|
||||||
process_status_q, f"{file_number}. Upscaling video {percent_complete:.2f}% ({remaining_time})")
|
process_status_q, f"{file_number}. Upscaling video. Be patient {percent_complete:.2f}% ({remaining_time})")
|
||||||
|
|
||||||
def save_multiple_upscaled_frame_async(
|
def save_multiple_upscaled_frame_async(
|
||||||
starting_frames_to_save: list[numpy_ndarray],
|
starting_frames_to_save: list[numpy_ndarray],
|
||||||
@@ -2044,7 +2046,7 @@ def upscale_video(
|
|||||||
for i in range(0, len(upscaled_frame_paths), chunk_size)]
|
for i in range(0, len(upscaled_frame_paths), chunk_size)]
|
||||||
|
|
||||||
write_process_status(
|
write_process_status(
|
||||||
process_status_q, f"{file_number}. Upscaling video ({threads_number} threads)")
|
process_status_q, f"{file_number}. Upscaling video. Be patient ({threads_number} threads)")
|
||||||
with ThreadPool(threads_number) as pool:
|
with ThreadPool(threads_number) as pool:
|
||||||
pool.starmap(
|
pool.starmap(
|
||||||
upscale_video_frames_async,
|
upscale_video_frames_async,
|
||||||
@@ -2997,6 +2999,124 @@ class App():
|
|||||||
place_upscale_button()
|
place_upscale_button()
|
||||||
|
|
||||||
|
|
||||||
|
# Splash Screen class for application startup
|
||||||
|
class SplashScreen(CTkToplevel):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
# Configure window
|
||||||
|
self.title("")
|
||||||
|
self.overrideredirect(True) # Remove window decorations
|
||||||
|
self.attributes('-topmost', True)
|
||||||
|
|
||||||
|
# Calculate window position for center of screen
|
||||||
|
screen_width = self.winfo_screenwidth()
|
||||||
|
screen_height = self.winfo_screenheight()
|
||||||
|
|
||||||
|
# Set default window size
|
||||||
|
window_width = 500
|
||||||
|
window_height = 300
|
||||||
|
|
||||||
|
# Try to load banner image
|
||||||
|
banner_path = find_by_relative_path(f"rsc{os_separator}banner.png")
|
||||||
|
try:
|
||||||
|
self.banner_image = CTkImage(
|
||||||
|
pillow_image_open(banner_path),
|
||||||
|
size=(450, 200) # Adjust size as needed
|
||||||
|
)
|
||||||
|
has_banner = True
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Could not load splash banner: {e}")
|
||||||
|
has_banner = False
|
||||||
|
window_height = 200 # Smaller height if no banner
|
||||||
|
|
||||||
|
# Center window
|
||||||
|
x = (screen_width - window_width) // 2
|
||||||
|
y = (screen_height - window_height) // 2
|
||||||
|
self.geometry(f"{window_width}x{window_height}+{x}+{y}")
|
||||||
|
|
||||||
|
# Configure appearance to match app
|
||||||
|
self.configure(fg_color="#212325") # background_color
|
||||||
|
|
||||||
|
# Create banner or title
|
||||||
|
if has_banner:
|
||||||
|
self.banner_label = CTkLabel(
|
||||||
|
self,
|
||||||
|
image=self.banner_image,
|
||||||
|
text=""
|
||||||
|
)
|
||||||
|
self.banner_label.pack(pady=(30, 15))
|
||||||
|
else:
|
||||||
|
# Fallback to text title if image not found
|
||||||
|
title_label = CTkLabel(
|
||||||
|
self,
|
||||||
|
text="Warlock Studio",
|
||||||
|
font=CTkFont(family="Segoe UI", size=28, weight="bold"),
|
||||||
|
text_color="#2F73DD" # app_name_color
|
||||||
|
)
|
||||||
|
title_label.pack(pady=(50, 20))
|
||||||
|
|
||||||
|
# Create status frame with progress messages
|
||||||
|
status_frame = CTkFrame(
|
||||||
|
self,
|
||||||
|
fg_color="#343638", # widget_background_color
|
||||||
|
corner_radius=10
|
||||||
|
)
|
||||||
|
status_frame.pack(pady=10, padx=20, fill="x")
|
||||||
|
|
||||||
|
self.status_label = CTkLabel(
|
||||||
|
status_frame,
|
||||||
|
text="Loading AI-ONNX models...",
|
||||||
|
font=CTkFont(family="Segoe UI", size=12, weight="bold"),
|
||||||
|
text_color="white" # text_color
|
||||||
|
)
|
||||||
|
self.status_label.pack(pady=10, padx=10)
|
||||||
|
|
||||||
|
# Define enough messages to fill 15 seconds (~1.5s por mensaje)
|
||||||
|
self.messages = [
|
||||||
|
"Loading AI-ONNX models...",
|
||||||
|
"Initializing FFmpeg...",
|
||||||
|
"Preparing environment...",
|
||||||
|
"Setting up GPU acceleration...",
|
||||||
|
"Loading image enhancement filters...",
|
||||||
|
"Optimizing runtime performance...",
|
||||||
|
"Warming up deep learning models...",
|
||||||
|
"Finalizing system check...",
|
||||||
|
"Cleaning temporary buffers...",
|
||||||
|
"Almost ready..."
|
||||||
|
]
|
||||||
|
|
||||||
|
# Start loading animation
|
||||||
|
self._loading_step = 0
|
||||||
|
self.update_loading_text()
|
||||||
|
|
||||||
|
# Splash duration: 15 seconds
|
||||||
|
self.after(15000, self.start_fade_out)
|
||||||
|
|
||||||
|
def update_loading_text(self):
|
||||||
|
"""Update the loading message every 1.5 seconds"""
|
||||||
|
if self._loading_step < len(self.messages):
|
||||||
|
self.status_label.configure(text=self.messages[self._loading_step])
|
||||||
|
self._loading_step += 1
|
||||||
|
self.after(1500, self.update_loading_text)
|
||||||
|
|
||||||
|
def start_fade_out(self):
|
||||||
|
"""Start the fade out animation"""
|
||||||
|
self._fade_step = 1.0
|
||||||
|
self.fade_out()
|
||||||
|
|
||||||
|
def fade_out(self):
|
||||||
|
"""Smoothly fade out the splash screen"""
|
||||||
|
if self._fade_step > 0:
|
||||||
|
# Use cosine for smooth fade
|
||||||
|
opacity = cos((1.0 - self._fade_step) * pi/2)
|
||||||
|
self.attributes('-alpha', opacity)
|
||||||
|
self._fade_step -= 0.05
|
||||||
|
self.after(40, self.fade_out)
|
||||||
|
else:
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
multiprocessing_freeze_support()
|
multiprocessing_freeze_support()
|
||||||
set_appearance_mode("Dark")
|
set_appearance_mode("Dark")
|
||||||
@@ -3004,7 +3124,15 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
process_status_q = multiprocessing_Queue(maxsize=1)
|
process_status_q = multiprocessing_Queue(maxsize=1)
|
||||||
|
|
||||||
|
# Create main window but keep it hidden initially
|
||||||
window = CTk()
|
window = CTk()
|
||||||
|
window.withdraw() # Hide main window temporarily
|
||||||
|
|
||||||
|
# Create and show splash screen
|
||||||
|
splash = SplashScreen()
|
||||||
|
|
||||||
|
# Schedule showing the main window after splash finishes
|
||||||
|
window.after(6000, window.deiconify) # 5s + fade time
|
||||||
|
|
||||||
info_message = StringVar()
|
info_message = StringVar()
|
||||||
selected_output_path = StringVar()
|
selected_output_path = StringVar()
|
||||||
|
|||||||
Reference in New Issue
Block a user