mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-17 07:05:12 +08:00
Add preview_url to /assets API response using /api/view endpoint
For input and output assets, generate a preview_url pointing to the existing /api/view endpoint using the asset's filename and tag-derived type (input/output). Handles subdirectories via subfolder param and URL-encodes filenames with spaces, unicode, and special characters. This aligns the OSS backend response with the frontend AssetCard expectation for thumbnail rendering. Amp-Thread-ID: https://ampcode.com/threads/T-019cda3f-5c2c-751a-a906-ac6c9153ac5c Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
parent
8f9b81bf7b
commit
a0c2fe9f0c
@ -124,11 +124,35 @@ def _validate_sort_field(requested: str | None) -> str:
|
|||||||
return "created_at"
|
return "created_at"
|
||||||
|
|
||||||
|
|
||||||
|
def _build_preview_url_from_view(tags: list[str], user_metadata: dict[str, Any] | None) -> str | None:
|
||||||
|
"""Build a /api/view preview URL from asset tags and user_metadata filename."""
|
||||||
|
if not user_metadata:
|
||||||
|
return None
|
||||||
|
filename = user_metadata.get("filename")
|
||||||
|
if not filename:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if "input" in tags:
|
||||||
|
view_type = "input"
|
||||||
|
elif "output" in tags:
|
||||||
|
view_type = "output"
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
subfolder = ""
|
||||||
|
if "/" in filename:
|
||||||
|
subfolder, filename = filename.rsplit("/", 1)
|
||||||
|
|
||||||
|
encoded_filename = urllib.parse.quote(filename, safe="")
|
||||||
|
url = f"/api/view?type={view_type}&filename={encoded_filename}"
|
||||||
|
if subfolder:
|
||||||
|
url += f"&subfolder={urllib.parse.quote(subfolder, safe='')}"
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
def _build_asset_response(result: schemas.AssetDetailResult | schemas.UploadResult) -> schemas_out.Asset:
|
def _build_asset_response(result: schemas.AssetDetailResult | schemas.UploadResult) -> schemas_out.Asset:
|
||||||
"""Build an Asset response from a service result."""
|
"""Build an Asset response from a service result."""
|
||||||
preview_url = None
|
preview_url = _build_preview_url_from_view(result.tags, result.ref.user_metadata)
|
||||||
if result.ref.preview_id:
|
|
||||||
preview_url = f"/api/assets/{result.ref.preview_id}/content?disposition=inline"
|
|
||||||
return schemas_out.Asset(
|
return schemas_out.Asset(
|
||||||
id=result.ref.id,
|
id=result.ref.id,
|
||||||
name=result.ref.name,
|
name=result.ref.name,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user