From 373662eb4e1bf4384ec7abd51236443a3069d834 Mon Sep 17 00:00:00 2001 From: NangInShell <1759890165@qq.com> Date: Sat, 11 Oct 2025 10:12:53 +0800 Subject: [PATCH 1/8] =?UTF-8?q?UI=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- resources/icon.png | Bin 96111 -> 63564 bytes src/main/childProcessManager.ts | 4 - src/main/index.ts | 28 +- src/main/runCommand.ts | 189 +++-- src/preload/index.ts | 8 +- src/renderer/index.html | 2 +- src/renderer/src/App.vue | 234 ++++-- src/renderer/src/components/EnhancePage.vue | 852 +++++++++++--------- src/renderer/src/components/FilterPage.vue | 164 ++-- src/renderer/src/components/HomePage.vue | 58 +- src/renderer/src/components/InputPage.vue | 2 +- src/renderer/src/components/OutputPage.vue | 501 ++++++------ src/renderer/src/components/PreviewPage.vue | 15 +- src/renderer/src/components/RenderPage.vue | 4 +- src/renderer/src/env.d.ts | 10 + 16 files changed, 1161 insertions(+), 912 deletions(-) diff --git a/package.json b/package.json index 1fa38b9..812806e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vset", "productName": "VSET", - "version": "4.3.6", + "version": "4.4.0", "description": "VSET", "author": "NangInShell", "main": "./out/main/index.js", diff --git a/resources/icon.png b/resources/icon.png index fd3803a40674ed10cf55d07b24b6c6c86ba5bd9b..d6ed2b25d1963815843901cd6a88297ee45c5eff 100644 GIT binary patch literal 63564 zcmeFYhf|YX*FG9V6r_Vv1q2jCX+e4~A}An;(v;qN?;SyU6{I&oK%Po2HWdqt}WG!ay-$VIBcq zAON5omGj<9HyKSM4MSUyYs=3c)}+~o0NB{e35O{33Mjq;Ou{IrWc$BF-qXJSfHGTI ztMBv7J>{Ipwfv{eR&vpiA7ixiMGsgOOBw=vkqE@q+*La~8-6|R111lqq~b{0DzF8J zX?~FupJz!>SMD1I1>bt0ymI>y#nwoV6+u4$aER~Y9q3*ybB$N!1h@rop5c8=HMn{c z+N!~!19+4KSYe}r6XPXn0)}`$4BZC|(E+O8*O}h~qyPZ+KK}A-fKpPx{^@IJ0>J#Q z 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≦$fU9ku3L9wXb%>RF*$BEuE^zZ%qh92ht)> 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 ZrGhd}004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00006VoOIv0RI600RN!9r;`8x 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
-
-
- -
-
- -
-
- -
-
- 超分算法 - - - -
- -
-
- 推理方式(Real_cugan) - +
+
+ - - + active-text="启用超分" + inactive-text="关闭超分" + />
- -
- 超分模型(Real_cugan) - + - - + active-text="启动半精度" + inactive-text="关闭半精度" + disabled + />
+
+ +
+
- 切割块数量(Real_cugan) + 超分算法
+
-
- 强度参数(Real_cugan) - -
+
+ +
+ 推理方式(Real_cugan) + + + +
+ +
+ 超分模型(Real_cugan) + + + +
+ +
+ 切割块数量(Real_cugan) + + + +
+ +
+ 强度参数(Real_cugan) + +
+
-
- 推理方式(Real_esrgan) - - - -
- -
- 超分模型(Real_esrgan) - - - -
- -
- 放大倍数(Real_esrgan) - - - -
- -
- 切割块数量(Real_esrgan) - - - -
+ +
+ 推理方式(Real_esrgan) + + + +
+ +
+ 超分模型(Real_esrgan) + + + +
+ +
+ 放大倍数(Real_esrgan) + + + +
+ +
+ 切割块数量(Real_esrgan) + + + +
+
-
- 推理方式(Waifu2x) - - - -
- -
- 超分模型(Waifu2x) - - - -
- -
- 切割块数量(Waifu2x) - - - -
+ +
+ 推理方式(Waifu2x) + + + +
+ +
+ 超分模型(Waifu2x) + + + +
+ +
+ 切割块数量(Waifu2x) + + + +
+
-
- 超分模型(SR_ExtraModel) - - - -
- -
- 推理方式(SR_ExtraModel) - - - -
-
- -
- - Extra - - - - 通用 - -
- num_streams - - - -
- - - - TensorRt -
- cuda_graph - +
+ 超分模型(SR_ExtraModel) + + -
- - - - -
-
-
- - - -
-
-
- -
-
- -
-
- -
-
- 补帧算法 - - - + +
+ +
+ 推理方式(SR_ExtraModel) + + + +
+
-
-
- 推理方式(rife) - - - -
- -
- 补帧模型(rife) - - - -
- -
- 光流尺度(rife) - - - -
- -
- 目标帧率(rife) - -
- -
- 转场阈值(rife) - -
- -
- Ensemble(rife) - - - 使用 - - - 关闭 - - -
- -
+
+ Extra - - + + 通用
num_streams cuda_graph + +
+
+
+ + + +
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+ 补帧算法 + + + +
+
+ +
+ +
+ 推理方式(rife) + + + +
+ +
+ 补帧模型(rife) + + + +
+ +
+ 光流尺度(rife) + + + +
+ +
+ 目标帧率(rife) + +
+ +
+ 转场阈值(rife) + +
+ +
+ Ensemble(rife) + + + 使用 + + + 关闭 + + +
+
+ +
+ + + Extra + + + + 通用 + +
+ num_streams + + + +
+ + + + TensorRt +
+ cuda_graph + +
+ + +
+
+
@@ -612,6 +634,19 @@ function ShowVfiExtra(): void { diff --git a/src/renderer/src/components/FilterPage.vue b/src/renderer/src/components/FilterPage.vue index 7153d88..1a16152 100644 --- a/src/renderer/src/components/FilterPage.vue +++ b/src/renderer/src/components/FilterPage.vue @@ -23,98 +23,102 @@ const { @@ -122,7 +126,7 @@ const { .flex-container { display: flex; flex-direction: column; - gap: 15px; + gap: 10px; } .slider-demo-block { @@ -130,7 +134,14 @@ const { display: flex; align-items: center; flex-basis: calc(100% - 20px); - gap: 10px; + gap: 16px; + margin-bottom: 16px; + padding-bottom: 10px; +} + +.slider-demo-block:last-child { + margin-bottom: 0; + padding-bottom: 0; } .slider-demo-block .demonstration { @@ -146,4 +157,9 @@ const { margin-left: 40px; margin-right: 10px; } + +.system-info-card { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 12px; +} diff --git a/src/renderer/src/components/HomePage.vue b/src/renderer/src/components/HomePage.vue index e43326e..8b4c624 100644 --- a/src/renderer/src/components/HomePage.vue +++ b/src/renderer/src/components/HomePage.vue @@ -66,31 +66,33 @@ onUnmounted(() => { > -
- CPU - - {{ CPUInfo }} - -
- -
- GPU - - - -
- -
- 当前时间 - - {{ currentTime }} - -
+ +
+ CPU + + {{ CPUInfo }} + +
+ +
+ GPU + + + +
+ +
+ 当前时间 + + {{ currentTime }} + +
+
@@ -105,6 +107,7 @@ onUnmounted(() => { display: flex; align-items: center; flex-basis: calc(100% - 20px); + margin-bottom: 16px; } .slider-demo-block .demonstration { @@ -123,4 +126,9 @@ onUnmounted(() => { flex-direction: column; gap: 15px; } + +.system-info-card { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 12px; +} diff --git a/src/renderer/src/components/InputPage.vue b/src/renderer/src/components/InputPage.vue index 712c81b..b09618c 100644 --- a/src/renderer/src/components/InputPage.vue +++ b/src/renderer/src/components/InputPage.vue @@ -107,7 +107,7 @@ function clearFileList(): void { diff --git a/src/renderer/src/components/PreviewPage.vue b/src/renderer/src/components/PreviewPage.vue index 2104d57..986f729 100644 --- a/src/renderer/src/components/PreviewPage.vue +++ b/src/renderer/src/components/PreviewPage.vue @@ -145,14 +145,14 @@ onMounted(() => { :max="frameCount" :step="1" :disabled="isRunning" - style="margin-top: 10px; width: 100%;" + style="margin-top: 10px; width: 95%; margin-left: 12px" show-input @change="onFrameChange" />
-
- 当前图片分辨率: {{ imageNaturalWidth }} × {{ imageNaturalHeight }} +
+ 当前预览帧分辨率: {{ imageNaturalWidth }} × {{ imageNaturalHeight }}
@@ -173,6 +173,15 @@ onMounted(() => { diff --git a/src/renderer/src/store/FilterSetting.ts b/src/renderer/src/store/FilterSetting.ts new file mode 100644 index 0000000..fd7e827 --- /dev/null +++ b/src/renderer/src/store/FilterSetting.ts @@ -0,0 +1,48 @@ +const QTGMC_Preset_options = [ + { + value: 'Placebo', + label: 'Placebo', + }, + { + value: 'Very Slow', + label: 'Very Slow', + }, + { + value: 'Slower', + label: 'Slower', + }, + { + value: 'Slow', + label: 'Slow', + }, + { + value: 'Medium', + label: 'Medium', + }, + { + value: 'Fast', + label: 'Fast', + }, + { + value: 'Faster', + label: 'Faster', + }, + { + value: 'Very Fast', + label: 'Very Fast', + }, + { + value: 'Super Fast', + label: 'Super Fast', + }, + { + value: 'Ultra Fast', + label: 'Ultra Fast', + }, + { + value: 'Draft', + label: 'Draft', + }, +] + +export { QTGMC_Preset_options } diff --git a/src/renderer/src/store/FilterStore.ts b/src/renderer/src/store/FilterStore.ts index e720e9a..c966a6b 100644 --- a/src/renderer/src/store/FilterStore.ts +++ b/src/renderer/src/store/FilterStore.ts @@ -21,6 +21,9 @@ export default defineStore('filterConfig', () => { const ReduceOn_AfterEnhance = ref(0) const ReduceDown_AfterEnhance = ref(0) + const UseQTGMC_BeforeEnhance = ref(false) + const QTGMC_Preset_BeforeEnhance = ref('Slower') + return { UseResize_BeforeEnhance, UseResize_AfterEnhance, @@ -36,6 +39,8 @@ export default defineStore('filterConfig', () => { ReduceRight_AfterEnhance, ReduceOn_AfterEnhance, ReduceDown_AfterEnhance, + UseQTGMC_BeforeEnhance, + QTGMC_Preset_BeforeEnhance, } }, { persist: true, diff --git a/src/renderer/src/store/SRMethod.ts b/src/renderer/src/store/SRMethod.ts index 328aa71..9110fd5 100644 --- a/src/renderer/src/store/SRMethod.ts +++ b/src/renderer/src/store/SRMethod.ts @@ -373,13 +373,6 @@ const SwinIRModel_options = [ { value: 'colorCAR_DFWB_s126w7_SwinIR_M_jpeg40', label: 'colorCAR_DFWB_s126w7_SwinIR_M_jpeg40' }, ] -const SR_ExtraModel_options = [ - { - value: 'AniSD_DC_SPAN_x2', - label: 'AniSD_DC_SPAN_x2', - }, -] - const sr_numstreams_options = [ { value: '1', @@ -391,4 +384,4 @@ const sr_numstreams_options = [ }, ] -export { Inference_options, RealcuganModel_options, RealesrganModel_options, RealesrganScale_options, SR_ExtraModel_options, sr_numstreams_options, SRMethod_options, SwinIRModel_options, VsmlrtTile_options, Waifu2xModel_options } +export { Inference_options, RealcuganModel_options, RealesrganModel_options, RealesrganScale_options, sr_numstreams_options, SRMethod_options, SwinIRModel_options, VsmlrtTile_options, Waifu2xModel_options } diff --git a/src/renderer/src/store/SystemInfoStore.ts b/src/renderer/src/store/SystemInfoStore.ts new file mode 100644 index 0000000..a9680d1 --- /dev/null +++ b/src/renderer/src/store/SystemInfoStore.ts @@ -0,0 +1,69 @@ +// @renderer/store/SystemInfoStore.ts +import { IpcChannelInvoke } from '@shared/constant/ipc' +import { defineStore } from 'pinia' +import { ref } from 'vue' + +export const useSystemInfoStore = defineStore('systemInfo', () => { + const cpuInfo = ref('') + const gpuInfo = ref([]) + const gpuMainInfo = ref('') + const memoryInfo = ref('') + const extraSrModelList = ref([]) + + async function fetchCPUInfo() { + if (!cpuInfo.value) { + cpuInfo.value = await window.electron.ipcRenderer.invoke(IpcChannelInvoke.GET_CPU_INFO) + } + } + + async function fetchGPUInfo() { + if (gpuInfo.value.length === 0) { + gpuInfo.value = await window.electron.ipcRenderer.invoke(IpcChannelInvoke.GET_GPU_INFO) + if (gpuInfo.value.length > 0) { + gpuMainInfo.value = gpuInfo.value[0] + } + } + } + + async function fetchMemoryInfo() { + if (!memoryInfo.value) { + memoryInfo.value = await window.electron.ipcRenderer.invoke(IpcChannelInvoke.GET_MEMORY_INFO) + } + } + + async function fetchExtraSRModelList() { + // 每次都重新加载,以支持添加新模型文件 + extraSrModelList.value = await window.electron.ipcRenderer.invoke(IpcChannelInvoke.GET_EXTRA_SR_MODEL_LIST) + } + + async function initSystemInfo() { + try { + // 只有在信息为空时才获取 + if (!cpuInfo.value || !memoryInfo.value || gpuInfo.value.length === 0) { + // 并行获取所有信息以提高性能 + await Promise.all([fetchCPUInfo(), fetchGPUInfo(), fetchMemoryInfo()]) + } + } + catch (error) { + console.error('Failed to initialize system info:', error) + } + } + + function setGPUMainInfo(val: string) { + gpuMainInfo.value = val + } + + return { + cpuInfo, + gpuInfo, + gpuMainInfo, + memoryInfo, + extraSrModelList, + initSystemInfo, + setGPUMainInfo, + fetchExtraSRModelList, + } +}, { + persist: true, +}) + diff --git a/src/renderer/src/utils/getVpy.ts b/src/renderer/src/utils/getVpy.ts index 63dfce8..3ac65b4 100644 --- a/src/renderer/src/utils/getVpy.ts +++ b/src/renderer/src/utils/getVpy.ts @@ -59,6 +59,8 @@ export function buildVpyContent(): string { ReduceRight_AfterEnhance, ReduceOn_AfterEnhance, ReduceDown_AfterEnhance, + UseQTGMC_BeforeEnhance, + QTGMC_Preset_BeforeEnhance, } = storeToRefs(FilterConfigStore) // 开始生成 vpy 内容 @@ -80,6 +82,8 @@ GitHub: https://github.com/EutropicAI/VSET vpyContent += `res = core.lsmas.LWLibavSource(r"${MagicStr.VIDEO_PATH}")\n` vpyContent += 'from vsmlrt import CUGAN,RealESRGAN,Waifu2x,RIFE,Backend\n' vpyContent += 'import vsmlrt\n' + vpyContent += 'import havsfunc\n' + // 前置缩放(需要在此改进色彩控制) if (UseResize_BeforeEnhance.value === true) { @@ -89,6 +93,11 @@ GitHub: https://github.com/EutropicAI/VSET vpyContent += 'res = core.resize.Bicubic(clip=res,format=vs.YUV420P16)\n' } + // QTGMC 滤镜 + if (UseQTGMC_BeforeEnhance.value === true) { + vpyContent += `res = havsfunc.QTGMC(res, TFF=False, FPSDivisor=2, Preset='${QTGMC_Preset_BeforeEnhance.value}')\n` + } + vpyContent += `res = core.std.Crop(clip=res,left=${ReduceLeft_BeforeEnhance.value}, right=${ReduceRight_BeforeEnhance.value}, top=${ReduceOn_BeforeEnhance.value}, bottom=${ReduceDown_BeforeEnhance.value})\n` // 超分 @@ -310,11 +319,11 @@ GitHub: https://github.com/EutropicAI/VSET } if (SRMethodValue.value === 'SR_ExtraModel') { - const model_switch = { - AniSD_DC_SPAN_x2: 'AniSD_DC_SPAN_x2.onnx', - } - - const model = `${MagicStr.EXTRA_MODEL_PATH}/${model_switch[SR_ExtraModelValue.value] || 'AniSD_DC_SPAN_x2.onnx'}` + // 自动添加 .onnx 扩展名 + const modelFileName = SR_ExtraModelValue.value.endsWith('.onnx') + ? SR_ExtraModelValue.value + : `${SR_ExtraModelValue.value}.onnx` + const model = `${MagicStr.EXTRA_MODEL_PATH}/${modelFileName}` vpyContent += `res = vsmlrt.inference(res, network_path=r"${model}", backend=device_sr)\n` } diff --git a/src/shared/constant/ipc.ts b/src/shared/constant/ipc.ts index 528b966..3c16d66 100644 --- a/src/shared/constant/ipc.ts +++ b/src/shared/constant/ipc.ts @@ -5,6 +5,8 @@ export enum IpcChannelInvoke { OPEN_DIRECTORY_DIALOG = 'ipc:open-directory-dialog', GET_GPU_INFO = 'ipc:get-gpu-info', GET_CPU_INFO = 'ipc:get-cpu-info', + GET_MEMORY_INFO = 'ipc:get-memory-info', + GET_EXTRA_SR_MODEL_LIST = 'ipc:get-extra-sr-model-list', } /** From 4d324414e0c3e0a28c515051010389683b9d23db Mon Sep 17 00:00:00 2001 From: NangInShell <1759890165@qq.com> Date: Sat, 15 Nov 2025 10:24:49 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9vpy=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=EF=BC=9B=E4=BF=AE=E5=A4=8Drife=E8=A1=A5?= =?UTF-8?q?=E5=B8=A7=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/main/getCorePath.ts | 19 ++++++++++++++++--- src/renderer/index.html | 2 +- src/renderer/src/App.vue | 2 +- src/renderer/src/utils/checkSetting.ts | 18 +++++++++--------- src/renderer/src/utils/getFFmpeg.ts | 2 +- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 812806e..bb5362d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vset", "productName": "VSET", - "version": "4.4.0", + "version": "4.4.1", "description": "VSET", "author": "NangInShell", "main": "./out/main/index.js", diff --git a/src/main/getCorePath.ts b/src/main/getCorePath.ts index e18555b..e5436b7 100644 --- a/src/main/getCorePath.ts +++ b/src/main/getCorePath.ts @@ -1,4 +1,5 @@ import type { TaskConfig } from '@shared/type/taskConfig' +import { existsSync, mkdirSync } from 'node:fs' import path from 'node:path' import { app } from 'electron' @@ -36,6 +37,18 @@ export function getExtraSRModelPath(): string { return path.join(getCorePath(), 'vs-coreplugins', 'models', 'VSET_ExtraSrModel') } +function ensureVpyDir(): string { + const dir = process.env.NODE_ENV === 'development' + ? path.join(app.getAppPath(), 'resources', 'vpyFile') + : path.join(app.getAppPath(), '..', 'vpyFile') + + if (!existsSync(dir)) { + mkdirSync(dir, { recursive: true }) + } + + return dir +} + /** * 获取 VSET 生成的设置文件路径 * 暂时存放在 outputfolder 目录下 @@ -46,8 +59,8 @@ export function getGenSettingsPath(taskConfig: TaskConfig): string { /** * 获取 VSET 生成的 vpy 文件路径 - * 暂时存放在 outputfolder 目录下 + * 存放在软件 vpyFile 目录下 */ -export function getGenVpyPath(taskConfig: TaskConfig, baseName: string): string { - return path.join(taskConfig.outputFolder, `${baseName}.vpy`) +export function getGenVpyPath(_taskConfig: TaskConfig, baseName: string): string { + return path.join(ensureVpyDir(), `${baseName}.vpy`) } diff --git a/src/renderer/index.html b/src/renderer/index.html index 0088a11..784c0f3 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -2,7 +2,7 @@ - VSET 4.4.0 + VSET 4.4.1 app icon
- VSET 4.4.0 + VSET 4.4.1
diff --git a/src/renderer/src/utils/checkSetting.ts b/src/renderer/src/utils/checkSetting.ts index c5887c7..fe5ac95 100644 --- a/src/renderer/src/utils/checkSetting.ts +++ b/src/renderer/src/utils/checkSetting.ts @@ -20,22 +20,22 @@ export function CheckSetting(): boolean { return false } - if (useVfi.value === true) { + if (useVfi.value == true) { // ensemble参数判断 - if (RifeEnsembleValue.value === true) { - if (RifeModelValue.value === 'v4_21' || RifeModelValue.value === 'v4_22' || RifeModelValue.value === 'v4_22_lite' || RifeModelValue.value === 'v4_23' - || RifeModelValue.value === 'v4_25' || RifeModelValue.value === 'v4_25_lite' || RifeModelValue.value === 'v4_25_heavy' || RifeModelValue.value === 'v4_26' - || RifeModelValue.value === 'v4_26_heavy') { + if (RifeEnsembleValue.value == true) { + if (RifeModelValue.value == 'v4_21' || RifeModelValue.value == 'v4_22' || RifeModelValue.value == 'v4_22_lite' || RifeModelValue.value == 'v4_23' + || RifeModelValue.value == 'v4_25' || RifeModelValue.value == 'v4_25_lite' || RifeModelValue.value == 'v4_25_heavy' || RifeModelValue.value == 'v4_26' + || RifeModelValue.value == 'v4_26_heavy') { return false } - if (RifeScaleValue.value !== 1.0) { + if (RifeScaleValue.value != 1.0) { return false } } // 光流参数判断 - if (RifeScaleValue.value !== 1) { - if (RifeModelValue.value !== 'v4_0' && RifeModelValue.value !== 'v4_2' && RifeModelValue.value !== 'v4_3' - && RifeModelValue.value !== 'v4_4' && RifeModelValue.value !== 'v4_5' && RifeModelValue.value !== 'v4_6') { + if (RifeScaleValue.value != 1.0) { + if (RifeModelValue.value != 'v4_0' && RifeModelValue.value != 'v4_2' && RifeModelValue.value != 'v4_3' + && RifeModelValue.value != 'v4_4' && RifeModelValue.value != 'v4_5' && RifeModelValue.value != 'v4_6') { return false } } diff --git a/src/renderer/src/utils/getFFmpeg.ts b/src/renderer/src/utils/getFFmpeg.ts index 4a9d847..2aba60b 100644 --- a/src/renderer/src/utils/getFFmpeg.ts +++ b/src/renderer/src/utils/getFFmpeg.ts @@ -45,7 +45,7 @@ export function buildFFmpegCMD(): string[] { cmd_minor += `"-crf" "${crfValue.value}" ` } else { - cmd_minor += `"-b:v" "${bitValue.value}M" ` + cmd_minor += `"-b:v" "${bitValue.value}m" ` } } From edad8e91e0bf41ad9f42737efadc5258b38fba35 Mon Sep 17 00:00:00 2001 From: NangInShell <1759890165@qq.com> Date: Mon, 29 Dec 2025 20:48:10 +0800 Subject: [PATCH 4/8] =?UTF-8?q?mediainfo;=E9=9D=A2=E4=BC=98=E5=8C=96;?= =?UTF-8?q?=E6=95=B0=E7=BA=A0=E9=94=99=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/getCorePath.ts | 5 +- src/main/runCommand.ts | 81 ++++++--- src/renderer/src/components/EnhancePage.vue | 179 +++++++++++++------- src/renderer/src/components/HomePage.vue | 30 +++- src/renderer/src/components/RenderPage.vue | 19 ++- src/renderer/src/utils/checkSetting.ts | 28 +-- 6 files changed, 234 insertions(+), 108 deletions(-) diff --git a/src/main/getCorePath.ts b/src/main/getCorePath.ts index e5436b7..92d98f7 100644 --- a/src/main/getCorePath.ts +++ b/src/main/getCorePath.ts @@ -20,13 +20,14 @@ export function getCorePath(): string { /** * 获取 VSET-core 中的可执行文件路径 - * @returns {object} 包含 vspipe、ffmpeg 和 ffprobe 的路径 + * @returns {object} 包含 vspipe、ffmpeg、ffprobe 和 mediainfo 的路径 */ -export function getExecPath(): { vspipe: string, ffmpeg: string, ffprobe: string } { +export function getExecPath(): { vspipe: string, ffmpeg: string, ffprobe: string, mediainfo: string } { return { vspipe: path.join(getCorePath(), 'VSPipe.exe'), ffmpeg: path.join(getCorePath(), 'ffmpeg.exe'), ffprobe: path.join(getCorePath(), 'ffprobe.exe'), + mediainfo: path.join(getCorePath(), 'MediaInfo.exe'), } } diff --git a/src/main/runCommand.ts b/src/main/runCommand.ts index 117f1df..4eb5438 100644 --- a/src/main/runCommand.ts +++ b/src/main/runCommand.ts @@ -43,12 +43,19 @@ function generate_cmd(taskConfig: TaskConfig, hasAudio: boolean, hasSubtitle: bo } // 新增:获取输入视频信息的独立函数 -async function getInputVideoInfo(event: IpcMainEvent, video: string): Promise<{ +async function getInputVideoInfo(video: string): Promise<{ hasAudio: boolean hasSubtitle: boolean videoStream: any + frameRateMode: string + frameCount: string + frameRate: string + resolution: string + audioText: string + subtitleText: string }> { const ffprobePath = getExecPath().ffprobe + const mediainfoPath = getExecPath().mediainfo const ffprobeCommand = `"${ffprobePath}" -v error -show_streams -of json "${video}"` const { stdout: probeOut } = await exec(ffprobeCommand) @@ -59,25 +66,41 @@ async function getInputVideoInfo(event: IpcMainEvent, video: string): Promise<{ const hasAudio = allStreams.some((s: any) => s.codec_type === 'audio') const hasSubtitle = allStreams.some((s: any) => s.codec_type === 'subtitle') - if (videoStream) { - const frameCount = videoStream.nb_frames || '未知' - const frameRate = videoStream.avg_frame_rate || '未知' - const resolution = `${videoStream.width}x${videoStream.height}` - const audioText = hasAudio ? '是' : '否' - const subtitleText = hasSubtitle ? '是' : '否' - - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `正在处理输入视频 ${video} 的信息:\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数(输入): ${frameCount}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率(输入): ${frameRate}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `分辨率(输入): ${resolution}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有音频: ${audioText}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有字幕: ${subtitleText}\n`) + // 调用 MediaInfo.exe 获取 FrameRate_Mode + let frameRateMode = '未知' + try { + const mediainfoCommand = `"${mediainfoPath}" --Output=JSON "${video}"` + const { stdout: mediainfoOut } = await exec(mediainfoCommand) + const mediainfoData = JSON.parse(mediainfoOut) + + // MediaInfo JSON 格式:media.track[0].FrameRate_Mode(视频轨道通常是第一个) + if (mediainfoData.media && mediainfoData.media.track && mediainfoData.media.track.length > 0) { + const videoTrack = mediainfoData.media.track.find((track: any) => track['@type'] === 'Video') + if (videoTrack && videoTrack.FrameRate_Mode) { + frameRateMode = videoTrack.FrameRate_Mode + } + } + } + catch (error) { + console.error('MediaInfo 执行出错:', error) } + const frameCount = videoStream ? (videoStream.nb_frames || '未知') : '未知' + const frameRate = videoStream ? (videoStream.avg_frame_rate || '未知') : '未知' + const resolution = videoStream ? `${videoStream.width}x${videoStream.height}` : '未知' + const audioText = hasAudio ? '是' : '否' + const subtitleText = hasSubtitle ? '是' : '否' + return { hasAudio, hasSubtitle, videoStream, + frameRateMode, + frameCount, + frameRate, + resolution, + audioText, + subtitleText, } } @@ -131,11 +154,6 @@ async function getOutputVideoInfo(event: IpcMainEvent, vpyPath: string): Promise info.frames = vspipeOut.match(/Frames:\s*(\d+)/)?.[1] || '0' info.fps = vspipeOut.match(/FPS:\s*([\d/]+)\s*\(([\d.]+) fps\)/)?.[2] || '0' - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `======= 输出视频信息 =======\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `宽: ${info.width}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `高: ${info.height}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数: ${info.frames}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率: ${info.fps}\n`) resolve() }) @@ -167,7 +185,24 @@ export async function runCommand(event: IpcMainEvent, taskConfig: TaskConfig): P } try { // ========== 1. 获取输入视频信息 ========== - const { hasAudio, hasSubtitle } = await getInputVideoInfo(event, video) + const { hasAudio, hasSubtitle, frameCount, frameRate, resolution, audioText, subtitleText, frameRateMode } = await getInputVideoInfo(video) + + const frameRateModeText = frameRateMode === 'VFR' ? '是' : frameRateMode === 'CFR' ? '否' : '未知' + + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `正在处理输入视频 ${video} 的信息:\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数(输入): ${frameCount}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率(输入): ${frameRate}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `分辨率(输入): ${resolution}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有音频: ${audioText}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有字幕: ${subtitleText}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `视频流是否为可变帧率: ${frameRateModeText}\n`) + + // 如果是可变帧率,跳过处理该视频 + if (frameRateModeText === '是') { + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `跳过可变帧率视频: ${video}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `⚠️可变帧率视频会导致渲染结果出现音画不同步的问题,请在导入VSET之前处理为固定帧率视频。\n`) + continue + } // ========== 2. 生成 vpy 文件 ========== const baseName = path.basename(video, path.extname(video)) @@ -177,6 +212,12 @@ export async function runCommand(event: IpcMainEvent, taskConfig: TaskConfig): P // ========== 3. 获取输出视频信息 ========== const info = await getOutputVideoInfo(event, vpyPath) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `======= 输出视频信息 =======\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `宽(输出): ${info.width}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `高(输出): ${info.height}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数(输出): ${info.frames}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率(输出): ${info.fps}\n`) + // ========== 4. 构建渲染命令 ========== const vspipeArgs = ffmpegCMD[0].replace(MagicStr.VPY_PATH, vpyPath) const ffmpegMajorArgs = ffmpegCMD[1] diff --git a/src/renderer/src/components/EnhancePage.vue b/src/renderer/src/components/EnhancePage.vue index 7396f38..983fd09 100644 --- a/src/renderer/src/components/EnhancePage.vue +++ b/src/renderer/src/components/EnhancePage.vue @@ -438,41 +438,42 @@ onMounted(() => { > Extra - - - 通用 - -
- num_streams - - - + + +
+
通用设置
+
+ num_streams + + + +
- - - TensorRt -
- cuda_graph - -
+ - +
+
TensorRT 设置
+
+ cuda_graph + +
+
@@ -615,41 +616,42 @@ onMounted(() => { > Extra - - - 通用 - -
- num_streams - - - + + +
+
通用设置
+
+ num_streams + + + +
- - - TensorRt -
- cuda_graph - + + +
+
TensorRT 设置
+
+ cuda_graph + +
- - @@ -732,4 +734,53 @@ onMounted(() => { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); border-radius: 12px; } + +/* 抽屉样式优化 */ +.drawer-section { + margin-bottom: 24px; +} + +.drawer-section:last-of-type { + margin-bottom: 0; +} + +.drawer-section-title { + font-size: 16px; + font-weight: 600; + color: #303133; + margin-bottom: 16px; + padding-bottom: 8px; + border-bottom: 2px solid #e4e7ed; +} + +.drawer-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 0; + min-height: 44px; +} + +.drawer-label { + font-size: 14px; + color: #606266; + font-weight: 500; + flex-shrink: 0; + margin-right: 16px; +} + +:deep(.n-drawer-content__body) { + padding: 20px; +} + +:deep(.n-drawer-header) { + padding: 20px 20px 16px; + border-bottom: 1px solid #e4e7ed; +} + +:deep(.n-drawer-header__main) { + font-size: 18px; + font-weight: 600; + color: #303133; +} diff --git a/src/renderer/src/components/HomePage.vue b/src/renderer/src/components/HomePage.vue index 207f81a..6e3474f 100644 --- a/src/renderer/src/components/HomePage.vue +++ b/src/renderer/src/components/HomePage.vue @@ -1,5 +1,5 @@

Q@houf3*Bwm1QSA_3gm_3M@438 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≺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 P*TBe0DNEK#7>E21z4ZL1 diff --git a/src/main/childProcessManager.ts b/src/main/childProcessManager.ts index a53f9dd..1edbf76 100644 --- a/src/main/childProcessManager.ts +++ b/src/main/childProcessManager.ts @@ -29,10 +29,6 @@ function safeUnpipe(): void { vspipe.proc.stdout.unpipe(ffmpeg.proc.stdin) } catch {} - try { - ffmpeg.proc.stdin.end() - } - catch {} } } diff --git a/src/main/index.ts b/src/main/index.ts index f1a39d9..d4aa957 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -12,14 +12,15 @@ import { writeSettingsJson } from './writeFile' function createWindow(): BrowserWindow { const mainWindow = new BrowserWindow({ - width: 900, - height: 700, - minWidth: 900, - minHeight: 670, + width: 1000, + height: 875, + minWidth: 1000, + minHeight: 875, show: false, autoHideMenuBar: true, + frame: false, + resizable: true, icon: nativeImage.createFromPath(appIcon), - title: 'VSET 4.3.6', webPreferences: { preload: path.join(__dirname, '../preload/index.js'), sandbox: false, @@ -27,6 +28,23 @@ function createWindow(): BrowserWindow { }) // ipcMain + + ipcMain.on('window:minimize', () => { + mainWindow?.minimize() + }) + + ipcMain.on('window:maximize', () => { + if (mainWindow?.isMaximized()) { + mainWindow.unmaximize() + } + else { + mainWindow?.maximize() + } + }) + + ipcMain.on('window:close', () => { + mainWindow?.close() + }) ipcMain.on(IpcChannelSend.EXECUTE_COMMAND, runCommand) ipcMain.on(IpcChannelSend.PAUSE, PauseCommand) diff --git a/src/main/runCommand.ts b/src/main/runCommand.ts index 0ff5a0d..117f1df 100644 --- a/src/main/runCommand.ts +++ b/src/main/runCommand.ts @@ -42,13 +42,118 @@ function generate_cmd(taskConfig: TaskConfig, hasAudio: boolean, hasSubtitle: bo return cmd } +// 新增:获取输入视频信息的独立函数 +async function getInputVideoInfo(event: IpcMainEvent, video: string): Promise<{ + hasAudio: boolean + hasSubtitle: boolean + videoStream: any +}> { + const ffprobePath = getExecPath().ffprobe + + const ffprobeCommand = `"${ffprobePath}" -v error -show_streams -of json "${video}"` + const { stdout: probeOut } = await exec(ffprobeCommand) + const metadata = JSON.parse(probeOut) + + const allStreams = metadata.streams || [] + const videoStream = allStreams.find((s: any) => s.codec_type === 'video') + const hasAudio = allStreams.some((s: any) => s.codec_type === 'audio') + const hasSubtitle = allStreams.some((s: any) => s.codec_type === 'subtitle') + + if (videoStream) { + const frameCount = videoStream.nb_frames || '未知' + const frameRate = videoStream.avg_frame_rate || '未知' + const resolution = `${videoStream.width}x${videoStream.height}` + const audioText = hasAudio ? '是' : '否' + const subtitleText = hasSubtitle ? '是' : '否' + + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `正在处理输入视频 ${video} 的信息:\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数(输入): ${frameCount}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率(输入): ${frameRate}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `分辨率(输入): ${resolution}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有音频: ${audioText}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有字幕: ${subtitleText}\n`) + } + + return { + hasAudio, + hasSubtitle, + videoStream, + } +} + +// 新增:获取输出视频信息的独立函数 +async function getOutputVideoInfo(event: IpcMainEvent, vpyPath: string): Promise<{ + width: string + height: string + frames: string + fps: string +}> { + const vspipePath = getExecPath().vspipe + + const info: { + width: string + height: string + frames: string + fps: string + } = { + width: '未知', + height: '未知', + frames: '0', + fps: '0', + } + + await new Promise((resolve, reject) => { + const vspipeInfoProcess = spawn(vspipePath, ['--info', vpyPath]) + addProcess('vspipe', vspipeInfoProcess) + + let vspipeOut = '' // 用于保存 stdout 内容 + // eslint-disable-next-line unused-imports/no-unused-vars + let stderrOut = '' // 用于保存 stderr 内容 + + vspipeInfoProcess.stdout.on('data', (data: Buffer) => { + const str = iconv.decode(data, 'gbk') + vspipeOut += str + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `${str}`) + }) + + vspipeInfoProcess.stderr.on('data', (data: Buffer) => { + const str = iconv.decode(data, 'gbk') + stderrOut += str + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `${str}`) + }) + + vspipeInfoProcess.on('close', (code) => { + removeProcess(vspipeInfoProcess) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `vspipe info 执行完毕,退出码: ${code}\n`) + + info.width = vspipeOut.match(/Width:\s*(\d+)/)?.[1] || '未知' + info.height = vspipeOut.match(/Height:\s*(\d+)/)?.[1] || '未知' + info.frames = vspipeOut.match(/Frames:\s*(\d+)/)?.[1] || '0' + info.fps = vspipeOut.match(/FPS:\s*([\d/]+)\s*\(([\d.]+) fps\)/)?.[2] || '0' + + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `======= 输出视频信息 =======\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `宽: ${info.width}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `高: ${info.height}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数: ${info.frames}\n`) + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率: ${info.fps}\n`) + resolve() + }) + + vspipeInfoProcess.on('error', (err) => { + event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `vspipe 执行出错: ${err.message}\n`) + reject(err) + }) + }) + + return info +} + export async function runCommand(event: IpcMainEvent, taskConfig: TaskConfig): Promise { const vpyContent = taskConfig.vpyContent const ffmpegCMD = taskConfig.ffmpegCMD const vspipePath = getExecPath().vspipe const ffmpegPath = getExecPath().ffmpeg - const ffprobePath = getExecPath().ffprobe const videos = Array.isArray(taskConfig.fileList) ? taskConfig.fileList : [] @@ -62,99 +167,21 @@ export async function runCommand(event: IpcMainEvent, taskConfig: TaskConfig): P } try { // ========== 1. 获取输入视频信息 ========== - const ffprobeCommand = `"${ffprobePath}" -v error -show_streams -of json "${video}"` - const { stdout: probeOut } = await exec(ffprobeCommand) - const metadata = JSON.parse(probeOut) - - const allStreams = metadata.streams || [] - const videoStream = allStreams.find((s: any) => s.codec_type === 'video') - const hasAudio = allStreams.some((s: any) => s.codec_type === 'audio') - const hasSubtitle = allStreams.some((s: any) => s.codec_type === 'subtitle') - - if (videoStream) { - const frameCount = videoStream.nb_frames || '未知' - const frameRate = videoStream.avg_frame_rate || '未知' - const resolution = `${videoStream.width}x${videoStream.height}` - const audioText = hasAudio ? '是' : '否' - const subtitleText = hasSubtitle ? '是' : '否' // 字幕信息 - - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `正在处理输入视频 ${video} 的信息:\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数(输入): ${frameCount}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率(输入): ${frameRate}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `分辨率(输入): ${resolution}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有音频: ${audioText}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `是否含有字幕: ${subtitleText}\n`) - } + const { hasAudio, hasSubtitle } = await getInputVideoInfo(event, video) // ========== 2. 生成 vpy 文件 ========== - // 生成唯一 vpy 路径 const baseName = path.basename(video, path.extname(video)) const vpyPath = getGenVpyPath(taskConfig, baseName) await writeVpyFile(null, vpyPath, vpyContent, video) // ========== 3. 获取输出视频信息 ========== - let info: { - width: string - height: string - frames: string - fps: string - } = { - width: '未知', - height: '未知', - frames: '0', - fps: '0', - } - await new Promise((resolve, reject) => { - const vspipeInfoProcess = spawn(vspipePath, ['--info', vpyPath]) - addProcess('vspipe', vspipeInfoProcess) - - let vspipeOut = '' // 用于保存 stdout 内容 - // eslint-disable-next-line unused-imports/no-unused-vars - let stderrOut = '' // 用于保存 stderr 内容 - - vspipeInfoProcess.stdout.on('data', (data: Buffer) => { - const str = iconv.decode(data, 'gbk') - vspipeOut += str - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `${str}`) - }) - - vspipeInfoProcess.stderr.on('data', (data: Buffer) => { - const str = iconv.decode(data, 'gbk') - stderrOut += str - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `${str}`) - }) - - vspipeInfoProcess.on('close', (code) => { - removeProcess(vspipeInfoProcess) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `vspipe info 执行完毕,退出码: ${code}\n`)/////// - - info = { - width: vspipeOut.match(/Width:\s*(\d+)/)?.[1] || '未知', - height: vspipeOut.match(/Height:\s*(\d+)/)?.[1] || '未知', - frames: vspipeOut.match(/Frames:\s*(\d+)/)?.[1] || '0', - fps: vspipeOut.match(/FPS:\s*([\d/]+)\s*\(([\d.]+) fps\)/)?.[2] || '0', - } - - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `======= 输出视频信息 =======\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `宽: ${info.width}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `高: ${info.height}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧数: ${info.frames}\n`) - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `帧率: ${info.fps}\n`) - resolve() - }) - - vspipeInfoProcess.on('error', (err) => { - event.sender.send(IpcChannelOn.FFMPEG_OUTPUT, `vspipe 执行出错: ${err.message}\n`) - reject(err) - }) - }) + const info = await getOutputVideoInfo(event, vpyPath) // ========== 4. 构建渲染命令 ========== const vspipeArgs = ffmpegCMD[0].replace(MagicStr.VPY_PATH, vpyPath) const ffmpegMajorArgs = ffmpegCMD[1] const ffmpegMinorArgs = ffmpegCMD[2] const ffmpeg_audio_sub_Args = generate_cmd(taskConfig, hasAudio, hasSubtitle) - const ffmpegArgs = ffmpegMajorArgs.replace(MagicStr.VIDEO_PATH, video) + ffmpeg_audio_sub_Args + ffmpegMinorArgs.replace(MagicStr.VIDEO_NAME, path.join(taskConfig.outputFolder, `${baseName}_enhance`) + taskConfig.videoContainer) const full_cmd = `${`"${vspipePath}" ${vspipeArgs}`} | "${ffmpegPath}" ${ffmpegArgs}` diff --git a/src/preload/index.ts b/src/preload/index.ts index 8a02264..a9b19a9 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,9 +1,13 @@ import { electronAPI } from '@electron-toolkit/preload' -import { contextBridge } from 'electron' +import { contextBridge, ipcRenderer } from 'electron' // Custom APIs for renderer const api = {} - +contextBridge.exposeInMainWorld('electronWindow', { + minimize: () => ipcRenderer.send('window:minimize'), + maximize: () => ipcRenderer.send('window:maximize'), + close: () => ipcRenderer.send('window:close'), +}) // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise // just add to the DOM global. diff --git a/src/renderer/index.html b/src/renderer/index.html index d697473..0088a11 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -2,7 +2,7 @@ - VSET 4.3.6 + VSET 4.4.0 VNode { return () => h(NIcon, null, { default: () => h(icon) }) } const menuOptions: MenuOption[] = [ - { - whateverLabel: '主页', - whateverKey: 'home', - icon: renderIcon(homeIcon), - path: '/', - }, - - { - whateverLabel: '输入', - whateverKey: 'input', - icon: renderIcon(inputIcon), - path: '/input', - }, - - { - whateverLabel: '增强', - whateverKey: 'enhance', - icon: renderIcon(enhanceIcon), - path: '/enhance', - }, - - { - whateverLabel: '滤镜', - whateverKey: 'filter', - icon: renderIcon(filterIcon), - path: '/filter', - }, - - { - whateverLabel: '输出', - whateverKey: 'output', - icon: renderIcon(outputIcon), - path: '/output', - }, - - { - whateverLabel: '渲染', - whateverKey: 'render', - icon: renderIcon(renderingIcon), - path: '/render', - }, - { - whateverLabel: '预览', - whateverKey: 'preview', - icon: renderIcon(PreviewIcon), - path: '/preview', - }, - + { whateverLabel: '主页', whateverKey: 'home', icon: renderIcon(homeIcon), path: '/' }, + { whateverLabel: '输入', whateverKey: 'input', icon: renderIcon(inputIcon), path: '/input' }, + { whateverLabel: '增强', whateverKey: 'enhance', icon: renderIcon(enhanceIcon), path: '/enhance' }, + { whateverLabel: '滤镜', whateverKey: 'filter', icon: renderIcon(filterIcon), path: '/filter' }, + { whateverLabel: '输出', whateverKey: 'output', icon: renderIcon(outputIcon), path: '/output' }, + { whateverLabel: '渲染', whateverKey: 'render', icon: renderIcon(renderingIcon), path: '/render' }, + { whateverLabel: '预览', whateverKey: 'preview', icon: renderIcon(PreviewIcon), path: '/preview' }, ] export default defineComponent({ setup() { const router = useRouter() + const collapsed = ref(true) + const onMenuChange = (value: string): void => { router.push(value) } + // 添加折叠状态切换处理函数 + const handleCollapseChange = (isCollapsed: boolean) => { + collapsed.value = isCollapsed + } + + const handleMinimize = () => window.electronWindow?.minimize() + const handleMaximize = () => window.electronWindow?.maximize() + const handleClose = () => window.electronWindow?.close() + router.push('/home') return { - collapsed: ref(true), + appIcon, + collapsed, menuOptions, onMenuChange, + handleCollapseChange, // 导出折叠处理函数 + handleMinimize, + handleMaximize, + handleClose, + Remove, + Square, + Close, } }, }) @@ -90,17 +72,41 @@ export default defineComponent({ diff --git a/src/renderer/src/components/EnhancePage.vue b/src/renderer/src/components/EnhancePage.vue index 6555366..b32ac33 100644 --- a/src/renderer/src/components/EnhancePage.vue +++ b/src/renderer/src/components/EnhancePage.vue @@ -80,170 +80,178 @@ function ShowVfiExtra(): void {