fix(video): 真人参考图走素材库 asset:// 引用,根治 Seedance 锁脸全错
根因:Seedance 2.0 对写实人脸的原始直链直接 400(InputImageSensitiveContentDetected),
旧代码静默退纯文生视频 → 任务假成功、人物/场景全错(脚本是文本所以对)。
- 视频参考图:已过审(active+素材库 ID)的人物 + 分镜图换成 asset://{review_remote_id},
场景/商品(无脸、未送审)保持原始直链(_video_reference_images / _seedance_ref_url)
- 临时:VIDEO_ARK_API_KEY 让 Seedance 借 AirDrama 火山账号,与真人素材库同账号 → asset:// 可解析;
仅覆盖 VIDEO 能力,图像/文本仍用自有 key。待自有账号开通素材库后删此项即回落
- 删掉静默文生兜底:火山报错经 _raise_volcano_error 抽出真实 code+message 抛出,
落 error_message → 前端如实显示,绝不再假装成功出没锁脸的视频
真实接口验证:同图旧路 400,新路(asset://+AirDrama key)Seedance ACCEPTED 正常出片。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
dbd1382fb1
commit
6916f9c877
@@ -11,6 +11,22 @@ from django.conf import settings
|
||||
from .base import AIProviderResult
|
||||
|
||||
|
||||
def _raise_volcano_error(response: requests.Response) -> None:
|
||||
"""火山非 2xx:抽出真实报错(error.code / error.message)抛成可读异常,
|
||||
供上层落 error_message → 前端如实显示真实报错参数,不再被通用「HTTP 400」吞掉细节。"""
|
||||
if response.ok:
|
||||
return
|
||||
code = message = ""
|
||||
try:
|
||||
err = (response.json() or {}).get("error") or {}
|
||||
code, message = str(err.get("code") or ""), str(err.get("message") or "")
|
||||
except Exception:
|
||||
pass
|
||||
if code or message:
|
||||
raise RuntimeError(f"火山报错 [{code}] {message}".strip())
|
||||
raise RuntimeError(f"火山接口 {response.status_code}: {(response.text or '')[:300]}")
|
||||
|
||||
|
||||
@dataclass
|
||||
class VolcanoArkProvider:
|
||||
api_key: str | None = None
|
||||
@@ -196,7 +212,7 @@ class VolcanoArkProvider:
|
||||
json=body,
|
||||
timeout=120,
|
||||
)
|
||||
response.raise_for_status()
|
||||
_raise_volcano_error(response)
|
||||
return response.json()
|
||||
|
||||
def poll_video_task(self, *, endpoint: str, provider_task_id: str) -> dict[str, Any]:
|
||||
@@ -207,7 +223,7 @@ class VolcanoArkProvider:
|
||||
headers={"Authorization": f"Bearer {self.api_key}"},
|
||||
timeout=60,
|
||||
)
|
||||
response.raise_for_status()
|
||||
_raise_volcano_error(response)
|
||||
return response.json()
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user