优化替换角色添加音频
This commit is contained in:
@@ -1048,6 +1048,37 @@ def finalize_free_video(*, task: AITask) -> AITask:
|
||||
return locked
|
||||
|
||||
|
||||
def rehydrate_ref_urls(references) -> list:
|
||||
"""参考素材快照里的 URL 是提交当时签的 TOS 预签名链(1 小时过期),历史记录隔天再点开就播不了。
|
||||
凡是带 asset_id 的,按当前资产重新取长期直链(顺带补上视频封面),老任务也一起救回来。
|
||||
素材库引用(source=library)的 asset_id 指向 FreeAsset 不是 Asset,查不到就原样保留快照。"""
|
||||
refs = [item for item in (references or [])]
|
||||
ids = set()
|
||||
for item in refs:
|
||||
if not isinstance(item, dict) or item.get("source") == "library":
|
||||
continue
|
||||
if item.get("asset_id"):
|
||||
try:
|
||||
ids.add(uuid.UUID(str(item["asset_id"])))
|
||||
except (ValueError, TypeError, AttributeError):
|
||||
continue
|
||||
if not ids:
|
||||
return refs
|
||||
|
||||
from .services import asset_stable_url
|
||||
|
||||
assets = {str(a.id): a for a in Asset.objects.filter(id__in=ids).prefetch_related("files")}
|
||||
fresh = []
|
||||
for item in refs:
|
||||
asset = assets.get(str(item.get("asset_id") or "")) if isinstance(item, dict) else None
|
||||
url, thumb = asset_stable_url(asset) if asset is not None else ("", "")
|
||||
if not url:
|
||||
fresh.append(item)
|
||||
continue
|
||||
fresh.append({**item, "url": url, **({"thumb_url": thumb} if thumb else {})})
|
||||
return fresh
|
||||
|
||||
|
||||
def serialize_free_video_task(task: AITask, *, include_deleted_assets: bool = False) -> dict:
|
||||
"""任务 → 前端契约。视频/封面直链从 generated_assets 取(TOS 公读),转存失败回落火山临时 URL。"""
|
||||
payload = task.request_payload or {}
|
||||
@@ -1097,7 +1128,7 @@ def serialize_free_video_task(task: AITask, *, include_deleted_assets: bool = Fa
|
||||
"seed": payload.get("seed", -1),
|
||||
"seed_used": payload.get("seed_used"),
|
||||
"generate_audio": payload.get("generate_audio", True),
|
||||
"references": payload.get("references") or [],
|
||||
"references": rehydrate_ref_urls(payload.get("references")),
|
||||
"estimated_tokens": payload.get("estimated_tokens") or 0,
|
||||
"actual_tokens": payload.get("actual_tokens") or 0,
|
||||
"estimated_cost": str(task.estimated_cost),
|
||||
|
||||
Reference in New Issue
Block a user