Просмотр исходного кода

改进生成分镜提示词,使用上集主题列表和场景

lh 2 месяцев назад
Родитель
Сommit
99b791d209
2 измененных файлов с 232 добавлено и 75 удалено
  1. 22 12
      app/Services/Anime/AnimeService.php
  2. 210 63
      app/Services/DeepSeek/DeepSeekService.php

+ 22 - 12
app/Services/Anime/AnimeService.php

@@ -494,7 +494,13 @@ class AnimeService
         if (!$episode) Utils::throwError('20003:该剧集不存在!');
         $episode = (array)$episode;
         $episode['roles'] = json_decode($episode['roles'], true);
+        foreach($episode['roles'] as &$item) {
+            if (isset($item['pic_prompt']) && mb_substr($item['pic_prompt'], 0, 11) != '写实。全景,正面拍摄。') $item['pic_prompt'] = '写实。全景,正面拍摄。'.$item['pic_prompt'];
+        }
         $episode['scenes'] = json_decode($episode['scenes'], true);
+        foreach($episode['scenes'] as &$item) {
+            if (isset($item['pic_prompt']) && mb_substr($item['pic_prompt'], 0, 3) != '写实。') $item['pic_prompt'] = '写实。'.$item['pic_prompt'];
+        }
         
         // 获取分镜信息
         $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('segment_number')
@@ -1149,24 +1155,27 @@ class AnimeService
             ->where('anime_id', $anime_id)
             ->where('id', $episode_id)
             ->where('is_default', 1)
-            ->select('id as episode_id', 'anime_id', 'episode_number')
+            ->select('id as episode_id', 'anime_id', 'episode_number', 'roles', 'scenes', 'image_model')
             ->first();
             
         if (!$episode) {
             Utils::throwError('20003:该剧集不存在');
         }
 
-        // 获取动漫的角色信息(包含参考图)
-        $anime = DB::table('mp_animes')
-            ->where('id', $anime_id)
-            ->select('roles', 'scenes')
-            ->first();
-            
-        if (!$anime || !$anime->roles) {
-            Utils::throwError('20003:未找到角色信息');
+        $model = getProp($data, 'model');
+        if (!$model) {
+            $model = getProp($episode, 'image_model');
+            if (!$model) {
+                // episode表也没有,使用默认值
+                $model = 'doubao-seedream-5-0-lite-260128';
+            }
+        }
+        // 验证模型是否在可用模型表中
+        if (!DB::table('mp_image_models')->where('model', $model)->where('is_enabled', 1)->exists()) {
+            $model = 'doubao-seedream-5-0-lite-260128';
         }
 
-        $roles = json_decode($anime->roles, true);
+        $roles = json_decode(getProp($episode, 'roles'), true);
         if (!$roles) {
             Utils::throwError('20003:角色信息格式错误');
         }
@@ -1184,9 +1193,9 @@ class AnimeService
             }
         }
 
-        $scenes = json_decode($anime->scenes, true);
+        $scenes = json_decode(getProp($episode, 'roles'), true);
         if (!$scenes) {
-            Utils::throwError('20003:角色信息格式错误');
+            Utils::throwError('20003:场景信息格式错误');
         }
         // 构建角色名称到参考图的映射
         $scene_map = [];
@@ -1270,6 +1279,7 @@ class AnimeService
 
                 // 准备生成任务参数
                 $params = [
+                    'model' => $model,
                     'alias_segment_id' => $segment_id,
                     'prompt' => $prompt,
                     'ref_img_urls' => $ref_img_urls,

Разница между файлами не показана из-за своего большого размера
+ 210 - 63
app/Services/DeepSeek/DeepSeekService.php