Each photo card gains a free-text tags input, sent as a raw
comma-separated `tags` form field on upload. The server normalizes it
(parseTags), so the clients stay dumb — no tag parsing on-device.
- Android: PickedItem.tags + setTags; threaded through UploadQueue →
UploadWorker → UploadClient's multipart.
- Desktop: a tags QLineEdit per PhotoItemWidget; UploadClient.upload sends
it.
Mirror the Android bulk feature in the Qt uploader: choose several photos
at once, each a card with its own caption, date, and upload status, and
post the batch.
- Per-photo cards (PhotoItemWidget) in a scrollable list; retry re-posts
only the failures.
- One upload per photo with a per-item UUID slug suffix so a batch posted
in the same second cannot collide.
- Image prep runs off the UI thread via QtConcurrent so the window stays
responsive.
- A "Simultaneous uploads" setting (1–8, default 3) caps how many photos
are prepared/uploaded at once; the rest queue and fill freed slots.