V3.3.8
1. 优化/适配生图包
This commit is contained in:
parent
4f61785cb0
commit
50900d3465
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "3.3.6",
|
"version": "3.3.8",
|
||||||
"description": "An AI tool for image processing, video processing, and other functions.",
|
"description": "An AI tool for image processing, video processing, and other functions.",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": "laitool.cn",
|
"author": "laitool.cn",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -103,7 +103,7 @@ export const gptDefine = {
|
|||||||
【画面元素】:(每一个分镜画面输出时,都要重新联系<上下文>文本,并结合提取出来的<环境>进行联想,分析提取当前句子最终呈现的画面中会出现的2种物品或建筑物(严格执行数量为2),(如:地点是皇宫,画面元素是龙椅,玉台阶),画面元素严禁出现出境角色名称,人物名字和人称。画面元素严格严禁出现灯光的描写,严格严禁出现情绪、气氛、情感的描述,严禁出现“地点同上“,“背景不变“,某人的特写,严格禁止输出“无“字。等内容)
|
【画面元素】:(每一个分镜画面输出时,都要重新联系<上下文>文本,并结合提取出来的<环境>进行联想,分析提取当前句子最终呈现的画面中会出现的2种物品或建筑物(严格执行数量为2),(如:地点是皇宫,画面元素是龙椅,玉台阶),画面元素严禁出现出境角色名称,人物名字和人称。画面元素严格严禁出现灯光的描写,严格严禁出现情绪、气氛、情感的描述,严禁出现“地点同上“,“背景不变“,某人的特写,严格禁止输出“无“字。等内容)
|
||||||
|
|
||||||
输出格式
|
输出格式
|
||||||
直接输出每个编号对应的完整提示词字符串,格式为:
|
一定不要输出提示词中的内部元素的名称,只需要输出提示词中的内容,直接输出对应的完整提示词字符串即可。
|
||||||
提示词内部元素顺序(若存在):
|
提示词内部元素顺序(若存在):
|
||||||
【出镜角色】,【角色性别】, 【角色年龄】,【角色表情】,【角色穿着】,【肢体动作】,【角色特效】,【环境布局】,【画面特效】,【视觉效果】,【拍摄角度】,【画面元素】
|
【出镜角色】,【角色性别】, 【角色年龄】,【角色表情】,【角色穿着】,【肢体动作】,【角色特效】,【环境布局】,【画面特效】,【视觉效果】,【拍摄角度】,【画面元素】
|
||||||
如果是纯环境描写,格式为:
|
如果是纯环境描写,格式为:
|
||||||
@ -151,7 +151,7 @@ export const gptDefine = {
|
|||||||
Skills: 文本分析、角色设定信息精确引用、视觉叙事、场景设计、表情动作捕捉、元素描绘、提示词格式化输出。
|
Skills: 文本分析、角色设定信息精确引用、视觉叙事、场景设计、表情动作捕捉、元素描绘、提示词格式化输出。
|
||||||
Goals: 将用户提供的带编号小说文本逐句(段)拆分,严格依据<角色设定>引用描述,若是当前内容包含人物,但是在<角色设定>中未找到,则用主角表示,结合<Background>规则分析提取画面元素,最终为每个编号输出一句格式为 "提示词" 的完整字符串。
|
Goals: 将用户提供的带编号小说文本逐句(段)拆分,严格依据<角色设定>引用描述,若是当前内容包含人物,但是在<角色设定>中未找到,则用主角表示,结合<Background>规则分析提取画面元素,最终为每个编号输出一句格式为 "提示词" 的完整字符串。
|
||||||
Constrains: 分镜描述需忠实原文,必须直接使用<角色设定>中的角色描述,输出格式严格遵守 "提示词" 格式,提示词内部用逗号分隔。
|
Constrains: 分镜描述需忠实原文,必须直接使用<角色设定>中的角色描述,输出格式严格遵守 "提示词" 格式,提示词内部用逗号分隔。
|
||||||
OutputFormat: 纯文本提示词字符串,每行一个(例如 "xxxx, yyyy, zzzz"),内部元素用中文逗号分隔。
|
OutputFormat: 只输出纯文本提示词字符串,一定不要输出提示词内部元素顺序,只输出按照指定的元素顺序拼接好的提示词字符串。
|
||||||
|
|
||||||
Workflow:
|
Workflow:
|
||||||
1.接收用户提供的带编号小说文本和<角色设定>。
|
1.接收用户提供的带编号小说文本和<角色设定>。
|
||||||
@ -231,7 +231,7 @@ export const gptDefine = {
|
|||||||
【画面元素】:(每一个分镜画面输出时,都要重新联系<上下文>文本,并结合提取出来的<环境>进行联想,分析提取当前句子最终呈现的画面中会出现的2种物品或建筑物...(后续描述不变))。(需进行违禁词检查与替换)
|
【画面元素】:(每一个分镜画面输出时,都要重新联系<上下文>文本,并结合提取出来的<环境>进行联想,分析提取当前句子最终呈现的画面中会出现的2种物品或建筑物...(后续描述不变))。(需进行违禁词检查与替换)
|
||||||
|
|
||||||
输出格式
|
输出格式
|
||||||
直接输出小说文本对应的完整提示词字符串
|
一定不要输出提示词中的内部元素的名称,只需要输出提示词中的内容,直接输出对应的完整提示词字符串即可。
|
||||||
提示词内部元素顺序(若存在):
|
提示词内部元素顺序(若存在):
|
||||||
【出镜角色】,【角色表情】,【角色穿着】,【肢体动作】,【角色特效】(如果适用),【环境布局】,【画面特效】(如果适用),【视觉效果】(如果适用),【拍摄角度】,【画面元素】
|
【出镜角色】,【角色表情】,【角色穿着】,【肢体动作】,【角色特效】(如果适用),【环境布局】,【画面特效】(如果适用),【视觉效果】(如果适用),【拍摄角度】,【画面元素】
|
||||||
注意:【出镜角色】现在会包含强制的性别信息(若适用)和非人类物种类型(若适用)。特效项仅在玄幻/都市异能时出现。
|
注意:【出镜角色】现在会包含强制的性别信息(若适用)和非人类物种类型(若适用)。特效项仅在玄幻/都市异能时出现。
|
||||||
@ -291,7 +291,7 @@ export const gptDefine = {
|
|||||||
Skills: 文本分析、小说类型判断、角色性别强制补充、非人类物种识别与添加、角色设定信息精确引用、视觉叙事、场景设计、表情动作捕捉、元素描绘、条件化特效生成、提示词格式化输出。
|
Skills: 文本分析、小说类型判断、角色性别强制补充、非人类物种识别与添加、角色设定信息精确引用、视觉叙事、场景设计、表情动作捕捉、元素描绘、条件化特效生成、提示词格式化输出。
|
||||||
Goals: 将用户提供的小说文本,首先更具【上下文】判断小说故事类型和时代背景或者是直接通过【角色设定】中包含的小说故事类型或者是故事背景,然后严格依据<角色设定>引用描述基础,结合<Background>规则分析提取画面元素(确保角色描述包含性别和物种信息,特效项根据小说类型条件性添加),最终输出完整的提示词信息。
|
Goals: 将用户提供的小说文本,首先更具【上下文】判断小说故事类型和时代背景或者是直接通过【角色设定】中包含的小说故事类型或者是故事背景,然后严格依据<角色设定>引用描述基础,结合<Background>规则分析提取画面元素(确保角色描述包含性别和物种信息,特效项根据小说类型条件性添加),最终输出完整的提示词信息。
|
||||||
Constrains: 分镜描述需忠实原文,必须为出镜角色添加性别(推断或默认)和非人类物种类型(若适用),必须直接使用<角色设定>中的角色描述作为基础,提示词内部用中文逗号分隔。特效相关描述仅在识别为【玄幻】或【都市异能】小说时添加。
|
Constrains: 分镜描述需忠实原文,必须为出镜角色添加性别(推断或默认)和非人类物种类型(若适用),必须直接使用<角色设定>中的角色描述作为基础,提示词内部用中文逗号分隔。特效相关描述仅在识别为【玄幻】或【都市异能】小说时添加。
|
||||||
OutputFormat: 纯文本提示词字符串,内部元素用中文逗号分隔。角色描述将包含强制的性别和物种信息。根据小说类型,特效相关元素可能被省略。
|
OutputFormat: 只输出纯文本提示词字符串,一定不要输出提示词内部元素顺序,只输出按照指定的元素顺序拼接好的提示词字符串。角色描述将包含强制的性别和物种信息。根据小说类型,特效相关元素可能被省略。
|
||||||
|
|
||||||
Workflow:,
|
Workflow:,
|
||||||
1.接收用户提供的小说文本,上下文和<角色设定>。
|
1.接收用户提供的小说文本,上下文和<角色设定>。
|
||||||
|
|||||||
@ -610,19 +610,38 @@ export class MJOpt {
|
|||||||
});
|
});
|
||||||
// 下载图片
|
// 下载图片
|
||||||
let imagePath = path.join(book.bookFolderPath, `data\\MJOriginalImage\\${task_res.messageId}.png`);
|
let imagePath = path.join(book.bookFolderPath, `data\\MJOriginalImage\\${task_res.messageId}.png`);
|
||||||
|
let batchImages = []
|
||||||
// 判断是不是生图包,是的话需要替换图片的baseurl
|
// 判断是不是生图包,是的话需要替换图片的baseurl
|
||||||
if (this.mj_globalSetting.mj_simpleSetting.type == MJImageType.PACKAGE_MJ) {
|
if (this.mj_globalSetting.mj_simpleSetting.type == MJImageType.PACKAGE_MJ) {
|
||||||
let imageBaseUrl = this.mj_globalSetting.mj_imagePackageSetting.selectedProxy;
|
// let imageBaseUrl = this.mj_globalSetting.mj_imagePackageSetting.selectedProxy;
|
||||||
if (imageBaseUrl != "empty" && imageBaseUrl && imageBaseUrl != '') {
|
// if (imageBaseUrl != "empty" && imageBaseUrl && imageBaseUrl != '') {
|
||||||
task_res.imageClick = task_res.imageClick.replace(/https?:\/\/[^/]+/, imageBaseUrl)
|
// task_res.imageClick = task_res.imageClick.replace(/https?:\/\/[^/]+/, imageBaseUrl)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 判断是不是有批量的图片
|
||||||
|
if (task_res.subImagePath.length > 0) {
|
||||||
|
batchImages = [...task_res.subImagePath]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
let imageRes: string[] = []
|
||||||
await CheckFolderExistsOrCreate(path.dirname(imagePath))
|
await CheckFolderExistsOrCreate(path.dirname(imagePath))
|
||||||
await this.tools.downloadFileUrl(task_res.imageClick, imagePath)
|
if (batchImages.length <= 0) {
|
||||||
// 进行图片裁剪
|
await this.tools.downloadFileUrl(task_res.imageClick, imagePath)
|
||||||
let imageRes = await ImageSplit(imagePath, bookTaskDetail.name, path.join(book.bookFolderPath, 'data\\MJOriginalImage'));
|
// 进行图片裁剪
|
||||||
if (imageRes && imageRes.length < 4) {
|
imageRes = await ImageSplit(imagePath, bookTaskDetail.name, path.join(book.bookFolderPath, 'data\\MJOriginalImage'));
|
||||||
throw new Error("图片裁剪失败")
|
if (imageRes && imageRes.length < 4) {
|
||||||
|
throw new Error("图片裁剪失败")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 下载每一个
|
||||||
|
// let imagePath = path.join(book.bookFolderPath, `data\\MJOriginalImage\\${task_res.messageId}.png`);
|
||||||
|
for (let i = 0; i < batchImages.length; i++) {
|
||||||
|
const element = batchImages[i];
|
||||||
|
let tempPath = path.join(book.bookFolderPath, `data\\MJOriginalImage\\${task_res.messageId}_${i}.png`);
|
||||||
|
await this.tools.downloadFileUrl(element, tempPath)
|
||||||
|
imageRes.push(tempPath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改数据库数据,将图片保存到对应的文件夹中
|
// 修改数据库数据,将图片保存到对应的文件夹中
|
||||||
|
|||||||
@ -278,6 +278,19 @@ class MJApi {
|
|||||||
message: resData.failReason,
|
message: resData.failReason,
|
||||||
mjApiUrl: this.fetchTaskUrl,
|
mjApiUrl: this.fetchTaskUrl,
|
||||||
} as MJ.MJResponseToFront
|
} as MJ.MJResponseToFront
|
||||||
|
|
||||||
|
// 生图包的处理
|
||||||
|
|
||||||
|
if (resData.isYouChuan && resData.youChuanTaskId && resData.youChuanTaskInfo && resData.youChuanTaskInfo.imgUrls && resData.youChuanTaskInfo.imgUrls.length == 4) {
|
||||||
|
|
||||||
|
// 满足指定条件的数据才能返回
|
||||||
|
|
||||||
|
let tempRes = resData.youChuanTaskInfo.imgUrls
|
||||||
|
.filter(item => item.status == 'ok')
|
||||||
|
.map(item => item.url);
|
||||||
|
resObj.subImagePath = tempRes
|
||||||
|
}
|
||||||
|
|
||||||
return resObj
|
return resObj
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error
|
throw error
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user