2024-08-03 12:46:12 +08:00
|
|
|
|
const fspromises = require('fs').promises
|
|
|
|
|
|
import path from 'path'
|
|
|
|
|
|
import axios from 'axios'
|
|
|
|
|
|
const { JSDOM } = require('jsdom')
|
|
|
|
|
|
import { define } from '../../define/define'
|
|
|
|
|
|
import { Tools } from '../tools'
|
|
|
|
|
|
import { ClipSetting } from '../../define/setting/clipSetting'
|
|
|
|
|
|
import { ImageSetting } from '../../define/setting/imageSetting'
|
|
|
|
|
|
import { DEFINE_STRING } from '../../define/define_string'
|
|
|
|
|
|
import { TagDefine } from '../../define/tagDefine'
|
|
|
|
|
|
import { errorMessage } from '../Public/generalTools'
|
|
|
|
|
|
import { TaskManager } from '../Service/taskManage'
|
2024-09-12 14:13:09 +08:00
|
|
|
|
import { SoftWareServiceBasic } from '../Service/ServiceBasic/softwareServiceBasic'
|
|
|
|
|
|
import { FLxuAPIImageType } from '../../define/enum/image'
|
2024-08-03 12:46:12 +08:00
|
|
|
|
|
|
|
|
|
|
let tagDefine = new TagDefine(global)
|
2024-05-15 12:57:15 +08:00
|
|
|
|
export class Setting {
|
2024-08-03 12:46:12 +08:00
|
|
|
|
constructor(global) {
|
|
|
|
|
|
this.global = global
|
|
|
|
|
|
this.tools = new Tools()
|
2024-09-12 14:13:09 +08:00
|
|
|
|
this.softWareServiceBasic = new SoftWareServiceBasic()
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#region 剪映设置
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 添加背景音乐文件夹设置
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
*/
|
|
|
|
|
|
async AddBackgroundMusicFolder(value) {
|
|
|
|
|
|
return await ClipSetting.AddBackgroundMusicFolder(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取剪映背景音乐配置列表
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetBackGroundMusicConfigList() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
let res = await this.tools.getJsonFilePropertyValue(
|
|
|
|
|
|
define.clip_setting,
|
|
|
|
|
|
'background_music_setting',
|
|
|
|
|
|
[]
|
|
|
|
|
|
)
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1,
|
|
|
|
|
|
value: res
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 0,
|
|
|
|
|
|
error: error.toString()
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 删除剪辑配置里面对应ID的数据
|
|
|
|
|
|
* @param {要删除的样式ID} value
|
|
|
|
|
|
*/
|
|
|
|
|
|
async deleteClipSetting(property, value) {
|
|
|
|
|
|
return ClipSetting.deleteClipSetting(property, value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取剪映的关键帧配置
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetKeyFrameConfigData() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
let key_frame = await this.tools.getJsonFilePropertyValue(
|
|
|
|
|
|
define.clip_setting,
|
|
|
|
|
|
'key_frame',
|
|
|
|
|
|
null,
|
|
|
|
|
|
false
|
|
|
|
|
|
)
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1,
|
|
|
|
|
|
data: key_frame
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 0,
|
|
|
|
|
|
message: error.toString()
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取剪映关键帧配置
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetKeyFrameOptions() {
|
|
|
|
|
|
return await ClipSetting.GetKeyFrameOptions()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async SaveKeyFrameSetting(value) {
|
|
|
|
|
|
return await ClipSetting.SaveKeyFrameSetting(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region 图片设置
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取自动保存图片的存储文件的方式
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetAutoSaveImageClassifyOptions() {
|
|
|
|
|
|
return await ImageSetting.GetAutoSaveImageClassifyOptions()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 保存自动保存图片的设置
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async SaveImageAutoSaveSetting(value) {
|
|
|
|
|
|
return await ImageSetting.SaveImageAutoSaveSetting(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取自动保存图片的设置
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetImageAutoSaveSetting(value) {
|
|
|
|
|
|
return await ImageSetting.GetImageAutoSaveSetting(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 手动另存文件夹
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async SaveImageToOtherFolder(value) {
|
|
|
|
|
|
return await ImageSetting.SaveImageToOtherFolder([], value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 移除任务
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
*/
|
|
|
|
|
|
async RemoveTask(value) {
|
|
|
|
|
|
if (value[0] == DEFINE_STRING.QUEUE_BATCH.IMAGE_SAVE_TO_OTHER_FOLDER) {
|
|
|
|
|
|
this.global.fileQueue.removeTask(value[0], value[1], value[2])
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.global.requestQuene.removeTask(value[0], value[1], value[2])
|
|
|
|
|
|
if (this.global.mjGenerateQuene) {
|
|
|
|
|
|
this.global.mjGenerateQuene.removeTask(value[0], value[1], value[2])
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 加载SD配置文件
|
|
|
|
|
|
*/
|
|
|
|
|
|
async InitSDConfig() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
let sd_config = JSON.parse(await fspromises.readFile(define.sd_setting, 'utf-8'))
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
webui_api_url: sd_config.setting.webui_api_url,
|
|
|
|
|
|
type: sd_config.setting.type,
|
|
|
|
|
|
sampler_name: sd_config.webui.sampler_name,
|
|
|
|
|
|
prompt: sd_config.webui.prompt,
|
|
|
|
|
|
negative_prompt: sd_config.webui.negative_prompt,
|
|
|
|
|
|
denoising_strength: sd_config.webui.denoising_strength,
|
|
|
|
|
|
steps: sd_config.webui.steps,
|
|
|
|
|
|
width: sd_config.webui.width,
|
|
|
|
|
|
height: sd_config.webui.height,
|
|
|
|
|
|
adetailer: sd_config.webui.adetailer,
|
|
|
|
|
|
batch_size: sd_config.setting.batch_size,
|
|
|
|
|
|
seed: sd_config.setting.seed,
|
|
|
|
|
|
style_weight: sd_config.setting.style_weight,
|
|
|
|
|
|
cfg_scale: sd_config.webui.cfg_scale,
|
|
|
|
|
|
sd_model: sd_config.sd_model,
|
|
|
|
|
|
lora: sd_config.lora,
|
2024-09-12 14:13:09 +08:00
|
|
|
|
sampler: sd_config.sampler,
|
|
|
|
|
|
flux_model: sd_config.flux?.model ? sd_config.flux.model : FLxuAPIImageType.FLUX
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 0,
|
|
|
|
|
|
message: error
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取主页显示的信息
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetShowMessage() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
let res = await axios.get('https://share.weiyun.com/1EPtoGg8')
|
|
|
|
|
|
const dom = new JSDOM(res.data, {
|
|
|
|
|
|
runScripts: 'dangerously',
|
|
|
|
|
|
resources: 'usable'
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 创建一个函数来异步获取syncData
|
|
|
|
|
|
async function getSyncData() {
|
|
|
|
|
|
// 创建一个Promise来等待onload事件
|
|
|
|
|
|
await new Promise((resolve, reject) => {
|
|
|
|
|
|
dom.window.onload = () => {
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置一个超时,以防onload事件永远不触发
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
reject(new Error('Loading timed out'))
|
|
|
|
|
|
}, 5000) // 10秒超时
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 返回syncData对象
|
|
|
|
|
|
return dom.window.syncData
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 使用异步函数并处理结果
|
|
|
|
|
|
let re = await getSyncData()
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1,
|
|
|
|
|
|
data: re
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 0,
|
|
|
|
|
|
message: error.toString()
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 初始化配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
async getSettingDafultData() {
|
|
|
|
|
|
// 加载通用配置
|
|
|
|
|
|
let data = await fspromises.readFile(define.config_path, 'utf-8')
|
|
|
|
|
|
let sd_data = await fspromises.readFile(define.sd_setting, 'utf-8')
|
|
|
|
|
|
let config_json_date = JSON.parse(data)
|
|
|
|
|
|
config_json_date.webui_api_url = JSON.parse(sd_data).setting.webui_api_url
|
|
|
|
|
|
config_json_date['space_image'] = define.zhanwei_image
|
|
|
|
|
|
return config_json_date
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 修改配置文件中的剪映的草稿位置
|
|
|
|
|
|
* @param {剪映的草稿位置} value
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async ModifySampleSetting(value) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
value = JSON.parse(value)
|
|
|
|
|
|
// 当前的配置文件的内容就是global.config的内容
|
|
|
|
|
|
// 直接修改 global.config的内容即可
|
|
|
|
|
|
// 传入的value是一个对象,需要遍历其中的所有属性,并将属性值进行修改
|
|
|
|
|
|
for (let key in value) {
|
|
|
|
|
|
this.global.config[key] = value[key]
|
|
|
|
|
|
}
|
|
|
|
|
|
await fspromises.writeFile(define.config_path, JSON.stringify(this.global.config))
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1,
|
|
|
|
|
|
message: '保存成功'
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
cdoe: '0',
|
|
|
|
|
|
message: '保存失败,错误信息如下:' + '\n' + error.toString()
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 检查机器码是不是存在
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async CheckMachineId(value) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
// 判断机器码是不是存在
|
|
|
|
|
|
let res = await axios.post('http://api.yu-zhile.com/GetMachineStatus', {
|
|
|
|
|
|
machineId: value
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// let res = await axios.get('http://lapi.laitool.cn/api/Machine/GetMachineStatus?machineId=' + value);
|
|
|
|
|
|
if (res.status != 200) {
|
|
|
|
|
|
throw new Error('请求错误')
|
|
|
|
|
|
}
|
|
|
|
|
|
if (res.data.code == 0) {
|
|
|
|
|
|
throw new Error(res.data.message)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.global.endTime = res.data.endTime
|
|
|
|
|
|
this.global.permissions = res.data.permissions
|
|
|
|
|
|
this.global.CheckMachineId = true
|
|
|
|
|
|
// 这边初始化任务队列
|
|
|
|
|
|
if (!global.taskManager) {
|
|
|
|
|
|
global.taskManager = new TaskManager()
|
|
|
|
|
|
global.taskManager.InitListeners() // 启动监听
|
|
|
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
code: 0,
|
|
|
|
|
|
message: error.toString()
|
|
|
|
|
|
}
|
2024-05-15 12:57:15 +08:00
|
|
|
|
}
|
2024-08-03 12:46:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取选择角色场景模式的options
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetRoleSceneModeOptions() {
|
|
|
|
|
|
return tagDefine.getTagSelectModel()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取生图的类别(sd,mj,d3)
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetImageGenerateCategory() {
|
|
|
|
|
|
return ImageSetting.GetImageGenerateCategory()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#region SD设置
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region MJ设置
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取指定的配置文件里面指定的属性的数据
|
|
|
|
|
|
* @param {*} value 执行方法必要的信息
|
|
|
|
|
|
* 0 define中的指定属性(指定的配置文件)
|
|
|
|
|
|
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
|
|
|
|
|
* 2 是不是要校验属性不存在
|
|
|
|
|
|
* 3 属性没有找到的默认值
|
|
|
|
|
|
*/
|
|
|
|
|
|
async GetDefineConfigJsonByProperty(value) {
|
|
|
|
|
|
return ImageSetting.GetDefineConfigJsonByProperty(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 保存指定的配置文件里面指定的属性的数据
|
|
|
|
|
|
* @param {*} value
|
|
|
|
|
|
* 0 define中的指定属性(指定的配置文件)
|
|
|
|
|
|
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
|
|
|
|
|
* 2 要写入的值
|
|
|
|
|
|
* 3 是不是要校验属性不存在
|
|
|
|
|
|
*/
|
|
|
|
|
|
async SaveDefineConfigJsonByProperty(value) {
|
|
|
|
|
|
return ImageSetting.SaveDefineConfigJsonByProperty(value)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
}
|