V 4.0.4
新增一键提交comfyUI任务
This commit is contained in:
parent
b5ed4e313d
commit
b4ee555c03
@ -17,6 +17,8 @@ interface ISoftwareData {
|
|||||||
authUrl: string,
|
authUrl: string,
|
||||||
/** ComfyUI 文档链接 */
|
/** ComfyUI 文档链接 */
|
||||||
comfyUIWorkflowDoc: string
|
comfyUIWorkflowDoc: string
|
||||||
|
/** 新工云链接 */
|
||||||
|
xiangongYunUrl: string
|
||||||
}
|
}
|
||||||
/** MJ相关文档链接 */
|
/** MJ相关文档链接 */
|
||||||
mjDoc: {
|
mjDoc: {
|
||||||
@ -41,7 +43,8 @@ export const SoftwareData: ISoftwareData = {
|
|||||||
wikiUrl:
|
wikiUrl:
|
||||||
'https://rvgyir5wk1c.feishu.cn/wiki/space/7481893355360190492?ccm_open_type=lark_wiki_spaceLink&open_tab_from=wiki_home',
|
'https://rvgyir5wk1c.feishu.cn/wiki/space/7481893355360190492?ccm_open_type=lark_wiki_spaceLink&open_tab_from=wiki_home',
|
||||||
authUrl: "https://rvgyir5wk1c.feishu.cn/wiki/UUbrwAalJiq9BUkHymscD0E8nCc",
|
authUrl: "https://rvgyir5wk1c.feishu.cn/wiki/UUbrwAalJiq9BUkHymscD0E8nCc",
|
||||||
comfyUIWorkflowDoc: 'https://rvgyir5wk1c.feishu.cn/wiki/Je8Twp3d0i9TpekoWB9cLss4n17'
|
comfyUIWorkflowDoc: 'https://rvgyir5wk1c.feishu.cn/wiki/Je8Twp3d0i9TpekoWB9cLss4n17',
|
||||||
|
xiangongYunUrl : "https://www.xiangongyun.com/register/T2K6IG"
|
||||||
},
|
},
|
||||||
mjDoc: {
|
mjDoc: {
|
||||||
mjAPIDoc: 'https://rvgyir5wk1c.feishu.cn/wiki/OEj7wIdD6ivvCAkez4OcUPLcnIf',
|
mjAPIDoc: 'https://rvgyir5wk1c.feishu.cn/wiki/OEj7wIdD6ivvCAkez4OcUPLcnIf',
|
||||||
|
|||||||
@ -1362,7 +1362,7 @@ export default {
|
|||||||
'正在重置小说数据。。。': 'Resetting novel data...',
|
'正在重置小说数据。。。': 'Resetting novel data...',
|
||||||
'是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!': 'Do you want to reset novel data? After reset, data will return to newly created state, all batch data and file data will be deleted. Please confirm whether to continue!',
|
'是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!': 'Do you want to reset novel data? After reset, data will return to newly created state, all batch data and file data will be deleted. Please confirm whether to continue!',
|
||||||
"查看小说,名称 '{name}'": "View novel, name '{name}'",
|
"查看小说,名称 '{name}'": "View novel, name '{name}'",
|
||||||
'永久删除后项目数据,所有的批次数据和文件数据都会被删除': 'Permanently delete project data, all batch data and file data will be deleted',
|
'永久删除项目数据,所有的批次数据和文件数据都会被删除': 'Permanently delete project data, all batch data and file data will be deleted',
|
||||||
'将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除': 'Restore project data to newly created state, all batch data and file data will be deleted',
|
'将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除': 'Restore project data to newly created state, all batch data and file data will be deleted',
|
||||||
'修改小说名称、配音地址和SRT地址等基本信息': 'Modify basic information such as novel name, voiceover address, and SRT address',
|
'修改小说名称、配音地址和SRT地址等基本信息': 'Modify basic information such as novel name, voiceover address, and SRT address',
|
||||||
' {count} 个子项目': ' {count} sub-projects',
|
' {count} 个子项目': ' {count} sub-projects',
|
||||||
@ -2056,6 +2056,26 @@ export default {
|
|||||||
"同步生图提示词": "Sync Image Generation Prompts",
|
"同步生图提示词": "Sync Image Generation Prompts",
|
||||||
"选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。": "Select a text file, import the prompts within, split by lines, and apply them sequentially to all storyboards.",
|
"选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。": "Select a text file, import the prompts within, split by lines, and apply them sequentially to all storyboards.",
|
||||||
"同步当前分镜的生图提示词到图转视频的提示词中。": "Sync the current storyboard's image generation prompts to the image-to-video prompts.",
|
"同步当前分镜的生图提示词到图转视频的提示词中。": "Sync the current storyboard's image generation prompts to the image-to-video prompts.",
|
||||||
"【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)": "【LaiTool】Storyboard Master - High Image-Text/Video Consistency (SD/ComfyUI) (Context-Character Fixed-High Consumption)",
|
"【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)": "【LaiTool】Storyboard Master - High Image-Text/Video Consistency (SD/ComfyUI) (Context-Character Fixed-High Consumption)",
|
||||||
"【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)": "【LaiTool】Storyboard Master - High Image-Text/Video Consistency (MJ) (Context-Character Fixed-High Consumption)"
|
"【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)": "【LaiTool】Storyboard Master - High Image-Text/Video Consistency (MJ) (Context-Character Fixed-High Consumption)",
|
||||||
|
"停止转视频任务失败,参数错误": "Stop video conversion task failed, parameter error",
|
||||||
|
"停止转视频任务失败,没有需要停止的任务": "Stop video conversion task failed, no tasks to stop",
|
||||||
|
"停止所有批次的转视频任务成功": "Stop all batch video conversion tasks successful",
|
||||||
|
"停止当前批次的转视频任务成功": "Stop current batch video conversion tasks successful",
|
||||||
|
"该操作会将所有的转视频类型为 ComfyUI 的分镜,全部添加到转视频任务队列中,非 ComfyUI 的分镜不受影响,\n\n是否继续?": "This operation will add all storyboards of type ComfyUI for video conversion to the video conversion task queue, non-ComfyUI storyboards will not be affected,\n\nContinue?",
|
||||||
|
"正在一键添加转视频任务...": "Adding video conversion tasks in one click...",
|
||||||
|
"一键添加失败,当前分镜没有 ComfyUI 转视频类型的任务": "One-click addition failed, current storyboard has no ComfyUI video conversion type tasks",
|
||||||
|
"已成功添加 {taskCount} 个转视频任务到队列中": "Successfully added {taskCount} video conversion tasks to the queue",
|
||||||
|
"一键添加转视频任务失败,{error}": "One-click addition of video conversion tasks failed, {error}",
|
||||||
|
"确定要停止当前批次的所有转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?": "Confirm to stop all video conversion tasks in the current batch?\n\nOnly tasks that are waiting can be stopped. Video tasks that have started generating cannot be stopped.\n\nContinue?",
|
||||||
|
"确定要停止所有的转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?": "Confirm to stop all video conversion tasks?\n\nOnly tasks that are waiting can be stopped. Video tasks that have started generating cannot be stopped.\n\nContinue?",
|
||||||
|
"一键提交转视频任务": "One-Click Submit Video Conversion Tasks",
|
||||||
|
"将所有转视频类型为 ComfyUI 的分镜,一键提交生成视频任务。": "Submit all storyboards of type ComfyUI for video conversion in one click.",
|
||||||
|
"停止当前批次转视频任务": "Stop Current Batch Video Conversion Tasks",
|
||||||
|
"停止当前批次中所有正在等待的转视频任务。": "Stop all waiting video conversion tasks in the current batch.",
|
||||||
|
"停止所有转视频任务": "Stop All Video Conversion Tasks",
|
||||||
|
"停止所有正在等待的转视频任务。": "Stop all waiting video conversion tasks.",
|
||||||
|
"云端使用推荐仙宫云": "Cloud usage recommends Xiangong Cloud",
|
||||||
|
"登录/注册": "Login/Register",
|
||||||
|
"开启图转视频": "Enable Image to Video",
|
||||||
}
|
}
|
||||||
@ -1362,7 +1362,7 @@ export default {
|
|||||||
'正在重置小说数据。。。': '正在重置小说数据。。。',
|
'正在重置小说数据。。。': '正在重置小说数据。。。',
|
||||||
'是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!': '是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!',
|
'是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!': '是否重置小说数据,重置后数据将恢复至新建状态,所有的批次数据和文件数据都会被删除,请确认是否继续!',
|
||||||
"查看小说,名称 '{name}'": "查看小说,名称 '{name}'",
|
"查看小说,名称 '{name}'": "查看小说,名称 '{name}'",
|
||||||
'永久删除后项目数据,所有的批次数据和文件数据都会被删除': '永久删除后项目数据,所有的批次数据和文件数据都会被删除',
|
'永久删除项目数据,所有的批次数据和文件数据都会被删除': '永久删除项目数据,所有的批次数据和文件数据都会被删除',
|
||||||
'将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除': '将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除',
|
'将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除': '将项目数据恢复至新建状态,所有的批次数据和文件数据都会被删除',
|
||||||
'修改小说名称、配音地址和SRT地址等基本信息': '修改小说名称、配音地址和SRT地址等基本信息',
|
'修改小说名称、配音地址和SRT地址等基本信息': '修改小说名称、配音地址和SRT地址等基本信息',
|
||||||
' {count} 个子项目': ' {count} 个子项目',
|
' {count} 个子项目': ' {count} 个子项目',
|
||||||
@ -2057,5 +2057,25 @@ export default {
|
|||||||
"选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。": "选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。",
|
"选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。": "选择一个文本文件,导入其中的提示词,按行分割,依次应用到所有的分镜中。",
|
||||||
"同步当前分镜的生图提示词到图转视频的提示词中。": "同步当前分镜的生图提示词到图转视频的提示词中。",
|
"同步当前分镜的生图提示词到图转视频的提示词中。": "同步当前分镜的生图提示词到图转视频的提示词中。",
|
||||||
"【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)": "【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)",
|
"【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)": "【LaiTool】分镜大师-高图文/视频一致版(SD/ComfyUI)(上下文-人物固定-消耗高)",
|
||||||
"【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)": "【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)"
|
"【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)": "【LaiTool】分镜大师-高图文/视频一致版(MJ)(上下文-人物固定-消耗高)",
|
||||||
|
"停止转视频任务失败,参数错误": "停止转视频任务失败,参数错误",
|
||||||
|
"停止转视频任务失败,没有需要停止的任务": "停止转视频任务失败,没有需要停止的任务",
|
||||||
|
"停止所有批次的转视频任务成功": "停止所有批次的转视频任务成功",
|
||||||
|
"停止当前批次的转视频任务成功": "停止当前批次的转视频任务成功",
|
||||||
|
"该操作会将所有的转视频类型为 ComfyUI 的分镜,全部添加到转视频任务队列中,非 ComfyUI 的分镜不受影响,\n\n是否继续?": "该操作会将所有的转视频类型为 ComfyUI 的分镜,全部添加到转视频任务队列中,非 ComfyUI 的分镜不受影响,\n\n是否继续?",
|
||||||
|
"正在一键添加转视频任务...": "正在一键添加转视频任务...",
|
||||||
|
"一键添加失败,当前分镜没有 ComfyUI 转视频类型的任务": "一键添加失败,当前分镜没有 ComfyUI 转视频类型的任务",
|
||||||
|
"已成功添加 {taskCount} 个转视频任务到队列中": "已成功添加 {taskCount} 个转视频任务到队列中",
|
||||||
|
"一键添加转视频任务失败,{error}": "一键添加转视频任务失败,{error}",
|
||||||
|
"确定要停止当前批次的所有转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?": "确定要停止当前批次的所有转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?",
|
||||||
|
"确定要停止所有的转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?": "确定要停止所有的转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?",
|
||||||
|
"一键提交转视频任务": "一键提交转视频任务",
|
||||||
|
"将所有转视频类型为 ComfyUI 的分镜,一键提交生成视频任务。": "将所有转视频类型为 ComfyUI 的分镜,一键提交生成视频任务。",
|
||||||
|
"停止当前批次转视频任务": "停止当前批次转视频任务",
|
||||||
|
"停止当前批次中所有正在等待的转视频任务。": "停止当前批次中所有正在等待的转视频任务。",
|
||||||
|
"停止所有转视频任务": "停止所有转视频任务",
|
||||||
|
"停止所有正在等待的转视频任务。": "停止所有正在等待的转视频任务。",
|
||||||
|
"云端使用推荐仙宫云": "云端使用推荐仙宫云",
|
||||||
|
"登录/注册": "登录/注册",
|
||||||
|
"开启图转视频" : "开启图转视频",
|
||||||
}
|
}
|
||||||
@ -207,7 +207,7 @@ export async function AddMultiImageTask(
|
|||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region 停止指定类型的任务
|
//#region 停止图片生成任务
|
||||||
/**
|
/**
|
||||||
* 停止图片生成任务
|
* 停止图片生成任务
|
||||||
*
|
*
|
||||||
@ -286,10 +286,82 @@ export async function StopImageTask(type: string): Promise<SuccessItem | ErrorIt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type == 'all') {
|
if (type == 'all') {
|
||||||
return successMessage(null, t('停止所有批次的出图任务成功'), 'StopImageTask')
|
return successMessage(null, t('停止所有批次的出图任务成功'))
|
||||||
} else {
|
} else {
|
||||||
return successMessage(null, t('停止当前批次的出图任务成功'), 'StopImageTask')
|
return successMessage(null, t('停止当前批次的出图任务成功'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region 停止视频生成任务
|
||||||
|
|
||||||
|
export async function StopToVideoTask(type: "all" | "this"): Promise<SuccessItem | ErrorItem> {
|
||||||
|
if (type != 'all' && type != 'this') {
|
||||||
|
return errorMessage(t('停止转视频任务失败,参数错误'))
|
||||||
|
}
|
||||||
|
let taskTypes = [
|
||||||
|
BookBackTaskType.COMFYUI_VIDEO,
|
||||||
|
BookBackTaskType.RUNWAY_VIDEO,
|
||||||
|
BookBackTaskType.LUMA_VIDEO,
|
||||||
|
BookBackTaskType.KLING_VIDEO,
|
||||||
|
BookBackTaskType.KLING_VIDEO_EXTEND,
|
||||||
|
BookBackTaskType.MJ_VIDEO,
|
||||||
|
BookBackTaskType.MJ_VIDEO_EXTEND,
|
||||||
|
BookBackTaskType.HAILUO_TEXT_TO_VIDEO,
|
||||||
|
BookBackTaskType.HAILUO_IMAGE_TO_VIDEO,
|
||||||
|
BookBackTaskType.HAILUO_FIRST_LAST_FRAME
|
||||||
|
]
|
||||||
|
|
||||||
|
let queryCondition = {
|
||||||
|
bookTaskName: bookStore.selectBookTask.name,
|
||||||
|
taskStatus: BookBackTaskStatus.WAIT,
|
||||||
|
page: 1,
|
||||||
|
pageSize: 10000
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == 'all') {
|
||||||
|
delete queryCondition.bookTaskName
|
||||||
|
}
|
||||||
|
|
||||||
|
let stopTasks: any[] = []
|
||||||
|
|
||||||
|
for (let i = 0; i < taskTypes.length; i++) {
|
||||||
|
const element = taskTypes[i]
|
||||||
|
let taskRes = await window.task.GetTaskCollection({
|
||||||
|
...queryCondition,
|
||||||
|
taskType: element
|
||||||
|
})
|
||||||
|
if (taskRes.code != 1) {
|
||||||
|
return taskRes
|
||||||
|
}
|
||||||
|
if (taskRes.data?.data.length > 0) {
|
||||||
|
stopTasks.push(...taskRes.data?.data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stopTasks.length <= 0) {
|
||||||
|
return errorMessage(t('停止转视频任务失败,没有需要停止的任务'))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始执行停止的任务
|
||||||
|
for (let i = 0; i < stopTasks.length; i++) {
|
||||||
|
const element = stopTasks[i]
|
||||||
|
let res = await window.task.UpdateTaskStatus({
|
||||||
|
id: element.id,
|
||||||
|
status: BookBackTaskStatus.FAIL,
|
||||||
|
errorMessage: t('用户手动取消了任务')
|
||||||
|
})
|
||||||
|
if (res.code != 1) {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 'all') {
|
||||||
|
return successMessage(null, t('停止所有批次的转视频任务成功'))
|
||||||
|
} else {
|
||||||
|
return successMessage(null, t('停止当前批次的转视频任务成功'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|||||||
@ -70,10 +70,15 @@ import VideoDisplay from '@/renderer/src/components/common/VideoDisplay.vue'
|
|||||||
import MediaToVideoVideoConfigHeader from './MediaToVideoVideoConfigHeader.vue'
|
import MediaToVideoVideoConfigHeader from './MediaToVideoVideoConfigHeader.vue'
|
||||||
import { OptionKeyName, OptionType } from '@/define/enum/option'
|
import { OptionKeyName, OptionType } from '@/define/enum/option'
|
||||||
import { useBookStore, useSoftwareStore } from '@/renderer/src/stores'
|
import { useBookStore, useSoftwareStore } from '@/renderer/src/stores'
|
||||||
import { GetImageToVideoModelsOptions } from '@/define/enum/video'
|
import { GetImageToVideoModelsOptions, ImageToVideoModels } from '@/define/enum/video'
|
||||||
import { t } from '@/i18n'
|
import { t } from '@/i18n'
|
||||||
import { TimeDelay } from '@/define/Tools/time'
|
import { TimeDelay } from '@/define/Tools/time'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
|
import DialogTextContent from '../../common/DialogTextContent.vue'
|
||||||
|
import { BookBackTaskType, TaskExecuteType } from '@/define/enum/bookEnum'
|
||||||
|
import { DEFINE_STRING } from '@/define/ipcDefineString'
|
||||||
|
import { AddOneTask, StopToVideoTask } from '@/renderer/src/common/task'
|
||||||
|
import { useMD } from '@/renderer/src/hooks/useMD'
|
||||||
|
|
||||||
const bookStore = useBookStore()
|
const bookStore = useBookStore()
|
||||||
const softwareStore = useSoftwareStore()
|
const softwareStore = useSoftwareStore()
|
||||||
@ -81,6 +86,7 @@ const softwareStore = useSoftwareStore()
|
|||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const dialog = useDialog()
|
const dialog = useDialog()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const { showErrorDialog, showSuccessDialog } = useMD()
|
||||||
|
|
||||||
// 定义 emits
|
// 定义 emits
|
||||||
const emit = defineEmits(['toggle-right-panel', 'view-detail'])
|
const emit = defineEmits(['toggle-right-panel', 'view-detail'])
|
||||||
@ -535,6 +541,108 @@ async function handleSyncImagePrompts() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 一键添加转视频任务
|
||||||
|
async function handleOneClickToVideo() {
|
||||||
|
let da = dialog.warning({
|
||||||
|
title: t('操作确认'),
|
||||||
|
content: () =>
|
||||||
|
h(
|
||||||
|
DialogTextContent,
|
||||||
|
{
|
||||||
|
text: t(
|
||||||
|
`该操作会将所有的转视频类型为 ComfyUI 的分镜,全部添加到转视频任务队列中,非 ComfyUI 的分镜不受影响,\n\n是否继续?`
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
),
|
||||||
|
negativeText: t('取消'),
|
||||||
|
positiveText: t('继续'),
|
||||||
|
onPositiveClick: async () => {
|
||||||
|
da?.destroy()
|
||||||
|
await TimeDelay(200)
|
||||||
|
try {
|
||||||
|
softwareStore.spin.spinning = true
|
||||||
|
softwareStore.spin.tip = t('正在一键添加转视频任务...')
|
||||||
|
let taskCount = 0
|
||||||
|
// 开始循环添加任务
|
||||||
|
for (let i = 0; i < bookStore.selectBookTaskDetail.length; i++) {
|
||||||
|
let element = bookStore.selectBookTaskDetail[i]
|
||||||
|
// 只处理 ComfyUI 类型
|
||||||
|
if (element.videoMessage?.videoType != ImageToVideoModels.COMFY_UI) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
let res = await AddOneTask({
|
||||||
|
bookId: element.bookId,
|
||||||
|
type: BookBackTaskType.COMFYUI_VIDEO,
|
||||||
|
executeType: TaskExecuteType.AUTO,
|
||||||
|
bookTaskId: element.bookTaskId,
|
||||||
|
bookTaskDetailId: element.id,
|
||||||
|
messageName: DEFINE_STRING.BOOK.COMFYUI_TO_VIDEO_RETURN
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code != 1) {
|
||||||
|
message.error(res.message)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
taskCount++
|
||||||
|
}
|
||||||
|
if (taskCount === 0) {
|
||||||
|
showErrorDialog(t('失败'), t('一键添加失败,当前分镜没有 ComfyUI 转视频类型的任务'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await TimeDelay(500)
|
||||||
|
showSuccessDialog(
|
||||||
|
t('成功'),
|
||||||
|
t('已成功添加 {taskCount} 个转视频任务到队列中', { taskCount })
|
||||||
|
)
|
||||||
|
} catch (error) {
|
||||||
|
showErrorDialog(t('失败'), t('一键添加转视频任务失败,{error}', { error: error.message }))
|
||||||
|
} finally {
|
||||||
|
da?.destroy()
|
||||||
|
softwareStore.spin.spinning = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onNegativeClick: () => {
|
||||||
|
message.info(t('取消操作'))
|
||||||
|
},
|
||||||
|
closable: true,
|
||||||
|
maskClosable: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 停止生成图片的操作方法
|
||||||
|
async function handleStopToVideoTask(content, key) {
|
||||||
|
let da = dialog.warning({
|
||||||
|
title: t('操作提示'),
|
||||||
|
content: () =>
|
||||||
|
h(DialogTextContent, {
|
||||||
|
text: content
|
||||||
|
}),
|
||||||
|
closable: true,
|
||||||
|
maskClosable: false,
|
||||||
|
positiveText: t('确定'),
|
||||||
|
negativeText: t('取消'),
|
||||||
|
onPositiveClick: async () => {
|
||||||
|
da?.destroy()
|
||||||
|
|
||||||
|
let type = 'this'
|
||||||
|
if (key === 'stop-all-video-tasks') {
|
||||||
|
type = 'all'
|
||||||
|
}
|
||||||
|
|
||||||
|
let res = await StopToVideoTask(type)
|
||||||
|
|
||||||
|
// 执行完毕 弹窗
|
||||||
|
await TimeDelay(500)
|
||||||
|
if (res.code != 1) {
|
||||||
|
showErrorDialog(t('失败'), res.message)
|
||||||
|
} else {
|
||||||
|
showSuccessDialog(t('成功'), res.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 处理视频配置中的更多操作中的下拉菜单的选择
|
// 处理视频配置中的更多操作中的下拉菜单的选择
|
||||||
async function handleActionDropdownSelect(key) {
|
async function handleActionDropdownSelect(key) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
@ -544,6 +652,26 @@ async function handleActionDropdownSelect(key) {
|
|||||||
case 'sync-image-prompts':
|
case 'sync-image-prompts':
|
||||||
await handleSyncImagePrompts()
|
await handleSyncImagePrompts()
|
||||||
break
|
break
|
||||||
|
case 'one-click-to-video':
|
||||||
|
await handleOneClickToVideo()
|
||||||
|
break
|
||||||
|
case 'stop-current-batch-tasks':
|
||||||
|
await handleStopToVideoTask(
|
||||||
|
t(
|
||||||
|
'确定要停止当前批次的所有转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?'
|
||||||
|
),
|
||||||
|
'stop-current-batch-tasks'
|
||||||
|
)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'stop-all-video-tasks':
|
||||||
|
await handleStopToVideoTask(
|
||||||
|
t(
|
||||||
|
'确定要停止所有的转视频任务吗?\n\n只能停止在等待中的任务。已开始生成的视频任务无法停止。\n\n是否继续?'
|
||||||
|
),
|
||||||
|
'stop-all-video-tasks'
|
||||||
|
)
|
||||||
|
break
|
||||||
default:
|
default:
|
||||||
message.error(t('未知操作'))
|
message.error(t('未知操作'))
|
||||||
break
|
break
|
||||||
|
|||||||
@ -79,6 +79,21 @@ const blockOptions = computed(() => {
|
|||||||
label: t('同步生图提示词'),
|
label: t('同步生图提示词'),
|
||||||
tooltip: t('同步当前分镜的生图提示词到图转视频的提示词中。'),
|
tooltip: t('同步当前分镜的生图提示词到图转视频的提示词中。'),
|
||||||
key: 'sync-image-prompts'
|
key: 'sync-image-prompts'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('一键提交转视频任务'),
|
||||||
|
tooltip: t('将所有转视频类型为 ComfyUI 的分镜,一键提交生成视频任务。'),
|
||||||
|
key: 'one-click-to-video'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('停止当前批次转视频任务'),
|
||||||
|
tooltip: t('停止当前批次中所有正在等待的转视频任务。'),
|
||||||
|
key: 'stop-current-batch-tasks'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('停止所有转视频任务'),
|
||||||
|
tooltip: t('停止所有正在等待的转视频任务。'),
|
||||||
|
key: 'stop-all-video-tasks'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -217,7 +217,7 @@ function getProjectMenuOptions() {
|
|||||||
h('div', { style: 'color: #e74c3c; display: flex; align-items: center;' }, [
|
h('div', { style: 'color: #e74c3c; display: flex; align-items: center;' }, [
|
||||||
h(NIcon, null, () => h(TrashOutline))
|
h(NIcon, null, () => h(TrashOutline))
|
||||||
]),
|
]),
|
||||||
tooltip: '永久删除后项目数据,所有的批次数据和文件数据都会被删除'
|
tooltip: t('永久删除项目数据,所有的批次数据和文件数据都会被删除')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,14 +82,24 @@
|
|||||||
embedded
|
embedded
|
||||||
style="margin: 16px 0; border: 2px solid #ff4d4f; background: #fff1f0"
|
style="margin: 16px 0; border: 2px solid #ff4d4f; background: #fff1f0"
|
||||||
>
|
>
|
||||||
<div style="display: flex; align-items: center; justify-content: space-between">
|
<n-space vertical :size="12">
|
||||||
<div style="font-size: 18px; color: #d4380d; font-weight: bold">
|
<div style="display: flex; align-items: center">
|
||||||
{{ t('⚠️ ComfyUI 工作流配置请严格参考文档,否则无法正常生成!') }}
|
<div style="font-size: 18px; color: #d4380d; font-weight: bold">
|
||||||
|
{{ t('云端使用推荐仙宫云') }}
|
||||||
|
</div>
|
||||||
|
<n-button type="error" size="large" @click="openXingongYun" style="margin-left: 24px">
|
||||||
|
{{ t('登录/注册') }}
|
||||||
|
</n-button>
|
||||||
</div>
|
</div>
|
||||||
<n-button type="error" size="large" @click="openComfyUIDoc" style="margin-left: 24px">
|
<div style="display: flex; align-items: center; justify-content: space-between">
|
||||||
{{ t('查看文档') }}
|
<div style="font-size: 18px; color: #d4380d; font-weight: bold">
|
||||||
</n-button>
|
{{ t('⚠️ ComfyUI 工作流配置请严格参考文档,否则无法正常生成!') }}
|
||||||
</div>
|
</div>
|
||||||
|
<n-button type="error" size="large" @click="openComfyUIDoc" style="margin-left: 24px">
|
||||||
|
{{ t('查看文档') }}
|
||||||
|
</n-button>
|
||||||
|
</div>
|
||||||
|
</n-space>
|
||||||
</n-card>
|
</n-card>
|
||||||
|
|
||||||
<n-divider title-placement="left"> {{ t('工作流设置') }} </n-divider>
|
<n-divider title-placement="left"> {{ t('工作流设置') }} </n-divider>
|
||||||
@ -408,6 +418,11 @@ function openComfyUIDoc() {
|
|||||||
window.system.OpenUrl(SoftwareData.systemInfo.comfyUIWorkflowDoc)
|
window.system.OpenUrl(SoftwareData.systemInfo.comfyUIWorkflowDoc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 打开仙宫云主页
|
||||||
|
function openXingongYun() {
|
||||||
|
window.system.OpenUrl(SoftwareData.systemInfo.xiangongYunUrl)
|
||||||
|
}
|
||||||
|
|
||||||
// 表格高度自适应相关
|
// 表格高度自适应相关
|
||||||
const tableContainer = ref(null)
|
const tableContainer = ref(null)
|
||||||
const tableHeight = ref(300) // 默认高度
|
const tableHeight = ref(300) // 默认高度
|
||||||
|
|||||||
@ -257,7 +257,7 @@ async function InitServerGptOptions() {
|
|||||||
async function InitCopyWritingAISetting() {
|
async function InitCopyWritingAISetting() {
|
||||||
try {
|
try {
|
||||||
let dafaultData = {
|
let dafaultData = {
|
||||||
gptUrl: 'https://api.laitool.cc',
|
gptUrl: 'https://zhiluoai.net',
|
||||||
apiKey: '',
|
apiKey: '',
|
||||||
model: ''
|
model: ''
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"latestVersion": "v4.0.4",
|
"latestVersion": "v4.0.4",
|
||||||
"updateDate": "2025-11-05",
|
"updateDate": "2025-11-06",
|
||||||
"updateInfo": [
|
"updateInfo": [
|
||||||
{
|
{
|
||||||
"version": "v4.0.4",
|
"version": "v4.0.4",
|
||||||
"updateDate": "2025-11-05",
|
"updateDate": "2025-11-06",
|
||||||
"status": "unreleased",
|
"status": "unreleased",
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
@ -13,7 +13,15 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"description": "添加两个高图文一致性推理预设"
|
"description": "添加两个高图文一致性推理出图提示词预设"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "add",
|
||||||
|
"description": "新增两个通用的高图文一致性推理出图和图转视频提示词预设"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "add",
|
||||||
|
"description": "文案处理新增两个分镜的推理提示词预设"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "add",
|
"type": "add",
|
||||||
@ -21,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "improvement",
|
"type": "improvement",
|
||||||
"description": "优化 ComfyUI 设置"
|
"description": "优化 ComfyUI 设置(之前的工作流需要重新配置)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "add",
|
"type": "add",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user