e917c5393fa6d18c4e6debfd346ff9d4813c800f
iced's `image::Handle::from_bytes` assigns a fresh *unique* id on every call (unlike `from_path`, which hashes). `avatar_view` built the handle inline in `view()`, so every repaint produced a "new" image and iced re-uploaded the texture each frame. Any redraw triggered it — notably the redraws fired on mouse movement — so visible avatars flickered constantly while the mouse moved. Fix: cache handles by a content hash of the PNG bytes (thread-local, UI thread) and reuse the same `Handle` across redraws, giving a stable texture id. Covers both presets and custom uploads. Build + clippy clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>