LaiTool V3.0.1-preview.2

This commit is contained in:
lq1405 2024-08-04 15:00:00 +08:00
parent 7312053a20
commit f3a25e9474
29 changed files with 214 additions and 120 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "laitool",
"version": "3.0.1-preview.1",
"version": "3.0.1-preview.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "laitool",
"version": "3.0.1-preview.1",
"version": "3.0.1-preview.2",
"hasInstallScript": true,
"dependencies": {
"@alicloud/alimt20181012": "^1.2.0",

View File

@ -1,6 +1,6 @@
{
"name": "laitool",
"version": "3.0.1-preview.1",
"version": "3.0.1-preview.2",
"description": "An AI tool for image processing, video processing, and other functions.",
"main": "./out/main/index.js",
"author": "laitool.cn",

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -16,7 +16,7 @@
"customize_gpt_prompt": "a93b693e-bb3f-406d-9730-cba43a6585a2",
"character_select_model": "drop",
"image_generate_category": "mj",
"window_wh_bm_remember": true,
"window_wh_bm_remember": false,
"window_wh_bm": {
"x": 1699,
"y": 230,

View File

@ -10,6 +10,7 @@ import { isEmpty, isNumber } from 'lodash'
const { v4: uuidv4 } = require('uuid')
import { version } from '../../../../../package.json'
import { GeneralResponse } from '../../../../model/generalResponse'
import { MJCategroy } from '../../../enum/bookEnum'
export class MJSettingService extends BaseSoftWareService {
static instance: MJSettingService | null = null
@ -31,6 +32,58 @@ export class MJSettingService extends BaseSoftWareService {
return MJSettingService.instance
}
/**
*
*/
InitData() {
// 添加默认数据,然后重新获取
this.transaction(() => {
// 初始化MJ设置的数据
this.realm.create('MjSetting', {
id: uuidv4(),
type: MJCategroy.API_MJ,
selectRobot: 'niji',
imageScale: '3e2772f2-041c-49c6-ba13-d0ed120310b8',
imageSuffix: ' --niji 6 --ar 1:1',
taskCount: 5,
spaceTime: 5,
createTime: new Date(),
updateTime: new Date(),
version: version,
requestModel: MJCategroy.API_MJ,
imageModel: "99377cad-c103-4cee-a958-86a104879328"
})
let apiSetting = this.realm.objects('APIMj');
if (apiSetting.length <= 0) {
this.realm.create('APIMj', {
id: uuidv4(),
mjApiUrl: 'b44c6f24-59e4-4a71-b2c7-3df0c4e35e65',
mjSpeed: 'relaxed',
apiKey: "自己的APIKey",
createTime: new Date(),
updateTime: new Date(),
version: version
})
}
let browserSetting = this.realm.objects('BrowserMJ');
if (browserSetting.length <= 0) {
this.realm.create('BrowserMJ', {
id: uuidv4(),
serviceId: "自己的服务ID",
channelId: '自己的频道ID',
mjBotId: '自己的MJ机器人ID',
nijBotId: '自己的NIJI机器人ID',
token: '自己的Token',
userAgent: "自己的UserAgent",
userAgentCustom: false,
createTime: new Date(),
updateTime: new Date(),
version: version
})
}
})
}
//#region 览器模式的MJ设置
/**
@ -525,7 +578,9 @@ export class MJSettingService extends BaseSoftWareService {
// 获取MJ的基础配置信息
let mjSettings = this.GetMjSetting(null)
if (mjSettings.data.length <= 0) {
throw new Error('没有找到MJ的配置信息请先添加')
this.InitData();
mjSettings = this.GetMjSetting(null)
}
// 获取API的配置信息
let apiSettings = this.GetAPIMjSetting(null)

View File

@ -371,6 +371,10 @@ export const gptDefine = {
} else {
let tmp_id = uuidv4()
value.id = tmp_id
if (property == 'gpt_options') {
value.value = tmp_id
}
gpt.push(value)
}
tmp_gpt[property] = gpt

View File

@ -423,6 +423,9 @@ export class MJOriginalImageGenerate {
// 获取当前的API url
apiUrl = await this.InitMJAPIUrl(mjSetting.apiSetting.mjApiUrl)
} else if (mjSetting.requestModel == MJImageType.REMOTE_MJ) {
// 这边进行等待
console.log(mjSetting)
await this.tools.delay(mjSetting.spaceTime * 1000)
apiUrl = {
mj_url: {
imagine: define.remotemj_api + 'mj/submit/imagine',
@ -454,8 +457,8 @@ export class MJOriginalImageGenerate {
throw new Error('提示词包含敏感词,请修改后重试')
}
} else if (
imagine_url.includes('api.ephone.ai') ||
imagine_url.includes('https://laitool.net')
request_model == MJImageType.API_MJ &&
(imagine_url.includes('api.ephone.ai') || imagine_url.includes('laitool'))
) {
// ePhoneAPI
let headers = {

View File

@ -11,7 +11,7 @@ const Util = require('@alicloud/tea-util')
let fspromises = require('fs').promises
import { SoftwareService } from '../../define/db/service/SoftWare/softwareService'
import { isEmpty } from 'lodash'
import {ValidateJson} from '../../define/Tools/validate'
import { ValidateJson } from '../../define/Tools/validate'
let { Signer } = require('@volcengine/openapi')
@ -29,7 +29,6 @@ export class Translate {
this.softwareService = await SoftwareService.getInstance()
}
// 获取翻译设置
if (!this.translationBusiness || !this.translationAppId || !this.translationSecret) {
let translateSetting = this.softwareService.GetSoftWarePropertyData('translationSetting')
if (isEmpty(translateSetting)) {
throw new Error('翻译设置为空,请先设置')
@ -56,7 +55,6 @@ export class Translate {
this.translationAppId = translateData.translation_app_id
this.translationSecret = translateData.translation_secret
}
}
/**
* 将当前的翻译任务添加到队列中

View File

@ -67,7 +67,6 @@ export class MJOpt {
this.mjSettingService = await MJSettingService.getInstance()
}
this.mjSetting = await this.mjApi.InitMJSetting()
}
/**
* MJ的数据到前端界面

View File

@ -53,31 +53,31 @@ export class TranslateService {
InitialTranslateSetting(): TranslateModel.TranslateModel {
return {
selectModel: TranslateAPIType.BAIDU,
translation_auto: false,
translation_auto: true,
translates: [
{
name: TranslateAPIType.BAIDU,
translation_business: "https://fanyi-api.baidu.com/api/trans/vip/translate",
translation_app_id: undefined,
translation_secret: undefined
translation_app_id: "百度翻译的APP ID",
translation_secret: "百度翻译的密钥"
},
{
name: TranslateAPIType.TENCENT,
translation_business: "https://tmt.tencentcloudapi.com",
translation_app_id: undefined,
translation_secret: undefined
translation_app_id: '腾讯云的APP ID',
translation_secret: "腾讯云的密钥"
},
{
name: TranslateAPIType.VOLCENGINE,
translation_business: "https://translate.volcengineapi.com?",
translation_app_id: undefined,
translation_secret: undefined
translation_app_id: '火山引擎的APP ID',
translation_secret: '火山引擎的密钥'
},
{
name: TranslateAPIType.ALI,
translation_business: "https://mt.cn-hangzhou.aliyuncs.com",
translation_app_id: undefined,
translation_secret: undefined
translation_app_id: '阿里云的APP ID',
translation_secret: '阿里云的密钥'
}
]
}
@ -93,7 +93,10 @@ export class TranslateService {
let translateSettingString = this.softwareService.GetSoftWarePropertyData('translationSetting');
if (isEmpty(translateSettingString)) {
// 初始化
translateSetting = this.InitialTranslateSetting()
translateSetting = this.InitialTranslateSetting();
await this.ResetTranslateSetting();
translateSettingString = this.softwareService.GetSoftWarePropertyData('translationSetting');
translateSetting = JSON.parse(translateSettingString);
} else {
// 解析
let tryParse = ValidateJson(translateSettingString)

View File

@ -23,8 +23,8 @@ export class TTS {
/**
* TTS设置
*/
InitTTSSetting() {
return {
async InitTTSSetting() {
let defaultData = {
selectModel: 'edge-tts',
edgeTTS: {
value: 'zh-CN-XiaoxiaoNeural',
@ -37,6 +37,8 @@ export class TTS {
volumn: 0 // 音量
}
}
await this.SaveTTSConfig(defaultData)
return defaultData
}
/**
@ -50,7 +52,7 @@ export class TTS {
let resObj = undefined
if (isEmpty(res)) {
// 没有数据,需要初始化
resObj = this.InitTTSSetting()
resObj = await this.InitTTSSetting()
} else {
let tryParse = ValidateJson(res)
if (!tryParse) {

View File

@ -36,13 +36,16 @@ export class Watermark {
/**
*
*/
InitWatermarkSetting() {
return {
private InitWatermarkSetting() {
let defaultData = {
selectModel: RemoveWatermarkType.LOCAL_LAMA,
iopaint: {
url: undefined
url: "http://127.0.0.1:8080/"
}
} as ImageModel.RemoveWatermarkSetting
this.softwareService.SaveSoftwarePropertyData('watermarkSetting', JSON.stringify(defaultData))
return defaultData;
}
/**
@ -51,15 +54,17 @@ export class Watermark {
async GetWatermarkSetting() {
try {
await this.InitService();
let watermarkSetting = this.InitWatermarkSetting();
let watermarkSetting = undefined;
let setting = this.softwareService.GetSoftWarePropertyData("watermarkSetting");
if (!isEmpty(setting)) {
// 直接初始化
// 初始化
let tryP = ValidateJson(setting);
if (!tryP) {
throw new Error('解析去除水印的设置失败,数据格式不正确')
}
watermarkSetting = JSON.parse(setting);
} else {
watermarkSetting = this.InitWatermarkSetting()
}
return successMessage(watermarkSetting, '获取去除水印的设置成功', 'Image_GetWatermarkSetting')
} catch (error) {

View File

@ -27,6 +27,12 @@ export class Writing extends ServiceBase {
axios.defaults.baseURL = define.serverUrl
}
/**
* 文案处理GPT进行推理
* @param {*} setting
* @param {*} word
* @returns
*/
async ActionStart(setting, word) {
try {
await this.InitService()

View File

@ -144,16 +144,6 @@ app.whenReady().then(async () => {
optimizer.watchWindowShortcuts(window)
})
global.logger = new Logger(define.logger_path)
// 同步数据
await AutoSync()
global.newWindow = []
mainWindow = await createWindow('ShowMessage', null)
global.requestQuene = new AsyncQueue(global, global.config.task_number)
global.fileQueue = new AsyncQueue(global, 1)
//判断是不是又配置文件没有的话将temp中的基础配置加载
// 判断文件夹是不是存在
let config_p = path.dirname(define.config_path)
@ -206,6 +196,16 @@ app.whenReady().then(async () => {
mainWindow = createWindow('ShowMessage', null)
}
})
global.logger = new Logger(define.logger_path)
// 同步数据
await AutoSync()
global.newWindow = []
mainWindow = await createWindow('ShowMessage', null)
global.requestQuene = new AsyncQueue(global, global.config.task_number)
global.fileQueue = new AsyncQueue(global, 1)
})
// Quit when all windows are closed, except on macOS. There, it's common

View File

@ -34,7 +34,7 @@ async function GlobalAutoSync() {
theme: 'light',
reverse_display_show: false,
reverse_show_book_striped: false,
reverse_data_table_size: 'samll',
reverse_data_table_size: 'small',
globalSetting: initGlobalConfig
})
if (addSfotwareRes.code == 1) {
@ -187,7 +187,7 @@ async function AutoSyncMJConfig2210() {
theme: 'light',
reverse_display_show: false,
reverse_show_book_striped: false,
reverse_data_table_size: 'samll'
reverse_data_table_size: 'small'
}
let res = await _softwareService.AddSfotware(softData)
if (res.code == 0) {

View File

@ -13,6 +13,32 @@ export class GptSetting extends ServiceBase {
axios.defaults.baseURL = define.serverUrl
}
/**
*
* @returns
*/
async InitAISetting() {
let defaultData = {
laiapi: {
gpt_url: 'https://laitool.net/v1/chat/completions',
api_key: "请输入你的LAI API 的 Key",
model: "请输入你的LAI API 的 Model名称"
},
kimi: {
gpt_url: 'https://api.moonshot.cn/v1/chat/completions',
api_key: "请输入你的Kimi API 的 Key",
model: "请输入你的Kimi API 的 Model名称"
},
doubao: {
gpt_url: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',
api_key: "请输入你的Doubao API 的 Key",
model: "请输入你的Doubao API 的 Model名称"
}
}
await this.SaveAISetting(defaultData)
return defaultData
}
/**
*
*/
@ -43,34 +69,18 @@ export class GptSetting extends ServiceBase {
async GetAISetting() {
try {
await this.InitService()
let aiSetting = undefined
let res = this.softService.GetSoftWarePropertyData('aiSetting')
if (isEmpty(res)) {
// 没有数据需要额外初始化
res.data = {
laiapi: {
gpt_url: 'https://laitool.net/v1/chat/completions',
api_key: undefined,
model: undefined
},
kimi: {
gpt_url: 'https://api.moonshot.cn/v1/chat/completions',
api_key: undefined,
model: undefined
},
doubao: {
gpt_url: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',
api_key: undefined,
model: undefined
}
}
aiSetting = await this.InitAISetting();
} else {
let tryP = ValidateJson(res)
if (!tryP) {
throw new Error('AI设置的数据格式不正确')
}
res = JSON.parse(res)
aiSetting = JSON.parse(res)
}
return successMessage(res, '请求成功', 'GptSetting_GetAISetting')
return successMessage(aiSetting, '请求成功', 'GptSetting_GetAISetting')
} catch (error) {
return errorMessage(
'获取软件设置里面的AI设置错误错误信息如下' + error.toString(),

View File

@ -15,15 +15,8 @@ export class WritingSetting {
}
}
/**
* 获取文案的相关配置
*/
async GetWritingConfig() {
try {
await this.InitService()
let res = this.softService.GetSoftWarePropertyData('writeSetting')
if (isEmpty(res)) {
res.data = JSON.stringify({
async InitWritingConfig() {
let defaultConfig = {
split_char: '。,“”‘’!?【】《》()…—:;.,\'\'""!?[]<>()...-:;',
mrege_count: 3,
mrege_char: '',
@ -32,7 +25,20 @@ export class WritingSetting {
merge_char: '',
isRandom: true,
randomCount: 0
})
}
await this.SaveWriteConfig(defaultConfig)
return defaultConfig
}
/**
* 获取文案的相关配置
*/
async GetWritingConfig() {
try {
await this.InitService()
let res = this.softService.GetSoftWarePropertyData('writeSetting')
if (isEmpty(res)) {
res = this.InitWritingConfig()
} else {
let tryP = ValidateJson(res)
if (!tryP) {

View File

@ -452,21 +452,21 @@ export default defineComponent({
}
]
},
{
label: () =>
h(
RouterLink,
{
to: {
name: 'test_options'
}
},
{
default: () => '测试操作'
}
),
key: 'test_options'
},
// {
// label: () =>
// h(
// RouterLink,
// {
// to: {
// name: 'test_options'
// }
// },
// {
// default: () => ''
// }
// ),
// key: 'test_options'
// },
{
label: () =>
h(

View File

@ -154,7 +154,6 @@ export default defineComponent({
await window.mj.SaveTagPropertyData(
[JSON.stringify(styleData.value), 'style_tags'],
(value) => {
console.log(value)
if (value.code == 0) {
message.error(value.message)
@ -217,8 +216,7 @@ export default defineComponent({
]
}
let rules = {
label: ruleObj('必填人物名称'),
prompt: ruleObj('必填英文提示词')
label: ruleObj('必填人物名称')
}
/**
@ -246,7 +244,6 @@ export default defineComponent({
}
imageLoading.value = true
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
if (value.code == 0) {
message.error(value.message)
imageLoading.value = false

View File

@ -1016,7 +1016,9 @@ export default defineComponent({
for (let i = 0; i < promptStore.GetSelectStyle.length; i++) {
const element = promptStore.GetSelectStyle[i]
if (element.type == 'style_main') {
if (element.prompt) {
style_string += element.prompt + ', '
}
if (element.lora && element.lora != '无' && element.lora_weight) {
style_string += `<lora:${element.lora}:${element.lora_weight}>, `
}
@ -1114,7 +1116,7 @@ export default defineComponent({
}
console.log(prompt_str)
prompt_str = prompt_str.replace('${style}', style_str)
prompt_str = prompt_str.replace('${style}', style_str ? style_str : '')
prompt_str = prompt_str.replace('${character}', character_string)
prompt_str = prompt_str.replace('${scene}', scene_string)
prompt_str = prompt_str.replace(
@ -1139,7 +1141,9 @@ export default defineComponent({
for (let i = 0; i < promptStore.GetSelectStyle.length; i++) {
const element = promptStore.GetSelectStyle[i]
if (element.type == 'style_main') {
if (element.prompt) {
style_str += element.prompt + ', '
}
} else {
style_str += element.english_style + ', '
}

View File

@ -91,6 +91,7 @@
<n-input
type="password"
placeholder="请输入密钥"
show-password-on="mousedown"
v-model:value="mjSetting.apiSetting.apiKey"
></n-input>
</n-form-item>

View File

@ -475,8 +475,8 @@ export default defineComponent({
value: LaiAPIType.HK_PROXY
},
{
label: '香港站点',
value: LaiAPIType.HK_PROXY
label: '备用主站点',
value: LaiAPIType.BAK_MAIN
}
],
translation_options: [

View File

@ -125,7 +125,7 @@ export default defineComponent({
//
let selectModel = translateSetting.value.selectModel
let settingIndex = translateSetting.value.translates.findIndex(
(item) => (item.name = selectModel)
(item) => (item.name == selectModel)
)
if (settingIndex < 0) {
message.error('未找到选中的数据,请检查')

View File

@ -138,6 +138,7 @@ export default defineComponent({
let audioUrl = ref(null)
onMounted(async () => {
debugger
ttsOptions.value = GetTTSSelect()
// TTSTTS