Release version v4.2.1 — improvements and fixes
@@ -0,0 +1 @@
|
||||
Warlock-Studio2.2Setup filter=lfs diff=lfs merge=lfs -text
|
||||
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 352 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 998 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 625 KiB |
|
Before Width: | Height: | Size: 105 KiB |
@@ -1,3 +1,75 @@
|
||||
## Version 4.2.1
|
||||
|
||||
**Release date:** 27 October 2025
|
||||
|
||||
### **1. Critical Bug Fixes & Core Functionality**
|
||||
|
||||
#### **1.1. Resolved Critical Audio Passthrough Failure in Video Encoding**
|
||||
|
||||
- Addressed a major bug introduced in v4.2 where all generated videos were encoded without audio. This was caused by the accidental omission of the `ffprobe.exe` executable (a key component of the FFmpeg suite) from the application's `Assets` directory and the final build package.
|
||||
- The `video_encoding` pipeline relies on media analysis (performed by `ffmpeg` or `ffprobe`) to detect the presence of audio streams in the source video. Due to the missing executable, the `audio_info_command` subprocess would fail, causing the application to incorrectly assume all input videos had no audio.
|
||||
- By restoring the `ffprobe.exe` binary to the application bundle, the audio detection step now executes successfully, enabling the proper copying (`-c:a copy`) or re-encoding (`-c:a aac`) of the original audio track into the final processed video.
|
||||
|
||||
#### **1.2. Fixed Invalid UI State Persistence**
|
||||
|
||||
- Addressed a critical UI logic bug where AI model settings could persist incorrectly when switching between model types. The `select_AI_from_menu` function now properly resets conflicting global variables:
|
||||
- **RIFE Selection:** When an interpolation model (e.g., RIFE, RIFE_Lite) is selected, the **`selected_blending_factor`** is now automatically reset to `0` (OFF), as blending is not a valid operation for this model.
|
||||
- **Upscaling/Face Selection:** Conversely, when any upscaling or face restoration model (e.g., BSRGAN, GFPGAN) is selected, the **`selected_frame_generation_option`** is automatically reset to `OFF`.
|
||||
- This prevents users from applying invalid or non-functional setting combinations, ensuring a more intuitive and error-free workflow.
|
||||
|
||||
#### **1.3. Fixed File Thumbnail Generation Crash**
|
||||
|
||||
- Reworked the `FileWidget.extract_file_icon` method to be more robust during the conversion of an OpenCV (NumPy) image to a `CTkImage` for file previews.
|
||||
- The process no longer relies on the `mode='RGB'` parameter within `pillow_image_fromarray`, which could fail with certain `numpy` array layouts.
|
||||
- It now uses an explicit, two-step conversion (`pil_img = pillow_image_fromarray(source_icon)` followed by `pil_img = pil_img.convert("RGB")`), ensuring correct channel order and preventing potential `Pillow`/`numpy` compatibility crashes when loading file thumbnails.
|
||||
|
||||
---
|
||||
|
||||
### **2. UI Corrections & Usability Enhancements**
|
||||
|
||||
#### **2.1. Corrected Supported File Extension List**
|
||||
|
||||
- The helper text on the file selection screen has been corrected to more accurately list the supported file extensions. It now properly includes `jpeg` and `tiff` and removes incorrect entries (`heic`, `gif`, `mpg`, `qt`, `3gp`) to align with the application's actual processing capabilities.
|
||||
|
||||
#### **2.2. Implemented Fixed Application Window**
|
||||
|
||||
- The main application window is now non-resizable (`window.resizable(False, False)`). This change was implemented to ensure a stable and predictable UI layout, preventing the relative-coordinate-based widget placement (`relx`, `rely`) from breaking, overlapping, or scaling improperly when the window is resized.
|
||||
|
||||
#### **2.3. Improved Dialog Window Behavior**
|
||||
|
||||
- Removed the `self.attributes("-topmost", True)` flag from the `MessageBox` class (which handles error and info dialogs). This stops popup windows from aggressively forcing themselves to be the top-most window on the entire desktop. Dialogs now behave as standard application-modal windows, resolving a key usability issue where they could "steal focus" or obstruct other programs.
|
||||
|
||||
---
|
||||
|
||||
### **3. Thematic & Visual Redesign**
|
||||
|
||||
#### **3.1. New "Inferno" Thematic Redesign**
|
||||
|
||||
- Version 4.2.1 introduces a significant visual overhaul, moving away from the previous gold-and-grey theme to a high-contrast, dark-mode "inferno" theme. This new palette uses a deep red background with bright yellow and white text, designed to improve readability and reduce eye strain.
|
||||
|
||||
The color scheme has been updated as follows:
|
||||
|
||||
| Element | New Value (v4.2.1) | Old Value (v4.2) |
|
||||
| :-------------------- | :------------------------ | :--------------------- |
|
||||
| **Background** | `#480B0B` (Dark Red) | `#1A1A1A` (Deep Black) |
|
||||
| **App Name Color** | `#FFFFFF` (White) | `#DFDFDF` (Light Grey) |
|
||||
| **Widget Background** | `#252525` (Near Black) | `#2D2D2D` (Dark Grey) |
|
||||
| **Main Text** | `#FFE32C` (Bright Yellow) | `#FFFFFF` (White) |
|
||||
| **Accent/Border** | `#FFFFFF` (White) | `#FFD700` (Gold) |
|
||||
| **Info Button** | `#A80000` (Medium Red) | `#B22222` (Dark Red) |
|
||||
| **Warning Color** | `#E02CDA` (Magenta) | `#FF8C00` (Orange) |
|
||||
| **Error Color** | `#070087` (Dark Blue) | `#DC143C` (Crimson) |
|
||||
|
||||
#### **3.2. Monospaced Typography Shift**
|
||||
|
||||
- The application's global font has been changed from `"Segoe UI"` to `"Consola"`. This provides a more uniform, technical aesthetic across all UI elements, enhancing readability for file names, numeric values, and status messages.
|
||||
|
||||
#### **3.3. Dropdown Menu Readability**
|
||||
|
||||
- Updated the visual separators in dropdown menus from `----` to `<------------------>` for clearer, more pronounced grouping of model categories.
|
||||
|
||||
---
|
||||
|
||||
## Version 4.2
|
||||
|
||||
**Release date:** 6 October 2025
|
||||
@@ -6,19 +78,19 @@
|
||||
|
||||
#### **1.1. Advanced ONNX Runtime Integration & Execution Provider Strategy**
|
||||
|
||||
- **Intelligent Provider Prioritization & Fallback Mechanism**: The core AI model loading architecture has been fundamentally re-engineered for superior performance and resilience. The new implementation leverages a prioritized provider list (`['CUDAExecutionProvider', 'DmlExecutionProvider', 'CPUExecutionProvider']`) within the `onnxruntime.InferenceSession` constructor. It first attempts to initialize a session using the **`CUDAExecutionProvider`**, which offers the highest performance by interfacing directly with NVIDIA's CUDA cores and Tensor Cores. If this fails (due to lack of an NVIDIA GPU, driver issues, or CUDA toolkit incompatibility), the system gracefully falls back and attempts initialization with the **`DmlExecutionProvider`**, utilizing Windows' DirectML API for broader hardware acceleration across various GPU vendors (NVIDIA, AMD, Intel). As a final failsafe, if no GPU acceleration provider can be initialized, it defaults to the **`CPUExecutionProvider`**, ensuring the application remains functional on any machine, albeit with reduced performance.
|
||||
- **Intelligent Provider Prioritization & Fallback Mechanism**: The core AI model loading architecture has been fundamentally re-engineered for superior performance and resilience. The new implementation leverages a prioritized provider list (`['CUDAExecutionProvider', 'DmlExecutionProvider', 'CPUExecutionProvider']`) within the `onnxruntime.InferenceSession` constructor. It first attempts to initialize a session using the **`CUDAExecutionProvider`**, which offers the highest performance by interfacing directly with NVIDIA's CUDA cores and Tensor Cores. If this fails (due to lack of an NVIDIA GPU, driver issues, or CUDA toolkit incompatibility), the system gracefully falls back and attempts initialization with the **`DmlExecutionProvider`**, utilizing Windows' DirectML API for broader hardware acceleration across various GPU vendors (NVIDIA, AMD, Intel). As a final failsafe, if no GPU acceleration provider can be initialized, it defaults to the **`CPUExecutionProvider`**, ensuring the application remains functional on any machine, albeit with reduced performance.
|
||||
|
||||
- **Centralized Session Management & Code Refactoring**: A new, unified function, `create_onnx_session`, has been introduced to abstract and centralize all ONNX session creation logic. This eliminates the redundant and error-prone boilerplate code that was previously duplicated within the `_load_inferenceSession` method of each individual AI class (`AI_upscale`, `AI_interpolation`, `AI_face_restoration`). This refactoring adheres to the **Don't Repeat Yourself (DRY)** principle, significantly improving code maintainability, reducing the surface area for bugs, and ensuring a consistent and robust model loading strategy across the entire application.
|
||||
- **Centralized Session Management & Code Refactoring**: A new, unified function, `create_onnx_session`, has been introduced to abstract and centralize all ONNX session creation logic. This eliminates the redundant and error-prone boilerplate code that was previously duplicated within the `_load_inferenceSession` method of each individual AI class (`AI_upscale`, `AI_interpolation`, `AI_face_restoration`). This refactoring adheres to the **Don't Repeat Yourself (DRY)** principle, significantly improving code maintainability, reducing the surface area for bugs, and ensuring a consistent and robust model loading strategy across the entire application.
|
||||
|
||||
- **Enhanced Error Handling & Diagnostics**: The `try...except` block encapsulating the session creation loop is now more sophisticated. It logs specific warnings when a provider fails to initialize and clearly indicates which provider it is falling back to. This provides transparent diagnostics that are critical for troubleshooting performance issues related to hardware acceleration.
|
||||
- **Enhanced Error Handling & Diagnostics**: The `try...except` block encapsulating the session creation loop is now more sophisticated. It logs specific warnings when a provider fails to initialize and clearly indicates which provider it is falling back to. This provides transparent diagnostics that are critical for troubleshooting performance issues related to hardware acceleration.
|
||||
|
||||
#### **1.2. PyInstaller Packaging & Distribution Overhaul**
|
||||
|
||||
- **Aggressive Dependency Pruning for Size Optimization**: The PyInstaller `.spec` file has been meticulously optimized to drastically reduce the final distribution size. An extensive `excludes` list has been implemented to explicitly instruct PyInstaller's analysis engine to ignore and not bundle large, non-essential packages. This prevents the recursive inclusion of entire scientific and machine learning ecosystems like `torch`, `transformers`, `matplotlib`, `pandas`, `scipy`, and `PyQt5`, which are often pulled in as sub-dependencies but are not required for this application's runtime. This strategic pruning reduces the package size by hundreds of megabytes.
|
||||
- **Aggressive Dependency Pruning for Size Optimization**: The PyInstaller `.spec` file has been meticulously optimized to drastically reduce the final distribution size. An extensive `excludes` list has been implemented to explicitly instruct PyInstaller's analysis engine to ignore and not bundle large, non-essential packages. This prevents the recursive inclusion of entire scientific and machine learning ecosystems like `torch`, `transformers`, `matplotlib`, `pandas`, `scipy`, and `PyQt5`, which are often pulled in as sub-dependencies but are not required for this application's runtime. This strategic pruning reduces the package size by hundreds of megabytes.
|
||||
|
||||
- **Robust Hidden Import Declaration for Runtime Stability**: The `.spec` file now includes a `hiddenimports` list containing `onnxruntime.capi._pybind_state`, `onnxruntime.providers`, and `moviepy.editor`. This is critical for ensuring runtime stability, as these modules are often loaded dynamically (e.g., via `__import__` or C extensions) in a way that PyInstaller's static analysis cannot detect. Explicitly declaring them forces their inclusion, preventing `ModuleNotFoundError` crashes when the packaged application attempts to access these components.
|
||||
- **Robust Hidden Import Declaration for Runtime Stability**: The `.spec` file now includes a `hiddenimports` list containing `onnxruntime.capi._pybind_state`, `onnxruntime.providers`, and `moviepy.editor`. This is critical for ensuring runtime stability, as these modules are often loaded dynamically (e.g., via `__import__` or C extensions) in a way that PyInstaller's static analysis cannot detect. Explicitly declaring them forces their inclusion, preventing `ModuleNotFoundError` crashes when the packaged application attempts to access these components.
|
||||
|
||||
- **Strategic Shift to "One-Folder" Distribution**: The build strategy has been transitioned from a "one-file" mode to a more robust and efficient "one-folder" mode. This is achieved by using the `COLLECT` block in the `.spec` file. Instead of bundling all dependencies into a single large executable that must be decompressed to a temporary directory (`_MEIPASS`) on every launch, the "one-folder" approach places the executable alongside its required `.dll`, `.pyd`, and data files. This results in significantly faster application startup times and avoids potential conflicts with antivirus software or system permissions related to executing from temporary locations.
|
||||
- **Strategic Shift to "One-Folder" Distribution**: The build strategy has been transitioned from a "one-file" mode to a more robust and efficient "one-folder" mode. This is achieved by using the `COLLECT` block in the `.spec` file. Instead of bundling all dependencies into a single large executable that must be decompressed to a temporary directory (`_MEIPASS`) on every launch, the "one-folder" approach places the executable alongside its required `.dll`, `.pyd`, and data files. This results in significantly faster application startup times and avoids potential conflicts with antivirus software or system permissions related to executing from temporary locations.
|
||||
|
||||
---
|
||||
|
||||
@@ -26,13 +98,13 @@
|
||||
|
||||
#### **2.1. Transition to a Full Offline Installer Model**
|
||||
|
||||
- **Self-Contained & Hermetic Package**: The application's distribution model has been fundamentally shifted from a lightweight online/web installer to a comprehensive **offline installer**. All required runtime assets, most notably the large AI model files (`.onnx`), are now bundled directly within the Inno Setup executable. This creates a fully self-contained package that guarantees a successful installation without any external dependencies.
|
||||
- **Self-Contained & Hermetic Package**: The application's distribution model has been fundamentally shifted from a lightweight online/web installer to a comprehensive **offline installer**. All required runtime assets, most notably the large AI model files (`.onnx`), are now bundled directly within the Inno Setup executable. This creates a fully self-contained package that guarantees a successful installation without any external dependencies.
|
||||
|
||||
- **Elimination of Network Dependencies & Points of Failure**: This architectural change enhances installation reliability exponentially. It completely removes the dependency on an active internet connection during setup and eliminates critical points of failure, such as GitHub/SourceForge server downtime, network interruptions, firewalls, or changes in download URLs. The user is assured of a complete, atomic installation from a single authoritative file.
|
||||
- **Elimination of Network Dependencies & Points of Failure**: This architectural change enhances installation reliability exponentially. It completely removes the dependency on an active internet connection during setup and eliminates critical points of failure, such as GitHub/SourceForge server downtime, network interruptions, firewalls, or changes in download URLs. The user is assured of a complete, atomic installation from a single authoritative file.
|
||||
|
||||
- **Radical Simplification of Installer Logic**: As a direct result of bundling all assets, the entire Pascal Script `[Code]` section in `Setup.iss` has been **completely removed**. This eliminates dozens of lines of complex logic responsible for creating custom download pages, handling HTTP requests, managing user cancellations, and, most critically, invoking external processes like PowerShell for archive extraction (`Expand-Archive`). This simplification makes the installer script significantly more robust, predictable, and easier to maintain.
|
||||
- **Radical Simplification of Installer Logic**: As a direct result of bundling all assets, the entire Pascal Script `[Code]` section in `Setup.iss` has been **completely removed**. This eliminates dozens of lines of complex logic responsible for creating custom download pages, handling HTTP requests, managing user cancellations, and, most critically, invoking external processes like PowerShell for archive extraction (`Expand-Archive`). This simplification makes the installer script significantly more robust, predictable, and easier to maintain.
|
||||
|
||||
- **Streamlined User Experience**: The installer's UI has been simplified by removing the "Download AI Models" task from the `[Tasks]` section. This avoids user confusion and streamlines the setup process, as the action is no longer necessary. The output filename is also now explicitly suffixed with `-Full-Installer` to clearly communicate its offline nature.
|
||||
- **Streamlined User Experience**: The installer's UI has been simplified by removing the "Download AI Models" task from the `[Tasks]` section. This avoids user confusion and streamlines the setup process, as the action is no longer necessary. The output filename is also now explicitly suffixed with `-Full-Installer` to clearly communicate its offline nature.
|
||||
|
||||
---
|
||||
|
||||
@@ -40,13 +112,13 @@
|
||||
|
||||
#### **3.1. Enhanced Application Startup & Initial Feedback**
|
||||
|
||||
- **Professional Splash Screen Implementation**: A new `SplashScreen` class provides immediate visual feedback upon application launch. This improves the *perceived performance* by displaying a branded loading screen with status messages while core components and AI models are being initialized in the background. It prevents the appearance of a hung or unresponsive application during the initial loading phase.
|
||||
- **Professional Splash Screen Implementation**: A new `SplashScreen` class provides immediate visual feedback upon application launch. This improves the _perceived performance_ by displaying a branded loading screen with status messages while core components and AI models are being initialized in the background. It prevents the appearance of a hung or unresponsive application during the initial loading phase.
|
||||
|
||||
- **Runtime Environment Diagnostics**: At startup, the application now programmatically queries and prints the available ONNX Runtime providers by calling `onnxruntime.get_available_providers()`. This information is outputted to the console, serving as an invaluable, zero-effort diagnostic tool. It allows both end-users and developers to instantly verify which hardware acceleration backends are detected and available to the application, aiding in performance tuning and troubleshooting.
|
||||
- **Runtime Environment Diagnostics**: At startup, the application now programmatically queries and prints the available ONNX Runtime providers by calling `onnxruntime.get_available_providers()`. This information is outputted to the console, serving as an invaluable, zero-effort diagnostic tool. It allows both end-users and developers to instantly verify which hardware acceleration backends are detected and available to the application, aiding in performance tuning and troubleshooting.
|
||||
|
||||
#### **3.2. Improved Debugging and Diagnosability**
|
||||
|
||||
- **Persistent Console for Runtime Output**: The PyInstaller build configuration was modified to set `console=True`. This forces the application to run with an attached console window that captures the `stdout` and `stderr` streams. This is a critical enhancement for diagnostics, as it makes all print statements, logging output, warnings, and unhandled exception tracebacks immediately visible, providing a clear and persistent record of the application's runtime behavior for effective bug reporting and debugging.
|
||||
- **Persistent Console for Runtime Output**: The PyInstaller build configuration was modified to set `console=True`. This forces the application to run with an attached console window that captures the `stdout` and `stderr` streams. This is a critical enhancement for diagnostics, as it makes all print statements, logging output, warnings, and unhandled exception tracebacks immediately visible, providing a clear and persistent record of the application's runtime behavior for effective bug reporting and debugging.
|
||||
|
||||
---
|
||||
|
||||
@@ -475,6 +547,3 @@
|
||||
### 2. Minor Fixes
|
||||
|
||||
- User‑interface tweaks for better accessibility (focus indicators, tab order).
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
SOFTWARE LICENSE AGREEMENT AND TERMS OF USE FOR WARLOCK-STUDIO
|
||||
|
||||
---
|
||||
|
||||
PREAMBLE
|
||||
|
||||
This Software License Agreement ("Agreement") constitutes a legally binding
|
||||
contract between you, either as an individual or on behalf of an entity
|
||||
("USER"), and Iván Eduardo Chavez Ayub ("AUTHOR"), regarding the
|
||||
Warlock-Studio software and all its associated files, documentation,
|
||||
and materials (collectively, the "SOFTWARE").
|
||||
By installing, copying, downloading, accessing, or otherwise using the
|
||||
SOFTWARE, the USER expressly consents to and agrees to be bound by all
|
||||
terms and conditions stipulated in this Agreement.
|
||||
IF THE USER DOES NOT AGREE WITH ALL THE TERMS OF THIS AGREEMENT, THEY MUST
|
||||
NOT INSTALL, USE, OR COPY THE SOFTWARE AND MUST IMMEDIATELY CANCEL THE
|
||||
INSTALLATION PROCESS.
|
||||
|
||||
---
|
||||
|
||||
SECTION I: THE MIT LICENSE
|
||||
|
||||
The original and legally binding text of the MIT License is presented below.
|
||||
This text governs the use of the core SOFTWARE.
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Iván Eduardo Chavez Ayub
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
SECTION II: ADDITIONAL TERMS, NOTICES, AND ACKNOWLEDGEMENTS
|
||||
|
||||
1. Project Description
|
||||
Warlock-Studio is a software application developed by Iván Eduardo Chavez
|
||||
Ayub (GitHub profile: @Ivan-Ayub97).
|
||||
The project is based on open-source
|
||||
tools such as QualityScaler, FluidFrames, and RealScaler, originally
|
||||
developed by Djdefrag (GitHub profile: @Djdefrag).
|
||||
The main objective of
|
||||
Warlock-Studio is to provide an intuitive graphical interface for
|
||||
enhancing and upscaling image resolution through the use of artificial
|
||||
intelligence models.
|
||||
2. 🧩 THIRD-PARTY COMPONENTS AND APPLICABLE LICENSES
|
||||
The SOFTWARE integrates various third-party technologies and components.
|
||||
The use of the SOFTWARE is conditioned not only on compliance with this
|
||||
Agreement but also with the license terms of each of these components.
|
||||
The following is a list of components and their respective licenses:
|
||||
|
||||
- QualityScaler, RealScaler, FluidFrames: MIT License (Djdefrag)
|
||||
- RIFE: Apache 2.0 License (hzwer, Megvii Research)
|
||||
- Real-ESRGAN, RealESRGAN-G, RealESR-Anime, RealESR-Net: BSD 3-Clause /
|
||||
Apache 2.0 License (Xintao Wang)
|
||||
- GFPGAN: MIT License (TencentARC, Xintao Wang)
|
||||
- SRGAN: CC BY-NC-SA 4.0 License (TensorLayer Community)
|
||||
- BSRGAN: Apache 2.0 License (Kai Zhang)
|
||||
- IRCNN: BSD / Mixed License (Kai Zhang)
|
||||
- Anime4K: MIT License (Tianyang Zhang / bloc97)
|
||||
- ONNX Runtime: MIT License (Microsoft)
|
||||
- Super Resolution 10: MIT License (ONNX Model Zoo Contributors)
|
||||
- PyTorch: BSD 3-Clause License (Meta AI)
|
||||
- FFmpeg: LGPL-2.1 / GPL License (FFmpeg Team)
|
||||
- ExifTool: Perl Artistic License (Phil Harvey)
|
||||
- DirectML: MIT License (Microsoft)
|
||||
- Python: PSF License (Python Software Foundation)
|
||||
- PyInstaller: GPLv2+ License (PyInstaller Team)
|
||||
- Inno Setup: Custom Inno License (Jordan Russell)
|
||||
|
||||
3. ⚖️ LIMITATION OF LIABILITY CLAUSE (EXTENDED)
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE
|
||||
AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES; INCLUDING, BUT NOT LIMITED
|
||||
TO, LOSS OF DATA, BUSINESS INTERRUPTION, OR HARDWARE OR SYSTEM FAILURE
|
||||
ARISING FROM THE USE, MISUSE, OR INABILITY TO USE THE SOFTWARE.
|
||||
THIS SOFTWARE IS PROVIDED FOR EDUCATIONAL, CREATIVE, AND RESEARCH PURPOSES.
|
||||
IT IS NOT CERTIFIED FOR IMPLEMENTATION IN CRITICAL OR COMMERCIAL
|
||||
INFRASTRUCTURES WITHOUT PRIOR INDEPENDENT VALIDATION.
|
||||
THE USER ASSUMES
|
||||
ALL RISK ASSOCIATED WITH ITS USE.
|
||||
4. 💼 INTELLECTUAL PROPERTY NOTICE
|
||||
The brand, the name "Warlock-Studio" and its associated logos are the
|
||||
exclusive intellectual property of Iván Eduardo Chavez Ayub.
|
||||
The use of
|
||||
these elements for commercial purposes is strictly prohibited without the
|
||||
prior written consent of the AUTHOR.
|
||||
Any redistribution or modification of
|
||||
the source code must preserve the original copyright notices and all
|
||||
references to the licenses contained herein.
|
||||
5. ✍️ ACCEPTANCE OF TERMS
|
||||
By proceeding with the installation and by using the SOFTWARE, the USER
|
||||
acknowledges having read, understood, and accepted all the terms set forth
|
||||
in the MIT License (Section I) and the Additional Terms (Section II) of
|
||||
this Agreement.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📧 CONTACT INFORMATION
|
||||
|
||||
For any inquiries or communications related to this Agreement or the SOFTWARE,
|
||||
you may contact the Author:
|
||||
|
||||
Name: Iván Eduardo Chavez Ayub
|
||||
Email: negroayub97@gmail.com
|
||||
GitHub: [https://github.com/Ivan-Ayub97](https://github.com/Ivan-Ayub97)
|
||||
@@ -5,7 +5,7 @@
|
||||
### _AI Media Enhancement Suite_
|
||||
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/releases)
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/releases/tag/4.2)
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/releases/tag/4.2.1)
|
||||
[](LICENSE)
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/releases)
|
||||
|
||||
@@ -14,19 +14,17 @@
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/issues)
|
||||
[](https://github.com/Ivan-Ayub97/Warlock-Studio/commits/main)
|
||||
|
||||
|
||||
_Transform your media with cutting-edge AI technology_
|
||||
|
||||
---
|
||||
|
||||
**Warlock-Studio** is an open-source desktop application for **Windows**, designed to integrate state-of-the-art AI models for **image and video enhancement**.
|
||||
**Warlock-Studio** is an open-source desktop application for **Windows**, engineered to integrate state-of-the-art AI models for **image and video enhancement**.
|
||||
|
||||
Inspired by [Djdefrag](https://github.com/Djdefrag) tools such as **QualityScaler** and **FluidFrames**, Warlock-Studio provides a unified, high-performance platform for **upscaling, restoration, denoising, and frame interpolation**.
|
||||
|
||||
Version **4.2** introduces a **full offline installer**, an **advanced ONNX Runtime engine** with DirectML & CUDA support, and significant **packaging optimizations**, ensuring the most reliable and performant experience yet.
|
||||
Version **4.2.1** delivers critical stability fixes, including the resolution of a major audio failure bug, and introduces a comprehensive Redesign for a modern, high-contrast visual experience.
|
||||
|
||||
---
|
||||
|
||||
## 📥 Download Installer (v4.2)
|
||||
## 📥 Download Installer (v4.2.1)
|
||||
|
||||
Get the latest stable release from:
|
||||
|
||||
@@ -38,7 +36,7 @@ Get the latest stable release from:
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/Ivan-Ayub97/Warlock-Studio/releases/download/v4.2/Warlock-Studio-v4.2-Setup.exe">
|
||||
<a href="https://github.com/Ivan-Ayub97/Warlock-Studio/releases/download/v4.2.1/Warlock-Studio-v4.2.1-Setup.exe">
|
||||
<img src="rsc/GitHub_Logo_WS.png" alt="Download from GitHub" width="200" />
|
||||
</a>
|
||||
</td>
|
||||
@@ -68,24 +66,32 @@ We highly recommend consulting the official user manual. The documentation provi
|
||||
|
||||
## ✨ Key Features
|
||||
|
||||
- **AI Upscaling & Restoration** – Utilize **Real-ESRGAN, BSRGAN, and IRCNN** models for denoising, super-resolution, and detail recovery.
|
||||
- **Face Restoration (GFPGAN)** – Recover facial details from low-resolution or blurry images and video frames.
|
||||
- **Frame Interpolation (RIFE)** – Smooth motion or generate slow-motion content with **2×, 4×, or 8× interpolation**.
|
||||
- **Advanced Hardware Acceleration** – Intelligent provider selection prioritizes **CUDA**, falls back to **DirectML**, and finally **CPU** for maximum compatibility and performance.
|
||||
- **Batch Processing** – Process multiple media files simultaneously, saving time and effort.
|
||||
- **Custom Workflows** – Fine-grained control over models, resolution, output formats, and quality parameters.
|
||||
- **Open-Source & Extensible** – Fully MIT licensed, for contributors and developers.
|
||||
- **AI Upscaling & Restoration** – Utilize **Real-ESRGAN, BSRGAN, and IRCNN** models for denoising, super-resolution, and detail recovery.
|
||||
- **Face Restoration (GFPGAN)** – Recover facial details from low-resolution or blurry images and video frames.
|
||||
- **Frame Interpolation (RIFE)** – Smooth motion or generate slow-motion content with **2×, 4×, or 8× interpolation**.
|
||||
- **Advanced Hardware Acceleration** – Intelligent provider selection prioritizes **CUDA**, falls back to **DirectML**, and finally **CPU** for maximum compatibility and performance.
|
||||
- **Batch Processing** – Process multiple media files simultaneously, saving time and effort.
|
||||
- **Custom Workflows** – Fine-grained control over models, resolution, output formats, and quality parameters.
|
||||
- **Open-Source & Extensible** – Fully MIT licensed, for contributors and developers.
|
||||
|
||||
---
|
||||
|
||||
## 🆕 What’s New in v4.2
|
||||
## 🆕 What's New in v4.2.1
|
||||
|
||||
- 📦 **Full Offline Installer**: The application is now distributed as a single, self-contained offline installer. All AI models are included, eliminating the need for an internet connection during setup and ensuring a reliable installation.
|
||||
- 🚀 **Advanced ONNX Runtime Engine**: The model loading architecture was re-engineered to intelligently prioritize hardware acceleration providers (**CUDA** > **DirectML** > **CPU**), maximizing performance on capable hardware and ensuring stability via a robust fallback mechanism.
|
||||
- ⚙️ **Aggressive Packaging Optimization**: The final application size has been drastically reduced by aggressively pruning unnecessary dependencies from the PyInstaller build, resulting in a lighter and more efficient package.
|
||||
- 🐛 **Enhanced Runtime Stability**: Added crucial hidden imports to the build process, preventing `ModuleNotFoundError` crashes and ensuring all components of `onnxruntime` and other libraries load correctly.
|
||||
- 🖥️ **Improved Debugging Experience**: The application now runs with an attached console window, providing real-time logs and error messages for easier troubleshooting.
|
||||
- ✨ **Professional Splash Screen**: A new startup splash screen provides immediate visual feedback while the application initializes, improving the user experience.
|
||||
This maintenance release focuses on critical stability, usability, and a significant visual overhaul.
|
||||
|
||||
### Stability & Usability Fixes
|
||||
|
||||
- **✅ Critical Audio Fix:** Resolved a major bug that caused all generated videos to be encoded without an audio track. The missing `ffprobe.exe` binary has been restored, ensuring proper audio stream detection and passthrough/re-encoding.
|
||||
- **✅ UI State Resilience:** Fixed an issue where conflicting AI model settings (e.g., blending and frame interpolation options) could persist incorrectly when switching between model types, preventing invalid setting combinations.
|
||||
- **✅ Robust Thumbnails:** Reworked the file thumbnail generation process (`FileWidget.extract_file_icon`) to be more robust, preventing potential crashes related to `Pillow`/`numpy` compatibility issues during image conversion.
|
||||
- **✅ Fixed Window Size:** The main application window is now non-resizable (`window.resizable(False, False)`) to ensure a stable and predictable UI layout, preventing widget placement errors.
|
||||
- **✅ Dialog Behavior:** Removed the aggressive "always-on-top" flag (`-topmost`) from dialog windows, ensuring they behave as standard application-modal windows.
|
||||
|
||||
### Visual & Thematic Redesign
|
||||
|
||||
- **🔥 "DarkRed" Theme:** Introduced a significant visual overhaul with a high-contrast, dark-mode palette. The theme uses a deep red background (`#480B0B`) with bright yellow (`#FFE32C`) and white text for enhanced readability and a distinct, technical aesthetic.
|
||||
- **💻 Monospaced Font:** Changed the global font from `"Segoe UI"` to `"Consola"` for a uniform, technical look across all UI elements, enhancing readability for file names and status messages.
|
||||
|
||||
---
|
||||
|
||||
@@ -101,13 +107,13 @@ We highly recommend consulting the official user manual. The documentation provi
|
||||
|
||||
## 🚀 How to Use
|
||||
|
||||
1. Run Warlock-Studio as **Administrator** (recommended for full GPU access).
|
||||
2. **Load Media** – Import images or videos.
|
||||
3. **Configure Processing Settings**:
|
||||
- Select AI model (Real-ESRGAN, GFPGAN, etc.)
|
||||
- Set resolution, format, frame interpolation, and quality.
|
||||
4. **Start Processing** using **"Make Magic"**.
|
||||
5. Retrieve the processed results from the designated output folder.
|
||||
1. Run Warlock-Studio as **Administrator** (recommended for full GPU access).
|
||||
2. **Load Media** – Import images or videos.
|
||||
3. **Configure Processing Settings**:
|
||||
- Select AI model (Real-ESRGAN, GFPGAN, RIFE, etc.)
|
||||
- Set resolution, format, frame interpolation, and quality.
|
||||
4. **Start Processing** using **"Make Magic"**.
|
||||
5. Retrieve the processed results from the designated output folder.
|
||||
|
||||
---
|
||||
|
||||
@@ -116,30 +122,34 @@ We highly recommend consulting the official user manual. The documentation provi
|
||||
Enhanced image using **BSRGANx2**:
|
||||

|
||||
|
||||
AI-Driven Visual Transformation: Before & After (**Click on the image to open the video on YouTube**)
|
||||
|
||||
[](https://youtu.be/kJOcctTM32c)
|
||||
|
||||
---
|
||||
|
||||
## 📊 Model Comparison
|
||||
|
||||
| Model File | Use Case | Speed | Quality | Notes |
|
||||
| -------------------------- | ------------------------------ | --------- | --------- | ----------------------------------- |
|
||||
| **GFPGANv1.4** | Face restoration | High | High | Optimal for portraits |
|
||||
| **BSRGANx2** | 2× upscale + denoising | Medium | Very High | Suitable for lightly degraded media |
|
||||
| **BSRGANx4** | 4× upscale + denoising | Low | Very High | For heavily degraded content |
|
||||
| **RIFE** | Frame interpolation | High | High | Smooth motion, slow-motion support |
|
||||
| **RIFE-Lite** | Lightweight interpolation | Very High | Medium | Faster, lower resource usage |
|
||||
| **RealESRGANx4** | General 4× upscaling | Medium | High | Balanced performance |
|
||||
| **RealESRNetx4** | Subtle restoration | Medium | High | Preserves natural image texture |
|
||||
| **RealSRx4_Anime** | Anime / line-art enhancement | Medium | High | Sharp edges for 2D art |
|
||||
| **IRCNN_L** | Light denoising | High | Medium | Mild artifact removal |
|
||||
| **IRCNN_M** | Medium denoising | High | Medium | Stronger artifact cleanup |
|
||||
| Model File | Use Case | Speed | Quality | Notes |
|
||||
| :----------------- | :--------------------------- | :-------- | :-------- | :---------------------------------- |
|
||||
| **GFPGANv1.4** | Face restoration | High | High | Optimal for portraits |
|
||||
| **BSRGANx2** | 2× upscale + denoising | Medium | Very High | Suitable for lightly degraded media |
|
||||
| **BSRGANx4** | 4× upscale + denoising | Low | Very High | For heavily degraded content |
|
||||
| **RIFE** | Frame interpolation | High | High | Smooth motion, slow-motion support |
|
||||
| **RIFE-Lite** | Lightweight interpolation | Very High | Medium | Faster, lower resource usage |
|
||||
| **RealESRGANx4** | General 4× upscaling | Medium | High | Balanced performance |
|
||||
| **RealESRNetx4** | Subtle restoration | Medium | High | Preserves natural image texture |
|
||||
| **RealSRx4_Anime** | Anime / line-art enhancement | Medium | High | Sharp edges for 2D art |
|
||||
| **IRCNN_L** | Light denoising | High | Medium | Mild artifact removal |
|
||||
| **IRCNN_M** | Medium denoising | High | Medium | Stronger artifact cleanup |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Installation
|
||||
|
||||
1. **Download the Full Offline Installer** (see links above).
|
||||
2. Run the **setup wizard** and follow the prompts.
|
||||
3. Launch via Start Menu or Desktop shortcut.
|
||||
1. **Download the Full Offline Installer** (see links above).
|
||||
2. Run the **setup wizard** and follow the prompts.
|
||||
3. Launch via Start Menu or Desktop shortcut.
|
||||
|
||||
> Warlock-Studio is packaged using **PyInstaller** and deployed with **Inno Setup** for a seamless, self-contained installation experience.
|
||||
|
||||
@@ -147,29 +157,31 @@ Enhanced image using **BSRGANx2**:
|
||||
|
||||
## 🖥️ System Requirements
|
||||
|
||||
- **OS:** Windows 11 or higher (64-bit)
|
||||
- **RAM:** 8GB+ recommended
|
||||
- **GPU:** NVIDIA (for CUDA), AMD, or Intel GPU with up-to-date drivers recommended
|
||||
- **Storage:** Sufficient free space for input and processed media
|
||||
- **OS:** Windows 11 or higher (64-bit)
|
||||
- **RAM:** 8GB+ recommended
|
||||
- **GPU:** NVIDIA (for CUDA), AMD, or Intel GPU with up-to-date drivers recommended
|
||||
- **Storage:** Sufficient free space for input and processed media
|
||||
|
||||
---
|
||||
|
||||
## 📌 Development Status (v4.2)
|
||||
## 📌 Development Status (v4.2.1)
|
||||
|
||||
| Component | Status | Notes |
|
||||
| ---------------------------- | ----------- | -------------------------------------------------------- |
|
||||
| ONNX Runtime Engine | 🟢 Enhanced | Prioritizes CUDA > DirectML > CPU with automatic fallback. |
|
||||
| Installer & Packaging | 🟢 Overhauled | Full offline installer; heavily optimized package size. |
|
||||
| Upscaling Models | 🟢 Stable | Includes VRAM recovery integration. |
|
||||
| Face Restoration (GFPGAN) | 🟢 Stable | High-quality face reconstruction. |
|
||||
| Frame Interpolation (RIFE) | 🟢 Stable | Smooth motion and slow-motion support. |
|
||||
| Batch Processing | 🟢 Stable | Improved error handling and logging. |
|
||||
| User Interface (UI/UX) | 🟢 Refined | Clean, modern design with splash screen. |
|
||||
| Code Quality | 🟢 Improved | Refactored, modular, and more maintainable. |
|
||||
| Component | Status | Notes |
|
||||
| :-------------------------- | :------------ | :---------------------------------------------------------------- |
|
||||
| ONNX Runtime Engine | 🟢 Enhanced | Prioritizes CUDA > DirectML > CPU with automatic fallback. |
|
||||
| Installer & Packaging | 🟢 Overhauled | Full offline installer; heavily optimized package size. |
|
||||
| **Video Audio Passthrough** | **✅ Fixed** | **Resolved critical failure to include audio in encoded videos.** |
|
||||
| **UI State Persistence** | **✅ Fixed** | **Settings no longer conflict when switching AI models.** |
|
||||
| Upscaling Models | 🟢 Stable | Includes VRAM recovery integration. |
|
||||
| Face Restoration (GFPGAN) | 🟢 Stable | High-quality face reconstruction. |
|
||||
| Frame Interpolation (RIFE) | 🟢 Stable | Smooth motion and slow-motion support. |
|
||||
| User Interface (UI/UX) | 🟢 Redesigned | **New high-contrast "Inferno" theme.** |
|
||||
| Code Quality | 🟢 Improved | Refactored, modular, and more maintainable. |
|
||||
|
||||
---
|
||||
|
||||
## 📂 Project Structure
|
||||
|
||||
</div>
|
||||
|
||||
```
|
||||
@@ -193,6 +205,8 @@ Warlock-Studio/
|
||||
│ ├── clear_icon.png
|
||||
│ ├── exiftool.exe
|
||||
│ ├── ffmpeg.exe
|
||||
│ ├── ffmprobe.exe
|
||||
│ ├── ffmplay.exe
|
||||
│ ├── info_icon.png
|
||||
│ ├── logo.ico
|
||||
│ ├── logo.png
|
||||
@@ -218,27 +232,28 @@ Warlock-Studio/
|
||||
├── CONTRIBUTING.md # Contribution guide
|
||||
└── SECURITY.md # Security reporting policies
|
||||
```
|
||||
|
||||
<div align="center">
|
||||
|
||||
---
|
||||
|
||||
## 📊 Integrated Technologies & Licenses
|
||||
|
||||
| Technology | License | Author / Maintainer | Source |
|
||||
| --------------- | ------------------- | ---------------------------------------- | ------------------------------------------------------------ |
|
||||
| QualityScaler | MIT | [Djdefrag](https://github.com/Djdefrag) | [GitHub](https://github.com/Djdefrag/QualityScaler) |
|
||||
| FluidFrames | MIT | [Djdefrag](https://github.com/Djdefrag) | [GitHub](https://github.com/Djdefrag/FluidFrames) |
|
||||
| Real-ESRGAN | BSD 3-Clause / Apache | Xintao Wang | [GitHub](https://github.com/xinntao/Real-ESRGAN) |
|
||||
| GFPGAN | Apache 2.0 | TencentARC / Xintao Wang | [GitHub](https://github.com/TencentARC/GFPGAN) |
|
||||
| RIFE | Apache 2.0 | hzwer | [GitHub](https://github.com/megvii-research/ECCV2022-RIFE) |
|
||||
| BSRGAN | Apache 2.0 | Kai Zhang | [GitHub](https://github.com/cszn/BSRGAN) |
|
||||
| IRCNN | BSD / Mixed | Kai Zhang | [GitHub](https://github.com/cszn/IRCNN) |
|
||||
| ONNX Runtime | MIT | Microsoft | [GitHub](https://github.com/microsoft/onnxruntime) |
|
||||
| FFmpeg | LGPL / GPL | FFmpeg Team | [Official Site](https://ffmpeg.org) |
|
||||
| ExifTool | Artistic License | Phil Harvey | [Official Site](https://exiftool.org/) |
|
||||
| Python | PSF License | Python Software Foundation | [Official Site](https://www.python.org) |
|
||||
| PyInstaller | GPLv2+ | PyInstaller Team | [GitHub](https://github.com/pyinstaller/pyinstaller) |
|
||||
| Inno Setup | Custom | Jordan Russell | [Official Site](http://www.jrsoftware.org/isinfo.php) |
|
||||
| Technology | License | Author / Maintainer | Source |
|
||||
| ------------- | --------------------- | --------------------------------------- | ---------------------------------------------------------- |
|
||||
| QualityScaler | MIT | [Djdefrag](https://github.com/Djdefrag) | [GitHub](https://github.com/Djdefrag/QualityScaler) |
|
||||
| FluidFrames | MIT | [Djdefrag](https://github.com/Djdefrag) | [GitHub](https://github.com/Djdefrag/FluidFrames) |
|
||||
| Real-ESRGAN | BSD 3-Clause / Apache | Xintao Wang | [GitHub](https://github.com/xinntao/Real-ESRGAN) |
|
||||
| GFPGAN | Apache 2.0 | TencentARC / Xintao Wang | [GitHub](https://github.com/TencentARC/GFPGAN) |
|
||||
| RIFE | Apache 2.0 | hzwer | [GitHub](https://github.com/megvii-research/ECCV2022-RIFE) |
|
||||
| BSRGAN | Apache 2.0 | Kai Zhang | [GitHub](https://github.com/cszn/BSRGAN) |
|
||||
| IRCNN | BSD / Mixed | Kai Zhang | [GitHub](https://github.com/cszn/IRCNN) |
|
||||
| ONNX Runtime | MIT | Microsoft | [GitHub](https://github.com/microsoft/onnxruntime) |
|
||||
| FFmpeg | LGPL / GPL | FFmpeg Team | [Official Site](https://ffmpeg.org) |
|
||||
| ExifTool | Artistic License | Phil Harvey | [Official Site](https://exiftool.org/) |
|
||||
| Python | PSF License | Python Software Foundation | [Official Site](https://www.python.org) |
|
||||
| PyInstaller | GPLv2+ | PyInstaller Team | [GitHub](https://github.com/pyinstaller/pyinstaller) |
|
||||
| Inno Setup | Custom | Jordan Russell | [Official Site](http://www.jrsoftware.org/isinfo.php) |
|
||||
|
||||
---
|
||||
|
||||
@@ -246,9 +261,11 @@ Warlock-Studio/
|
||||
|
||||
We welcome contributions from the community:
|
||||
|
||||
1. **Fork** the repository.
|
||||
2. **Create a branch** for your feature or bug fix.
|
||||
3. **Submit a Pull Request** with a detailed description and testing notes.
|
||||
**Fork** the repository.
|
||||
|
||||
**Create a branch** for your feature or bug fix.
|
||||
|
||||
**Submit a Pull Request** with a detailed description and testing notes.
|
||||
|
||||
📧 Contact: **[negroayub97@gmail.com](mailto:negroayub97@gmail.com)**
|
||||
|
||||
@@ -260,27 +277,3 @@ We welcome contributions from the community:
|
||||
Licensed under **MIT**. Additional terms and attributions are provided in `NOTICE.md`.
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ We aim to support the most recent stable release of Warlock-Studio. Security upd
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | --------- |
|
||||
| 4.2.1 | ✅ |
|
||||
| 4.2.x | ✅ |
|
||||
| 4.1.x | ✅ |
|
||||
| 4.0.1 | ✅ |
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
; ===================================================================
|
||||
; Warlock-Studio 4.2 - Inno Setup Script (Full Offline Installer)
|
||||
; Warlock-Studio 4.2.1 - Inno Setup Script (Full Offline Installer)
|
||||
; ===================================================================
|
||||
|
||||
#define AppName "Warlock-Studio"
|
||||
#define AppVersion "4.2"
|
||||
#define AppVersion "4.2.1"
|
||||
#define AppPublisher "Iván Eduardo Chavez Ayub"
|
||||
#define AppURL "https://github.com/Ivan-Ayub97/Warlock-Studio"
|
||||
#define AppExeName "Warlock-Studio.exe"
|
||||
|
||||
@@ -90,22 +90,6 @@ from PIL import Image
|
||||
from PIL.Image import fromarray as pillow_image_fromarray
|
||||
from PIL.Image import open as pillow_image_open
|
||||
|
||||
|
||||
def show_providers_in_gui():
|
||||
"""Obtiene y muestra los providers disponibles en una ventana de la GUI."""
|
||||
try:
|
||||
from onnxruntime import get_available_providers
|
||||
providers = get_available_providers()
|
||||
|
||||
# En lugar de crear una ventana, imprimimos en la consola
|
||||
print("Available ONNX Runtime Providers:")
|
||||
for p in providers:
|
||||
print(f"- {p}")
|
||||
|
||||
except ImportError as e:
|
||||
print(f"Error: The onnxruntime library is not installed.{e}")
|
||||
|
||||
|
||||
# Define supported file extensions
|
||||
supported_image_extensions = [".jpg", ".jpeg",
|
||||
".png", ".bmp", ".tiff", ".tif", ".webp"]
|
||||
@@ -126,22 +110,20 @@ def find_by_relative_path(relative_path: str) -> str:
|
||||
|
||||
|
||||
app_name = "Warlock-Studio"
|
||||
version = "4.2"
|
||||
version = "4.2.1"
|
||||
|
||||
|
||||
# Esquema de colores mejorado - Rojo, Gris, Amarillo, Negro, Blanco
|
||||
background_color = "#1A1A1A" # Negro profundo
|
||||
app_name_color = "#DFDFDF" # Rojo brillante para el nombre de la app
|
||||
widget_background_color = "#2D2D2D" # Gris oscuro para widgets
|
||||
text_color = "#FFFFFF" # Blanco puro para texto principal
|
||||
secondary_text_color = "#E0E0E0" # Gris claro para texto secundario
|
||||
accent_color = "#FFD700" # Amarillo dorado para acentos
|
||||
button_hover_color = "#FF6666" # Rojo claro para hover
|
||||
border_color = "#404040" # Gris medio para bordes
|
||||
info_button_color = "#B22222" # Rojo oscuro para botones de info
|
||||
warning_color = "#FF8C00" # Naranja para advertencias
|
||||
success_color = "#32CD32" # Verde para éxito
|
||||
error_color = "#DC143C" # Rojo carmesí para errores
|
||||
background_color = "#480B0B"
|
||||
app_name_color = "#FFFFFF"
|
||||
widget_background_color = "#252525"
|
||||
text_color = "#FFE32C"
|
||||
secondary_text_color = "#D0D0D0"
|
||||
accent_color = "#FFFFFF"
|
||||
button_hover_color = "#FF6666"
|
||||
border_color = "#404040"
|
||||
info_button_color = "#A80000"
|
||||
warning_color = "#E02CDA"
|
||||
success_color = "#32CD32"
|
||||
error_color = "#070087"
|
||||
|
||||
VRAM_model_usage = {
|
||||
'RealESR_Gx4': 2.2,
|
||||
@@ -155,7 +137,7 @@ VRAM_model_usage = {
|
||||
'GFPGAN': 1.8,
|
||||
}
|
||||
|
||||
MENU_LIST_SEPARATOR = ["----"]
|
||||
MENU_LIST_SEPARATOR = ["<------------------>"]
|
||||
SRVGGNetCompact_models_list = ["RealESR_Gx4", "RealESR_Animex4"]
|
||||
BSRGAN_models_list = ["BSRGANx4", "BSRGANx2", "RealESRGANx4", "RealESRNetx4"]
|
||||
IRCNN_models_list = ["IRCNN_Mx1", "IRCNN_Lx1"]
|
||||
@@ -965,54 +947,6 @@ class AI_face_restoration:
|
||||
AI_model_name, self.model_configs["GFPGAN"])
|
||||
self.inferenceSession = None
|
||||
|
||||
def create_onnx_session(model_path: str, selected_gpu: str) -> InferenceSession:
|
||||
"""
|
||||
Crea una sesión de inferencia de ONNX seleccionando el mejor proveedor disponible.
|
||||
Prioridad: CUDA -> DmlExecutionProvider -> CPU.
|
||||
"""
|
||||
if not os_path_exists(model_path):
|
||||
raise FileNotFoundError(f"AI model file not found: {model_path}")
|
||||
|
||||
# Mapea la selección de la GUI al device_id numérico
|
||||
device_id_map = {'GPU 1': "0", 'GPU 2': "1",
|
||||
'GPU 3': "2", 'GPU 4': "3"}
|
||||
# Default a 0 si es 'Auto' o no se encuentra
|
||||
device_id = device_id_map.get(selected_gpu, "0")
|
||||
|
||||
# Lista de proveedores en orden de prioridad
|
||||
providers_priority = [
|
||||
('CUDAExecutionProvider', [{'device_id': device_id}]),
|
||||
('DmlExecutionProvider', [
|
||||
{'device_id': device_id, "performance_preference": "high_performance"}]),
|
||||
('CPUExecutionProvider', None)
|
||||
]
|
||||
|
||||
available_providers = onnxruntime.get_available_providers()
|
||||
|
||||
session = None
|
||||
for provider, options in providers_priority:
|
||||
if provider in available_providers:
|
||||
try:
|
||||
session = InferenceSession(
|
||||
path_or_bytes=model_path,
|
||||
providers=[(provider, options[0])] if options else [
|
||||
provider], # Asegura el formato correcto
|
||||
)
|
||||
print(
|
||||
f"[AI] Successfully loaded model '{os_path_basename(model_path)}' using '{provider}'")
|
||||
return session
|
||||
except Exception as e:
|
||||
print(
|
||||
f"[AI WARNING] Failed to load model with {provider}: {e}")
|
||||
print(
|
||||
f"[AI WARNING] Falling back to the next available provider...")
|
||||
|
||||
if session is None:
|
||||
raise RuntimeError(
|
||||
f"Failed to load AI model '{os_path_basename(model_path)}' with any available provider.")
|
||||
|
||||
return session
|
||||
|
||||
def _get_model_path(self) -> str:
|
||||
"""
|
||||
Get the appropriate model path based on the model name
|
||||
@@ -1241,18 +1175,19 @@ class MessageBox(CTkToplevel):
|
||||
self._ctkwidgets_index = 0
|
||||
|
||||
self.title('')
|
||||
self.lift() # lift window on top
|
||||
self.attributes("-topmost", True) # stay on top
|
||||
|
||||
# --> ESTA LÍNEA DEBE SER ELIMINADA O COMENTADA
|
||||
# self.attributes("-topmost", True) # stay on top
|
||||
|
||||
self.protocol("WM_DELETE_WINDOW", self._on_closing)
|
||||
|
||||
# create widgets with slight delay, to avoid white flickering of background
|
||||
self.after(10, self._create_widgets)
|
||||
self.resizable(True, True)
|
||||
self.grab_set() # make other windows not clickable
|
||||
|
||||
# Set minimum and maximum window sizes for better scrolling
|
||||
self.minsize(700, 500)
|
||||
self.maxsize(1000, 800)
|
||||
self.minsize(650, 500)
|
||||
self.maxsize(900, 800)
|
||||
|
||||
# Set initial window size based on content
|
||||
self.geometry("750x600")
|
||||
@@ -1551,8 +1486,11 @@ class FileWidget(CTkScrollableFrame):
|
||||
new_height = int(source_icon.shape[0] * ratio)
|
||||
source_icon = opencv_resize(
|
||||
source_icon, (new_width, new_height), interpolation=INTER_AREA)
|
||||
ctk_icon = CTkImage(pillow_image_fromarray(
|
||||
source_icon, mode="RGB"), size=(new_width, new_height))
|
||||
|
||||
# Convertir a PIL y luego a CTkImage sin usar mode=
|
||||
pil_img = pillow_image_fromarray(source_icon)
|
||||
pil_img = pil_img.convert("RGB") # conversión explícita
|
||||
ctk_icon = CTkImage(pil_img, size=(new_width, new_height))
|
||||
|
||||
return ctk_icon
|
||||
|
||||
@@ -4461,6 +4399,9 @@ def open_output_path_action():
|
||||
|
||||
def select_AI_from_menu(selected_option: str) -> None:
|
||||
global selected_AI_model
|
||||
global selected_blending_factor # <-- AÑADIR
|
||||
global selected_frame_generation_option # <-- AÑADIR
|
||||
|
||||
selected_AI_model = selected_option
|
||||
update_file_widget(1, 2, 3)
|
||||
|
||||
@@ -4470,9 +4411,20 @@ def select_AI_from_menu(selected_option: str) -> None:
|
||||
# FluidFrames/RIFE: Show frame generation menu, otherwise show blending
|
||||
if selected_AI_model in RIFE_models_list:
|
||||
place_frame_generation_menu()
|
||||
# Face restoration models don't need blending (they work differently)
|
||||
elif selected_AI_model not in Face_restoration_models_list:
|
||||
place_AI_blending_menu()
|
||||
# Restablecer el factor de blending a OFF cuando RIFE es elegido
|
||||
selected_blending_factor = 0
|
||||
else:
|
||||
# Restablecer la generación de frames a OFF para cualquier modelo que no sea RIFE
|
||||
selected_frame_generation_option = "OFF"
|
||||
|
||||
# Face restoration models don't need blending (they work differently)
|
||||
if selected_AI_model not in Face_restoration_models_list:
|
||||
place_AI_blending_menu()
|
||||
# Los modelos de restauración facial (GFPGAN) tampoco usan blending
|
||||
elif selected_AI_model in Face_restoration_models_list:
|
||||
# Asegurarse de que el blending esté en OFF para GFPGAN
|
||||
selected_blending_factor = 0
|
||||
|
||||
# Always restore other key controls
|
||||
place_AI_multithreading_menu()
|
||||
place_input_output_resolution_textboxs()
|
||||
@@ -4577,9 +4529,10 @@ def place_loadFile_section():
|
||||
background = CTkFrame(
|
||||
master=window, fg_color=background_color, corner_radius=1)
|
||||
|
||||
# --> ESTE TEXTO HA SIDO ACTUALIZADO
|
||||
text_drop = (" SUPPORTED FILES \n\n "
|
||||
+ "IMAGES • jpg, png, tif, bmp, webp, heic \n "
|
||||
+ "VIDEOS • mp4, webm, mkv, flv, gif, avi, mov, mpg, qt, 3gp ")
|
||||
+ "IMAGES • jpg, jpeg, png, bmp, tiff, tif, webp \n "
|
||||
+ "VIDEOS • mp4, avi, mkv, mov, wmv, flv, webm ")
|
||||
|
||||
input_file_text = CTkLabel(
|
||||
master=window,
|
||||
@@ -5253,7 +5206,10 @@ class App():
|
||||
y_position = (screen_height - default_height) // 2
|
||||
window.geometry(
|
||||
f"{default_width}x{default_height}+{x_position}+{y_position}")
|
||||
window.resizable(True, True)
|
||||
|
||||
# --> AQUÍ ESTÁ EL CAMBIO
|
||||
window.resizable(False, False)
|
||||
|
||||
window.iconbitmap(find_by_relative_path(
|
||||
"Assets" + os_separator + "logo.ico"))
|
||||
|
||||
@@ -5281,8 +5237,9 @@ class App():
|
||||
place_message_label()
|
||||
place_upscale_button()
|
||||
|
||||
|
||||
# Splash Screen class for application startup
|
||||
|
||||
|
||||
class SplashScreen(CTkToplevel):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
@@ -5290,7 +5247,6 @@ class SplashScreen(CTkToplevel):
|
||||
# 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()
|
||||
@@ -5557,7 +5513,7 @@ if __name__ == "__main__":
|
||||
selected_input_resize_factor.trace_add('write', update_file_widget)
|
||||
selected_output_resize_factor.trace_add('write', update_file_widget)
|
||||
|
||||
font = "Segoe UI"
|
||||
font = "Consola"
|
||||
bold8 = CTkFont(family=font, size=8, weight="bold")
|
||||
bold9 = CTkFont(family=font, size=9, weight="bold")
|
||||
bold10 = CTkFont(family=font, size=10, weight="bold")
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
block_cipher = None
|
||||
|
||||
a = Analysis(
|
||||
['Warlock-Studio.py'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[
|
||||
('AI-onnx', 'AI-onnx'), # <-- Añade esta línea
|
||||
('Assets', 'Assets') # <-- Añade esta línea
|
||||
],
|
||||
hiddenimports=[
|
||||
'onnxruntime.capi._pybind_state',
|
||||
'onnxruntime.providers',
|
||||
'moviepy.editor'
|
||||
],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[
|
||||
# Frameworks de Machine Learning pesados
|
||||
'torch', 'torchaudio', 'torchvision', 'transformers', 'accelerate', 'diffusers',
|
||||
'lightning', 'pytorch-lightning',
|
||||
|
||||
# Librerías de Ciencia de Datos y Gráficos
|
||||
'matplotlib', 'pandas', 'scipy', 'scikit-learn', 'scikit-image',
|
||||
|
||||
# Otros Toolkits de GUI
|
||||
'PyQt5', 'PyQt5-Qt5', 'PyQt5_sip', 'dearpygui', 'QtAwesome', 'QtPy',
|
||||
|
||||
# Herramientas de desarrollo y testing
|
||||
'pytest', 'unittest', 'poetry', 'virtualenv',
|
||||
|
||||
# Compiladores y librerías de bajo nivel que no se usan
|
||||
'numba', 'llvmlite',
|
||||
|
||||
# Otros paquetes grandes no relacionados
|
||||
'pygame', 'PyMuPDF', 'requests', 'aiohttp', 'httpx', 'fonttools', 'GitPython', 'musicbrainzngs', 'mido', 'rtmidi', 'simpleaudio', 'vulkan', 'vgamepad'
|
||||
],
|
||||
win_no_prefer_redirects=False,
|
||||
win_private_assemblies=False,
|
||||
cipher=block_cipher,
|
||||
noarchive=False,
|
||||
)
|
||||
|
||||
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name='Warlock-Studio',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
console=True,
|
||||
icon='logo.ico',
|
||||
)
|
||||
|
||||
coll = COLLECT(
|
||||
exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
strip=False,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
name='Warlock-Studio',
|
||||
)
|
||||
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 80 KiB |