|
|
@@ -5083,7 +5083,8 @@ class AnimeService
|
|
|
$processResult = $this->processActContentWithProducts($actContent, $products, $supportAudioReference);
|
|
|
$fullPrompt = $processResult['content'];
|
|
|
// if ($art_style_type == '3D真人风格') $fullPrompt = "美术风格: $art_style\n\n".$fullPrompt;
|
|
|
- $reference_images = array_merge($processResult['reference_images'], $reference_images);
|
|
|
+ // 资产参考图与调用方传入的参考图合并后统一去重(保留资产参考图在前,不影响提示词中的<图片N>编号)
|
|
|
+ $reference_images = array_values(array_unique(array_filter(array_merge($processResult['reference_images'], $reference_images))));
|
|
|
// 角色音色参考音频(顺序与提示词中的<音频N>标记一一对应)
|
|
|
$reference_audios = $supportAudioReference ? ($processResult['reference_audios'] ?? []) : [];
|
|
|
|
|
|
@@ -5254,6 +5255,8 @@ class AnimeService
|
|
|
// 角色音色参考音频:上传为素材并传入统一API(上传失败时清理提示词中的<音频N>标记)
|
|
|
if ($reference_audios) {
|
|
|
$unifiedParams['ref_audio_url'] = json_encode($reference_audios, 256);
|
|
|
+ // 任务记录:参考图与参考音频一起存入 ref_image_url
|
|
|
+ $unifiedParams['ref_image_url'] = $this->mergeReferenceAudiosIntoRefImageUrl($unifiedParams['ref_image_url'] ?? '', $reference_audios);
|
|
|
$reference_audio_assets = $this->processActReferenceAudiosToAssets($reference_audios, $model, $unifiedParams['prompt']);
|
|
|
$parameters['reference_audios'] = $reference_audio_assets;
|
|
|
// 音频素材上传失败的角色回退到音色提示词
|
|
|
@@ -5295,6 +5298,8 @@ class AnimeService
|
|
|
// 角色音色参考音频:上传为素材并传入网关(上传失败时清理提示词中的<音频N>标记)
|
|
|
if ($reference_audios) {
|
|
|
$videoParams['ref_audio_url'] = json_encode($reference_audios, 256);
|
|
|
+ // 任务记录:参考图与参考音频一起存入 ref_image_url
|
|
|
+ $videoParams['ref_image_url'] = $this->mergeReferenceAudiosIntoRefImageUrl($videoParams['ref_image_url'] ?? '', $reference_audios);
|
|
|
$reference_audio_assets = $this->processActReferenceAudiosToAssets($reference_audios, $model, $fullPrompt);
|
|
|
// 音频素材上传失败的角色回退到音色提示词
|
|
|
$fullPrompt = $this->applyAudioVoiceFallbacks($fullPrompt, $processResult['audio_voice_fallbacks'] ?? []);
|
|
|
@@ -11704,6 +11709,27 @@ class AnimeService
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 任务记录用:把参考音频追加到 ref_image_url 中
|
|
|
+ * 参考图与参考音色音频一起保存,便于后续核对任务实际使用的素材
|
|
|
+ * 合并后统一去重并过滤空值,保证同一素材只出现一次
|
|
|
+ *
|
|
|
+ * @param string $refImageUrlJson 当前 ref_image_url(JSON数组字符串)
|
|
|
+ * @param array $referenceAudios 参考音频URL数组
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function mergeReferenceAudiosIntoRefImageUrl($refImageUrlJson, array $referenceAudios) {
|
|
|
+ $refImageUrls = json_decode((string)$refImageUrlJson, true) ?: [];
|
|
|
+ if (!is_array($refImageUrls)) {
|
|
|
+ $refImageUrls = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 参考图在前、参考音频在后,合并后去重并过滤空值
|
|
|
+ $merged = array_values(array_unique(array_filter(array_merge($refImageUrls, $referenceAudios))));
|
|
|
+
|
|
|
+ return json_encode($merged, 256);
|
|
|
+ }
|
|
|
+
|
|
|
public function saveActVideoGenerateParams($data) {
|
|
|
$episode_id = getProp($data, 'episode_id');
|
|
|
$model = getProp($data, 'video_model');
|