From 79a1929e79a4c70806bdbb48422339a4e7b4c076 Mon Sep 17 00:00:00 2001 From: lq1405 <2769838458@qq.com> Date: Thu, 13 Jun 2024 00:37:31 +0800 Subject: [PATCH] =?UTF-8?q?V=202.2.9=20=E8=87=AA=E5=8A=A8=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=EF=BC=8C=E6=89=8B=E5=8A=A8=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron.vite.config.1710168376515.mjs | 1 - package-lock.json | 55 +- package.json | 7 +- resources/scripts/requirements.txt | 298 +++++ src/api/discordApi.js | 10 +- src/define/define_string.js | 15 +- src/define/logger_define.js | 12 + src/define/setting/dynamicSetting.js | 66 + src/define/setting/imageSetting.js | 4 +- src/main/IPCEvent/index.js | 32 + src/main/IPCEvent/mjIpc.js | 3 + src/main/IPCEvent/promptIpc.js | 18 + src/main/IPCEvent/settingIpc.js | 17 + src/main/Original/MJOriginalImageGenerate.js | 133 +- src/main/Original/OriginalImageGenerate.js | 3 +- src/main/Public/Image.js | 2 +- src/main/Public/Prompt.js | 82 ++ src/main/Public/SD.js | 2 +- src/main/backPrompt/imageGenerate.js | 14 +- src/main/backPrompt/videoGenerate.js | 6 +- src/main/discord/discordScript.js | 2 +- src/main/discord/discordSimple.js | 2 +- src/main/func.js | 8 +- src/main/generalTools.js | 8 +- src/main/index.js | 30 +- src/main/setting/setting.js | 11 +- src/preload/index.js | 16 +- src/preload/mj.js | 3 + src/preload/prompt.js | 17 + src/preload/setting.js | 17 + src/renderer/src/App.vue | 2 +- .../Backstep/BatchSaveImageSetting.vue | 2 +- .../src/components/Backstep/CopyWriting.vue | 4 +- .../src/components/Backstep/GetFrame.vue | 4 +- .../src/components/Backstep/OneKeyMatrix.vue | 8 +- .../components/Backstep/PushBackPrompt.vue | 2 +- .../src/components/Backstep/ReGenerate.vue | 14 +- .../components/Backstep/oneImageReDrwa.vue | 2 +- src/renderer/src/components/Clip/AddDraft.vue | 2 +- .../src/components/Clip/AlignDraft.vue | 2 +- .../Components/DynamicTagsSelect.vue | 158 +++ .../Components/GenerateAllImages.vue | 10 +- .../components/Components/ManageBadPrompt.vue | 4 +- .../Components/ModifyPromptChinese.vue | 4 +- .../Components/SelectImageStyle.vue | 10 +- .../components/Components/ShowImageTag.vue | 2 +- src/renderer/src/components/Home/Home.vue | 17 +- .../src/components/Home/ReDrawImageWD.vue | 16 +- .../Original/Components/AddCharacterTag.vue | 15 +- .../Original/Components/AddPrefixTags.vue | 2 +- .../Original/Components/AddSceneTags.vue | 280 +++-- .../Original/Components/AddStyleTags.vue | 4 +- .../Original/Components/AddSuffixTags.vue | 2 +- .../Original/Components/CharacterAnalyze.vue | 2 +- .../Original/Components/CharacterTags.vue | 15 +- .../Components/DataTableCharacterAndScene.vue | 126 +- .../Components/DataTableGptPromptRow.vue | 2 +- .../Components/DataTableParameterRow.vue | 2 +- .../Components/DataTablePromptRow.vue | 111 +- .../Components/DataTableShowGenerateImage.vue | 20 +- .../Original/Components/EditWord.vue | 27 +- .../Original/Components/ImportWordAndSrt.vue | 6 +- .../Original/Components/PromptSetting.vue | 3 - .../src/components/Original/DataTable.vue | 509 ++++---- .../src/components/Original/MainPage.vue | 42 +- .../src/components/Original/MenuButton.vue | 4 +- .../src/components/Setting/ClipSetting.vue | 4 +- .../Setting/Components/AddGptPrompts.vue | 6 +- .../src/components/Setting/MJSetting.vue | 10 +- .../src/components/Setting/SDSetting.vue | 4 +- .../src/components/Setting/Setting.vue | 6 +- .../Setting/VideoGenerateSetting.vue | 1078 +++++++++-------- .../src/components/Watermark/GetWaterMask.vue | 15 +- src/renderer/src/main.js | 3 + src/stores/image.js | 18 + src/stores/prompt.js | 68 ++ 76 files changed, 2499 insertions(+), 1042 deletions(-) create mode 100644 resources/scripts/requirements.txt create mode 100644 src/main/IPCEvent/index.js create mode 100644 src/main/IPCEvent/promptIpc.js create mode 100644 src/main/Public/Prompt.js create mode 100644 src/preload/prompt.js create mode 100644 src/preload/setting.js create mode 100644 src/renderer/src/components/Components/DynamicTagsSelect.vue create mode 100644 src/stores/image.js create mode 100644 src/stores/prompt.js diff --git a/electron.vite.config.1710168376515.mjs b/electron.vite.config.1710168376515.mjs index fdf9f40..31d658d 100644 --- a/electron.vite.config.1710168376515.mjs +++ b/electron.vite.config.1710168376515.mjs @@ -2,7 +2,6 @@ import { resolve } from "path"; import { defineConfig, externalizeDepsPlugin } from "electron-vite"; import vue from "@vitejs/plugin-vue"; -import Jsx from "@vitejs/plugin-vue-jsx"; var electron_vite_config_default = defineConfig({ main: { plugins: [externalizeDepsPlugin()] diff --git a/package-lock.json b/package-lock.json index 77c9a99..571406f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "laitool", - "version": "2.2.8", + "version": "2.2.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "laitool", - "version": "2.2.6", + "version": "2.2.8", "hasInstallScript": true, "dependencies": { "@alicloud/alimt20181012": "^1.2.0", @@ -35,6 +35,7 @@ "node-reg": "^0.2.4", "npm": "^10.7.0", "paddle": "^1.0.0", + "pinia": "^2.1.7", "sharp": "^0.33.2", "systeminformation": "^5.22.10", "tencentcloud-sdk-nodejs": "^4.0.821", @@ -9281,6 +9282,56 @@ "node": ">=6" } }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.8", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.8.tgz", + "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/pixelmatch": { "version": "4.0.2", "license": "ISC", diff --git a/package.json b/package.json index 9dc9a74..f1df5f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "laitool", - "version": "2.2.8", + "version": "2.2.9", "description": "An Electron application with Vue", "main": "./out/main/index.js", "author": "example.com", @@ -43,6 +43,7 @@ "node-reg": "^0.2.4", "npm": "^10.7.0", "paddle": "^1.0.0", + "pinia": "^2.1.7", "sharp": "^0.33.2", "systeminformation": "^5.22.10", "tencentcloud-sdk-nodejs": "^4.0.821", @@ -85,8 +86,6 @@ "resources/scripts/model/**", "resources/scripts/Lai.exe", "resources/scripts/_internal/**", - "resources/scripts/lama/lama_inpaint.exe", - "resources/scripts/lama/model/**", "resources/scripts/discordScript.js", "resources/tmp/**", "resources/icon.ico" @@ -95,4 +94,4 @@ "icon": "./resources/icon.ico" } } -} \ No newline at end of file +} diff --git a/resources/scripts/requirements.txt b/resources/scripts/requirements.txt new file mode 100644 index 0000000..b45888f --- /dev/null +++ b/resources/scripts/requirements.txt @@ -0,0 +1,298 @@ +accelerate==0.30.1 +addict==2.4.0 +aiofiles==23.2.1 +aiohttp==3.8.6 +aiosignal==1.3.1 +alibabacloud-bailian20230601==1.6.1 +alibabacloud-credentials==0.3.3 +alibabacloud-endpoint-util==0.0.3 +alibabacloud-gateway-spi==0.0.1 +alibabacloud-openapi-util==0.2.2 +alibabacloud-tea==0.3.6 +alibabacloud-tea-openapi==0.3.9 +alibabacloud-tea-util==0.3.12 +alibabacloud-tea-xml==0.0.2 +aliyun-python-sdk-core==2.15.0 +aliyun-python-sdk-kms==2.16.2 +altair==5.3.0 +altgraph==0.17.4 +annotated-types==0.6.0 +anthropic==0.26.1 +antlr4-python3-runtime==4.9.3 +anyio==4.3.0 +APScheduler==3.10.4 +arxiv==2.1.0 +astor==0.8.1 +asttokens==2.4.1 +async-timeout==4.0.3 +attrdict==2.0.1 +attrs==23.2.0 +av==11.0.0 +azure-cognitiveservices-speech==1.37.0 +Babel==2.15.0 +backports.tarfile==1.1.1 +baidu-aip==4.16.13 +bce-python-sdk==0.9.11 +beautifulsoup4==4.12.3 +bidict==0.23.1 +blinker==1.8.2 +broadscope-bailian==1.3.1 +cachetools==5.3.3 +certifi==2024.2.2 +cffi==1.16.0 +cfgv==3.4.0 +chardet==5.2.0 +charset-normalizer==3.3.2 +chatgpt-tool-hub==0.5.0 +cheroot==10.0.1 +click==8.1.7 +colorama==0.4.6 +coloredlogs==15.0.1 +comtypes==1.4.2 +contourpy==1.2.1 +controlnet-aux==0.0.3 +crcmod==1.7 +cryptography==42.0.5 +cssselect==1.2.0 +cssutils==2.11.0 +ctranslate2==4.1.0 +curl_cffi==0.6.4 +cx-Logging==3.1.0 +cx_Freeze==6.15.16 +cycler==0.12.1 +Cython==3.0.10 +dashscope==1.19.2 +datasets==2.18.0 +decorator==4.4.2 +diffusers==0.27.2 +dill==0.3.8 +dingtalk-stream==0.18.1 +distlib==0.3.8 +distro==1.9.0 +dnspython==2.6.1 +dulwich==0.22.1 +easydict==1.13 +edge-tts==6.1.12 +einops==0.7.0 +elevenlabs==1.0.3 +email_validator==2.1.1 +et-xmlfile==1.1.0 +exceptiongroup==1.2.1 +executing==2.0.1 +fastapi==0.108.0 +fastapi-cli==0.0.2 +faster-whisper==1.0.1 +feedparser==6.0.10 +ffmpy==0.3.2 +filelock==3.13.1 +fire==0.6.0 +Flask==3.0.3 +flask-babel==4.0.0 +flatbuffers==24.3.7 +fonttools==4.53.0 +frozenlist==1.4.1 +fsspec==2024.2.0 +future==1.0.0 +gast==0.5.4 +google-ai-generativelanguage==0.6.4 +google-api-core==2.19.0 +google-api-python-client==2.130.0 +google-auth==2.29.0 +google-auth-httplib2==0.2.0 +google-generativeai==0.5.4 +googleapis-common-protos==1.63.0 +gradio==4.21.0 +gradio_client==0.12.0 +grpcio==1.64.0 +grpcio-status==1.62.2 +gTTS==2.5.1 +h11==0.14.0 +HTMLParser==0.0.2 +httpcore==1.0.5 +httplib2==0.22.0 +httptools==0.6.1 +httpx==0.27.0 +huggingface-hub==0.23.2 +humanfriendly==10.0 +identify==2.5.36 +idna==3.6 +imageio==2.34.0 +imageio-ffmpeg==0.4.9 +imgaug==0.4.0 +importlib_metadata==7.0.2 +importlib_resources==6.4.0 +install==1.3.5 +IOPaint==1.3.3 +ipython==8.24.0 +itsdangerous==2.2.0 +jaraco.context==5.3.0 +jaraco.functools==4.0.1 +jedi==0.19.1 +Jinja2==3.1.3 +jiter==0.4.0 +jmespath==0.10.0 +jsonschema==4.22.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.5 +langid==1.1.6 +lazy_loader==0.4 +lief==0.14.1 +linkai==0.0.6.0 +lmdb==1.4.1 +loguru==0.7.2 +lxml==5.2.2 +markdown-it-py==3.0.0 +MarkupSafe==2.1.5 +matplotlib==3.9.0 +matplotlib-inline==0.1.7 +mdurl==0.1.2 +modelscope==1.13.1 +more-itertools==10.2.0 +moviepy==1.0.3 +mpmath==1.3.0 +multidict==6.0.5 +multiprocess==0.70.16 +networkx==3.2.1 +nodeenv==1.8.0 +Nuitka==2.1.2 +numpy==1.24.2 +omegaconf==2.3.0 +onnxruntime==1.17.1 +openai==0.27.8 +opencv-contrib-python==4.6.0.66 +opencv-python==4.6.0.66 +opencv-python-headless==4.9.0.80 +openpyxl==3.1.2 +opt-einsum==3.3.0 +optionaldict==0.1.2 +ordered-set==4.1.0 +orjson==3.10.3 +oss2==2.18.4 +packaging==24.0 +paddleocr==2.7.3 +paddlepaddle==2.6.1 +pandas==2.2.1 +parso==0.8.4 +pdf2docx==0.5.8 +pefile==2023.2.7 +peft==0.7.1 +piexif==1.1.3 +pillow==10.3.0 +platformdirs==4.2.0 +pre-commit==3.7.1 +premailer==3.10.0 +proglog==0.1.10 +prompt-toolkit==3.0.43 +proto-plus==1.23.0 +protobuf==3.20.2 +psutil==5.9.8 +pure-eval==0.2.2 +pyarrow==15.0.1 +pyarrow-hotfix==0.6 +pyasn1==0.6.0 +pyasn1_modules==0.4.0 +pyclipper==1.3.0.post5 +pycparser==2.21 +pycryptodome==3.20.0 +pydantic==2.5.3 +pydantic_core==2.14.6 +pydub==0.25.1 +Pygments==2.18.0 +pyinstaller==6.5.0 +pyinstaller-hooks-contrib==2024.3 +PyJWT==2.8.0 +PyMuPDF==1.24.5 +PyMuPDFb==1.24.3 +pyOpenSSL==24.1.0 +pyoxidizer==0.24.0 +pyparsing==3.1.2 +pypiwin32==223 +pypng==0.20220715.0 +PyQRCode==1.2.1 +pyreadline3==3.4.1 +pytesseract==0.3.10 +python-dateutil==2.9.0.post0 +python-docx==1.1.2 +python-dotenv==1.0.1 +python-engineio==4.9.1 +python-multipart==0.0.9 +python-socketio==5.7.2 +pyttsx3==2.90 +pytz==2024.1 +pywin32==306 +pywin32-ctypes==0.2.2 +PyYAML==6.0.1 +qrcode==7.4.2 +rapidfuzz==3.9.3 +rarfile==4.2 +referencing==0.35.1 +regex==2024.5.15 +requests==2.31.0 +rich==13.7.1 +rpds-py==0.18.1 +rsa==4.9 +ruff==0.4.7 +safetensors==0.4.3 +scenedetect==0.6.3 +scikit-image==0.23.2 +scipy==1.12.0 +semantic-version==2.10.0 +sgmllib3k==1.0.0 +shapely==2.0.4 +shellingham==1.5.4 +simple-websocket==1.0.0 +simplejson==3.19.2 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +soupsieve==2.5 +SpeechRecognition==3.10.4 +stack-data==0.6.3 +starlette==0.32.0.post1 +sympy==1.12 +tenacity==8.2.3 +termcolor==2.4.0 +tifffile==2024.5.22 +tiktoken==0.4.0 +timm==1.0.3 +tokenizers==0.19.1 +tomli==2.0.1 +tomlkit==0.12.0 +toolz==0.12.1 +torch==2.1.2+cu118 +torchvision==0.16.2+cu118 +tqdm==4.66.2 +traitlets==5.14.3 +transformers==4.41.2 +typer==0.12.3 +typer-config==1.4.0 +typing_extensions==4.10.0 +tzdata==2024.1 +tzlocal==5.2 +ujson==5.9.0 +uritemplate==4.1.1 +urllib3==2.2.1 +utility==1.0 +uvicorn==0.29.0 +virtualenv==20.26.2 +visualdl==2.5.3 +watchfiles==0.21.0 +wcwidth==0.2.13 +web.py==0.62 +websocket-client==1.2.0 +websockets==11.0.3 +wechatpy==1.8.18 +Werkzeug==3.0.3 +wikipedia==1.4.0 +win32-setctime==1.1.0 +wolframalpha==5.0.0 +wsproto==1.2.0 +xlrd==2.0.1 +xmltodict==0.13.0 +xxhash==3.4.1 +yacs==0.1.8 +yapf==0.40.2 +yarl==1.9.4 +zhipuai==2.1.0.20240521 +zipp==3.18.1 +zstandard==0.22.0 diff --git a/src/api/discordApi.js b/src/api/discordApi.js index 467517c..31728f3 100644 --- a/src/api/discordApi.js +++ b/src/api/discordApi.js @@ -87,15 +87,7 @@ export class DiscordAPI { if (typeof res_data == "string") { res_data = JSON.parse(res_data); } - if (res_data && res_data.code != 1) { - if (res_data.message) { - throw new Error(res_data.message); - } else if (res_data.description) { - throw new Error(res_data.description) - } else { - throw new Error("未知错误,可联系管理员排查"); - } - } + // 直接返回,错误信息外面判断 return res_data; } catch (error) { throw error; diff --git a/src/define/define_string.js b/src/define/define_string.js index 61761c9..64b1bda 100644 --- a/src/define/define_string.js +++ b/src/define/define_string.js @@ -6,6 +6,7 @@ export const DEFINE_STRING = { GET_DEFINE_CONFIG_JSON_BY_PROPERTY: "GET_DEFINE_CONFIG_JSON_BY_PROPERTY", GET_IMAGE_GENERATE_CATEGORY: "GET_IMAGE_GENERATE_CATEGORY", SHOW_MAIN_NOTIFICATION: "SHOW_MAIN_NOTIFICATION", + SHOW_GLOABAL_MESSAGE: "SHOW_GLOABAL_MESSAGE", CHECK_MACHINE_ID: "CHECK_MACHINE_ID", GET_CUSTOMIZE_GPT_PROMPT: "GET_CUSTOMIZE_GPT_PROMPT", GENERATE_GPT_EXAMPLE_OUT: "GENERATE_GPT_EXAMPLE_OUT", @@ -159,7 +160,9 @@ export const DEFINE_STRING = { GET_GENERATED_MJ_IMAGE_AND_SPLIT: "GET_GENERATED_MJ_IMAGE_AND_SPLIT", DOWNLOAD_IMAGE_URL_AND_SPLIT: "DOWNLOAD_IMAGE_URL_AND_SPLIT", GET_MJ_IMAGE_SCALE: 'GET_MJ_IMAGE_SCALE', - GET_MJ_IMAGE_ROBOT_MODEL: "GET_MJ_IMAGE_ROBOT_MODEL" + GET_MJ_IMAGE_ROBOT_MODEL: "GET_MJ_IMAGE_ROBOT_MODEL", + MACTH_USER_RETURN: "MACTH_USER_RETURN", + AUTO_MATCH_USER: "AUTO_MATCH_USER", }, DISCORD: { OPERATE_REFRASH_DISCORD_URL: "OPERATE_REFRASH_DISCORD_URL", @@ -188,5 +191,15 @@ export const DEFINE_STRING = { }, SYSTEM: { OPEN_FILE: "OPEN_FILE", + }, + SETTING: { + GET_DATA_BY_TYPE_AND_PROPERTY: "GET_DATA_BY_TYPE_AND_PROPERTY", + SAVE_DATA_BY_TYPE_AND_PROPERTY: "SAVE_DATA_BY_TYPE_AND_PROPERTY", + DELETE_DATA_BY_TYPE_AND_PROPERTY: "DELETE_DATA_BY_TYPE_AND_PROPERTY", + }, + PROMPT: { + GET_SORT_OPTIONS: "GET_SORT_OPTIONS", + SAVE_PROMPT_SORT_DATA: "SAVE_PROMPT_SORT_DATA", + GET_PROMPT_SORT_DATA: "GET_PROMPT_SORT_DATA" } } \ No newline at end of file diff --git a/src/define/logger_define.js b/src/define/logger_define.js index da291df..effea38 100644 --- a/src/define/logger_define.js +++ b/src/define/logger_define.js @@ -1,3 +1,15 @@ export const LOGGER_DEFINE = { + REMOVE_WATERMARK: "去除水印", + ORIGINAL_AUTO_MATCH_USER: "原创自动匹配用户", + + PROMPT: { + GET_PROMPT_SORT_OPTIONS: "获取所有的排序选项", + SAVE_PROMPT_SORT_DATA: "保存提示词排序的数据", + GET_PROMPT_SORT_DATA: "获取提示词排序的数据" + }, + + GLOBAL: { + PARAM_ERROR: "参数错误", + } } \ No newline at end of file diff --git a/src/define/setting/dynamicSetting.js b/src/define/setting/dynamicSetting.js index 2e523ee..1570b0e 100644 --- a/src/define/setting/dynamicSetting.js +++ b/src/define/setting/dynamicSetting.js @@ -2,6 +2,7 @@ let fspromises = require('fs').promises; import { get, cloneDeep } from 'lodash'; import { define } from '../define'; +import { errorMessage } from '../../main/generalTools'; export class DynamicSetting { constructor(global) { @@ -114,6 +115,71 @@ export class DynamicSetting { throw error; } } +} +// 初始化一个对象 +let dynamic = new DynamicSetting(global); +/** + * 将传入的数据和当前的数据进行拼接返回,判断类型 + * @param {*} value + */ +export async function GetDataByTypeAndProperty(value) { + try { + // 判断value的类型是不是string + if (typeof value == "string") { + value = JSON.parse(value); + } + // 判断必要的数据是不是存在 + if (!value.mainType || !value.property) { + throw new Error("传入的数据不完整"); + } + value.defaultData = value.defaultData ? value.defaultData : []; + let res = await dynamic.getDataByTypeAndProperty('dynamic', value.mainType, value.property, [], []); + return res; + + } catch (error) { + return errorMessage(error.toString()); + } + +} + +/** + * 保存数据,注意,这里不能传递回调函数 + * @param {*} value + */ +export async function SaveDataByTypeAndProperty(value) { + try { + if (typeof value == "string") { + value = JSON.parse(value); + } + // 判断必要的数据是不是存在 + if (!value.mainType || !value.property || !value.data) { + throw new Error("传入的数据不完整"); + } + let res = await dynamic.saveDataByTypeAndProperty(value.data, value.mainType, value.property, null); + return res; + } catch (error) { + return errorMessage(error.toString()); + } +} + +/** + * 删除数据 + * @param {*} value + */ +export async function DeleteDataByTypeAndProperty(value) { + try { + if (typeof value == "string") { + value = JSON.parse(value); + } + // 判断必要的数据是不是存在 + if (!value.id || !value.mainType || !value.property) { + throw new Error("传入的数据不完整"); + } + let res = await dynamic.deleteDataByTypeAndProperty(value.id, value.mainType, value.property); + return res; + } catch (error) { + return errorMessage(error.toString()); + } } \ No newline at end of file diff --git a/src/define/setting/imageSetting.js b/src/define/setting/imageSetting.js index 2eefdb4..e239128 100644 --- a/src/define/setting/imageSetting.js +++ b/src/define/setting/imageSetting.js @@ -214,8 +214,8 @@ export const ImageSetting = { * @param {*} value * 0 define中的指定属性(指定的配置文件) * 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据 - * 2 是不是要校验属性不存在 - * 3 属性没有找到的默认值 + * 2 要写入的值 + * 3 是不是要校验属性不存在 */ async SaveDefineConfigJsonByProperty(value) { try { diff --git a/src/main/IPCEvent/index.js b/src/main/IPCEvent/index.js new file mode 100644 index 0000000..1fe1677 --- /dev/null +++ b/src/main/IPCEvent/index.js @@ -0,0 +1,32 @@ +import { PromptIpc } from "./promptIpc" +import { SettingIpc } from './settingIpc.js' +import { ImageGenerateIpc } from './imageGenerateIpc.js' +import { WritingIpc } from './writingIpc.js' +import { VideoGenerateIpc } from './videoGenerateIpc' +import { TranslateIpc } from './translateIpc.js' +import { GptIpc } from './gptIpc.js' +import { MjIpc } from './mjIpc.js' +import { OriginalImageGenerateIpc } from './originalImageGenerateIpc' +import { SdIpc } from './sdIpc.js' +import { MainIpc } from './mainIpc.js' +import { GlobalIpc } from "./globalIpc.js"; +import { ImageIpc } from "./imageIpc.js"; +import { SystemIpc } from "./system.js"; + +export function RegisterIpc(createWindow) { + PromptIpc() + SettingIpc(); + ImageGenerateIpc(); + WritingIpc(); + VideoGenerateIpc(); + TranslateIpc(); + GptIpc(); + SdIpc(); + MjIpc(); + MainIpc(createWindow); + OriginalImageGenerateIpc(); + GlobalIpc(); + ImageIpc(); + SystemIpc(); +} + diff --git a/src/main/IPCEvent/mjIpc.js b/src/main/IPCEvent/mjIpc.js index c08092d..f92c720 100644 --- a/src/main/IPCEvent/mjIpc.js +++ b/src/main/IPCEvent/mjIpc.js @@ -63,6 +63,9 @@ function MjIpc() { // 获取所有的MJ生图模型 ipcMain.handle(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL, async (event) => await mjSimple.GetMJImageRobotModel()); + // 自动匹配用户表标签 + ipcMain.handle(DEFINE_STRING.MJ.AUTO_MATCH_USER, async (event, value) => await mJOriginalImageGenerate.AutoMatchUser(value)); + /** * 监听DISCORD界面创建消息,并修改数据 */ diff --git a/src/main/IPCEvent/promptIpc.js b/src/main/IPCEvent/promptIpc.js new file mode 100644 index 0000000..0cce8a8 --- /dev/null +++ b/src/main/IPCEvent/promptIpc.js @@ -0,0 +1,18 @@ +import { ipcMain } from "electron"; +import { DEFINE_STRING } from '../../define/define_string' +import { Prompt } from "../Public/Prompt"; +let prompt = new Prompt(); + +function PromptIpc() { + // 获取所有的排序选项 + ipcMain.handle(DEFINE_STRING.PROMPT.GET_SORT_OPTIONS, (event) => prompt.GetPromptSortOptions()); + + // 保存提示词排序数据 + ipcMain.handle(DEFINE_STRING.PROMPT.SAVE_PROMPT_SORT_DATA, (event, value) => prompt.SavePromptSort(value)); + + // 获取已经保存的提示词数据 + ipcMain.handle(DEFINE_STRING.PROMPT.GET_PROMPT_SORT_DATA, (event) => prompt.GetPromptSort()) +} +export { + PromptIpc +} \ No newline at end of file diff --git a/src/main/IPCEvent/settingIpc.js b/src/main/IPCEvent/settingIpc.js index 2461f43..5589912 100644 --- a/src/main/IPCEvent/settingIpc.js +++ b/src/main/IPCEvent/settingIpc.js @@ -2,11 +2,13 @@ const { ipcMain, app } = require("electron") import { DEFINE_STRING } from '../../define/define_string' +import { GetDataByTypeAndProperty, SaveDataByTypeAndProperty, DeleteDataByTypeAndProperty } from '../../define/setting/dynamicSetting'; import { Setting } from '../setting/setting' let setting = new Setting(global); + async function SettingIpc() { // 获取背景音乐配置列表 @@ -65,6 +67,21 @@ async function SettingIpc() { // // 保存指定的配置文件里面指定的属性的数据 ipcMain.handle(DEFINE_STRING.SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY, async (event, value) => await setting.SaveDefineConfigJsonByProperty(value)) + + + //#region 动态设置(只是动态设置) + + // 获取动态配置的的指定主分类,指定的属性的数据(只是获取动态的,type定死了dynamic) + ipcMain.handle(DEFINE_STRING.SETTING.GET_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await GetDataByTypeAndProperty(value)); + + // 保存动态配置的的指定主分类,指定的属性的数据 + ipcMain.handle(DEFINE_STRING.SETTING.SAVE_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await SaveDataByTypeAndProperty(value)); + + // 删除动态配置的的指定主分类,指定的属性的数据 + ipcMain.handle(DEFINE_STRING.SETTING.DELETE_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await DeleteDataByTypeAndProperty(value)); + + //#endregion + } export { diff --git a/src/main/Original/MJOriginalImageGenerate.js b/src/main/Original/MJOriginalImageGenerate.js index bbeb19e..138a9b7 100644 --- a/src/main/Original/MJOriginalImageGenerate.js +++ b/src/main/Original/MJOriginalImageGenerate.js @@ -8,11 +8,14 @@ import { Tools } from "../tools"; import path from 'path' import sharp from 'sharp' import { define } from "../../define/define"; -import { AwesomeRegx } from "awesome-js"; +import { AwesomeHelp } from "awesome-js"; import { checkStringValueAddSuffix, errorMessage, successMessage } from "../generalTools"; import { ImageSetting } from "../../define/setting/imageSetting"; import { DiscordAPI } from "../../api/discordApi"; import { GPT } from "../Public/GPT"; +import { TagDefine } from "../../define/tagDefine"; +import { cloneDeep } from "lodash"; +import { LOGGER_DEFINE } from "../../define/logger_define"; const { v4: uuidv4 } = require('uuid'); /** @@ -26,15 +29,122 @@ export class MJOriginalImageGenerate { this.tools = new Tools(); this.discordAPI = new DiscordAPI(); this.gpt = new GPT(global); + this.tagDefine = new TagDefine(global); } /** * 返回指定的人物到前端 * @param {*} data */ - sendChangeMessage(data) { - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.DISCORD.MAIN_DISCORD_MESSAGE_CHANGE, data); + sendChangeMessage(data, message_name = DEFINE_STRING.DISCORD.MAIN_DISCORD_MESSAGE_CHANGE) { + this.global.newWindow[0].win.webContents.send(message_name, data); } + /** + * 通过文本自动匹配数据 + * @param {*} value + */ + async AutoMatchUser(value) { + try { + value = JSON.parse(value); + // 获取所有的角色数据,包括别名 + // 获取所有的角色数据 + let character_tags = await this.tagDefine.getTagDataByTypeAndProperty("dynamic", "character_tags"); + if (character_tags.code == 0) { + return errorMessage("获取角色数据错误,错误信息如下:" + character_tags.message, LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER) + } + character_tags = character_tags.data; + if (character_tags.length == 0) { + return errorMessage("请先添加角色数据", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER) + } + let character_tags_data = []; + for (let i = 0; i < character_tags.length; i++) { + let item = character_tags[i]; + // 这边还要判断是不是显示(只有显示的才hi自动匹配) + if (!item.hasOwnProperty("isShow") || !item.isShow) { + continue; + } + + let temp_name = [item.label]; + // 判断当前的数是不是存在别名 + if (item.children && item.children.length > 0) { + for (let j = 0; j < item.children.length; j++) { + const element = item.children[j]; + temp_name.push(element.label); + } + } + character_tags_data.push({ + key: item.key, + value: item.value, + names: temp_name + }) + } + if (character_tags_data.length == 0) { + return errorMessage("当前没有显示的角色数据,请先选择哪些是要显示的角色数据", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER) + } + + + for (let i = 0; i < value.length; i++) { + const element = value[i]; + + let res_data = { + code: 1, + id: element.id, // 当前 data 的ID + match_character: [], + } + + // 获取当前的字幕数据 + let temp_sub = []; + for (let j = 0; element.suValue && j < element.suValue.length; j++) { + const element = array[j]; + temp_sub.push(element.srt_value); + } + let word = ""; + if (temp_sub.length == 0) { + word = element.after_gpt; + } else { + word = temp_sub.join(","); + } + + let match_keys = []; + + // 开始循环判断,只要又一个满足就跳出新婚换 + for (let j = 0; j < character_tags_data.length; j++) { + const item = character_tags_data[j]; + let names = AwesomeHelp.makeSensitiveMap(item.names); + // 开始判断 + let name_res = AwesomeHelp.checkSensitiveWord(word, false, names); + if (name_res.size > 0) { + match_keys.push(item.key); + } + } + + // 判断是不是又匹配到的数据 + if (match_keys.length > 0) { + // 进行数据的处理,通过对应的key,获取对应的数据,将所有的数进行返回 + for (let i = 0; i < match_keys.length; i++) { + const item = match_keys[i]; + let index = character_tags.findIndex(x => x.key == item); + if (index == -1) { + continue; + } + let temp_item_data = cloneDeep(character_tags[index]); + if (temp_item_data.children) { + delete temp_item_data.children + } + res_data.match_character.push(temp_item_data) + } + } + + // 开始往前端传递数据 + this.sendChangeMessage(res_data, DEFINE_STRING.MJ.MACTH_USER_RETURN); + } + return successMessage(null, "人物标签自动匹配完成", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER) + } catch (error) { + return errorMessage("通过文本自动匹配数据错误,错误信息如下:" + error.message, LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER) + } + } + + /** * 初始化MJ设置 */ @@ -290,6 +400,11 @@ export class MJOriginalImageGenerate { "Authorization": mjSetting.api_key } res = await this.discordAPI.mjApiImagine(imagine_url, data, headers); + + if (res.code == 24) { + throw new Error("提示词包含敏感词,请修改后重试"); + } + } else if (imagine_url.includes("api.ephone.ai")) { // ePhoneAPI let headers = { @@ -306,6 +421,15 @@ export class MJOriginalImageGenerate { } res = await this.discordAPI.mjApiImagine(imagine_url, data, headers); } + + // 错误检查 + if (res.code == 23) { + throw new Error("生图队列已满,请稍后尝试"); + } + + if (res.code != 1 && res.code != 22) { + throw new Error("未知错误,可联系管理员排查" + res.description); + } // 创建成功,开始下一个 this.sendChangeMessage({ code: 1, @@ -406,7 +530,6 @@ export class MJOriginalImageGenerate { } let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false); - let image_styles = await ImageStyleDefine.getImageStyleStringByIds(style_ids.data); // 替换风格的逻辑 let current_task = null; @@ -419,7 +542,7 @@ export class MJOriginalImageGenerate { // 拼接提示词 // 图生图的链接 // 获取风格词 + 命令后缀 - let prompt = " " + image_styles + old_prompt + (mjSetting.image_suffix ? mjSetting.image_suffix : ""); + let prompt = old_prompt + (mjSetting.image_suffix ? mjSetting.image_suffix : ""); // 判断当前生图模式 let request_model = mjSetting.request_model diff --git a/src/main/Original/OriginalImageGenerate.js b/src/main/Original/OriginalImageGenerate.js index 3957f3d..a34b063 100644 --- a/src/main/Original/OriginalImageGenerate.js +++ b/src/main/Original/OriginalImageGenerate.js @@ -62,13 +62,12 @@ export class OriginalImageGenerate { let seed = sd_setting.setting.seed; let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false); - let image_styles = await ImageStyleDefine.getImageStyleStringByIds(style_ids.data); for (let i = 0; i < data.length; i++) { const element = data[i]; let adetailer = element.adetailer; let imageJson = JSON.parse(await fspromises.readFile(path.normalize(element.prompt_json), 'utf-8')); - let prompt = sd_setting.webui.prompt + image_styles + ',' + element.prompt; + let prompt = sd_setting.webui.prompt + ',' + element.prompt; // 添加前缀 if (prefix_prompt) { prompt = prefix_prompt + ',' + prompt; diff --git a/src/main/Public/Image.js b/src/main/Public/Image.js index 29d450b..4f3ee3d 100644 --- a/src/main/Public/Image.js +++ b/src/main/Public/Image.js @@ -3,7 +3,7 @@ import path, { resolve } from "path"; import { Tools } from "../tools"; import fs from "fs"; import { ImageSetting } from "../../define/setting/imageSetting"; -import { isEmpty, reject } from "lodash"; +import { isEmpty } from "lodash"; import { basicApi } from "../../api/apiBasic"; import sharp from 'sharp'; import { file, image } from "../../define/Tools"; diff --git a/src/main/Public/Prompt.js b/src/main/Public/Prompt.js new file mode 100644 index 0000000..16d09bc --- /dev/null +++ b/src/main/Public/Prompt.js @@ -0,0 +1,82 @@ +import { errorMessage, successMessage } from "../generalTools"; +import { LOGGER_DEFINE } from '../../define/logger_define' +import { Setting } from "../setting/setting"; + +export class Prompt { + constructor() { + this.setting = new Setting(global); + } + + /** + * 获取所有的排序选项 + */ + GetPromptSortOptions() { + return successMessage([ + { + label: '人物', + value: 'character' + }, { + label: '场景', + value: 'scene' + }, { + label: '提示词', + value: 'prompt' + }, { + label: '风格', + value: 'style' + } + ], null, LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_OPTIONS); + } + + + /** + * 保存SD排序的选项 + * @param {*} value + */ + async SavePromptSort(value) { + try { + // 将当前数据保存 + await this.setting.SaveDefineConfigJsonByProperty(JSON.stringify(['img_base', 'prompt_sort', value])); + return successMessage(null, "保存提示词排序顺序成功", LOGGER_DEFINE.PROMPT.SAVE_PROMPT_SORT_DATA); + + } catch (error) { + return errorMessage(error.toString(), LOGGER_DEFINE.PROMPT.SAVE_PROMPT_SORT_DATA); + } + } + + /** + * 获取当前的 + */ + async GetPromptSort() { + try { + let res = await this.setting.GetDefineConfigJsonByProperty(JSON.stringify(['img_base', 'prompt_sort', false, []])) + if (res.code == 0) { + throw new Error(res.message); + } + res = res.data; + if (res && res.length == 0) { + res = [ + { + label: '风格', + value: 'style' + }, + { + label: '人物', + value: 'character' + }, + { + label: '场景', + value: 'scene' + }, + { + label: '提示词', + value: 'prompt' + } + ] + } + return successMessage(res, "获取数据成功", LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_DATA) + } catch (error) { + return errorMessage(error.toString(), LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_DATA) + } + } +} \ No newline at end of file diff --git a/src/main/Public/SD.js b/src/main/Public/SD.js index 36b8399..b2b7aff 100644 --- a/src/main/Public/SD.js +++ b/src/main/Public/SD.js @@ -110,7 +110,7 @@ export class SD { return successMessage(data); } catch (error) { - return errorMessage("加载数据失败,错误信息如下:" +error.toString()); + return errorMessage("加载数据失败,错误信息如下:" + error.toString()); } } diff --git a/src/main/backPrompt/imageGenerate.js b/src/main/backPrompt/imageGenerate.js index fecbbff..448df49 100644 --- a/src/main/backPrompt/imageGenerate.js +++ b/src/main/backPrompt/imageGenerate.js @@ -13,6 +13,8 @@ const execAsync = util.promisify(exec); const { v4: uuidv4 } = require('uuid'); // 引入UUID库来生成唯一标识符 let fspromises = require("fs").promises; import { ImageSetting } from "../../define/setting/imageSetting"; +import { errorMessage } from "../generalTools"; +import { LOGGER_DEFINE } from "../../define/logger_define"; export class ImageGenerate { @@ -339,7 +341,7 @@ export class ImageGenerate { // 监听总批次完成 this.global.requestQuene.setBatchCompletionCallback(batch, (failedTasks) => { - debugger + if (failedTasks.length > 0) { let message = ` 批次生成任务都已完成。 @@ -489,16 +491,10 @@ export class ImageGenerate { } else { - return { - code: 0, - message: "参数错误" - } + return errorMessage("参数错误", LOGGER_DEFINE.GLOBAL.PARAM_ERROR) } } catch (error) { - return { - code: 0, - message: error.toString() - } + return errorMessage(error.toString(), "imageGenerate_DownloadImageFile"); } } } \ No newline at end of file diff --git a/src/main/backPrompt/videoGenerate.js b/src/main/backPrompt/videoGenerate.js index b5b9aa1..a0b7c97 100644 --- a/src/main/backPrompt/videoGenerate.js +++ b/src/main/backPrompt/videoGenerate.js @@ -364,8 +364,12 @@ export class VideoGenerate { await fspromises.writeFile(project_config_path, JSON.stringify(obj)); // let task_list = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path,'scripts/task_'))); let scriptPath = path.join(define.scripts_path, 'Lai.exe'); + let gpu = this.global.gpu.type; + if (video_config.libx264) { + gpu = "OTHER" + } // 执行生成图片的脚本 - let script = `cd "${define.scripts_path}" && "${scriptPath}" -c "${project_config_path.replaceAll('\\', '/')}" "${this.global.gpu.type}"`; + let script = `cd "${define.scripts_path}" && "${scriptPath}" -c "${project_config_path.replaceAll('\\', '/')}" "${gpu}"`; const output = await execAsync(script, { maxBuffer: 1024 * 1024 * 10, encoding: 'utf-8' }); if (output.stderr != '') { obj.status = "video_error"; diff --git a/src/main/discord/discordScript.js b/src/main/discord/discordScript.js index fdb4b6b..6c75f3f 100644 --- a/src/main/discord/discordScript.js +++ b/src/main/discord/discordScript.js @@ -382,7 +382,7 @@ function startObserving() { if (window.observer) { return; } - debugger + // 没有开始监听 MutationObserverElement(); console.log("开始监听") diff --git a/src/main/discord/discordSimple.js b/src/main/discord/discordSimple.js index 35ba607..feb05bf 100644 --- a/src/main/discord/discordSimple.js +++ b/src/main/discord/discordSimple.js @@ -507,7 +507,7 @@ export class DiscordSimple { if (window.observer) { return; } - debugger + // 没有开始监听 MutationObserverElement(); console.log("开始监听") diff --git a/src/main/func.js b/src/main/func.js index 02c1a91..4592d4d 100644 --- a/src/main/func.js +++ b/src/main/func.js @@ -1052,7 +1052,13 @@ async function StartStoryboarding(value) { global.newWindow[0].win.webContents.send(DEFINE_STRING.GET_FRAME_RETUN, { code: 1, data: "正在调用进程。请勿关闭程序" }) let cc = `${path.join(define.scripts_path, 'Lai.exe')}`; - let child = spawn(cc, ["-a", value.video_path, frame_path, input_path, value.sensitivity, global.gpu.type], { encoding: 'utf-8' }); + // 获取生成视频设置 + let video_config = JSON.parse(await fspromises.readFile(define.video_config, 'utf-8')); + let gpu = global.gpu.type; + if (video_config.libx264) { + gpu = "OTHER"; + } + let child = spawn(cc, ["-a", value.video_path, frame_path, input_path, value.sensitivity, gpu], { encoding: 'utf-8' }); child.on('error', console.error) child.stdout.on('data', (data) => { console.log(data.toString()); diff --git a/src/main/generalTools.js b/src/main/generalTools.js index a3df91f..e17a38e 100644 --- a/src/main/generalTools.js +++ b/src/main/generalTools.js @@ -72,8 +72,8 @@ function checkStringValueDeletePrefix(value, prefix) { * @returns */ function successMessage(data, message = null, service = null) { - if (service && message) { - global.logger.info(service, `成功返回数据`); + if (service) { + global.logger.info(service, message ? message : '成功返回数据'); } return { code: 1, @@ -89,8 +89,8 @@ function successMessage(data, message = null, service = null) { * @returns */ function errorMessage(message, service = null) { - if (service && message) { - global.logger.error(service, message); + if (service) { + global.logger.error(service, message ? message : '未知报错,没有捕获的错误'); } return { code: 0, diff --git a/src/main/index.js b/src/main/index.js index a4c4492..2a421da 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -18,22 +18,9 @@ import { Setting } from './setting/setting.js' import { has, isEmpty } from 'lodash' // ipc -import { SettingIpc } from './IPCEvent/settingIpc.js' -import { ImageGenerateIpc } from './IPCEvent/imageGenerateIpc.js' -import { WritingIpc } from './IPCEvent/writingIpc.js' -import { VideoGenerateIpc } from './IPCEvent/videoGenerateIpc' -import { TranslateIpc } from './IPCEvent/translateIpc.js' -import { GptIpc } from './IPCEvent/gptIpc.js' -import { MjIpc } from './IPCEvent/mjIpc.js' -import { OriginalImageGenerateIpc } from './IPCEvent/originalImageGenerateIpc' -import { SdIpc } from './IPCEvent/sdIpc.js' import { DiscordIpc, RemoveDiscordIpc } from './IPCEvent/discordIpc.js' -import { MainIpc } from './IPCEvent/mainIpc.js' -import { GlobalIpc } from "./IPCEvent/globalIpc.js"; -import { ImageIpc } from "./IPCEvent/imageIpc.js"; -import { SystemIpc } from "./IPCEvent/system.js"; -import { system } from "systeminformation"; import { Logger } from "./logger.js"; +import { RegisterIpc } from "./IPCEvent/index.js"; let tools = new Tools(); let imageGenerate = new ImageGenerate(global); @@ -226,20 +213,7 @@ app.on('window-all-closed', () => { } }) - -SettingIpc(); -ImageGenerateIpc(); -WritingIpc(); -VideoGenerateIpc(); -TranslateIpc(); -GptIpc(); -SdIpc(); -MjIpc(); -MainIpc(createWindow); -OriginalImageGenerateIpc(); -GlobalIpc(); -ImageIpc(); -SystemIpc(); +RegisterIpc(createWindow); ipcMain.handle('dark-mode:toggle', (event, value) => { diff --git a/src/main/setting/setting.js b/src/main/setting/setting.js index ae8d201..2bf2a9d 100644 --- a/src/main/setting/setting.js +++ b/src/main/setting/setting.js @@ -317,7 +317,11 @@ export class Setting { /** * 获取指定的配置文件里面指定的属性的数据 - * @param {*} value + * @param {*} value 执行方法必要的信息 + * 0 define中的指定属性(指定的配置文件) + * 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据 + * 2 是不是要校验属性不存在 + * 3 属性没有找到的默认值 */ async GetDefineConfigJsonByProperty(value) { return ImageSetting.GetDefineConfigJsonByProperty(value); @@ -326,6 +330,11 @@ export class Setting { /** * 保存指定的配置文件里面指定的属性的数据 + * @param {*} value + * 0 define中的指定属性(指定的配置文件) + * 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据 + * 2 要写入的值 + * 3 是不是要校验属性不存在 */ async SaveDefineConfigJsonByProperty(value) { return ImageSetting.SaveDefineConfigJsonByProperty(value); diff --git a/src/preload/index.js b/src/preload/index.js index 8c0a124..c2afc12 100644 --- a/src/preload/index.js +++ b/src/preload/index.js @@ -6,6 +6,8 @@ import { mj } from './mj.js'; import { sd } from './sd.js'; import { img } from './img.js'; import { system } from './system.js'; +import { setting } from './setting.js' +import { prompt } from './prompt.js'; // Custom APIs for renderer let events = []; @@ -395,19 +397,23 @@ const api = { // 打开全局通知框 showGlobalNotificationDialog: (value) => ipcRenderer.send(DEFINE_STRING.SHOW_MAIN_NOTIFICATION, value), + // 打开全局的消息框 + showGlobalMessage: (value) => ipcRenderer.send(DEFINE_STRING.SHOW_GLOABAL_MESSAGE, value), + // 知道文件地址,获取文件base64编码 GetFileBase64: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.GET_FILE_BASE64, value)), + // 打开调试控制台 OpenDevTools: () => ipcRenderer.send(DEFINE_STRING.OPEN_DEV_TOOLS), + + // 打开调试控制台密码 OpenDevToolsPassword: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.OPEN_DEV_TOOLS_PASSWORD, value)), } -// Use `contextBridge` APIs to expose Electron APIs to -// renderer only if context isolation is enabled, otherwise -// just add to the DOM global. if (process.contextIsolated) { try { + contextBridge.exposeInMainWorld('electron', electronAPI) contextBridge.exposeInMainWorld('api', api) contextBridge.exposeInMainWorld('mj', mj) @@ -415,6 +421,8 @@ if (process.contextIsolated) { contextBridge.exposeInMainWorld("sd", sd) contextBridge.exposeInMainWorld("img", img) contextBridge.exposeInMainWorld("system", system) + contextBridge.exposeInMainWorld("setting", setting) + contextBridge.exposeInMainWorld("pmpt", prompt) contextBridge.exposeInMainWorld('darkMode', { toggle: (value) => ipcRenderer.invoke('dark-mode:toggle', value), }) @@ -429,5 +437,7 @@ if (process.contextIsolated) { window.sd = sd; window.img = img; window.system = system; + window.setting = setting; + window.pmpt = prompt; } diff --git a/src/preload/mj.js b/src/preload/mj.js index 7ecb5b8..17d625f 100644 --- a/src/preload/mj.js +++ b/src/preload/mj.js @@ -47,6 +47,9 @@ const mj = { // 获取所有的MJ生图模型 GetMJImageRobotModel: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL)), + + // 自动匹配用户 + AutoMatchUser: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.AUTO_MATCH_USER, value)), } export { diff --git a/src/preload/prompt.js b/src/preload/prompt.js new file mode 100644 index 0000000..36770e2 --- /dev/null +++ b/src/preload/prompt.js @@ -0,0 +1,17 @@ +import { ipcRenderer } from "electron" +import { DEFINE_STRING } from "../define/define_string" + + +const prompt = { + // 获取所有的排序选项 + GetPromptSortOptions: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.GET_SORT_OPTIONS)), + + // 保存提示词排序数据 + SavePromptSort: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.SAVE_PROMPT_SORT_DATA, value)), + + // 获取提示词排序数据 + GetPromptSort: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.GET_PROMPT_SORT_DATA)) +} +export { + prompt +} \ No newline at end of file diff --git a/src/preload/setting.js b/src/preload/setting.js new file mode 100644 index 0000000..d79a08d --- /dev/null +++ b/src/preload/setting.js @@ -0,0 +1,17 @@ +import { ipcRenderer } from "electron" +import { DEFINE_STRING } from "../define/define_string" + + +const setting = { + // 获取动态配置的的指定主分类,指定的属性的数据(只是获取动态的,type定死了dynamic) + GetDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_DATA_BY_TYPE_AND_PROPERTY, value)), + + // 保存动态配置的的指定主分类,指定的属性的数据 + SaveDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.SAVE_DATA_BY_TYPE_AND_PROPERTY, value)), + + // 删除动态配置的的指定主分类,指定的属性的数据 + DeleteDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.DELETE_DATA_BY_TYPE_AND_PROPERTY, value)), +} +export { + setting +} \ No newline at end of file diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 8fa699b..91a7b11 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -43,7 +43,7 @@ export default defineComponent({ javascript, hljs, darkTheme, - themeData, + themeData } } }) diff --git a/src/renderer/src/components/Backstep/BatchSaveImageSetting.vue b/src/renderer/src/components/Backstep/BatchSaveImageSetting.vue index 52eb416..cbc2858 100644 --- a/src/renderer/src/components/Backstep/BatchSaveImageSetting.vue +++ b/src/renderer/src/components/Backstep/BatchSaveImageSetting.vue @@ -167,7 +167,7 @@ export default defineComponent({ * 另存图片的方法 */ async function SaveImage() { - debugger + if (isEmpty(save_setting.value.save_folder)) { message.error("请选择手动保存的文件夹") return diff --git a/src/renderer/src/components/Backstep/CopyWriting.vue b/src/renderer/src/components/Backstep/CopyWriting.vue index c1b70ed..9d55ffe 100644 --- a/src/renderer/src/components/Backstep/CopyWriting.vue +++ b/src/renderer/src/components/Backstep/CopyWriting.vue @@ -265,7 +265,7 @@ export default defineComponent({ // 初始化加载项目下面的分镜好的文案 // 并判断是不是有洗稿后的文件。一并加载 await window.api.GetProjectWord((value) => { - debugger + data.value = value.data }) @@ -358,7 +358,7 @@ export default defineComponent({ let itemIndex = row.subValue.findIndex((item) => item.id == itemId) let thisIndex = data.value.findIndex((item) => item.id == row.id) if (itemIndex < 0 && isM) { - debugger + message.error('数据错误') return } else { diff --git a/src/renderer/src/components/Backstep/GetFrame.vue b/src/renderer/src/components/Backstep/GetFrame.vue index 6931770..ac9feb5 100644 --- a/src/renderer/src/components/Backstep/GetFrame.vue +++ b/src/renderer/src/components/Backstep/GetFrame.vue @@ -175,7 +175,7 @@ export default defineComponent({ */ async function GetVideoFile() { await window.api.SelectFile(['mp4'], (value) => { - debugger + if (value.code == 0) { message.error(value.message) return @@ -193,7 +193,7 @@ export default defineComponent({ message.error('选择分镜的视频地址') return } - debugger + if ( toRaw(frameValue.value) .video_path.split('.') diff --git a/src/renderer/src/components/Backstep/OneKeyMatrix.vue b/src/renderer/src/components/Backstep/OneKeyMatrix.vue index ec8172b..3bb7a60 100644 --- a/src/renderer/src/components/Backstep/OneKeyMatrix.vue +++ b/src/renderer/src/components/Backstep/OneKeyMatrix.vue @@ -244,14 +244,14 @@ export default defineComponent({ // 获取初始化数据(队列任务-这边不能添加) await window.api.GetGenerateTaskList((value) => { - debugger + console.log(value) data.value = value.data.task_list }) // 监听状态刷新事件 window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => { - debugger + console.log(value) let index = data.value.findIndex((item) => item.id == value.id) if (index < 0) { @@ -272,7 +272,7 @@ export default defineComponent({ async function AutoConditionCheck(e) { e.preventDefault() configRef.value?.validate(async (errors) => { - debugger + if (errors) { message.error('请检查必填字段') return @@ -301,7 +301,7 @@ export default defineComponent({ async function ActionTask(e) { e.preventDefault() configRef.value?.validate(async (errors) => { - debugger + console.log(selectRowKeysRef.value) if (selectRowKeysRef.value.length <= 0) { message.error('请选择要操作的任务') diff --git a/src/renderer/src/components/Backstep/PushBackPrompt.vue b/src/renderer/src/components/Backstep/PushBackPrompt.vue index f595840..8490444 100644 --- a/src/renderer/src/components/Backstep/PushBackPrompt.vue +++ b/src/renderer/src/components/Backstep/PushBackPrompt.vue @@ -84,7 +84,7 @@ export default defineComponent({ */ async function DeleteBadPrompt() { await window.api.DeleteBadPrompt((value) => { - debugger + console.log(value) if (value.code == 0) { message.error(value.message) diff --git a/src/renderer/src/components/Backstep/ReGenerate.vue b/src/renderer/src/components/Backstep/ReGenerate.vue index ceaa84c..4a4e0ff 100644 --- a/src/renderer/src/components/Backstep/ReGenerate.vue +++ b/src/renderer/src/components/Backstep/ReGenerate.vue @@ -128,7 +128,7 @@ export default defineComponent({ { trigger: 'hover', disabled: (() => { - debugger + if (row.status == 'error') { return false } else { @@ -246,7 +246,7 @@ export default defineComponent({ ) } await window.api.GetConfigJson(JSON.stringify(['image_style', []]), async (value) => { - debugger + if (value.code == 0) { message.error(value.message) return @@ -266,7 +266,7 @@ export default defineComponent({ // 修改一个 window.api.setEventListen([DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH], (value) => { - debugger + console.log(value) // 修改当前状态 let index = task_list_data.value.findIndex((item) => item.out_folder == value.out_folder) @@ -295,7 +295,7 @@ export default defineComponent({ } formValue.value.image_style_list = tmp_arr await window.api.AddImageTask(toRaw(formValue.value), (value) => { - debugger + if (value.code == 0) { message.error(value.message) return @@ -364,7 +364,7 @@ export default defineComponent({ * 生成全部 */ async function GenerateAllImage() { - debugger + // 生成 对应的json 文件 await window.api.AddWebuiJson(async (value) => { console.log(value) @@ -407,7 +407,7 @@ export default defineComponent({ maskClosable: false, onClose: async () => { // 重新加载数据 - debugger + console.log(selectStyle.value) let tmp_arr = [] for (let i = 0; i < selectStyle.value.length; i++) { @@ -446,7 +446,7 @@ export default defineComponent({ async function RemoveImageTask(row) { //`${task_list.out_folder}_${images[0]}`, batch, task_list.out_folder // 停止当前行的生图任务 - debugger + console.log(row) await getInitData() // 判断该当前状态 diff --git a/src/renderer/src/components/Backstep/oneImageReDrwa.vue b/src/renderer/src/components/Backstep/oneImageReDrwa.vue index 7cca218..cc90b33 100644 --- a/src/renderer/src/components/Backstep/oneImageReDrwa.vue +++ b/src/renderer/src/components/Backstep/oneImageReDrwa.vue @@ -578,7 +578,7 @@ export default defineComponent({ // 监听状态更新事件 window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => { - debugger; + console.log(value) // 修改当前状态 let index = data.value.findIndex(item => item.folder == value.out_folder); diff --git a/src/renderer/src/components/Clip/AddDraft.vue b/src/renderer/src/components/Clip/AddDraft.vue index b4980f5..e9afd8f 100644 --- a/src/renderer/src/components/Clip/AddDraft.vue +++ b/src/renderer/src/components/Clip/AddDraft.vue @@ -26,7 +26,7 @@ export default defineComponent({ onMounted(() => { window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => { - debugger; + code.value = code.value + "\n" + value.data; }) }) diff --git a/src/renderer/src/components/Clip/AlignDraft.vue b/src/renderer/src/components/Clip/AlignDraft.vue index c484da6..cff8cc7 100644 --- a/src/renderer/src/components/Clip/AlignDraft.vue +++ b/src/renderer/src/components/Clip/AlignDraft.vue @@ -77,7 +77,7 @@ export default defineComponent({ message.error("请输入分镜内容"); return; } - debugger; + // 文案内容 let text_value = inputValue.value.split("\n") // 获取当前项目下面地所有草稿 diff --git a/src/renderer/src/components/Components/DynamicTagsSelect.vue b/src/renderer/src/components/Components/DynamicTagsSelect.vue new file mode 100644 index 0000000..0668e35 --- /dev/null +++ b/src/renderer/src/components/Components/DynamicTagsSelect.vue @@ -0,0 +1,158 @@ + + + diff --git a/src/renderer/src/components/Components/GenerateAllImages.vue b/src/renderer/src/components/Components/GenerateAllImages.vue index b580198..81f2e5d 100644 --- a/src/renderer/src/components/Components/GenerateAllImages.vue +++ b/src/renderer/src/components/Components/GenerateAllImages.vue @@ -158,7 +158,7 @@ export default defineComponent({ }, setup(props) { let message = useMessage(); - debugger; + let images = ref( window.ImageInitData.filter((item) => item.id == window.currentImageId)[0] .output_list @@ -232,7 +232,7 @@ export default defineComponent({ window.api.setEventListen( [DEFINE_STRING.REGENERATE_IMAGE_RETUN, window.id], (value) => { - debugger + if (value.type != 1) { return; } @@ -267,7 +267,7 @@ export default defineComponent({ * 重绘图片 */ async function ReGenerateImage(data) { - debugger; + console.log(data); let obj = { id: data.id, @@ -305,7 +305,7 @@ export default defineComponent({ * 获取上一组 */ function GetLast() { - debugger; + let index = window.ImageInitData.findIndex( (item) => item.id == window.currentImageId ); @@ -322,7 +322,7 @@ export default defineComponent({ * 获取下一组 */ function GetNext() { - debugger; + let index = window.ImageInitData.findIndex( (item) => item.id === window.currentImageId ); diff --git a/src/renderer/src/components/Components/ManageBadPrompt.vue b/src/renderer/src/components/Components/ManageBadPrompt.vue index 3d45c9a..a78c398 100644 --- a/src/renderer/src/components/Components/ManageBadPrompt.vue +++ b/src/renderer/src/components/Components/ManageBadPrompt.vue @@ -63,7 +63,7 @@ export default defineComponent({ * 删除 */ async function handleClose(tag) { - debugger; + // 删除对应的数据 tags.value = tags.value.filter(item => item != tag); show_tags.value = show_tags.value.filter(item => item != tag); @@ -94,7 +94,7 @@ export default defineComponent({ * 删除所选的tag(全部) */ async function DeleteTags() { - debugger + let d_l = toRaw(show_tags.value); for (let i = 0; i < d_l.length; i++) { const element = d_l[i]; diff --git a/src/renderer/src/components/Components/ModifyPromptChinese.vue b/src/renderer/src/components/Components/ModifyPromptChinese.vue index eeeb45a..c4a146d 100644 --- a/src/renderer/src/components/Components/ModifyPromptChinese.vue +++ b/src/renderer/src/components/Components/ModifyPromptChinese.vue @@ -79,7 +79,7 @@ export default defineComponent({ if (translateMode.value) { // 翻译单个。马上返回 await window.api.TranslateReturnNow([tags, 'zh', 'en', true], (value) => { - debugger + console.log(value) if (value.code == 0) { message.error(value.message); @@ -115,7 +115,7 @@ export default defineComponent({ * @param {要删除的tag} tag */ async function handleClose(tag) { - debugger + // 删除对应的数据 data.value.chinese_prompt = data.value.chinese_prompt.filter(item => item.src != tag.src); ModifyPrompt(); diff --git a/src/renderer/src/components/Components/SelectImageStyle.vue b/src/renderer/src/components/Components/SelectImageStyle.vue index f290c50..dfb61f3 100644 --- a/src/renderer/src/components/Components/SelectImageStyle.vue +++ b/src/renderer/src/components/Components/SelectImageStyle.vue @@ -176,7 +176,7 @@ export default defineComponent({ ) setLayoutHeight('layout_height') await window.api.GetImageStyleMenu((value) => { - debugger + if (value.code == 0) { message.error(value.message) return @@ -197,7 +197,7 @@ export default defineComponent({ * 菜单选中事件 */ async function SelectMenu(key, item) { - debugger + current_menu = key await getStyleImageSubList() } @@ -214,7 +214,7 @@ export default defineComponent({ style_image_list.value = tags.value.style_tags } else { await window.api.getStyleImageSubList(current_menu, (value) => { - debugger + console.log(value) if (value.code == 0) { message.error(value.message) @@ -232,7 +232,7 @@ export default defineComponent({ } async function closeTag(image) { - debugger + let index = selectStyle.value.findIndex((item) => item.id == image.id) if (index != -1) { selectStyle.value.splice(index, 1) @@ -268,7 +268,7 @@ export default defineComponent({ handleSelect(key) { showDropdownRef.value = false if (key == 'selectStyle') { - debugger + // 将当前的风格添加到选择的风格中 if (current_img.value) { selectStyle.value.push(current_img.value) diff --git a/src/renderer/src/components/Components/ShowImageTag.vue b/src/renderer/src/components/Components/ShowImageTag.vue index 01e9e02..69cb201 100644 --- a/src/renderer/src/components/Components/ShowImageTag.vue +++ b/src/renderer/src/components/Components/ShowImageTag.vue @@ -56,7 +56,7 @@ export default defineComponent({ onMounted(async () => {}) async function closeTag(image) { - debugger + let index = selectStyle.value.findIndex((item) => item.id == image.id) if (index != -1) { selectStyle.value.splice(index, 1) diff --git a/src/renderer/src/components/Home/Home.vue b/src/renderer/src/components/Home/Home.vue index a42b5f5..5995d97 100644 --- a/src/renderer/src/components/Home/Home.vue +++ b/src/renderer/src/components/Home/Home.vue @@ -108,13 +108,10 @@ export default defineComponent({ style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`, maskClosable: false, onClose: async () => { - debugger // 判断该管理控制密码是不是正确 let password = toRaw(key_down_ref.value.data) - console.log(password) // 将密码进行md5加密 let md5_password = MD5(password + DEFINE_STRING.OPEN_DEV_TOOLS).toString() - console.log(md5_password) window.api.OpenDevToolsPassword(md5_password, (value) => { if (value.code == 0) { message.error(value.message) @@ -168,6 +165,19 @@ export default defineComponent({ }) }) + window.api.setEventListen([DEFINE_STRING.SHOW_GLOABAL_MESSAGE], (value) => { + let mess = value.message + let type = 'success' + let title = '成功' + if (value.code == 0) { + type = 'error' + title = '成功但失败' + } else if (value.code == 2) { + ;(type = 'warning'), (title = '警告') + } + message[type](mess, title) + }) + // 弹窗,获取机器码 dialog.create({ showIcon: false, @@ -186,7 +196,6 @@ export default defineComponent({ return false }, onPositiveClick: async () => { - debugger await new Promise(async (resolve, reject) => { await window.api.CheckMachineId(toRaw(machineRef.value.machineId), (value) => { if (value.code == 0) { diff --git a/src/renderer/src/components/Home/ReDrawImageWD.vue b/src/renderer/src/components/Home/ReDrawImageWD.vue index e42d207..7577be2 100644 --- a/src/renderer/src/components/Home/ReDrawImageWD.vue +++ b/src/renderer/src/components/Home/ReDrawImageWD.vue @@ -165,7 +165,7 @@ export default defineComponent({ item.loading = false item.timedata = new Date().getTime() }) - debugger + data.value = value.value }) } @@ -436,7 +436,7 @@ export default defineComponent({ await window.api.TranslatePrompt( [JSON.stringify([row]), 'en', 'zh', window.id, false], (value) => { - debugger + console.log(value) } ) @@ -559,12 +559,12 @@ export default defineComponent({ }) window.api.setEventListen([DEFINE_STRING.TRANSLATE_RETURN_REFRESH, window.id], (value) => { - debugger + if (value.code == 0) { message.error('返回数据错误') return } - debugger + // 直接 let index = data.value.findIndex((item) => item.id == value.rowId) @@ -620,7 +620,7 @@ export default defineComponent({ async function TranslatePrompt(translateData, from, to) { console.log(translateData) await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => { - debugger + console.log(value) }) } @@ -629,7 +629,7 @@ export default defineComponent({ * 翻译中文到提示词 */ async function TranslateChineseToPrompt() { - debugger + // 将当前的prompt和Chinese_prompt中的src全部删除(全部重新翻译) let fileterData = [] for (let i = 0; i < data.value.length; i++) { @@ -650,7 +650,7 @@ export default defineComponent({ let tmp_str = JSON.stringify(fileterData) // 开始调用 await window.api.TranslatePrompt([tmp_str, 'zh', 'en', window.id, true], (value) => { - debugger + console.log(value) }) } @@ -780,7 +780,7 @@ export default defineComponent({ // 翻译立即返回 // 翻译单个。马上返回 await window.api.TranslateReturnNow([tmp_s, 'en', 'zh', true], (value) => { - debugger + console.log(value) if (value.code == 0) { message.error(value.message) diff --git a/src/renderer/src/components/Original/Components/AddCharacterTag.vue b/src/renderer/src/components/Original/Components/AddCharacterTag.vue index 58faa1e..7874b0b 100644 --- a/src/renderer/src/components/Original/Components/AddCharacterTag.vue +++ b/src/renderer/src/components/Original/Components/AddCharacterTag.vue @@ -3,7 +3,10 @@
- + + 显示 { - debugger + console.log(value) if (value.code == 0) { message.error(value.message) @@ -275,7 +280,7 @@ export default defineComponent({ } imageLoading.value = true await window.sd.txt2img(JSON.stringify([d]), async (value) => { - debugger + if (value.code == 0) { message.error(value.message) imageLoading.value = false diff --git a/src/renderer/src/components/Original/Components/AddPrefixTags.vue b/src/renderer/src/components/Original/Components/AddPrefixTags.vue index be59345..27ab56f 100644 --- a/src/renderer/src/components/Original/Components/AddPrefixTags.vue +++ b/src/renderer/src/components/Original/Components/AddPrefixTags.vue @@ -55,7 +55,7 @@ export default defineComponent({ // 开始保存 prefixData.value['type'] = "prefix_main"; await window.mj.SaveTagPropertyData([JSON.stringify(prefixData.value), "prefix_tags"], (value) => { - debugger; + console.log(value); if (value.code == 0) { message.error(value.message); diff --git a/src/renderer/src/components/Original/Components/AddSceneTags.vue b/src/renderer/src/components/Original/Components/AddSceneTags.vue index 933e8bb..60fc170 100644 --- a/src/renderer/src/components/Original/Components/AddSceneTags.vue +++ b/src/renderer/src/components/Original/Components/AddSceneTags.vue @@ -1,18 +1,41 @@ \ No newline at end of file + diff --git a/src/renderer/src/components/Original/Components/AddStyleTags.vue b/src/renderer/src/components/Original/Components/AddStyleTags.vue index 4ac1e2b..a752b21 100644 --- a/src/renderer/src/components/Original/Components/AddStyleTags.vue +++ b/src/renderer/src/components/Original/Components/AddStyleTags.vue @@ -154,7 +154,7 @@ export default defineComponent({ await window.mj.SaveTagPropertyData( [JSON.stringify(styleData.value), 'style_tags'], (value) => { - debugger + console.log(value) if (value.code == 0) { message.error(value.message) @@ -246,7 +246,7 @@ export default defineComponent({ } imageLoading.value = true await window.sd.txt2img(JSON.stringify([d]), async (value) => { - debugger + if (value.code == 0) { message.error(value.message) imageLoading.value = false diff --git a/src/renderer/src/components/Original/Components/AddSuffixTags.vue b/src/renderer/src/components/Original/Components/AddSuffixTags.vue index 188b54c..c893467 100644 --- a/src/renderer/src/components/Original/Components/AddSuffixTags.vue +++ b/src/renderer/src/components/Original/Components/AddSuffixTags.vue @@ -55,7 +55,7 @@ export default defineComponent({ // 开始保存 suffixData.value['type'] = "suffix_main"; await window.mj.SaveTagPropertyData([JSON.stringify(suffixData.value), "suffix_tags"], (value) => { - debugger; + console.log(value); if (value.code == 0) { message.error(value.message); diff --git a/src/renderer/src/components/Original/Components/CharacterAnalyze.vue b/src/renderer/src/components/Original/Components/CharacterAnalyze.vue index 6a227ee..f75da8b 100644 --- a/src/renderer/src/components/Original/Components/CharacterAnalyze.vue +++ b/src/renderer/src/components/Original/Components/CharacterAnalyze.vue @@ -90,7 +90,7 @@ export default defineComponent({ loading.value = true; await window.api.AutoAnalyzeCharacter(toRaw(word.value), (value) => { - debugger + loading.value = false; if (value.code == 0) { message.error(value.message); diff --git a/src/renderer/src/components/Original/Components/CharacterTags.vue b/src/renderer/src/components/Original/Components/CharacterTags.vue index 911e7bb..994c94d 100644 --- a/src/renderer/src/components/Original/Components/CharacterTags.vue +++ b/src/renderer/src/components/Original/Components/CharacterTags.vue @@ -275,7 +275,7 @@ export default defineComponent({ // 设置标签集的自动高度,传一个外面的高度进来 function SetAutoHeight() { - debugger + let div = document.getElementById('tree_define_content') div.style.height = props.height - 180 + 'px' } @@ -318,7 +318,8 @@ export default defineComponent({ show_image: window.config.space_image, cref_cw: 50, lora: '无', - lora_weight: 1 + lora_weight: 1, + isShow: false } currentTags.value = [] currentType.value = 'character_main' @@ -335,7 +336,8 @@ export default defineComponent({ label: null, key: uuidv4(), type: 'scene_main', - prompt: null + prompt: null, + isShow: false } currentType.value = 'scene_main' } @@ -395,7 +397,7 @@ export default defineComponent({ function nodeProps({ option }) { return { onClick() { - debugger + // 执行切换组件和数据 if (option.type == 'style') { currentType.value = 'style' @@ -421,13 +423,16 @@ export default defineComponent({ } else if (option.type == 'min') { message.error('别名节点不允许操作') } else { - debugger + console.log(option) currentType.value = option.type // 修改当前属性 if (currentType.value.startsWith('character')) { // 修改tags的值 currentCharacter.value = option + if(!currentCharacter.value.hasOwnProperty("isShow")){ + currentCharacter.value.isShow = false + } currentTags.value = option.children.map((item) => { return item.label }) diff --git a/src/renderer/src/components/Original/Components/DataTableCharacterAndScene.vue b/src/renderer/src/components/Original/Components/DataTableCharacterAndScene.vue index 9fd5398..456436e 100644 --- a/src/renderer/src/components/Original/Components/DataTableCharacterAndScene.vue +++ b/src/renderer/src/components/Original/Components/DataTableCharacterAndScene.vue @@ -9,15 +9,42 @@ v-model:value="title_character_select_model" placeholder="选择模式" > - - - - - + + + 刷新任务标签数据 + + + + + 自动匹配人物 +
-
+
人物: import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue' -import { NImage, useMessage, NButton, useDialog, NInput, NTag, NSelect, NIcon } from 'naive-ui' +import { + NImage, + useMessage, + NButton, + useDialog, + NInput, + NTag, + NSelect, + NIcon, + NPopover +} from 'naive-ui' import { DEFINE_STRING } from '../../../../../define/define_string' import { cloneDeep, debounce, get, once } from 'lodash' -import { Refresh, Reload } from '@vicons/ionicons5' +import { Refresh, ReloadCircle, ExtensionPuzzle } from '@vicons/ionicons5' +import ProgressDialog from '../../Components/ProgressDialog.vue' export default defineComponent({ components: { @@ -92,7 +130,9 @@ export default defineComponent({ NTag, NSelect, NIcon, - Reload + ReloadCircle, + ExtensionPuzzle, + NPopover }, props: ['type', 'row', 'characterSelectModel', 'tags', 'func'], setup(props) { @@ -103,6 +143,7 @@ export default defineComponent({ let character_tags = ref([]) let scene_tags = ref([]) let tags = ref(props.tags) + let dialog = useDialog() let characterData = ref([]) @@ -114,7 +155,6 @@ export default defineComponent({ watch( () => props.characterSelectModel, (value) => { - debugger // InitData(value); if (value.value == 'drop') { select_character_tags.value = [] @@ -149,7 +189,7 @@ export default defineComponent({ ) onMounted(async () => { - // debugger + // // await InitCharacterAndSceneData() await window.mj.GetTagSelectModel((value) => { characterSelectMoedlOptions.value = value.data @@ -220,14 +260,24 @@ export default defineComponent({ * @param {*} tags */ async function InitCharacterAndSceneData() { - debugger // if (!tags) return character_tags.value = cloneDeep(tags.value.character_tags) - character_tags.value.forEach((item) => { - item.children = null - }) + for (let i = 0; i < character_tags.value.length; i++) { + let item = character_tags.value[i] + character_tags.value[i].children = null + if (!item.hasOwnProperty('isShow') || item.isShow == false) { + character_tags.value.splice(i, 1) + i-- + } + } scene_tags.value = cloneDeep(tags.value.scene_tags) - + for (let i = 0; i < scene_tags.value.length; i++) { + let item = scene_tags.value[i] + if (!item.hasOwnProperty('isShow') || item.isShow == false) { + scene_tags.value.splice(i, 1) + i-- + } + } select_character_tags.value = [] select_scene_tags.value = [] // 初始化数据(选择为true) @@ -304,6 +354,47 @@ export default defineComponent({ } } + let dp = null + /** + * 开始人物匹配 + */ + async function MatchUser() { + // 先监听对应的方法 + window.api.setEventListen([DEFINE_STRING.MJ.MACTH_USER_RETURN], (value) => { + // 返回的数据都是有效的 + // 获取指定 + let temp_data = props.func.getData(null) + // 调用方法,然后,传递一个回调函数 + props.func.modifyData(() => { + + console.log(temp_data) + // 修改当前指定ID的data行 + let index = temp_data.findIndex((x) => x.id == value.id) + if (index >= 0) { + temp_data[index].character_tags = value.match_character + } + return temp_data + }) + }) + // 拿到现在所有的数据 + let da = props.func.getData(null) + // 开始调用方法 + await window.mj.AutoMatchUser(JSON.stringify(da), async (value) => { + setTimeout(() => { + if (dp) { + dp.destroy() + } + }, 1000) + await RefreshTagData() + if (value.code == 0) { + message.error(value.message) + window.api.showGlobalMessageDialog(value) + return + } + window.api.showGlobalMessageDialog(value) + }) + } + return { characterData, row, @@ -321,7 +412,8 @@ export default defineComponent({ title_character_select_model, RefreshTagData, UpdateCharacterSelect, - UpdateSceneSelect + UpdateSceneSelect, + MatchUser } } }) diff --git a/src/renderer/src/components/Original/Components/DataTableGptPromptRow.vue b/src/renderer/src/components/Original/Components/DataTableGptPromptRow.vue index 5b4e4c4..0d6a0c5 100644 --- a/src/renderer/src/components/Original/Components/DataTableGptPromptRow.vue +++ b/src/renderer/src/components/Original/Components/DataTableGptPromptRow.vue @@ -142,7 +142,7 @@ export default defineComponent({ message.error('当前翻译的数据里面没有中文') } } else if (key == 'chinese') { - debugger + let t = [[toRaw(row.value)], 'en', 'zh', false, false] await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => { if (value.code == 0) { diff --git a/src/renderer/src/components/Original/Components/DataTableParameterRow.vue b/src/renderer/src/components/Original/Components/DataTableParameterRow.vue index 70d63dd..8845b73 100644 --- a/src/renderer/src/components/Original/Components/DataTableParameterRow.vue +++ b/src/renderer/src/components/Original/Components/DataTableParameterRow.vue @@ -66,7 +66,7 @@ export default defineComponent({ }); async function onUpdateChecked(v) { - debugger; + row.adetailer = v; } diff --git a/src/renderer/src/components/Original/Components/DataTablePromptRow.vue b/src/renderer/src/components/Original/Components/DataTablePromptRow.vue index 3e30ed2..b153280 100644 --- a/src/renderer/src/components/Original/Components/DataTablePromptRow.vue +++ b/src/renderer/src/components/Original/Components/DataTablePromptRow.vue @@ -1,10 +1,23 @@ \ No newline at end of file + diff --git a/src/renderer/src/components/Watermark/GetWaterMask.vue b/src/renderer/src/components/Watermark/GetWaterMask.vue index 6bce69a..76040cc 100644 --- a/src/renderer/src/components/Watermark/GetWaterMask.vue +++ b/src/renderer/src/components/Watermark/GetWaterMask.vue @@ -174,7 +174,7 @@ export default defineComponent({ * @param image */ function getCurrentWidthHeight(image) { - debugger + let image_width = 512 let image_height = 512 // 设置图片的大小 @@ -212,7 +212,7 @@ export default defineComponent({ * 停止画 */ function stopDrawing() { - debugger + isDrawing = false canvasHistory.push(imageCanvas.value.toDataURL('image/png')) console.log(canvasHistory) @@ -294,7 +294,7 @@ export default defineComponent({ * 回撤 */ async function undo() { - debugger + if (step <= 0) { // 如果没有可以撤销的步骤,就清空画布 imageContext.value.clearRect( @@ -388,7 +388,7 @@ export default defineComponent({ message.error(value.message) return } - debugger + const arrayBuffer = value.data const blob = new Blob([arrayBuffer], { type: 'image/png' }) const reader = new FileReader() @@ -406,7 +406,7 @@ export default defineComponent({ } async function SaveMask() { - debugger + // 判断当前是不是又蒙板 if (canvasHistory.length <= 1) { message.error('请先绘制蒙板') @@ -418,7 +418,7 @@ export default defineComponent({ await window.img.Base64ToFile( JSON.stringify([base64, `data/mask/mask_${new Date().getTime()}.png`]), async (value) => { - debugger + if (value.code == 0) { message.error(value.message) return @@ -486,7 +486,7 @@ export default defineComponent({ }) // 提交处理任务,默认处理文件夹下面的所有的PNG图片 await window.img.BatchProcessImage('tmp/input_crop', (value) => { - debugger + // 不管返回什么,这边都关掉 setTimeout(() => { if (dp) { @@ -496,6 +496,7 @@ export default defineComponent({ if (value.code == 0) { message.error(value.message) + window.api.showGlobalMessageDialog(value) return } window.api.showGlobalMessageDialog(value) diff --git a/src/renderer/src/main.js b/src/renderer/src/main.js index c1b07a3..7354213 100644 --- a/src/renderer/src/main.js +++ b/src/renderer/src/main.js @@ -3,6 +3,8 @@ import { createRouter, createWebHashHistory } from 'vue-router'; import App from './App.vue' import { Home } from '@vicons/ionicons5'; const app = createApp(App); +import { createPinia } from 'pinia' +const pinia = createPinia() const routes = [ { @@ -33,5 +35,6 @@ const router = createRouter({ routes }) app.use(router); +app.use(pinia) app.mount('#app') diff --git a/src/stores/image.js b/src/stores/image.js new file mode 100644 index 0000000..c51b77a --- /dev/null +++ b/src/stores/image.js @@ -0,0 +1,18 @@ +import { defineStore } from "pinia"; + +export const useImageStore = defineStore('image', { + state: () => ({ + dragTarget: null + }), + getters: { + GetDragTarget() { + return this.dragTarget; + } + + }, + actions: { + SetDragTarget(target) { + this.dragTarget = target; + } + } +}); \ No newline at end of file diff --git a/src/stores/prompt.js b/src/stores/prompt.js new file mode 100644 index 0000000..156fad7 --- /dev/null +++ b/src/stores/prompt.js @@ -0,0 +1,68 @@ +import { defineStore } from "pinia"; + +export const usePromptStore = defineStore('prompt', { + state: () => ({ + // 提示词排序 + prompt_sort: [], + selectStyle: [], + suffix: null, // 后缀 + prefix: null, // 前缀 + image_generate_category: null, // 选择生图的分类(sd,mj,d3) + + isInit: false + }), + getters: { + // 获取提示词排序 + GetPromptSort() { + return this.prompt_sort; + }, + // 获取选中的风格 + GetSelectStyle() { + return this.selectStyle + }, + + // 获取前缀 + GetPrefix() { + return this.prefix; + }, + + // 获取后缀 + GetSuffix() { + return this.suffix; + }, + + // 获取生图分类 + GetImageGenerateCategory() { + return this.image_generate_category; + } + }, + actions: { + + // 更新提示词排序 + InitPromptSort(value) { + + this.prompt_sort = value; + }, + + // 更新 + UpdateSelectStyleSort(value) { + this.selectStyle = value; + }, + + // 更新前缀 + UpdatePrefix(value) { + this.prefix = value; + }, + + // 更新后缀 + UpdateSuffix(value) { + this.suffix = value; + }, + + // 更新生图分类 + UpdateImageGenerateCategory(value) { + this.image_generate_category = value; + } + + } +}); \ No newline at end of file