Explore: custom emoji in chat (server-free via SL texture UUIDs) #266

Open
opened 2026-10-03 07:01:25 +00:00 by sky_line · 0 comments
Owner

Exploration — may turn out infeasible. Discord-style custom emoji in chat (:ponyhug: rendering as a small image) for Slipstream users, without running our own service if at all possible.

The core problem

Chat is text-only, and other viewers must still see something sensible. Every Slipstream receiver needs to resolve a shortcode to an image the same way, which normally means a shared registry (a server).

Server-free idea: use SL's own asset system

  • An emoji is an SL texture UUID. SL already hosts the image, and any texture UUID can be fetched by any viewer. No hosting by us.
  • The wire format carries the UUID, so receivers don't need a registry. For example, send :ponyhug: as a link-like token such as secondlife:///app/emoji/<uuid>/ponyhug, or a compact form we can parse.
    • Slipstream renders it inline at text height (cf. #265 for the inline image plumbing).
    • Other viewers show :ponyhug: or a clickable texture link, which degrades gracefully.
    • Watch message-length limits (1023 bytes); a UUID costs about 36 characters per emoji. Consider a short base64 UUID form (22 characters).
  • Packs (sender side) are just inventory: a folder of textures, or a notecard mapping name = uuid. Share packs as notecards or via group notices, and import with one click.
  • Animated emoji via a texture-animation-style sprite sheet (frames × fps in the pack entry).

Optional light "registry" without a real server

A static JSON pack index on slipstreamviewer.org (just files, rsync-deployed like the site) for curated packs. No user uploads or accounts. Only if the in-world notecard approach is too clunky.

Open questions and risks

  • Abuse: offensive images sent as emoji. Respect mute; per-user "hide custom emoji" and "only from friends" options; block by UUID.
  • Texture availability: deleted or unfetchable assets need a fallback to the text.
  • Rate and size caps, a bounded cache (memory rule), and lazy fetch.
  • Interop: coordinate a format with other TPVs (Firestorm, Alchemy) so it could become a cross-viewer convention instead of a Slipstream island.
  • Typing UX: a : autocomplete popup in the chat bar, merged with the existing Unicode emoji picker.

Deliverable for this ticket

A short feasibility write-up and a format proposal, plus a prototype that renders secondlife:///app/emoji/<uuid>/<name> inline from a hard-coded pack.

**Exploration — may turn out infeasible.** Discord-style custom emoji in chat (`:ponyhug:` rendering as a small image) for Slipstream users, without running our own service if at all possible. ## The core problem Chat is text-only, and other viewers must still see something sensible. Every Slipstream receiver needs to resolve a shortcode to an image the same way, which normally means a shared registry (a server). ## Server-free idea: use SL's own asset system - **An emoji is an SL texture UUID.** SL already hosts the image, and any texture UUID can be fetched by any viewer. No hosting by us. - **The wire format carries the UUID**, so receivers don't need a registry. For example, send `:ponyhug:` as a link-like token such as `secondlife:///app/emoji/<uuid>/ponyhug`, or a compact form we can parse. - Slipstream renders it inline at text height (cf. #265 for the inline image plumbing). - Other viewers show `:ponyhug:` or a clickable texture link, which degrades gracefully. - Watch message-length limits (1023 bytes); a UUID costs about 36 characters per emoji. Consider a short base64 UUID form (22 characters). - **Packs (sender side)** are just inventory: a folder of textures, or a notecard mapping `name = uuid`. Share packs as notecards or via group notices, and import with one click. - **Animated emoji** via a texture-animation-style sprite sheet (frames × fps in the pack entry). ## Optional light "registry" without a real server A static JSON pack index on slipstreamviewer.org (just files, rsync-deployed like the site) for curated packs. No user uploads or accounts. Only if the in-world notecard approach is too clunky. ## Open questions and risks - **Abuse:** offensive images sent as emoji. Respect mute; per-user "hide custom emoji" and "only from friends" options; block by UUID. - **Texture availability:** deleted or unfetchable assets need a fallback to the text. - **Rate and size caps,** a bounded cache (memory rule), and lazy fetch. - **Interop:** coordinate a format with other TPVs (Firestorm, Alchemy) so it could become a cross-viewer convention instead of a Slipstream island. - **Typing UX:** a `:` autocomplete popup in the chat bar, merged with the existing Unicode emoji picker. ## Deliverable for this ticket A short feasibility write-up and a format proposal, plus a prototype that renders `secondlife:///app/emoji/<uuid>/<name>` inline from a hard-coded pack.
sky_line added this to the Slipstream project 2026-10-06 15:04:13 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#266
No description provided.