ComfyUI/app/assets
Matt Miller c5b55bab64 feat(assets): extract image dimensions at ingest and emit on asset responses
Image assets now carry width/height under the existing `metadata` field on
asset responses, shaped as `{"kind": "image", "width": W, "height": H}`.
This lets consumers get original dimensions (e.g. for clients that render
server-side thumbnails and can't recover them from naturalWidth/Height)
without an extra round-trip.

Dimensions are written to AssetReference.system_metadata across three
ingest paths:

- Direct file ingest (upload, in-place registration): Pillow reads the
  image header right after hashing, while the file is still in OS page
  cache. Non-image MIME types are skipped without touching the file.
- From-hash registration: this path never reads the file bytes, so
  dimensions are best-effort copied from any prior sibling reference of
  the same asset that already carries kind=image metadata. Missing
  siblings, non-image siblings, or absent dimension keys leave the new
  reference's metadata unchanged.
- Scanner enrichment: extends the existing system_metadata write in
  enrich_asset so scanner-registered images get the same treatment as
  uploaded ones.

Existing system_metadata keys (e.g. safetensors fields written by the
enricher, download provenance) are preserved through merge. Existing
assets ingested before this change retain their current metadata — no
automatic backfill in this PR.

Tests cover image emission, non-image no-op, merge preservation, and the
from-hash sibling back-fill (including the no-sibling and non-image-sibling
cases).
2026-05-19 12:27:12 -07:00
..
api feat(assets): align local API with cloud spec (#12863) 2026-03-16 12:34:04 -07:00
database feat(assets): register output files as assets after prompt execution (#12812) 2026-03-24 20:48:55 -07:00
services feat(assets): extract image dimensions at ingest and emit on asset responses 2026-05-19 12:27:12 -07:00
helpers.py refactor(assets): modular architecture + async two-phase scanner & background seeder (#12621) 2026-03-07 20:37:25 -05:00
scanner.py feat(assets): extract image dimensions at ingest and emit on asset responses 2026-05-19 12:27:12 -07:00
seeder.py feat(assets): register output files as assets after prompt execution (#12812) 2026-03-24 20:48:55 -07:00