|
|
@@ -4678,7 +4678,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
|
-
|
|
|
+ dd('end');
|
|
|
if ($is_global_generate_pics) {
|
|
|
// 批量生成全局角色图片
|
|
|
$this->batchSetGlobalRoleImg([
|
|
|
@@ -5152,6 +5152,12 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
'description' => trim((string)getProp($item, 'description')),
|
|
|
];
|
|
|
|
|
|
+ // 如果有 pic_prompt,添加到合并项中
|
|
|
+ $picPrompt = getProp($item, 'pic_prompt');
|
|
|
+ if (!empty($picPrompt)) {
|
|
|
+ $mergedItem['pic_prompt'] = trim((string)$picPrompt);
|
|
|
+ }
|
|
|
+
|
|
|
// 继承现有项的 URL
|
|
|
$existingUrl = getProp($existingMap[$itemKey], 'url');
|
|
|
if (!empty($existingUrl)) {
|
|
|
@@ -5194,6 +5200,12 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
'description' => trim((string)getProp($item, 'description')),
|
|
|
];
|
|
|
|
|
|
+ // 如果有 pic_prompt,添加到合并项中
|
|
|
+ $picPrompt = getProp($item, 'pic_prompt');
|
|
|
+ if (!empty($picPrompt)) {
|
|
|
+ $mergedItem['pic_prompt'] = trim((string)$picPrompt);
|
|
|
+ }
|
|
|
+
|
|
|
// 保留生成项的音色字段
|
|
|
$voiceName = getProp($item, 'voice_name');
|
|
|
if (!empty($voiceName)) {
|
|
|
@@ -5215,7 +5227,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
}
|
|
|
} else {
|
|
|
// 新增项,保留生成项的所有字段
|
|
|
- $merged[] = $this->resetEpisodeResourceItem($item, $nameKey, ['url', 'task_id', 'task_status', 'voice_name', 'voice_type', 'voice_audio_url']);
|
|
|
+ $merged[] = $this->resetEpisodeResourceItem($item, $nameKey, ['url', 'task_id', 'task_status', 'voice_name', 'voice_type', 'voice_audio_url', 'pic_prompt']);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -5248,7 +5260,13 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- return trim((string)getProp($existingItem, 'description')) !== trim((string)getProp($generatedItem, 'description'));
|
|
|
+ // 比较 description 是否变化
|
|
|
+ if (trim((string)getProp($existingItem, 'description')) !== trim((string)getProp($generatedItem, 'description'))) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 比较 pic_prompt 是否变化
|
|
|
+ return trim((string)getProp($existingItem, 'pic_prompt')) !== trim((string)getProp($generatedItem, 'pic_prompt'));
|
|
|
}
|
|
|
|
|
|
private function normalizeEpisodeResourceKey($value): string
|
|
|
@@ -5273,8 +5291,12 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
foreach ($roles as &$role) {
|
|
|
$role_name = getProp($role, 'role');
|
|
|
if ($role_name == '旁白') continue;
|
|
|
- $description = getProp($role, 'description');
|
|
|
- if ($art_style) $description = "美术风格:\n{$art_style}\n主体描述:{$description}\n图片要求:图片侧重点在于主体人物信息,需要突出人物形象,不显示场景或背景信息";
|
|
|
+
|
|
|
+ // 优先使用 pic_prompt,如果没有则使用 description
|
|
|
+ $pic_prompt = getProp($role, 'pic_prompt');
|
|
|
+ $description = !empty($pic_prompt) ? trim((string)$pic_prompt) : getProp($role, 'description');
|
|
|
+
|
|
|
+ if ($art_style) $description = "美术风格:\n{$art_style}\n主体描述:{$description}\n图片要求:图片侧重点是人物,不要出现场景或背景,并且只能生成一个人物";
|
|
|
// 参考图地址
|
|
|
$ref_img_url = getProp($role, 'url');
|
|
|
if (!$is_force && $ref_img_url) continue;
|
|
|
@@ -5328,7 +5350,11 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
$update_flag = false;
|
|
|
foreach ($scenes as &$scene) {
|
|
|
$scene_name = getProp($scene, 'scene');
|
|
|
- $description = getProp($scene, 'description');
|
|
|
+
|
|
|
+ // 优先使用 pic_prompt,如果没有则使用 description
|
|
|
+ $pic_prompt = getProp($scene, 'pic_prompt');
|
|
|
+ $description = !empty($pic_prompt) ? trim((string)$pic_prompt) : getProp($scene, 'description');
|
|
|
+
|
|
|
if ($art_style) $description = "美术风格:\n{$art_style}\n\n场景描述:{$description}\n图片要求: 图片侧重点是场景,生成的是场景环境图片,不要出现人物(此为第一优先要求)";
|
|
|
// 参考图地址
|
|
|
$ref_img_url = getProp($scene, 'url');
|
|
|
@@ -5408,6 +5434,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
foreach ($episode_roles as &$episode_role) {
|
|
|
$episode_role_name = getProp($episode_role, 'role');
|
|
|
$episode_description = getProp($episode_role, 'description');
|
|
|
+ $episode_pic_prompt = getProp($episode_role, 'pic_prompt');
|
|
|
$episode_url = getProp($episode_role, 'url');
|
|
|
|
|
|
// 跳过旁白角色
|
|
|
@@ -5424,12 +5451,15 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
foreach ($global_roles as $global_role) {
|
|
|
$global_role_name = getProp($global_role, 'role');
|
|
|
$global_description = getProp($global_role, 'description');
|
|
|
+ $global_pic_prompt = getProp($global_role, 'pic_prompt');
|
|
|
$global_url = getProp($global_role, 'url');
|
|
|
$global_task_id = getProp($global_role, 'task_id');
|
|
|
$global_task_status = getProp($global_role, 'task_status');
|
|
|
|
|
|
- // 满足条件:1.角色名相同 2.描述相同 3.剧集中URL为空
|
|
|
- if ($episode_role_name == $global_role_name && $episode_description == $global_description) {
|
|
|
+ // 满足条件:1.角色名相同 2.描述相同 3.pic_prompt相同 4.剧集中URL为空
|
|
|
+ if ($episode_role_name == $global_role_name
|
|
|
+ && $episode_description == $global_description
|
|
|
+ && $episode_pic_prompt == $global_pic_prompt) {
|
|
|
// 继承 task_id、task_status 和 url
|
|
|
if (!empty($global_task_id)) {
|
|
|
$episode_role['task_id'] = $global_task_id;
|
|
|
@@ -5462,6 +5492,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
foreach ($episode_scenes as &$episode_scene) {
|
|
|
$episode_scene_name = getProp($episode_scene, 'scene');
|
|
|
$episode_description = getProp($episode_scene, 'description');
|
|
|
+ $episode_pic_prompt = getProp($episode_scene, 'pic_prompt');
|
|
|
$episode_url = getProp($episode_scene, 'url');
|
|
|
|
|
|
// 如果剧集中已有URL,跳过
|
|
|
@@ -5473,12 +5504,15 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
foreach ($global_scenes as $global_scene) {
|
|
|
$global_scene_name = getProp($global_scene, 'scene');
|
|
|
$global_description = getProp($global_scene, 'description');
|
|
|
+ $global_pic_prompt = getProp($global_scene, 'pic_prompt');
|
|
|
$global_url = getProp($global_scene, 'url');
|
|
|
$global_task_id = getProp($global_scene, 'task_id');
|
|
|
$global_task_status = getProp($global_scene, 'task_status');
|
|
|
|
|
|
- // 满足条件:1.场景名相同 2.描述相同 3.剧集中URL为空
|
|
|
- if ($episode_scene_name == $global_scene_name && $episode_description == $global_description) {
|
|
|
+ // 满足条件:1.场景名相同 2.描述相同 3.pic_prompt相同 4.剧集中URL为空
|
|
|
+ if ($episode_scene_name == $global_scene_name
|
|
|
+ && $episode_description == $global_description
|
|
|
+ && $episode_pic_prompt == $global_pic_prompt) {
|
|
|
// 继承 task_id、task_status 和 url
|
|
|
if (!empty($global_task_id)) {
|
|
|
$episode_scene['task_id'] = $global_task_id;
|
|
|
@@ -6390,11 +6424,15 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
if (!isset($global_map[$itemKey])) {
|
|
|
$need_create_task = true;
|
|
|
} else {
|
|
|
- // 条件2:名称匹配但描述不一致
|
|
|
+ // 条件2:名称匹配但描述或 pic_prompt 不一致
|
|
|
$global_description = trim((string)getProp($global_map[$itemKey], 'description'));
|
|
|
$current_description = trim((string)$item_description);
|
|
|
|
|
|
- if ($global_description !== $current_description) {
|
|
|
+ $global_pic_prompt = trim((string)getProp($global_map[$itemKey], 'pic_prompt'));
|
|
|
+ $current_pic_prompt = trim((string)getProp($item, 'pic_prompt'));
|
|
|
+
|
|
|
+ // 如果 description 或 pic_prompt 有变化,需要重新生成
|
|
|
+ if ($global_description !== $current_description || $global_pic_prompt !== $current_pic_prompt) {
|
|
|
$need_create_task = true;
|
|
|
}
|
|
|
}
|
|
|
@@ -6402,7 +6440,9 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
// 如果需要创建任务,调用图片生成服务
|
|
|
if ($need_create_task) {
|
|
|
try {
|
|
|
- $description = $item_description;
|
|
|
+ // 优先使用 pic_prompt,如果没有则使用 description
|
|
|
+ $pic_prompt = getProp($item, 'pic_prompt');
|
|
|
+ $description = !empty($pic_prompt) ? trim((string)$pic_prompt) : $item_description;
|
|
|
|
|
|
// 添加美术风格前缀
|
|
|
if ($art_style) {
|