mirror of
https://github.com/upscayl/upscayl.git
synced 2025-02-25 14:44:36 +01:00
Removed js files
This commit is contained in:
parent
a93fe96b65
commit
6fd1a46b37
2
.gitignore
vendored
2
.gitignore
vendored
@ -44,3 +44,5 @@ build-dir/
|
|||||||
#vscode
|
#vscode
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
|
main/*.js
|
||||||
|
main/utils/*.js
|
@ -1,25 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
/*
|
|
||||||
appRootDir is the resources directory inside the unpacked electron app temp directory.
|
|
||||||
resources contains app.asar file, that contains the main and renderer files.
|
|
||||||
We're putting resources/{os}/bin from project inside resources/bin of electron. Same for the models directory as well.
|
|
||||||
*/
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.modelsPath = exports.execPath = void 0;
|
|
||||||
const path_1 = require("path");
|
|
||||||
const getPlatform_1 = __importDefault(require("./getPlatform"));
|
|
||||||
const electron_is_dev_1 = __importDefault(require("electron-is-dev"));
|
|
||||||
const electron_1 = require("electron");
|
|
||||||
const appRootDir = electron_1.app.getAppPath();
|
|
||||||
const binariesPath = electron_is_dev_1.default
|
|
||||||
? (0, path_1.join)(appRootDir, "resources", (0, getPlatform_1.default)(), "bin")
|
|
||||||
: (0, path_1.join)((0, path_1.dirname)(appRootDir), "bin");
|
|
||||||
const execPath = (execName) => (0, path_1.resolve)((0, path_1.join)(binariesPath, `./upscayl-${execName}`));
|
|
||||||
exports.execPath = execPath;
|
|
||||||
const modelsPath = electron_is_dev_1.default
|
|
||||||
? (0, path_1.resolve)((0, path_1.join)(appRootDir, "resources", "models"))
|
|
||||||
: (0, path_1.resolve)((0, path_1.join)((0, path_1.dirname)(appRootDir), "models"));
|
|
||||||
exports.modelsPath = modelsPath;
|
|
@ -1,25 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const commands = {
|
|
||||||
SELECT_FILE: "Select a File",
|
|
||||||
SELECT_FOLDER: "Select a Folder",
|
|
||||||
UPSCAYL: "Upscale the Image",
|
|
||||||
UPSCAYL_DONE: "Upscaling Done",
|
|
||||||
UPSCAYL_PROGRESS: "Send Progress from Main to Renderer",
|
|
||||||
DOUBLE_UPSCAYL: "Double Upscale the Image",
|
|
||||||
DOUBLE_UPSCAYL_DONE: "Double Upscaling Done",
|
|
||||||
DOUBLE_UPSCAYL_PROGRESS: "Send Double Upscayl Progress from Main to Renderer",
|
|
||||||
FOLDER_UPSCAYL: "Upscale a Folder",
|
|
||||||
FOLDER_UPSCAYL_DONE: "Folder upscaling successful",
|
|
||||||
FOLDER_UPSCAYL_PROGRESS: "Send Folder Upscaling Progress from Main to Renderer",
|
|
||||||
OPEN_FOLDER: "Open Folder",
|
|
||||||
UPSCAYL_VIDEO: "Upscale the Video",
|
|
||||||
UPSCAYL_VIDEO_DONE: "Video Upscaling Done",
|
|
||||||
UPSCAYL_VIDEO_PROGRESS: "Send Video Upscale Progress from Main to Renderer",
|
|
||||||
FFMPEG_VIDEO_DONE: "Ran FFMpeg successfully",
|
|
||||||
FFMPEG_VIDEO_PROGRESS: "Running FFMpeg for frame extraction",
|
|
||||||
SELECT_CUSTOM_MODEL_FOLDER: "Select a Custom Model Folder",
|
|
||||||
GET_MODELS_LIST: "Send models list from main to renderer",
|
|
||||||
CUSTOM_MODEL_FILES_LIST: "Send custom model files list to renderer",
|
|
||||||
};
|
|
||||||
exports.default = commands;
|
|
@ -1,19 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const os_1 = require("os");
|
|
||||||
const getPlatform = () => {
|
|
||||||
switch ((0, os_1.platform)()) {
|
|
||||||
case "aix":
|
|
||||||
case "freebsd":
|
|
||||||
case "linux":
|
|
||||||
case "openbsd":
|
|
||||||
case "android":
|
|
||||||
return "linux";
|
|
||||||
case "darwin":
|
|
||||||
case "sunos":
|
|
||||||
return "mac";
|
|
||||||
case "win32":
|
|
||||||
return "win";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
exports.default = getPlatform;
|
|
520
main/index.js
520
main/index.js
@ -1,520 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const getArguments_1 = require("./utils/getArguments");
|
|
||||||
// Native
|
|
||||||
const electron_updater_1 = require("electron-updater");
|
|
||||||
const getPlatform_1 = __importDefault(require("./getPlatform"));
|
|
||||||
const upscayl_ffmpeg_1 = __importDefault(require("upscayl-ffmpeg"));
|
|
||||||
const path_1 = require("path");
|
|
||||||
const electron_log_1 = __importDefault(require("electron-log"));
|
|
||||||
const url_1 = require("url");
|
|
||||||
const fs_1 = __importDefault(require("fs"));
|
|
||||||
const binaries_1 = require("./binaries");
|
|
||||||
// Packages
|
|
||||||
const electron_1 = require("electron");
|
|
||||||
const upscayl_1 = require("./upscayl");
|
|
||||||
const electron_next_1 = __importDefault(require("electron-next"));
|
|
||||||
const electron_is_dev_1 = __importDefault(require("electron-is-dev"));
|
|
||||||
const commands_1 = __importDefault(require("./commands"));
|
|
||||||
electron_log_1.default.initialize({ preload: true });
|
|
||||||
// Prepare the renderer once the app is ready
|
|
||||||
let mainWindow;
|
|
||||||
electron_1.app.on("ready", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
yield (0, electron_next_1.default)("./renderer");
|
|
||||||
electron_log_1.default.info("🚀 ICON PATH: ", (0, path_1.join)(__dirname, "build", "icon.png"));
|
|
||||||
electron_log_1.default.info("🚀 UPSCAYL EXEC PATH: ", (0, binaries_1.execPath)(""));
|
|
||||||
electron_log_1.default.info("🚀 MODELS PATH: ", binaries_1.modelsPath);
|
|
||||||
electron_log_1.default.info("🚀 FFMPEG PATH: ", upscayl_ffmpeg_1.default.path);
|
|
||||||
mainWindow = new electron_1.BrowserWindow({
|
|
||||||
icon: (0, path_1.join)(__dirname, "build", "icon.png"),
|
|
||||||
width: 1300,
|
|
||||||
height: 940,
|
|
||||||
minHeight: 500,
|
|
||||||
minWidth: 500,
|
|
||||||
show: false,
|
|
||||||
backgroundColor: "#171717",
|
|
||||||
webPreferences: {
|
|
||||||
nodeIntegration: true,
|
|
||||||
webSecurity: false,
|
|
||||||
preload: (0, path_1.join)(__dirname, "preload.js"),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const url = electron_is_dev_1.default
|
|
||||||
? "http://localhost:8000"
|
|
||||||
: (0, url_1.format)({
|
|
||||||
pathname: (0, path_1.join)(__dirname, "../renderer/out/index.html"),
|
|
||||||
protocol: "file:",
|
|
||||||
slashes: true,
|
|
||||||
});
|
|
||||||
mainWindow.setMenuBarVisibility(false);
|
|
||||||
mainWindow.loadURL(url);
|
|
||||||
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
|
|
||||||
electron_1.shell.openExternal(url);
|
|
||||||
return { action: "deny" };
|
|
||||||
});
|
|
||||||
mainWindow.once("ready-to-show", () => {
|
|
||||||
mainWindow.show();
|
|
||||||
mainWindow.webContents.setZoomFactor(1);
|
|
||||||
});
|
|
||||||
if (!electron_is_dev_1.default) {
|
|
||||||
electron_updater_1.autoUpdater.checkForUpdates();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
// Quit the app once all windows are closed
|
|
||||||
electron_1.app.on("window-all-closed", electron_1.app.quit);
|
|
||||||
electron_log_1.default.log(electron_1.app.getAppPath());
|
|
||||||
// Path variables for file and folder selection
|
|
||||||
let imagePath = undefined;
|
|
||||||
let folderPath = undefined;
|
|
||||||
let customModelsFolderPath = undefined;
|
|
||||||
// Default models
|
|
||||||
const defaultModels = [
|
|
||||||
"realesrgan-x4plus",
|
|
||||||
"remacri",
|
|
||||||
"ultramix_balanced",
|
|
||||||
"ultrasharp",
|
|
||||||
"realesrgan-x4plus-anime",
|
|
||||||
];
|
|
||||||
//------------------------Select File-----------------------------//
|
|
||||||
// ! DONT FORGET TO RESTART THE APP WHEN YOU CHANGE CODE HERE
|
|
||||||
electron_1.ipcMain.handle(commands_1.default.SELECT_FILE, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
const { canceled, filePaths } = yield electron_1.dialog.showOpenDialog({
|
|
||||||
properties: ["openFile", "multiSelections"],
|
|
||||||
title: "Select Image",
|
|
||||||
defaultPath: imagePath,
|
|
||||||
});
|
|
||||||
if (canceled) {
|
|
||||||
electron_log_1.default.log("File Operation Cancelled");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
electron_log_1.default.log("Selected File Path: ", filePaths[0]);
|
|
||||||
let isValid = false;
|
|
||||||
imagePath = filePaths[0];
|
|
||||||
// READ SELECTED FILES
|
|
||||||
filePaths.forEach((file) => {
|
|
||||||
// log.log("Files in Folder: ", file);
|
|
||||||
if (file.endsWith(".png") ||
|
|
||||||
file.endsWith(".jpg") ||
|
|
||||||
file.endsWith(".jpeg") ||
|
|
||||||
file.endsWith(".webp") ||
|
|
||||||
file.endsWith(".JPG") ||
|
|
||||||
file.endsWith(".PNG") ||
|
|
||||||
file.endsWith(".JPEG") ||
|
|
||||||
file.endsWith(".WEBP")) {
|
|
||||||
isValid = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!isValid) {
|
|
||||||
const options = {
|
|
||||||
type: "error",
|
|
||||||
title: "Invalid File",
|
|
||||||
message: "The selected file is not a valid image. Make sure you select a '.png', '.jpg', or '.webp' file.",
|
|
||||||
};
|
|
||||||
electron_1.dialog.showMessageBoxSync(mainWindow, options);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// CREATE input AND upscaled FOLDER
|
|
||||||
return filePaths[0];
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
//------------------------Select Folder-----------------------------//
|
|
||||||
electron_1.ipcMain.handle(commands_1.default.SELECT_FOLDER, (event, message) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
const { canceled, filePaths: folderPaths } = yield electron_1.dialog.showOpenDialog({
|
|
||||||
properties: ["openDirectory"],
|
|
||||||
defaultPath: folderPath,
|
|
||||||
});
|
|
||||||
if (canceled) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
electron_log_1.default.log("Selected Folder Path: ", folderPaths[0]);
|
|
||||||
folderPath = folderPaths[0];
|
|
||||||
return folderPaths[0];
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
//------------------------Get Model Names-----------------------------//
|
|
||||||
const getModels = (folderPath) => {
|
|
||||||
let models = [];
|
|
||||||
let isValid = false;
|
|
||||||
// READ CUSTOM MODELS FOLDER
|
|
||||||
fs_1.default.readdirSync(folderPath).forEach((file) => {
|
|
||||||
// log.log("Files in Folder: ", file);
|
|
||||||
if (file.endsWith(".param") ||
|
|
||||||
file.endsWith(".PARAM") ||
|
|
||||||
file.endsWith(".bin") ||
|
|
||||||
file.endsWith(".BIN")) {
|
|
||||||
isValid = true;
|
|
||||||
const modelName = file.substring(0, file.lastIndexOf(".")) || file;
|
|
||||||
if (!models.includes(modelName)) {
|
|
||||||
models.push(modelName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!isValid) {
|
|
||||||
const options = {
|
|
||||||
type: "error",
|
|
||||||
title: "Invalid Folder",
|
|
||||||
message: "The selected folder does not contain valid model files. Make sure you select the folder that ONLY contains '.param' and '.bin' files.",
|
|
||||||
buttons: ["OK"],
|
|
||||||
};
|
|
||||||
electron_1.dialog.showMessageBoxSync(options);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return models;
|
|
||||||
};
|
|
||||||
electron_1.ipcMain.on(commands_1.default.GET_MODELS_LIST, (event, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
if (payload) {
|
|
||||||
customModelsFolderPath = payload;
|
|
||||||
mainWindow.webContents.send(commands_1.default.CUSTOM_MODEL_FILES_LIST, getModels(payload));
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
//------------------------Select Custom Models Folder---------------------//
|
|
||||||
electron_1.ipcMain.handle(commands_1.default.SELECT_CUSTOM_MODEL_FOLDER, (event, message) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
const { canceled, filePaths: folderPaths } = yield electron_1.dialog.showOpenDialog({
|
|
||||||
properties: ["openDirectory"],
|
|
||||||
title: "Select Custom Models Folder",
|
|
||||||
defaultPath: customModelsFolderPath,
|
|
||||||
});
|
|
||||||
if (canceled) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
electron_log_1.default.log("Custom Folder Path: ", folderPaths[0]);
|
|
||||||
customModelsFolderPath = folderPaths[0];
|
|
||||||
if (!folderPaths[0].endsWith("models") ||
|
|
||||||
!folderPaths[0].endsWith("models/")) {
|
|
||||||
const options = {
|
|
||||||
type: "error",
|
|
||||||
title: "Invalid Folder",
|
|
||||||
message: "Please make sure that the folder name is 'models' and nothing else.",
|
|
||||||
buttons: ["OK"],
|
|
||||||
};
|
|
||||||
electron_1.dialog.showMessageBoxSync(options);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
mainWindow.webContents.send(commands_1.default.CUSTOM_MODEL_FILES_LIST, getModels(customModelsFolderPath));
|
|
||||||
return customModelsFolderPath;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
//------------------------Open Folder-----------------------------//
|
|
||||||
electron_1.ipcMain.on(commands_1.default.OPEN_FOLDER, (event, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
electron_log_1.default.log(payload);
|
|
||||||
electron_1.shell.openPath(payload);
|
|
||||||
}));
|
|
||||||
//------------------------Double Upscayl-----------------------------//
|
|
||||||
electron_1.ipcMain.on(commands_1.default.DOUBLE_UPSCAYL, (event, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
const model = payload.model;
|
|
||||||
let inputDir = (payload.imagePath.match(/(.*)[\/\\]/)[1] || "");
|
|
||||||
let outputDir = payload.outputPath;
|
|
||||||
const gpuId = payload.gpuId;
|
|
||||||
const saveImageAs = payload.saveImageAs;
|
|
||||||
const isDefaultModel = defaultModels.includes(model);
|
|
||||||
// COPY IMAGE TO TMP FOLDER
|
|
||||||
const platform = (0, getPlatform_1.default)();
|
|
||||||
const fullfileName = platform === "win"
|
|
||||||
? payload.imagePath.split("\\").slice(-1)[0]
|
|
||||||
: payload.imagePath.split("/").slice(-1)[0];
|
|
||||||
const fileName = (0, path_1.parse)(fullfileName).name;
|
|
||||||
const fileExt = (0, path_1.parse)(fullfileName).ext;
|
|
||||||
const outFile = outputDir + "/" + fileName + "_upscayl_16x_" + model + "." + saveImageAs;
|
|
||||||
// UPSCALE
|
|
||||||
let upscayl = (0, upscayl_1.spawnUpscayl)("realesrgan", (0, getArguments_1.getDoubleUpscaleArguments)(inputDir, fullfileName, outFile, isDefaultModel ? binaries_1.modelsPath : customModelsFolderPath !== null && customModelsFolderPath !== void 0 ? customModelsFolderPath : binaries_1.modelsPath, model, gpuId, saveImageAs));
|
|
||||||
let failed = false;
|
|
||||||
let isAlpha = false;
|
|
||||||
let failed2 = false;
|
|
||||||
const onData = (data) => {
|
|
||||||
// CONVERT DATA TO STRING
|
|
||||||
data = data.toString();
|
|
||||||
// PRINT TO CONSOLE
|
|
||||||
electron_log_1.default.log(data);
|
|
||||||
// SEND UPSCAYL PROGRESS TO RENDERER
|
|
||||||
mainWindow.webContents.send(commands_1.default.DOUBLE_UPSCAYL_PROGRESS, data);
|
|
||||||
// IF PROGRESS HAS ERROR, UPSCAYL FAILED
|
|
||||||
if (data.includes("invalid gpu") || data.includes("failed")) {
|
|
||||||
failed = true;
|
|
||||||
}
|
|
||||||
if (data.includes("has alpha channel")) {
|
|
||||||
isAlpha = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const onError = (data) => {
|
|
||||||
data.toString();
|
|
||||||
// SEND UPSCAYL PROGRESS TO RENDERER
|
|
||||||
mainWindow.webContents.send(commands_1.default.DOUBLE_UPSCAYL_PROGRESS, data);
|
|
||||||
// SET FAILED TO TRUE
|
|
||||||
failed = true;
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
const onData2 = (data) => {
|
|
||||||
// CONVERT DATA TO STRING
|
|
||||||
data = data.toString();
|
|
||||||
// PRINT TO CONSOLE
|
|
||||||
electron_log_1.default.log(data);
|
|
||||||
// SEND UPSCAYL PROGRESS TO RENDERER
|
|
||||||
mainWindow.webContents.send(commands_1.default.DOUBLE_UPSCAYL_PROGRESS, data);
|
|
||||||
// IF PROGRESS HAS ERROR, UPSCAYL FAILED
|
|
||||||
if (data.includes("invalid gpu") || data.includes("failed")) {
|
|
||||||
failed2 = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const onError2 = (data) => {
|
|
||||||
data.toString();
|
|
||||||
// SEND UPSCAYL PROGRESS TO RENDERER
|
|
||||||
mainWindow.webContents.send(commands_1.default.DOUBLE_UPSCAYL_PROGRESS, data);
|
|
||||||
// SET FAILED TO TRUE
|
|
||||||
failed2 = true;
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
const onClose2 = (code) => {
|
|
||||||
if (!failed2) {
|
|
||||||
electron_log_1.default.log("Done upscaling");
|
|
||||||
mainWindow.webContents.send(commands_1.default.DOUBLE_UPSCAYL_DONE, isAlpha ? outFile + ".png" : outFile);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
upscayl.process.stderr.on("data", onData);
|
|
||||||
upscayl.process.on("error", onError);
|
|
||||||
upscayl.process.on("close", (code) => {
|
|
||||||
// IF NOT FAILED
|
|
||||||
if (!failed) {
|
|
||||||
// UPSCALE
|
|
||||||
let upscayl2 = (0, upscayl_1.spawnUpscayl)("realesrgan", (0, getArguments_1.getDoubleUpscaleSecondPassArguments)(isAlpha, outFile, isDefaultModel ? binaries_1.modelsPath : customModelsFolderPath !== null && customModelsFolderPath !== void 0 ? customModelsFolderPath : binaries_1.modelsPath, model, gpuId, saveImageAs));
|
|
||||||
upscayl2.process.stderr.on("data", onData2);
|
|
||||||
upscayl2.process.on("error", onError2);
|
|
||||||
upscayl2.process.on("close", onClose2);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
//------------------------Image Upscayl-----------------------------//
|
|
||||||
electron_1.ipcMain.on(commands_1.default.UPSCAYL, (event, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
const model = payload.model;
|
|
||||||
const scale = payload.scaleFactor;
|
|
||||||
const gpuId = payload.gpuId;
|
|
||||||
const saveImageAs = payload.saveImageAs;
|
|
||||||
let inputDir = (payload.imagePath.match(/(.*)[\/\\]/)[1] || "");
|
|
||||||
let outputDir = payload.outputPath;
|
|
||||||
const isDefaultModel = defaultModels.includes(model);
|
|
||||||
// COPY IMAGE TO TMP FOLDER
|
|
||||||
const fullfileName = payload.imagePath.replace(/^.*[\\\/]/, "");
|
|
||||||
const fileName = (0, path_1.parse)(fullfileName).name;
|
|
||||||
electron_log_1.default.log("🚀 => fileName", fileName);
|
|
||||||
const fileExt = (0, path_1.parse)(fullfileName).ext;
|
|
||||||
electron_log_1.default.log("🚀 => fileExt", fileExt);
|
|
||||||
const outFile = outputDir +
|
|
||||||
"/" +
|
|
||||||
fileName +
|
|
||||||
"_upscayl_" +
|
|
||||||
scale +
|
|
||||||
"x_" +
|
|
||||||
model +
|
|
||||||
"." +
|
|
||||||
saveImageAs;
|
|
||||||
// UPSCALE
|
|
||||||
if (fs_1.default.existsSync(outFile)) {
|
|
||||||
// If already upscayled, just output that file
|
|
||||||
mainWindow.webContents.send(commands_1.default.UPSCAYL_DONE, outFile);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
const upscayl = (0, upscayl_1.spawnUpscayl)("realesrgan", (0, getArguments_1.getSingleImageArguments)(inputDir, fullfileName, outFile, isDefaultModel ? binaries_1.modelsPath : customModelsFolderPath !== null && customModelsFolderPath !== void 0 ? customModelsFolderPath : binaries_1.modelsPath, model, scale, gpuId, saveImageAs));
|
|
||||||
let isAlpha = false;
|
|
||||||
let failed = false;
|
|
||||||
const onData = (data) => {
|
|
||||||
electron_log_1.default.log("image upscayl: ", data.toString());
|
|
||||||
data = data.toString();
|
|
||||||
mainWindow.webContents.send(commands_1.default.UPSCAYL_PROGRESS, data.toString());
|
|
||||||
if (data.includes("invalid gpu") || data.includes("failed")) {
|
|
||||||
failed = true;
|
|
||||||
}
|
|
||||||
if (data.includes("has alpha channel")) {
|
|
||||||
electron_log_1.default.log("INCLUDES ALPHA CHANNEL, CHANGING OUTFILE NAME!");
|
|
||||||
isAlpha = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const onError = (data) => {
|
|
||||||
mainWindow.webContents.send(commands_1.default.UPSCAYL_PROGRESS, data.toString());
|
|
||||||
failed = true;
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
const onClose = () => {
|
|
||||||
if (failed !== true) {
|
|
||||||
electron_log_1.default.log("Done upscaling");
|
|
||||||
mainWindow.webContents.send(commands_1.default.UPSCAYL_DONE, isAlpha ? outFile + ".png" : outFile);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
upscayl.process.stderr.on("data", onData);
|
|
||||||
upscayl.process.on("error", onError);
|
|
||||||
upscayl.process.on("close", onClose);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
//------------------------Upscayl Folder-----------------------------//
|
|
||||||
electron_1.ipcMain.on(commands_1.default.FOLDER_UPSCAYL, (event, payload) => __awaiter(void 0, void 0, void 0, function* () {
|
|
||||||
// GET THE MODEL
|
|
||||||
const model = payload.model;
|
|
||||||
const gpuId = payload.gpuId;
|
|
||||||
const saveImageAs = payload.saveImageAs;
|
|
||||||
// GET THE IMAGE DIRECTORY
|
|
||||||
let inputDir = payload.batchFolderPath;
|
|
||||||
// GET THE OUTPUT DIRECTORY
|
|
||||||
let outputDir = payload.outputPath;
|
|
||||||
if (!fs_1.default.existsSync(outputDir)) {
|
|
||||||
fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
||||||
}
|
|
||||||
const isDefaultModel = defaultModels.includes(model);
|
|
||||||
// UPSCALE
|
|
||||||
const upscayl = (0, upscayl_1.spawnUpscayl)("realesrgan", (0, getArguments_1.getBatchArguments)(inputDir, outputDir, isDefaultModel ? binaries_1.modelsPath : customModelsFolderPath !== null && customModelsFolderPath !== void 0 ? customModelsFolderPath : binaries_1.modelsPath, model, gpuId, saveImageAs));
|
|
||||||
let failed = false;
|
|
||||||
const onData = (data) => {
|
|
||||||
electron_log_1.default.log("🚀 => upscayl.stderr.on => stderr.toString()", data.toString());
|
|
||||||
data = data.toString();
|
|
||||||
mainWindow.webContents.send(commands_1.default.FOLDER_UPSCAYL_PROGRESS, data.toString());
|
|
||||||
if (data.includes("invalid gpu") || data.includes("failed")) {
|
|
||||||
failed = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const onError = (data) => {
|
|
||||||
mainWindow.webContents.send(commands_1.default.FOLDER_UPSCAYL_PROGRESS, data.toString());
|
|
||||||
failed = true;
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
const onClose = () => {
|
|
||||||
if (failed !== true) {
|
|
||||||
electron_log_1.default.log("Done upscaling");
|
|
||||||
mainWindow.webContents.send(commands_1.default.FOLDER_UPSCAYL_DONE, outputDir);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
upscayl.process.stderr.on("data", onData);
|
|
||||||
upscayl.process.on("error", onError);
|
|
||||||
upscayl.process.on("close", onClose);
|
|
||||||
}));
|
|
||||||
//------------------------Auto-Update Code-----------------------------//
|
|
||||||
// ! AUTO UPDATE STUFF
|
|
||||||
electron_updater_1.autoUpdater.on("update-available", ({ releaseNotes, releaseName }) => {
|
|
||||||
const dialogOpts = {
|
|
||||||
type: "info",
|
|
||||||
buttons: ["Ok cool"],
|
|
||||||
title: "New Upscayl Update",
|
|
||||||
message: releaseName,
|
|
||||||
detail: "A new version is being downloaded. Please check GitHub for more details.",
|
|
||||||
};
|
|
||||||
electron_1.dialog.showMessageBox(dialogOpts).then((returnValue) => { });
|
|
||||||
});
|
|
||||||
electron_updater_1.autoUpdater.on("update-downloaded", (event) => {
|
|
||||||
const dialogOpts = {
|
|
||||||
type: "info",
|
|
||||||
buttons: ["Restart", "Later"],
|
|
||||||
title: "New Upscayl Update",
|
|
||||||
message: event.releaseName,
|
|
||||||
detail: "A new version has been downloaded. Restart the application to apply the updates.",
|
|
||||||
};
|
|
||||||
electron_1.dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
||||||
if (returnValue.response === 0)
|
|
||||||
electron_updater_1.autoUpdater.quitAndInstall();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//------------------------Video Upscayl-----------------------------//
|
|
||||||
// ipcMain.on(commands.UPSCAYL_VIDEO, async (event, payload) => {
|
|
||||||
// // Extract the model
|
|
||||||
// const model = payload.model;
|
|
||||||
// // Extract the Video Directory
|
|
||||||
// let videoFileName = payload.videoPath.replace(/^.*[\\\/]/, "");
|
|
||||||
// const justFileName = parse(videoFileName).name;
|
|
||||||
// let inputDir = payload.videoPath.match(/(.*)[\/\\]/)[1] || "";
|
|
||||||
// log.log("🚀 => file: index.ts => line 337 => inputDir", inputDir);
|
|
||||||
// // Set the output directory
|
|
||||||
// let outputDir = payload.outputPath + "_frames";
|
|
||||||
// log.log("🚀 => file: index.ts => line 340 => outputDir", outputDir);
|
|
||||||
// let frameExtractionPath = join(inputDir, justFileName + "_f");
|
|
||||||
// let frameUpscalePath = join(inputDir, justFileName + "_u");
|
|
||||||
// log.log(
|
|
||||||
// "🚀 => file: index.ts => line 342 => frameExtractionPath",
|
|
||||||
// frameExtractionPath,
|
|
||||||
// frameUpscalePath
|
|
||||||
// );
|
|
||||||
// if (!fs.existsSync(frameExtractionPath)) {
|
|
||||||
// fs.mkdirSync(frameExtractionPath, { recursive: true });
|
|
||||||
// }
|
|
||||||
// if (!fs.existsSync(frameUpscalePath)) {
|
|
||||||
// fs.mkdirSync(frameUpscalePath, { recursive: true });
|
|
||||||
// }
|
|
||||||
// let ffmpegProcess: ChildProcessWithoutNullStreams | null = null;
|
|
||||||
// ffmpegProcess = spawn(
|
|
||||||
// ffmpeg.path,
|
|
||||||
// [
|
|
||||||
// "-i",
|
|
||||||
// inputDir + "/" + videoFileName,
|
|
||||||
// frameExtractionPath + "/" + "out%d.png",
|
|
||||||
// ],
|
|
||||||
// {
|
|
||||||
// cwd: undefined,
|
|
||||||
// detached: false,
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
// let failed = false;
|
|
||||||
// ffmpegProcess?.stderr.on("data", (data: string) => {
|
|
||||||
// log.log("🚀 => file: index.ts:420 => data", data.toString());
|
|
||||||
// data = data.toString();
|
|
||||||
// mainWindow.webContents.send(
|
|
||||||
// commands.FFMPEG_VIDEO_PROGRESS,
|
|
||||||
// data.toString()
|
|
||||||
// );
|
|
||||||
// });
|
|
||||||
// ffmpegProcess?.on("error", (data: string) => {
|
|
||||||
// mainWindow.webContents.send(
|
|
||||||
// commands.FFMPEG_VIDEO_PROGRESS,
|
|
||||||
// data.toString()
|
|
||||||
// );
|
|
||||||
// failed = true;
|
|
||||||
// return;
|
|
||||||
// });
|
|
||||||
// // Send done comamnd when
|
|
||||||
// ffmpegProcess?.on("close", (code: number) => {
|
|
||||||
// if (failed !== true) {
|
|
||||||
// log.log("Frame extraction successful!");
|
|
||||||
// mainWindow.webContents.send(commands.FFMPEG_VIDEO_DONE, outputDir);
|
|
||||||
// // UPSCALE
|
|
||||||
// let upscayl: ChildProcessWithoutNullStreams | null = null;
|
|
||||||
// upscayl = spawn(
|
|
||||||
// execPath("realesrgan"),
|
|
||||||
// [
|
|
||||||
// "-i",
|
|
||||||
// frameExtractionPath,
|
|
||||||
// "-o",
|
|
||||||
// frameUpscalePath,
|
|
||||||
// "-s",
|
|
||||||
// 4,
|
|
||||||
// "-m",
|
|
||||||
// modelsPath,
|
|
||||||
// "-n",
|
|
||||||
// model,
|
|
||||||
// ],
|
|
||||||
// {
|
|
||||||
// cwd: undefined,
|
|
||||||
// detached: false,
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
// upscayl?.stderr.on("data", (data) => {
|
|
||||||
// log.log(
|
|
||||||
// "🚀 => upscayl.stderr.on => stderr.toString()",
|
|
||||||
// data.toString()
|
|
||||||
// );
|
|
||||||
// data = data.toString();
|
|
||||||
// mainWindow.webContents.send(
|
|
||||||
// commands.FFMPEG_VIDEO_PROGRESS,
|
|
||||||
// data.toString()
|
|
||||||
// );
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// });
|
|
@ -1,11 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const electron_1 = require("electron");
|
|
||||||
// 'ipcRenderer' will be available in index.js with the method 'window.electron'
|
|
||||||
electron_1.contextBridge.exposeInMainWorld("electron", {
|
|
||||||
send: (command, payload) => electron_1.ipcRenderer.send(command, payload),
|
|
||||||
on: (command, func) => electron_1.ipcRenderer.on(command, (event, args) => {
|
|
||||||
func(event, args);
|
|
||||||
}),
|
|
||||||
invoke: (command, payload) => electron_1.ipcRenderer.invoke(command, payload),
|
|
||||||
});
|
|
@ -1,13 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const child_process_1 = require("child_process");
|
|
||||||
const binaries_1 = require("./binaries");
|
|
||||||
function upscaylImage(inputFile, outFile, modelsPath, model) {
|
|
||||||
// UPSCALE
|
|
||||||
let upscayl = (0, child_process_1.spawn)((0, binaries_1.execPath)("realesrgan"), ["-i", inputFile, "-o", outFile, "-s", "4", "-m", modelsPath, "-n", model], {
|
|
||||||
cwd: undefined,
|
|
||||||
detached: false,
|
|
||||||
});
|
|
||||||
return upscayl;
|
|
||||||
}
|
|
||||||
module.exports = { upscaylImage };
|
|
@ -1,109 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.getBatchSharpenArguments = exports.getBatchArguments = exports.getDoubleUpscaleSecondPassArguments = exports.getDoubleUpscaleArguments = exports.getSingleImageSharpenArguments = exports.getSingleImageArguments = void 0;
|
|
||||||
const getSingleImageArguments = (inputDir, fullfileName, outFile, modelsPath, model, scale, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
inputDir + "/" + fullfileName,
|
|
||||||
"-o",
|
|
||||||
outFile,
|
|
||||||
"-s",
|
|
||||||
scale == "2" ? "4" : scale,
|
|
||||||
"-m",
|
|
||||||
modelsPath,
|
|
||||||
"-n",
|
|
||||||
model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getSingleImageArguments = getSingleImageArguments;
|
|
||||||
const getSingleImageSharpenArguments = (inputDir, fullfileName, outFile, modelsPath, model, scale, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
inputDir + "/" + fullfileName,
|
|
||||||
"-o",
|
|
||||||
outFile,
|
|
||||||
"-s",
|
|
||||||
scale,
|
|
||||||
"-x",
|
|
||||||
"-m",
|
|
||||||
modelsPath + "/" + model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getSingleImageSharpenArguments = getSingleImageSharpenArguments;
|
|
||||||
const getDoubleUpscaleArguments = (inputDir, fullfileName, outFile, modelsPath, model, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
inputDir + "/" + fullfileName,
|
|
||||||
"-o",
|
|
||||||
outFile,
|
|
||||||
"-s",
|
|
||||||
"4",
|
|
||||||
"-m",
|
|
||||||
modelsPath,
|
|
||||||
"-n",
|
|
||||||
model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getDoubleUpscaleArguments = getDoubleUpscaleArguments;
|
|
||||||
const getDoubleUpscaleSecondPassArguments = (isAlpha, outFile, modelsPath, model, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
isAlpha ? outFile + ".png" : outFile,
|
|
||||||
"-o",
|
|
||||||
isAlpha ? outFile + ".png" : outFile,
|
|
||||||
"-s",
|
|
||||||
"4",
|
|
||||||
"-m",
|
|
||||||
modelsPath,
|
|
||||||
"-n",
|
|
||||||
model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
isAlpha ? "" : saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getDoubleUpscaleSecondPassArguments = getDoubleUpscaleSecondPassArguments;
|
|
||||||
const getBatchArguments = (inputDir, outputDir, modelsPath, model, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
inputDir,
|
|
||||||
"-o",
|
|
||||||
outputDir,
|
|
||||||
"-s",
|
|
||||||
"4",
|
|
||||||
"-m",
|
|
||||||
modelsPath,
|
|
||||||
"-n",
|
|
||||||
model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getBatchArguments = getBatchArguments;
|
|
||||||
const getBatchSharpenArguments = (inputDir, outputDir, modelsPath, model, gpuId, saveImageAs) => {
|
|
||||||
return [
|
|
||||||
"-i",
|
|
||||||
inputDir,
|
|
||||||
"-o",
|
|
||||||
outputDir,
|
|
||||||
"-s",
|
|
||||||
"4",
|
|
||||||
"-x",
|
|
||||||
"-m",
|
|
||||||
modelsPath + "/" + model,
|
|
||||||
gpuId ? `-g ${gpuId}` : "",
|
|
||||||
"-f",
|
|
||||||
saveImageAs,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
exports.getBatchSharpenArguments = getBatchSharpenArguments;
|
|
Loading…
x
Reference in New Issue
Block a user