Skip to content

id: design: user presentation assets — shaders, sprites by ID, filters, per-world gating, graceful degradation #5970

Open

Description

@dezren39

Part of the worlds design program: #5955. Statements S66–S72 of the 2026-11-04 brief. Extends the presentation-tiers design in #786 — that issue covers capability tiers with in-band terminal detection; this one covers user-supplied assets and filters living on top of the tiers.

Requirement (Drew, in substance)

  • In the future, users might provide GPU shaders, and images or sprites that were uploaded already as a given ID.
  • A user will be able to set their sprite to have a cape and apply the filter "sparkle" to the cape — without any of that being specifically coded by a given app.
  • This is an imperfect system, and the app would have to enable such capabilities.
  • Over time there may become a common interface for different formats and basic conversion tools at the presentation layer, to allow this to work on a variety of devices and a variety of worlds, which may or may not support different capabilities.
  • Per-world gating: one world might not support filters, because you could make yourself look like a different kind of creature, or make a filter that basically makes you invisible — so it's just disabled in this world.
  • Graceful fallback is authored, not improvised: "when filters are disabled, put static sparkles on the GIF image of my sprite."
  • Terminal degradation: another user viewing on a terminal that only supports ASCII drops down to Dwarf Fortress-style sprites or to a specific character that represents that user — instead of a blue cape with sparkles, it's a blue letter C or an emoji of a cape — even though in other worlds, or in this world with a sufficient client, it's practically MapleStory.

Design points to settle

  • The asset/filter model: assets by ID (uploaded once, referenced everywhere), filters as named composable transforms applied to asset parts (cape), each with declared capability needs.
  • The fallback chain as a first-class declaration: rich → static-substitute → sprite-sheet tier → glyph/emoji. Who authors each rung (asset author, world author, client)?
  • World policy: which asset/filter capabilities a world enables is a world-level declaration users can see before joining (composes with the permission/registry story).
  • Abuse surface: filters as disguise/invisibility is a gameplay decision per world; shaders are code — do user shaders go through the same compile/trust pipeline as user functions (DLL child of #5955)?

Related

  • Presentation capability tiers: #786
  • Graphical client & tooling surface: #5782; Bevy incorporation: #5781
  • Media conversion research child of #5955 (kitty protocol / video-to-ASCII tooling)

Done looks like

A design doc: asset-by-ID model, filter capability declarations, the authored fallback chain, and per-world enablement policy — mapped onto the tiers in #786.

Activity

  1. added
    priority/normalOrdinary priority (the default)
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    kind/designA design proposal (design-architect): multi-step, phased, decision-bearing
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Wave-2 tie-in (findings F8 item 6, F10) — this design is a deferred decision coming due.

    • Charter (2026-10-28, ID dictation item 6): capability-based specialization — code asks for a form/location and gets the platform's version (phone location vs ESP32 GNSS; pixel-count screens; rotary encoders), text-only mode as the main mode for agents/scripts, and media framed as "typed image/video vs raw byte streams + capabilities — decide over time." The brief's sprite/filter degradation ladder is that media question; this design is the decision point Drew's earlier framing scheduled.
    • Constraint (F10, shipped): presentation is data — legacy UTF-8 text or the versioned Screen cell buffer (max 120×50, cells + style spans); guests never supply terminal escapes, HTML, or CSS. Sprite/filter work must be expressed inside presentation-is-data (new Screen/image-plane data kinds), not as guest-supplied markup.

    Record: workspace/scratch/worlds-capabilities-brief-2026-11-04/conversation-tie-ins.md (F8, F10).

  4. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Wave-2 follow-ups filed from the prior-art research (Lane B). Granular sub-scopes of this issue, each carrying the relevant research findings + citations:

    Research source: workspace/scratch/worlds-capabilities-brief-2026-11-04/prior-art-research.md. Full wave-2 mapping: workspace/scratch/worlds-capabilities-brief-2026-11-04/wave2-map.md.

  5. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 5, 2026
  6. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  7. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  8. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 5, 2026
  10. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  11. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Triage outcome at current main (cc45860abb4427fa873f26b81583682af2a7d548)

    🤖 Agent note · done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)kind/designA design proposal (design-architect): multi-step, phased, decision-bearingpriority/normalOrdinary priority (the default)task/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions