diff --git a/electron/index.ts b/electron/index.ts index b2cd6b3..ad6b78a 100644 --- a/electron/index.ts +++ b/electron/index.ts @@ -178,7 +178,7 @@ ipcMain.handle(commands.SELECT_FILE, async () => { }); if (canceled) { - logit("โ File Operation Cancelled"); + logit("๐ซ File Operation Cancelled"); return null; } else { imagePath = filePaths[0]; @@ -213,7 +213,7 @@ ipcMain.handle(commands.SELECT_FILE, async () => { return null; } - logit("๐ข Selected File Path: ", filePaths[0]); + logit("๐ Selected File Path: ", filePaths[0]); // CREATE input AND upscaled FOLDER return filePaths[0]; } @@ -227,11 +227,11 @@ ipcMain.handle(commands.SELECT_FOLDER, async (event, message) => { }); if (canceled) { - logit("โ Select Folder Operation Cancelled"); + logit("๐ซ Select Folder Operation Cancelled"); return null; } else { folderPath = folderPaths[0]; - logit("๐ข Selected Folder Path: ", folderPath); + logit("๐ Selected Folder Path: ", folderPath); return folderPaths[0]; } }); @@ -271,7 +271,7 @@ const getModels = (folderPath: string) => { return null; } - logit("๐ข Detected Custom Models: ", models); + logit("๐ Detected Custom Models: ", models); return models; }; @@ -279,7 +279,7 @@ ipcMain.on(commands.GET_MODELS_LIST, async (event, payload) => { if (payload) { customModelsFolderPath = payload; - logit("๐ข Custom Models Folder Path: ", customModelsFolderPath); + logit("๐ Custom Models Folder Path: ", customModelsFolderPath); mainWindow.webContents.send( commands.CUSTOM_MODEL_FILES_LIST, @@ -296,7 +296,7 @@ ipcMain.handle(commands.SELECT_CUSTOM_MODEL_FOLDER, async (event, message) => { defaultPath: customModelsFolderPath, }); if (canceled) { - logit("โ Select Custom Models Folder Operation Cancelled"); + logit("๐ซ Select Custom Models Folder Operation Cancelled"); return null; } else { customModelsFolderPath = folderPaths[0]; @@ -322,14 +322,14 @@ ipcMain.handle(commands.SELECT_CUSTOM_MODEL_FOLDER, async (event, message) => { getModels(customModelsFolderPath) ); - logit("Custom Folder Path: ", customModelsFolderPath); + logit("๐ Custom Folder Path: ", customModelsFolderPath); return customModelsFolderPath; } }); //------------------------Open Folder-----------------------------// ipcMain.on(commands.OPEN_FOLDER, async (event, payload) => { - logit("๐ข Opening Folder: ", payload); + logit("๐ Opening Folder: ", payload); shell.openPath(payload); }); @@ -338,7 +338,7 @@ ipcMain.on(commands.STOP, async (event, payload) => { stopped = true; childProcesses.forEach((child) => { - logit("๐ข Stopping Upscaling Process", child.process.pid); + logit("๐ Stopping Upscaling Process", child.process.pid); child.kill(); }); }); @@ -433,7 +433,7 @@ ipcMain.on(commands.DOUBLE_UPSCAYL, async (event, payload) => { const onClose2 = (code) => { if (!failed2 && !stopped) { - logit("Done upscaling"); + logit("๐ฏ Done upscaling"); mainWindow.webContents.send( commands.DOUBLE_UPSCAYL_DONE, isAlpha ? outFile + ".png" : outFile @@ -504,7 +504,7 @@ ipcMain.on(commands.UPSCAYL, async (event, payload) => { // UPSCALE if (fs.existsSync(outFile)) { // If already upscayled, just output that file - logit("๐ข Already upscayled at: ", outFile); + logit("โ Already upscayled at: ", outFile); mainWindow.webContents.send(commands.UPSCAYL_DONE, outFile); } else { const upscayl = spawnUpscayl( @@ -549,7 +549,7 @@ ipcMain.on(commands.UPSCAYL, async (event, payload) => { }; const onClose = () => { if (!failed && !stopped) { - logit("Done upscaling"); + logit("๐ฏ Done upscaling"); mainWindow.setProgressBar(-1); mainWindow.webContents.send( commands.UPSCAYL_DONE, @@ -628,7 +628,7 @@ ipcMain.on(commands.FOLDER_UPSCAYL, async (event, payload) => { }; const onClose = () => { if (!failed && !stopped) { - logit("Done upscaling"); + logit("๐ฏ Done upscaling"); mainWindow.webContents.send(commands.FOLDER_UPSCAYL_DONE, outputDir); } }; @@ -649,7 +649,7 @@ autoUpdater.on("update-available", ({ releaseNotes, releaseName }) => { detail: "A new version is being downloaded. Please check GitHub for more details.", }; - logit("๐ข Update Available", releaseName, releaseNotes); + logit("๐ฒ Update Available", releaseName, releaseNotes); dialog.showMessageBox(dialogOpts).then((returnValue) => {}); }); @@ -662,7 +662,7 @@ autoUpdater.on("update-downloaded", (event) => { detail: "A new version has been downloaded. Restart the application to apply the updates.", }; - logit("๐ข Update Downloaded"); + logit("โ Update Downloaded"); dialog.showMessageBox(dialogOpts).then((returnValue) => { if (returnValue.response === 0) autoUpdater.quitAndInstall(); }); diff --git a/renderer/atoms/modelsListAtom.ts b/renderer/atoms/modelsListAtom.ts index 2beaa1d..36402b7 100644 --- a/renderer/atoms/modelsListAtom.ts +++ b/renderer/atoms/modelsListAtom.ts @@ -7,6 +7,10 @@ export type TModelsList = { export const defaultModelsList = [ { label: "General Photo (Real-ESRGAN)", value: "realesrgan-x4plus" }, + { + label: "General Photo (Fast Real-ESRGAN)", + value: "RealESRGAN_General_x4_v3", + }, { label: "General Photo (Remacri)", value: "remacri" }, { label: "General Photo (Ultramix Balanced)", value: "ultramix_balanced" }, { label: "General Photo (Ultrasharp)", value: "ultrasharp" }, diff --git a/renderer/components/LeftPaneImageSteps.tsx b/renderer/components/LeftPaneImageSteps.tsx index 9a70472..c8776b6 100644 --- a/renderer/components/LeftPaneImageSteps.tsx +++ b/renderer/components/LeftPaneImageSteps.tsx @@ -62,12 +62,12 @@ function LeftPaneImageSteps({ themeChange(false); if (!localStorage.getItem("saveImageAs")) { - logit("๐ข Setting saveImageAs to png"); + logit("โ๏ธ Setting saveImageAs to png"); localStorage.setItem("saveImageAs", "png"); } else { const currentlySavedImageFormat = localStorage.getItem("saveImageAs"); logit( - "๐ข Getting saveImageAs from localStorage", + "โ๏ธ Getting saveImageAs from localStorage", currentlySavedImageFormat ); setSaveImageAs(currentlySavedImageFormat); @@ -77,7 +77,7 @@ function LeftPaneImageSteps({ setCurrentModel(modelOptions[0]); setModel(modelOptions[0].value); localStorage.setItem("model", JSON.stringify(modelOptions[0])); - logit("๐ข Setting model to", modelOptions[0].value); + logit("๐ Setting model to", modelOptions[0].value); } else { const currentlySavedModel = JSON.parse( localStorage.getItem("model") @@ -85,23 +85,23 @@ function LeftPaneImageSteps({ setCurrentModel(currentlySavedModel); setModel(currentlySavedModel.value); logit( - "๐ข Getting model from localStorage", + "โ๏ธ Getting model from localStorage", JSON.stringify(currentlySavedModel) ); } if (!localStorage.getItem("gpuId")) { localStorage.setItem("gpuId", ""); - logit("๐ข Setting gpuId to empty string"); + logit("โ๏ธ Setting gpuId to empty string"); } else { const currentlySavedGpuId = localStorage.getItem("gpuId"); setGpuId(currentlySavedGpuId); - logit("๐ข Getting gpuId from localStorage", currentlySavedGpuId); + logit("โ๏ธ Getting gpuId from localStorage", currentlySavedGpuId); } }, []); useEffect(() => { - logit("๐ข Setting model to", currentModel.value); + logit("๐ Setting model to", currentModel.value); }, [currentModel]); return ( diff --git a/renderer/components/SettingsTab.tsx b/renderer/components/SettingsTab.tsx index 3df5c4a..a22fa3f 100644 --- a/renderer/components/SettingsTab.tsx +++ b/renderer/components/SettingsTab.tsx @@ -46,12 +46,12 @@ function SettingsTab({ themeChange(false); if (!localStorage.getItem("saveImageAs")) { - logit("๐ข Setting saveImageAs to png"); + logit("โ๏ธ Setting saveImageAs to png"); localStorage.setItem("saveImageAs", "png"); } else { const currentlySavedImageFormat = localStorage.getItem("saveImageAs"); logit( - "๐ข Getting saveImageAs from localStorage", + "โ๏ธ Getting saveImageAs from localStorage", currentlySavedImageFormat ); setSaveImageAs(currentlySavedImageFormat); @@ -61,7 +61,7 @@ function SettingsTab({ setCurrentModel(modelOptions[0]); setModel(modelOptions[0].value); localStorage.setItem("model", JSON.stringify(modelOptions[0])); - logit("๐ข Setting model to", modelOptions[0].value); + logit("๐ Setting model to", modelOptions[0].value); } else { const currentlySavedModel = JSON.parse( localStorage.getItem("model") @@ -69,29 +69,29 @@ function SettingsTab({ setCurrentModel(currentlySavedModel); setModel(currentlySavedModel.value); logit( - "๐ข Getting model from localStorage", + "โ๏ธ Getting model from localStorage", JSON.stringify(currentlySavedModel) ); } if (!localStorage.getItem("gpuId")) { localStorage.setItem("gpuId", ""); - logit("๐ข Setting gpuId to empty string"); + logit("โ๏ธ Setting gpuId to empty string"); } else { const currentlySavedGpuId = localStorage.getItem("gpuId"); setGpuId(currentlySavedGpuId); - logit("๐ข Getting gpuId from localStorage", currentlySavedGpuId); + logit("โ๏ธ Getting gpuId from localStorage", currentlySavedGpuId); } if (!localStorage.getItem("rememberOutputFolder")) { - logit("๐ข Setting rememberOutputFolder to false"); + logit("โ๏ธ Setting rememberOutputFolder to false"); localStorage.setItem("rememberOutputFolder", "false"); } else { const currentlySavedRememberOutputFolder = localStorage.getItem( "rememberOutputFolder" ); logit( - "๐ข Getting rememberOutputFolder from localStorage", + "โ๏ธ Getting rememberOutputFolder from localStorage", currentlySavedRememberOutputFolder ); setRememberOutputFolder( diff --git a/renderer/pages/index.tsx b/renderer/pages/index.tsx index 5c0ca7d..95d1c8c 100644 --- a/renderer/pages/index.tsx +++ b/renderer/pages/index.tsx @@ -79,7 +79,7 @@ const Home = () => { // LOG window.electron.on(commands.LOG, (_, data: string) => { - logit(`๐ข BACKEND REPORTED: `, data); + logit(`๐ BACKEND REPORTED: `, data); }); // UPSCAYL PROGRESS @@ -88,7 +88,7 @@ const Home = () => { setProgress(data); } handleErrors(data); - logit(`๐ข UPSCAYL_PROGRESS: `, data); + logit(`๐ง UPSCAYL_PROGRESS: `, data); }); // FOLDER UPSCAYL PROGRESS @@ -97,7 +97,7 @@ const Home = () => { setProgress(data); } handleErrors(data); - logit(`๐ข FOLDER_UPSCAYL_PROGRESS: `, data); + logit(`๐ง FOLDER_UPSCAYL_PROGRESS: `, data); }); // DOUBLE UPSCAYL PROGRESS @@ -109,7 +109,7 @@ const Home = () => { setProgress(data); } handleErrors(data); - logit(`๐ข DOUBLE_UPSCAYL_PROGRESS: `, data); + logit(`๐ง DOUBLE_UPSCAYL_PROGRESS: `, data); }); // VIDEO UPSCAYL PROGRESS @@ -118,7 +118,7 @@ const Home = () => { setProgress(data); } handleErrors(data); - logit(`๐ข UPSCAYL_VIDEO_PROGRESS: `, data); + logit(`๐ง UPSCAYL_VIDEO_PROGRESS: `, data); }); // UPSCAYL DONE @@ -126,14 +126,14 @@ const Home = () => { setProgress(""); setUpscaledImagePath(data); logit("upscaledImagePath: ", upscaledImagePath); - logit(`๐ข UPSCAYL_DONE: `, data); + logit(`๐ฏ UPSCAYL_DONE: `, data); }); // FOLDER UPSCAYL DONE window.electron.on(commands.FOLDER_UPSCAYL_DONE, (_, data: string) => { setProgress(""); setUpscaledBatchFolderPath(data); - logit(`๐ข FOLDER_UPSCAYL_DONE: `, data); + logit(`๐ฏ FOLDER_UPSCAYL_DONE: `, data); }); // DOUBLE UPSCAYL DONE @@ -141,21 +141,21 @@ const Home = () => { setProgress(""); setDoubleUpscaylCounter(0); setUpscaledImagePath(data); - logit(`๐ข DOUBLE_UPSCAYL_DONE: `, data); + logit(`๐ฏ DOUBLE_UPSCAYL_DONE: `, data); }); // VIDEO UPSCAYL DONE window.electron.on(commands.UPSCAYL_VIDEO_DONE, (_, data: string) => { setProgress(""); setUpscaledVideoPath(data); - logit(`๐ข UPSCAYL_VIDEO_DONE: `, data); + logit(`๐ฏ UPSCAYL_VIDEO_DONE: `, data); }); // CUSTOM FOLDER LISTENER window.electron.on( commands.CUSTOM_MODEL_FILES_LIST, (_, data: string[]) => { - logit(`๐ข CUSTOM_MODEL_FILES_LIST: `, data); + logit(`๐ CUSTOM_MODEL_FILES_LIST: `, data); const newModelOptions = data.map((model) => { return { value: model, @@ -182,7 +182,7 @@ const Home = () => { if (customModelsPath !== null) { window.electron.send(commands.GET_MODELS_LIST, customModelsPath); - logit("๐ข GET_MODELS_LIST: ", customModelsPath); + logit("๐ฏ GET_MODELS_LIST: ", customModelsPath); } }, []); @@ -204,10 +204,10 @@ const Home = () => { useEffect(() => { if (imagePath.length > 0 && !isVideo) { - logit("๐ข imagePath: ", imagePath); + logit("๐ผ imagePath: ", imagePath); const extension = imagePath.toLocaleLowerCase().split(".").pop(); - logit("๐ข Extension: ", extension); + logit("๐ค Extension: ", extension); if (!allowedFileTypes.includes(extension.toLowerCase())) { alert("Please select an image"); @@ -228,7 +228,7 @@ const Home = () => { }, [imagePath, videoPath]); const resetImagePaths = () => { - logit("๐ข Resetting image paths"); + logit("๐ Resetting image paths"); setDimensions({ width: null, @@ -273,10 +273,10 @@ const Home = () => { var path = await window.electron.invoke(commands.SELECT_FILE); if (path !== null) { - logit("๐ข Selected Image Path: ", path); + logit("๐ผ Selected Image Path: ", path); SetImagePath(path); var dirname = path.match(/(.*)[\/\\]/)[1] || ""; - logit("๐ข Selected Image Directory: ", dirname); + logit("๐ Selected Image Directory: ", dirname); setOutputPath(dirname); } }; @@ -287,11 +287,11 @@ const Home = () => { var path = await window.electron.invoke(commands.SELECT_FOLDER); if (path !== null) { - logit("๐ข Selected Folder Path: ", path); + logit("๐ผ Selected Folder Path: ", path); setBatchFolderPath(path); setOutputPath(path + "_upscayled"); } else { - logit("๐ข Folder selection cancelled"); + logit("๐ซ Folder selection cancelled"); setBatchFolderPath(""); setOutputPath(""); } @@ -307,7 +307,7 @@ const Home = () => { const handleModelChange = (e: any) => { setModel(e.value); - logit("๐ข Model changed: ", e.value); + logit("๐ Model changed: ", e.value); localStorage.setItem( "model", JSON.stringify({ label: e.label, value: e.value }) @@ -329,7 +329,7 @@ const Home = () => { }; const openFolderHandler = (e) => { - logit("๐ข OPEN_FOLDER: ", upscaledBatchFolderPath); + logit("๐ OPEN_FOLDER: ", upscaledBatchFolderPath); window.electron.send(commands.OPEN_FOLDER, upscaledBatchFolderPath); }; @@ -341,7 +341,7 @@ const Home = () => { e.dataTransfer.items.length === 0 || e.dataTransfer.files.length === 0 ) { - logit("๐ข No valid files dropped"); + logit("๐ No valid files dropped"); alert("Please drag and drop an image"); return; } @@ -349,25 +349,25 @@ const Home = () => { const type = e.dataTransfer.items[0].type; const filePath = e.dataTransfer.files[0].path; const extension = e.dataTransfer.files[0].name.split(".").at(-1); - logit("๐ข Dropped file: ", JSON.stringify({ type, filePath, extension })); + logit("โคต๏ธ Dropped file: ", JSON.stringify({ type, filePath, extension })); if ( (!type.includes("image") && !type.includes("video")) || (!allowedFileTypes.includes(extension.toLowerCase()) && !allowedVideoFileTypes.includes(extension.toLowerCase())) ) { - logit("๐ข Invalid file dropped"); + logit("๐ซ Invalid file dropped"); alert("Please drag and drop an image"); } else { if (isVideo) { setVideoPath(filePath); } else { - logit("๐ข Setting image path: ", filePath); + logit("๐ผ Setting image path: ", filePath); SetImagePath(filePath); } var dirname = filePath.match(/(.*)[\/\\]/)[1] || ""; - logit("๐ข Setting output path: ", dirname); + logit("๐ Setting output path: ", dirname); setOutputPath(dirname); } }; @@ -380,7 +380,7 @@ const Home = () => { const filePath = e.clipboardData.files[0].path; const extension = e.clipboardData.files[0].name.split(".").at(-1); - logit("๐ข Pasted file: ", JSON.stringify({ type, filePath, extension })); + logit("๐ Pasted file: ", JSON.stringify({ type, filePath, extension })); if ( !type.includes("image") && @@ -390,7 +390,7 @@ const Home = () => { } else { SetImagePath(filePath); var dirname = filePath.match(/(.*)[\/\\]/)[1] || ""; - logit("๐ข Setting output path: ", dirname); + logit("๐ Setting output path: ", dirname); setOutputPath(dirname); } }; @@ -398,13 +398,13 @@ const Home = () => { const outputHandler = async () => { var path = await window.electron.invoke(commands.SELECT_FOLDER); if (path !== null) { - logit("๐ข Setting Output Path: ", path); + logit("๐ Setting Output Path: ", path); setOutputPath(path); const rememberOutputFolder = localStorage.getItem("rememberOutputFolder"); if (rememberOutputFolder) { - logit("๐ข Remembering Output Folder: ", path); + logit("๐ง Remembering Output Folder: ", path); localStorage.setItem("lastOutputFolderPath", path); } } else { @@ -416,7 +416,7 @@ const Home = () => { if (isVideo) { setUpscaledVideoPath(""); } else { - logit("๐ข Resetting Upscaled Image Path"); + logit("๐ Resetting Upscaled Image Path"); setUpscaledImagePath(""); } @@ -432,7 +432,7 @@ const Home = () => { saveImageAs, scale, }); - logit("๐ข DOUBLE_UPSCAYL"); + logit("๐ DOUBLE_UPSCAYL"); } else if (batchMode) { setDoubleUpscayl(false); window.electron.send(commands.FOLDER_UPSCAYL, { @@ -444,7 +444,7 @@ const Home = () => { saveImageAs, scale, }); - logit("๐ข FOLDER_UPSCAYL"); + logit("๐ FOLDER_UPSCAYL"); } else { window.electron.send(commands.UPSCAYL, { scaleFactor, @@ -455,7 +455,7 @@ const Home = () => { saveImageAs, scale, }); - logit("๐ข UPSCAYL"); + logit("๐ UPSCAYL"); } } // else if (isVideo && videoPath !== "") { @@ -470,13 +470,13 @@ const Home = () => { // } else { alert(`Please select ${isVideo ? "a video" : "an image"} to upscale`); - logit("๐ข No valid image selected"); + logit("๐ซ No valid image selected"); } }; const stopHandler = () => { window.electron.send(commands.STOP); - logit("๐ข Stopping Upscayl"); + logit("๐ Stopping Upscayl"); resetImagePaths(); }; @@ -573,8 +573,7 @@ const Home = () => { onDragOver={(e) => handleDragOver(e)} onDragEnter={(e) => handleDragEnter(e)} onDragLeave={(e) => handleDragLeave(e)} - onPaste={(e) => handlePaste(e)} - > + onPaste={(e) => handlePaste(e)}> {progress.length > 0 && upscaledImagePath.length === 0 && upscaledBatchFolderPath.length === 0 && @@ -664,8 +663,7 @@ const Home = () => {
> diff --git a/resources/models/RealESRGAN_General_x4_v3.bin b/resources/models/RealESRGAN_General_x4_v3.bin new file mode 100644 index 0000000..e0a8b6c Binary files /dev/null and b/resources/models/RealESRGAN_General_x4_v3.bin differ diff --git a/resources/models/RealESRGAN_General_x4_v3.param b/resources/models/RealESRGAN_General_x4_v3.param new file mode 100644 index 0000000..221234a --- /dev/null +++ b/resources/models/RealESRGAN_General_x4_v3.param @@ -0,0 +1,74 @@ +7767517 +72 73 +Input input.1 0 1 data +Split splitncnn_input0 1 2 data input_splitncnn_0 input_splitncnn_1 +Convolution Conv_0 1 1 input_splitncnn_1 102 0=64 1=3 4=1 5=1 6=1728 +PReLU PRelu_1 1 1 102 105 0=64 +Convolution Conv_2 1 1 105 106 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_3 1 1 106 109 0=64 +Convolution Conv_4 1 1 109 110 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_5 1 1 110 113 0=64 +Convolution Conv_6 1 1 113 114 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_7 1 1 114 117 0=64 +Convolution Conv_8 1 1 117 118 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_9 1 1 118 121 0=64 +Convolution Conv_10 1 1 121 122 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_11 1 1 122 125 0=64 +Convolution Conv_12 1 1 125 126 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_13 1 1 126 129 0=64 +Convolution Conv_14 1 1 129 130 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_15 1 1 130 133 0=64 +Convolution Conv_16 1 1 133 134 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_17 1 1 134 137 0=64 +Convolution Conv_18 1 1 137 138 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_19 1 1 138 141 0=64 +Convolution Conv_20 1 1 141 142 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_21 1 1 142 145 0=64 +Convolution Conv_22 1 1 145 146 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_23 1 1 146 149 0=64 +Convolution Conv_24 1 1 149 150 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_25 1 1 150 153 0=64 +Convolution Conv_26 1 1 153 154 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_27 1 1 154 157 0=64 +Convolution Conv_28 1 1 157 158 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_29 1 1 158 161 0=64 +Convolution Conv_30 1 1 161 162 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_31 1 1 162 165 0=64 +Convolution Conv_32 1 1 165 166 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_33 1 1 166 169 0=64 +Convolution Conv_34 1 1 169 170 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_35 1 1 170 173 0=64 +Convolution Conv_36 1 1 173 174 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_37 1 1 174 177 0=64 +Convolution Conv_38 1 1 177 178 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_39 1 1 178 181 0=64 +Convolution Conv_40 1 1 181 182 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_41 1 1 182 185 0=64 +Convolution Conv_42 1 1 185 186 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_43 1 1 186 189 0=64 +Convolution Conv_44 1 1 189 190 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_45 1 1 190 193 0=64 +Convolution Conv_46 1 1 193 194 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_47 1 1 194 197 0=64 +Convolution Conv_48 1 1 197 198 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_49 1 1 198 201 0=64 +Convolution Conv_50 1 1 201 202 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_51 1 1 202 205 0=64 +Convolution Conv_52 1 1 205 206 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_53 1 1 206 209 0=64 +Convolution Conv_54 1 1 209 210 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_55 1 1 210 213 0=64 +Convolution Conv_56 1 1 213 214 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_57 1 1 214 217 0=64 +Convolution Conv_58 1 1 217 218 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_59 1 1 218 221 0=64 +Convolution Conv_60 1 1 221 222 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_61 1 1 222 225 0=64 +Convolution Conv_62 1 1 225 226 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_63 1 1 226 229 0=64 +Convolution Conv_64 1 1 229 230 0=64 1=3 4=1 5=1 6=36864 +PReLU PRelu_65 1 1 230 233 0=64 +Convolution Conv_66 1 1 233 234 0=48 1=3 4=1 5=1 6=27648 +PixelShuffle DepthToSpace_67 1 1 234 235 0=4 +Interp Resize_68 1 1 input_splitncnn_0 240 0=1 1=4.000000e+00 2=4.000000e+00 +BinaryOp Add_69 2 1 235 240 output