DreamLayer

Under the hood

HUD cards — the full gallery

Every card DreamLayer can put on the glass, rendered by the product's own renderer. Card payloads are plain dicts built by host-python/src/dreamlayer/hud/cards.py; the device draws them with halo-lua/display/renderer.lua, and a pixel-mirrored Python renderer (hud/renderer.py) drives these stills and the demo pipeline. Twenty-three card types are rendered on-device today; four (marked host-mirror) exist in the Python mirror and the phone and are queued for the device renderer — new cards are device-Lua-first as of the O3 pass.

Each entry lists: when the card appears, what it shows, its materials (Solid) and motion (Lumen), and how it leaves. "Dismiss" is the auto-dismiss time in milliseconds (0 = stays until acted on).

Resting and system

ReadyCard

ReadyCard

  • Appears: on boot, on show_ready, on resume from the veil, on connect.
  • Shows: the calm mark — a memory-trace core inside gradient rings with satellite dots. No text; it means "I am here and not listening."
  • Materials/motion: gradient arc rings (RAMP_MEMORY), staggered layer condense.

QueryListeningCard

QueryListeningCard

  • Appears: single click, or "Hey Oracle" — the ask posture.
  • Shows: a cardioid microphone glyph over a 32-bar waveform. With live amp frames from the host (~15 bytes, capture-time only) the bars track your actual voice through the palette's voice slot; without them the waveform self-runs exactly as before.
  • Dismiss: on result.

ListeningCard — host-mirror

ListeningCard

  • Appears: the moment the Oracle wakes, from any enabled source — voice ("Hey Oracle"), tap, gaze, raise, or gesture. Shown only if visual wake feedback is on.
  • Shows: a pulsing ring plus the wake source; carries earcon wake and haptic tick on the payload (each independently toggleable).

LoadingCard

LoadingCard

  • Appears: while a tier is thinking.
  • Shows: three ghost rings and 12 static segments. Nothing rotates — a palette chase walks light around the segments at the old spinner's RPM (900 ms), so reduced-motion users get a clean static ring instead of a frozen spinner.

The palette chase, stepped from the device code

ErrorCard

ErrorCard

  • Appears: on a failure worth telling you about ("BLE timeout").
  • Shows: an amber triangle and one plain sentence. The attention ring draws as a single calm sweep — no flashing.
  • Dismiss: 4000.

LowConfidenceCard

LowConfidenceCard

  • Appears: when recall has nothing above threshold.
  • Shows: "Not sure" in ghost ink. DreamLayer says I don't know rather than guessing.
  • Dismiss: 3000.

Memory

SavedMemoryCard

SavedMemoryCard

  • Appears: the instant a moment is kept — a scene ingested, a conversation captured, a nod-to-save.
  • Shows: a giant double-struck check inside concentric gradient rings over a soft glass pane; SAVED in hero type.
  • Motion: the check draws on with a soft spring, a chime ring expands (220 ms), and a 12-particle burst fires at hold — the one small celebration in the system.
  • Dismiss: 1200.

The save moment

ObjectRecallCard

ObjectRecallCard

  • Appears: "where did I leave my keys?" — object recall.
  • Shows: a spatial scene, not a list: the place as a translucent field, the object as a layered diamond jewel with orbit arcs and bloom, you as a dot at the bottom, and a continuous gradient trace connecting the two (dim at you, bright at the thing). Jewel hue encodes confidence; footer carries last-seen time.
  • Motion: the conduct flair — a light wave flows along the trace from place to object every 2.4 s.
  • Dismiss: 3500.

CommitmentRecallCard

CommitmentRecallCard

  • Appears: when a promise is recalled — or the moment one is captured from your own speech ("I'll send you the lease by Friday").
  • Shows: who, what, when as three chain links; the live link is a glowing glass capsule with gradient connectors.
  • Motion: the chain forges link by link on snappy springs.
  • Dismiss: 4000.

CommitmentDriftCard

CommitmentDriftCard

  • Appears: when a tracked promise starts to slip (orchestrator.tick_drift).
  • Shows: the task with a decay rail on the left — the live bar is confidence times (1 - decay); urgency shifts amber to danger at decay 0.6.
  • Motion: a slow idle pulse on the confidence dot (600 ms sine).
  • Dismiss: 4500.

ProactiveMemoryCard

ProactiveMemoryCard

  • Appears: you arrive somewhere that holds a memory (on_place).
  • Shows: the remembered context under a five-ray radial field with a bloomed tip.
  • Dismiss: 3500.

WorldAnchorCard

WorldAnchorCard

  • Appears: in Dream Mode, when the Ghost Layer finds a memory pinned to where you are standing.
  • Shows: a pale MEMORY ECHO — deliberately at 20 percent opacity, the faintest thing the system draws.
  • Motion: Ghost-Wake — each character wakes with per-character Perlin jitter over 320 ms. Renders through the dream path (dream_renderer.lua).
  • Dismiss: 8000.

TimeScrubNodeCard

TimeScrubNodeCard

  • Appears: rewind — "Hey Oracle, rewind my day," or the phone's Rewind screen's on-glass twin. One card per moment as you scrub.
  • Shows: a horizontal timeline of the day; the current node enlarged with bloom and a tick, neighbours as ghost labels, position ("3 of 11") in the eyebrow.
  • Motion: the node dot springs between positions (ease_out_expo). Seam: the twist/tap gesture that drives scrub("back"|"forward").
  • Dismiss: 0 — you are driving.

MorningBriefCard — host-mirror

MorningBriefCard

  • Appears: the moment the Halo goes on in the morning (orchestrator.wake fetches the Brain scheduler's latest brief).
  • Shows: two warm sentences and up to a few bullets: what is coming, what you missed, what you owe.
  • Dismiss: 8000.

People

PersonContextCard

PersonContextCard

  • Appears: someone you know is in view (anticipation person cue).
  • Shows: name in hero type, one why-line ("owes you the lease"), a headline, an avatar ring with bloom under an enlarged crown, and a 12-segment familiarity ring.
  • Motion: a three-arc chord arpeggio (40 ms steps) when an avatar is present.
  • Dismiss: 3500.

The Solid recomposition sample (person_context_v2) shows the same card as a centerpiece:

PersonContextCard v2

PersonDossierCard — host-mirror

PersonDossierCard

  • Appears: you greet — or look at — someone the conversation ledger knows (greet, look_at_person). Carries earcon look.
  • Shows: the conversation dossier: last seen, recurring topics between you, and their most recent line.
  • Dismiss: 5000.

Conversation and truth

SpokenCaptionCard — host-mirror

SpokenCaptionCard

  • Appears: every line of speech while live captions are on (ingest_caption); the ledger keeps recording even when the display is toggled off.
  • Shows: speaker and line, quietly, at the rim.
  • Dismiss: replaced by the next line.

LiveCaptionCard

LiveCaptionCard

  • Appears: translated speech — Puente (the ear) or Rosetta reading text aloud in your language.
  • Shows: original and translation, a language pill, a confidence dot.

FactCheckCard — Veritas

FactCheckCard

  • Appears: a claim someone made failed (or passed) the live fact-check. See Truth and discernment for exactly when Veritas speaks.
  • Shows: the claim in hero type under a verdict eyebrow, the basis line ("earlier: 'we settled at two million'"), and a Discernment footer ("Marcus - elevated - seen before"). Verdict tone is resolved on-device (card_tone / FACT_COLOR), so a wire-delivered card always carries its color: green VERIFIED, amber CHECK THIS, red THEY SAID DIFFERENT BEFORE, ghost UNVERIFIED.
  • Motion: the status ring springs in snappily; disputed and self-contradiction verdicts fire one 420 ms pulse. Earcons: chime / hark_urgent / hark by verdict; double haptic on the two flagging verdicts.
  • Dismiss: 7000.

The device-Lua render of the same card:

FactCheck on the device path

AnswerAheadCard

AnswerAheadCard

  • Appears: someone else asked a real, answerable question and the copilot pre-fetched the answer ("ON THE TIP OF YOUR TONGUE").
  • Shows: the answer in hero type, the question cooled beneath it, source in the footer.
  • Sound: none — silent by design; a tick haptic only.
  • Dismiss: 8000.

OracleReplyCard

OracleReplyCard

  • Appears: the Oracle answered you (kind answer) or did something for you (kind action — "Focus on — the world's turned down.").
  • Shows: the reply in the Oracle's voice under an ORACLE eyebrow with a bloomed cue dot; success ramp for actions, memory ramp for answers.
  • Dismiss: 6000.

HarkCard

HarkCard

  • Appears: the attention policy decided this moment is worth interrupting you: "Listen!" (a commitment about to slip, someone you owe in view, something you are walking away from) or an urgent "Watch out!" (you must leave now).
  • Shows: the one-line clue in hero type inside a LISTEN ring — amber for urgent, memory-teal otherwise.
  • Motion: the ring breathes on hold (1100 ms; 700 ms when urgent). Earcon hark / hark_urgent, tick / double haptic, flash on urgent.
  • Dismiss: 6500.

TruthLensCard — the testimony thread

TruthLensCard

  • Appears: a Truth Lens delivery read completed on a calibrated speaker.
  • Shows: the nine analysis stages as a 360-degree testimony thread — each stage a 40-degree slot at radius 64: truthful reads draw as a continuous success arc, deceptive ones as a torn three-dash break. Only the newest stage is bright; older testimony cools to its dim twin, so temporal order is visible. The verdict sits in a glass capsule; the stranger case renders "insufficient baseline" rather than a verdict.
  • Motion: a ripple entry, stages accumulate at 80 ms per stage, torn stages spit three deterministic shards, and one glint runs the settled thread.
Clean truthful read (device Lua) Elevated, mixed read (device Lua)
Truthful Elevated

DeviationAlertCard

DeviationAlertCard

  • Appears: the Tell engine noticed new speech contradicting a prior commitment (tell_check).
  • Shows: what was said before versus now across a dashed divider, with a severity dot.
  • Motion: an idle ripple ring every 2.4 s, dimmed honestly through the fx palette slot.
  • Dismiss: 5000.

Privacy

Privacy-class cards share hard rules: no translucent pane, a slam entry with a 100 ms full-field rumble dim, and a hard-cut exit — no graceful recede, no origin mark left on the Horizon. Nothing about privacy is allowed to feel ambient. They stay up until you act (dismiss 0).

PrivacyVeilCard

PrivacyVeilCard

  • Appears: long press — the veil lands. Capture, pop-ups, anticipation: everything stops.
  • Shows: shield and pause bars. Parallax freezes to zero this exact frame.

ForgetLastCard

ForgetLastCard

  • Appears: "forget that" — confirming the last capture was erased.

PrivateZoneCard

PrivateZoneCard

  • Appears: you entered a place you marked as never-record.

ConsentRequiredCard

ConsentRequiredCard

  • Appears: a new data source wants in; nothing proceeds without a deliberate confirm.

Dream Mode

SynesthesiaCard

SynesthesiaCard

  • Appears: in Dream Mode — the VLM's six-word poetic read of what the senses feel like right now.
  • Dismiss: 4000.

The v2 form adds a dominant color and a gestural three-shape sprite:

SynesthesiaCard v2

Cards without a renderer (payload-only)

Three constructors exist for the phone/hub surface and have no glass renderer yet: UpcomingCard ("leave in 8 min", dismiss 6000), HereCard ("your bike is here", 5000), and MessageCard (an incoming text or email with reply/dismiss actions, 6000) — the anticipation and message-pop-up engines emit them today and the phone presents their content. PaletteShiftCard is not a card at all on the wire: the device consumes it as a palette command (mood tint), which is why it is deliberately absent from the sample gallery. Other modules carry their own cards (QuestCard and QuestRewardCard from the Saga, SocialLensCard, IntroOfferCard, ConsistencyCard from Candor, provenance and waypath panels) — see the card catalog reference for the complete constructor table.

DreamLayer knowledge base. Every image is rendered by the product's own pipeline. Site repository