[deep dive] Full-screen image/video viewer UI/UX audit #164

Open
opened 2026-09-17 23:06:35 -04:00 by jared · 1 comment
Owner

The viewer already steps ← → between the room's images. Audit it end-to-end on desktop and phone: keyboard (arrows, Esc, +/−, 0), swipe/pinch on touch, zoom persistence between items, video controls vs. image controls, captions display, download/copy/open-in-new-tab, "jump to message", loading states + blurhash, very tall/wide images, GIFs vs. videos, E2EE media, focus trap + screen reader labels, and what happens when a new image arrives while open. Deliver findings as a checklist here, then fix in one reviewed batch.

The viewer already steps ← → between the room's images. Audit it end-to-end on desktop and phone: keyboard (arrows, Esc, +/−, 0), swipe/pinch on touch, zoom persistence between items, video controls vs. image controls, captions display, download/copy/open-in-new-tab, "jump to message", loading states + blurhash, very tall/wide images, GIFs vs. videos, E2EE media, focus trap + screen reader labels, and what happens when a new image arrives while open. Deliver findings as a checklist here, then fix in one reviewed batch.
jared added this to the Features 2026-Q4 milestone 2026-09-17 23:06:35 -04:00
jared added the priority: mediumuxarea: mediaresearch labels 2026-09-17 23:06:35 -04:00
jared self-assigned this 2026-09-17 23:06:35 -04:00
Author
Owner

Image viewer audit — exercised on the local dev homeserver (Playwright, desktop + Pixel 7)

There are two viewers and they behave differently:

timeline ImageViewer gallery lightbox
backdrop light grey card dark full-screen
header file name only file name, sender · date, 1 / N
prev / next none ←/→ across the room's media
zoom buttons, wheel; no keys (fixed) buttons, wheel, + - 0, double-click
keyboard on open focus on the <img> (fixed) focus stayed on the tile behind — all keys dead until a click (fixed)
a11y no role / label (fixed) role=dialog aria-modal "Media viewer"
download
jump to message n/a
touch buttons only, no pinch buttons only, no pinch

Fixed (53823f54): lightbox now focuses itself on open so ←/→/Esc/+/- work immediately; the timeline viewer gained + / = / - / 0, double-click 1×↔2×, role=dialog aria-modal labelled with the file name, and focuses on open. Escape closes both.

Filed: #219 — unify: a timeline image should open the gallery lightbox at that item (dark backdrop, sender/time, prev/next, consistent keys), and add pinch-zoom; the small viewer then only remains for avatars.

Cosmetic seen along the way: the seasonal floating button sits on top of both viewers (#215).

timeline viewer desktop · mobile
lightbox

## Image viewer audit — exercised on the local dev homeserver (Playwright, desktop + Pixel 7) There are **two** viewers and they behave differently: | | timeline `ImageViewer` | gallery lightbox | |---|---|---| | backdrop | light grey card | dark full-screen | | header | file name only | file name, **sender · date**, 1 / N | | prev / next | none | ←/→ across the room's media | | zoom | buttons, wheel; **no keys** (fixed) | buttons, wheel, + - 0, double-click | | keyboard on open | focus on the `<img>` (fixed) | **focus stayed on the tile behind — all keys dead until a click** (fixed) | | a11y | no role / label (fixed) | `role=dialog aria-modal` "Media viewer" | | download | ✓ | ✓ | | jump to message | n/a | ✓ | | touch | buttons only, no pinch | buttons only, no pinch | **Fixed (`53823f54`):** lightbox now focuses itself on open so ←/→/Esc/+/- work immediately; the timeline viewer gained + / = / - / 0, double-click 1×↔2×, `role=dialog aria-modal` labelled with the file name, and focuses on open. Escape closes both. **Filed:** #219 — unify: a timeline image should open the gallery lightbox at that item (dark backdrop, sender/time, prev/next, consistent keys), and add pinch-zoom; the small viewer then only remains for avatars. Cosmetic seen along the way: the seasonal floating button sits on top of both viewers (#215). ![timeline viewer desktop · mobile](https://code.lotusguild.org/attachments/988080ff-bf58-4066-b092-39c15dd73486) ![lightbox](https://code.lotusguild.org/attachments/ac48677e-cc0b-4548-b0a3-d05afdae233f)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#164