fix: 仿照即梦出一版

This commit is contained in:
old burden 2026-03-31 13:49:46 +08:00
parent 45cff6ab27
commit 15f5a20f7c
1 changed files with 49 additions and 18 deletions

View File

@ -266,30 +266,61 @@ public class PortalVideoController extends BaseController {
@PostMapping("/image-reference") @PostMapping("/image-reference")
@ApiOperation("图生视频-基于参考图") @ApiOperation("图生视频-基于参考图")
public AjaxResult imageReference(@RequestBody PortalVideoGenRequest request) { public AjaxResult imageReference(@RequestBody PortalVideoGenRequest request) {
if (StringUtils.isEmpty(request.getReferenceUrl())) { List<ContentItem> contentList;
return AjaxResult.error("请上传参考图"); if (request.getContent() != null && !request.getContent().isEmpty()) {
} contentList = request.getContent();
if (StringUtils.isEmpty(request.getText())) { ContentItem head = contentList.get(0);
return AjaxResult.error("请输入视频描述文本"); if (head == null || !"text".equals(head.getType()) || StringUtils.isEmpty(head.getText())) {
} return AjaxResult.error("请输入视频描述文本(首条须为 type=text可含 [图n] 占位)");
List<ContentItem> contentList = new ArrayList<>(); }
ContentItem textItem = new ContentItem(); String firstRef = contentList.stream()
textItem.setType("text"); .filter(PortalVideoController::isReferenceImageContentItem)
textItem.setText(request.getText()); .map(it -> it.getImageUrl().getUrl())
contentList.add(textItem); .findFirst()
.orElse(null);
if (StringUtils.isEmpty(firstRef)) {
return AjaxResult.error("请上传参考图content 中须含 image_url + role=reference_image");
}
if (StringUtils.isEmpty(request.getReferenceUrl())) {
request.setReferenceUrl(firstRef);
}
} else {
if (StringUtils.isEmpty(request.getReferenceUrl())) {
return AjaxResult.error("请上传参考图");
}
if (StringUtils.isEmpty(request.getText())) {
return AjaxResult.error("请输入视频描述文本");
}
contentList = new ArrayList<>();
ContentItem textItem = new ContentItem();
textItem.setType("text");
textItem.setText(request.getText());
contentList.add(textItem);
ContentItem refItem = new ContentItem(); ContentItem refItem = new ContentItem();
refItem.setType("image_url"); refItem.setType("image_url");
refItem.setRole("reference_image"); refItem.setRole("reference_image");
ImageUrl refUrl = new ImageUrl(); ImageUrl refUrl = new ImageUrl();
refUrl.setUrl(request.getReferenceUrl()); refUrl.setUrl(request.getReferenceUrl());
refItem.setImageUrl(refUrl); refItem.setImageUrl(refUrl);
contentList.add(refItem); contentList.add(refItem);
}
ByteBodyReq body = newVideoBody(request, contentList); ByteBodyReq body = newVideoBody(request, contentList);
return submitOrderAndCreate(request, "image-reference", body); return submitOrderAndCreate(request, "image-reference", body);
} }
private static boolean isReferenceImageContentItem(ContentItem item) {
if (item == null || !"image_url".equals(item.getType())) {
return false;
}
if (!"reference_image".equals(item.getRole())) {
return false;
}
ImageUrl iu = item.getImageUrl();
return iu != null && StringUtils.isNotEmpty(iu.getUrl());
}
private List<ContentItem> buildTextAndFirstFrame(String text, String firstUrl) { private List<ContentItem> buildTextAndFirstFrame(String text, String firstUrl) {
List<ContentItem> contentList = new ArrayList<>(); List<ContentItem> contentList = new ArrayList<>();
ContentItem textItem = new ContentItem(); ContentItem textItem = new ContentItem();