fix(match3d): embed container reference image

This commit is contained in:
kdletters
2026-05-20 15:37:44 +08:00
parent 83e92fc3c4
commit 0eed942ce5
6 changed files with 67 additions and 55 deletions

View File

@@ -386,7 +386,7 @@ pub(super) async fn generate_match3d_background_image(
require_match3d_oss_client(state)?;
let settings = require_openai_image_settings(state)?;
let http_client = build_openai_image_http_client(&settings)?;
let reference_image = load_match3d_container_reference_image().await?;
let reference_image = load_match3d_container_reference_image()?;
let generated_background = create_openai_image_generation(
&http_client,
&settings,
@@ -486,7 +486,7 @@ pub(super) async fn generate_match3d_container_image(
require_match3d_oss_client(state)?;
let settings = require_openai_image_settings(state)?;
let http_client = build_openai_image_http_client(&settings)?;
let reference_image = load_match3d_container_reference_image().await?;
let reference_image = load_match3d_container_reference_image()?;
let container_prompt = build_match3d_container_generation_prompt(config, prompt);
let generated_container = create_openai_image_edit(
&http_client,
@@ -563,15 +563,10 @@ pub(super) fn merge_match3d_container_image_into_background_asset(
}
}
async fn load_match3d_container_reference_image() -> Result<OpenAiReferenceImage, AppError> {
let bytes = tokio::fs::read(MATCH3D_CONTAINER_REFERENCE_IMAGE_PATH)
.await
.map_err(|error| {
AppError::from_status(StatusCode::INTERNAL_SERVER_ERROR).with_details(json!({
"provider": MATCH3D_AGENT_PROVIDER,
"message": format!("读取抓大鹅容器参考图失败:{error}"),
}))
})?;
pub(super) fn load_match3d_container_reference_image() -> Result<OpenAiReferenceImage, AppError> {
// 中文注释:生产 API 单独发布二进制Web 静态资源可能在另一轮流水线发布。
// 容器参考图属于后端生图协议输入,必须随 api-server 编译进二进制,不能依赖运行时 cwd 下存在 public/。
let bytes = MATCH3D_CONTAINER_REFERENCE_IMAGE_BYTES.to_vec();
if bytes.is_empty() {
return Err(
AppError::from_status(StatusCode::INTERNAL_SERVER_ERROR).with_details(json!({
@@ -992,7 +987,9 @@ pub(super) fn normalize_match3d_public_reference_image_path(source: &str) -> Opt
) {
return None;
}
Some(format!("public/{source}"))
Some(format!(
"{MATCH3D_PUBLIC_REFERENCE_IMAGE_PATH_PREFIX}{source}"
))
}
pub(super) fn collect_match3d_cover_reference_image_sources(