From 1a3d60fcf2592edc0be0d4bc01134dd75ec448e7 Mon Sep 17 00:00:00 2001 From: zhangheng Date: Mon, 18 May 2026 16:34:58 +0800 Subject: [PATCH] fix(image): record reference source metadata in request.json --- gpt_image2_generate.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/gpt_image2_generate.py b/gpt_image2_generate.py index 786aadf..0dedbc9 100644 --- a/gpt_image2_generate.py +++ b/gpt_image2_generate.py @@ -214,6 +214,32 @@ def resolve_image_source(prefix: str) -> str | None: return provided[0][1] +def describe_image_source(source: str | None, fallback_name: str) -> dict[str, str] | None: + if source is None: + return None + + value = source.strip() + if not value: + return None + + lowered = value.lower() + if lowered.startswith("data:image/"): + source_kind = "data_url" + filename = fallback_name + elif lowered.startswith(("http://", "https://")): + source_kind = "url" + filename = Path(urlparse(value).path).name or fallback_name + else: + source_kind = "file" + filename = Path(value).expanduser().name or fallback_name + + return { + "source": value, + "kind": source_kind, + "filename": filename, + } + + def safe_filename(filename: str, fallback: str, mime_type: str) -> str: candidate = Path(filename).name.strip() if not candidate: @@ -476,6 +502,8 @@ def main() -> None: poll_interval = env_int("IMAGE_POLL_INTERVAL", DEFAULT_POLL_INTERVAL) endpoint_path = "/v1/images/edits" if request_mode == "edit" else "/v1/images/generations" min_output_edge = resolve_min_output_edge(size, resolution, request_style) + reference_image_info = describe_image_source(reference_source, "reference-image") + mask_image_info = describe_image_source(mask_source, "mask-image") print( "开始生成图片:", @@ -508,7 +536,13 @@ def main() -> None: "request_style": request_style, "min_output_edge": min_output_edge, "reference_image_present": bool(reference_source), + "reference_image_source": reference_image_info["source"] if reference_image_info else None, + "reference_image_source_kind": reference_image_info["kind"] if reference_image_info else None, + "reference_image_filename": reference_image_info["filename"] if reference_image_info else None, "mask_image_present": bool(mask_source), + "mask_image_source": mask_image_info["source"] if mask_image_info else None, + "mask_image_source_kind": mask_image_info["kind"] if mask_image_info else None, + "mask_image_filename": mask_image_info["filename"] if mask_image_info else None, "payload": payload, })