The relay web client re-fetched every macro image through the relay->desktop
proxy on each render (tab switch, WS update) and revoked the object URL on
load, so nothing was reused and fetches were serial — slow to display.
- Client: cache image_path -> Promise<objectURL> and reuse across renders
(macro images are content-addressed by uuid, so immutable); fetch in
parallel and de-duplicate concurrent requests.
- Proxy: send Cache-Control: private, max-age=31536000, immutable on image
responses so the browser also disk-caches them across reloads.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>