lh 3 месяцев назад
Родитель
Сommit
a35688b2b1

+ 25 - 3
app/Http/Controllers/Anime/AnimeController.php

@@ -613,9 +613,23 @@ class AnimeController extends BaseController
                 // $videoDuration = $this->AnimeService->calculateOptimalVideoDuration($segmentContent, $tailFrame);
                 $videoDuration = -1;
                 
-                // 默认模型
-                // $model = getProp($data, 'model', 'doubao-seedance-1-0-pro-250528');
-                $model = getProp($data, 'model', 'doubao-seedance-1-5-pro-251215');
+                // 处理视频模型(在循环外统一处理,避免重复)
+                if (!isset($model)) {
+                    $model = getProp($data, 'model');
+                    if (!$model) {
+                        // 用户没有输入,从episode表获取
+                        $episode = DB::table('mp_anime_episodes')->where('id', $episodeId)->first();
+                        $model = getProp($episode, 'video_model');
+                        if (!$model) {
+                            // episode表也没有,使用默认值
+                            $model = 'doubao-seedance-1-5-pro-251215';
+                        }
+                    }
+                    // 验证模型是否在可用模型表中
+                    if (!DB::table('mp_video_models')->where('model', $model)->where('is_enabled', 1)->exists()) {
+                        $model = 'doubao-seedance-1-5-pro-251215';
+                    }
+                }
                 
                 // 构建视频生成参数
                 $videoParams = [
@@ -748,6 +762,14 @@ class AnimeController extends BaseController
             Utils::throwError('20003:没有需要生成视频的分镜');
         }
         
+        // 保存模型到episode表
+        if (isset($model)) {
+            DB::table('mp_anime_episodes')->where('id', $episodeId)->update([
+                'video_model' => $model,
+                'updated_at' => date('Y-m-d H:i:s')
+            ]);
+        }
+        
         // 记录开始时间(包含创建任务的时间)
         $startTime = time();
         $maxDuration = 1800; // 30分钟超时

+ 59 - 9
app/Services/Anime/AnimeService.php

@@ -52,11 +52,6 @@ class AnimeService
         // 替换美术风格
         $mappedArtStyle = $this->DeepSeekService->getArtStylePromptByInput($input_art_style);
 
-        $model = getProp($data, 'model');
-        if ($model && !DB::table('mp_text_models')->where('model', $model)->where('is_enabled', 1)->value('id')) {
-            Utils::throwError('20003:该模型不存在!');
-        }
-
         // 提取文件内容
         if ($file) {
             $content = $this->DeepSeekService->extractFileContent($file);
@@ -83,12 +78,23 @@ class AnimeService
             'user_id'       => $uid,
             'anime_name'    => '新剧本策划',
             'is_multi'      => getProp($data, 'is_multi', 1),
-            'model'         => $model,
             'content'       => $content,
             'created_at'    => date('Y-m-d H:i:s'),
             'updated_at'    => date('Y-m-d H:i:s'),
         ];
 
+        // 处理文本模型
+        $model = getProp($data, 'model');
+        if (!$model) {
+            // 用户没有输入,使用默认值
+            $model = 'doubao-seed-2-0-mini-260215';
+        }
+        // 验证模型是否在可用模型表中
+        if (!DB::table('mp_text_models')->where('model', $model)->where('is_enabled', 1)->exists()) {
+            $model = 'doubao-seed-2-0-mini-260215';
+        }
+        $anime_data['model'] = $model;
+
         if ($mappedArtStyle) $anime_data['art_style'] = $mappedArtStyle;
 
         return DB::table('mp_animes')->insertGetId($anime_data);
@@ -2628,8 +2634,27 @@ class AnimeService
         // $videoDuration = $this->calculateOptimalVideoDuration($segmentContent, $tail_frame);
         $videoDuration = -1;
         
-        // 默认使用 Seedance 1.0 Pro 模型
-        $model = getProp($data, 'model', 'doubao-seedance-1-0-pro-250528');
+        // 处理视频模型
+        $model = getProp($data, 'model');
+        if (!$model) {
+            // 用户没有输入,从episode表获取
+            $episode = DB::table('mp_anime_episodes')->where('id', getProp($segment, 'episode_id'))->first();
+            $model = getProp($episode, 'video_model');
+            if (!$model) {
+                // episode表也没有,使用默认值
+                $model = 'doubao-seedance-1-0-pro-250528';
+            }
+        }
+        // 验证模型是否在可用模型表中
+        if (!DB::table('mp_video_models')->where('model', $model)->where('is_enabled', 1)->exists()) {
+            $model = 'doubao-seedance-1-0-pro-250528';
+        }
+        // 保存到episode表
+        $episode_id = getProp($segment, 'episode_id');
+        DB::table('mp_anime_episodes')->where('id', $episode_id)->update([
+            'video_model' => $model,
+            'updated_at' => date('Y-m-d H:i:s')
+        ]);
         
         // 构建视频生成参数
         $videoParams = [
@@ -2977,7 +3002,32 @@ class AnimeService
 
     public function generateImg($data) {
         $prompt = getProp($data, 'prompt');
-        $model = getProp($data, 'model', 'doubao-seedream-5-0-lite-260128');
+        $episode_id = getProp($data, 'episode_id');
+        
+        // 处理图片模型
+        $model = getProp($data, 'model');
+        if (!$model) {
+            // 用户没有输入,从episode表获取
+            if ($episode_id) {
+                $episode = DB::table('mp_anime_episodes')->where('id', $episode_id)->first();
+                $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';
+        }
+        // 保存到episode表
+        if ($episode_id) {
+            DB::table('mp_anime_episodes')->where('id', $episode_id)->update([
+                'image_model' => $model,
+                'updated_at' => date('Y-m-d H:i:s')
+            ]);
+        }
 
         // 参数验证
         if (!$prompt) Utils::throwError('20003:请提供提示词');

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