Color Dome Access

Enter password to continue.

Artist / Operator Primer

Depth-Only Tracking and Expressive Control Tuning Guide

How Colordome turns overhead depth sensing into tracked people, then derives generic occupancy blobs and depth-only expressive control from planar position, relative height, lifecycle, and presence.

What This Guide Is For

This page is a practical primer for artists and operators. It explains the sensing language, the live portal controls, and how the depth-only tracking layer fits into the larger dome stack. It is based on the current Colordome implementation, not a generic computer-vision tutorial.

To activate the full Color Dome system, use this agent prompt: /Users/jonbulette/repos/colordome-code/docs/AGENT_PROMPT_BRING_UP_FULL_COLORCUBE_SYSTEM.md

Signal Flow

The production sensing stack is now depth-only. It tracks people from floor-referenced depth segmentation, maintains them as PersonState, and derives two downstream outputs: occupancy blobs for generic dome behavior and colorcube_signal for Color Cube expressive control.

[ Orbbec Depth ] --> [ floor reference subtraction ] --> [ morphology / merge ]
                                                              |
                                                              v
                                             [ connected components / occupancy center ]
                                                              |
                                                              v
                                            [ relative height + metric unprojection ]
                                                              |
                                                              v
                                                   [ PersonObservation ]
                                                              |
                                                              v
                                                     [ PersonTrackerShell ]
                                                              |
                                                              v
                                                        [ PersonState ]
                                                       /             \
                                                      v               v
                                          [ blob adaptation ]   [ Color Cube transport ]
                                                      |               |
                                                      v               v
                                             [ occupancy blobs ] [ colorcube_signal ]
                                                      |               |
                                                      v               v
                                           [ generic CDRS behavior ] [ Color Cube bridge / mapping / OSC ]

Blobs remain the compatibility path for all existing CDRS occupancy and pattern behavior. The colorcube_signal is a separate expressive control path for Color Cube only. Under the current depth-only production path, Color Cube control is torso/centroid-driven and uses planar position plus relative height rather than hand selection.

Floor Reference

A captured depth baseline for the empty space. The live frame is compared against it to isolate real vertical bodies from the floor.

Relative Height

The strongest vertical rise above the floor inside a tracked component. This is the main expressive intensity signal in the depth-only path.

Lifecycle

The runtime rules that move a tracked person through tentative, confirmed, lost, and exit states. Lifecycle prevents brittle pop-in/pop-out.

Presence

A smoothed participation signal used downstream for stable visual behavior. Presence is not the same thing as raw tracking confidence.

How This Colordome System Works

1. Floor Reference Subtraction

The live depth frame is compared against a saved floor reference. The goal is not to find skeleton joints first; it is to find meaningful vertical structure above the floor.

2. Segmentation, Morphology, and Merge

Thresholding, cleanup, edge masking, and merge dilation turn noisy depth differences into stable person-like components. One real body should ideally become one connected component.

3. Occupancy Center and Relative Height

For each retained component, the system derives an occupancy center on the floor plane and a relative height above the floor. Those values are then unprojected into metric camera-space.

4. Tracking and PersonState

The tracker decides whether a new observation belongs to an existing person ID or whether it should spawn a new track. Each stable tracked person becomes a PersonState whose centroid semantics are WorldCoord(cam_x_m, height_m, cam_y_m).

5. Lifecycle, Presence, and Confidence

A person does not become artistically meaningful the instant a component appears. Tracks move through lifecycle states such as tentative, confirmed, and lost. Confidence describes measurement quality; presence is the smoother participation signal that keeps downstream behavior from popping abruptly.

6. Occupancy Blobs

For generic dome behavior, confirmed PersonState tracks are adapted into simplified blobs — ID, 3D position, confidence, and presence. This is the occupancy path.

7. Color Cube Transport

For Color Cube expressive control, the current production path derives control from the depth-only tracked person centroid and relative height. The result is emitted as colorcube_signal carrying control-space position and confidence. Under depth-only, torso/centroid behavior is normal.

What Stays Inside CV

CV-internalFloor subtraction, component masks, morphology, merge logic, tracker internals, PersonState provenance, and raw depth diagnostics
Visible in PortalJPEG preview, overlay layers, depth-only tuning controls, per-track debug fields, lifecycle states, and diagnostics
Crosses into Control (occupancy)Blobs: ID, 3D position, presence, confidence — for generic dome occupancy patterns
Crosses into Control (Color Cube)colorcube_signal: control-space position plus confidence — for centroid/height expressive control under depth-only
Portal RoleDebugging and live tuning surface; not runtime authority and not a new Control contract

Portal Tuning Controls

The production tuning surface is now the depth-only path. The main questions are: does the floor reference match the live scene, does one person become one stable component, and do lifecycle/presence feel stable downstream?

Floor Reference and Segmentation

  • Floor Reference: The saved empty-scene baseline. If this is stale or mismatched to the current mode/resolution, everything downstream degrades.
  • floor_band_tolerance_m: How much variation around the floor is tolerated before the system decides something is actually above the floor.
  • min_height_m: The minimum rise above the floor required for a component to count as a person-like vertical body.
  • Edge Masks: Keep persistent wall, stand, or sensor-edge artifacts from entering the person segmentation path.

Morphology and Merge Controls

  • merge_dilate_kernel: Controls how aggressively nearby component fragments are merged into one body.
  • Morphology: Cleanup operations that remove speckle and close holes. Tune these before touching tracking persistence.
  • Occupancy Center: The floor-plane center of the retained component. If this is unstable, downstream color/control behavior will drift.
  • Relative Height: The main expressive signal under depth-only. Watch it for noisy spikes and under-segmentation.

Tracking Persistence and Lifecycle

  • Confirm Frames: Consecutive observations required before a track becomes confirmed.
  • Lost After Missed Frames: Frames a track can miss before being marked lost.
  • Delete After Missed Frames: Frames a track can remain unmatched before full deletion.
  • Lost Blob Hold (ms): Portal/blob hold after loss. This influences how long a downstream person can feel present after a short dropout.
  • Prediction Max Missed Frames: How long the tracker keeps coasting on prediction during brief occlusion.

Association and Recovery Controls

  • Association Distance (m): Approximate 3D centroid separation allowed when matching observations to existing tracks.
  • Recovery Distance (m): Slightly larger match radius for recovering recently lost tracks.
  • Assignment Ambiguity Margin: How conservative the tracker is when two assignment choices are nearly tied.
  • Association goal: Keep one real person on one stable ID through crossings and short loss.

Fallback RGB-D Controls

The older rgbd_yolo path still exists as fallback, but it is no longer the main operator path. If that adapter is active, plausibility, keypoint, and duplicate-suppression controls matter again. They should not be the first thing artists reach for in the current production setup.

Display / Debug Toggles

  • Show Components / Segmentation
  • Show Track IDs
  • Show Lifecycle State
  • Show Confidence / Presence Diagnostics
  • Show Depth-Only Masks or Debug Layers when available

These change the browser overlay only. They do not change CV behavior.

How To Read The CV Portal

Overlay Status

  • [TENTATIVE] recently appeared, not yet confirmed as a stable tracked person
  • [CONFIRMED] stable tracked person that can drive occupancy and expressive behavior
  • [LOST] recently missed but still held by lifecycle logic for short continuity

These are lifecycle states. They are not the same thing as raw confidence, and they are not the same thing as artistic output state.

Per-Track Debug Fields

  • fsN = frames_since_seen
  • hsN = hit_streak
  • aN = age_frames

Example: [CONFIRMED] p_1778 fs0 hs344 a489 means a confirmed tracked person, seen this frame, with a long stable history.

Presence and Confidence

Confidence tells you how trustworthy the current measurement is. Presence is the smoother downstream participation signal used to avoid abrupt pop-in/pop-out. A person can stay lifecycle-confirmed while confidence varies, and short dropouts may still retain participation briefly.

Segmentation and Debug Layers

In the depth-only path, the most useful overlays are often the component masks, floor-subtraction result, and retained track IDs. If those look wrong, downstream control will look wrong even if the tracker itself seems healthy.

Artist Tuning Workflow

Suggested Order

  1. Verify the floor reference is valid and matches the live mode/resolution.
  2. Clean up segmentation with floor-band, height, edge-mask, and morphology controls.
  3. Tune merge behavior so one real person becomes one stable component.
  4. Stabilize IDs with tracking persistence and association controls.
  5. Check lifecycle and presence behavior: people should feel stable, not brittle or sticky.

If You See X, Try Y

Missing real peopleLower min_height_m, relax floor-band tolerance, and inspect segmentation coverage.
Ghost peopleTighten floor-band tolerance, raise height floor, or add edge masks for persistent structures.
One person becomes two componentsIncrease merge dilation or cleanup so fragmented bodies reconnect before tracking.
ID flickerRaise confirm frames, lost-after-missed, or prediction window after segmentation is already clean.
Person pops in/out too abruptlyInspect lifecycle states and tune confirmation / lost / hold behavior.
Person lingers too long after leavingReduce exit/lost hold behavior and verify the tracker is not still matching stale structure.

Color Cube Depth-Only Control

In the current production configuration, Color Cube expressive control is driven by the depth-only tracked person centroid and relative height. Under this path, torso/centroid behavior is normal and expected.

Current Production Semantics

  • Planar movement: moving around the floor changes the control-space position used for hue and saturation.
  • Relative height: standing taller, stretching upward, or otherwise increasing measured body height changes the intensity axis.
  • Torso/centroid control: the system is not waiting for wrist visibility in this production path.
  • Lifecycle matters: control should fade in and out with stable tracked-person participation rather than pop instantly.

What Changed From The Older Skeleton-Based Feel

Before: Color Cube work often focused on skeleton-derived anchors such as highest-hand selection.

Now: The production path on Kurt is depth-only. Planar body position drives control-space movement, and relative height drives brightness/intensity. This is simpler, more robust, and aligned with the current sensing hardware.

What To Observe

  • Planar sweep: Moving through the tracked area should change control-space position smoothly, without jumps from segmentation noise.
  • Height responsiveness: Stretching upward should increase brightness/intensity; crouching should reduce it.
  • Lifecycle continuity: Color should not pop on/off instantly when someone briefly occludes or leaves.
  • Calibration feel: If the control range feels compressed or biased to one area of the space, revisit the overhead calibration values.
  • Torso anchor is normal: Do not treat lack of hand selection as a fault in the current production path.

Control-Space Semantics

The colorcube_signal carries a position already converted to Color Cube control-space. This is not the same as raw body or world coordinates. The sender converts the tracked person's depth-only position and height into control-space before transport.

  • position.x / position.y — planar control coordinates (drive hue and saturation)
  • position.z — height / intensity control (drives brightness)

Downstream receivers use these coordinates directly. They do not need to reinterpret camera-space axes or know about CV internals.

If You See X, Try Y

Color drifts or jittersInspect occupancy center stability, merge behavior, and tracking association before blaming downstream mapping.
No response to height changeCheck relative-height stability in the portal and verify the receiver uses position.z for intensity.
Response feels delayedInspect lifecycle confirmation and hold behavior before changing mapping.
Control range feels compressedRevisit overhead calibration and the physical tracked region.

How This Fits Into CDRS

The sensing layer is upstream of the dome behavior stack. It converts live human presence into two kinds of downstream signal: occupancy blobs for generic dome behavior, and colorcube_signal for depth-only expressive control.

CV Sensing
Depth-only + PersonState
Tracking
lifecycle + presence + blob adapt
Transport
blobs + colorcube_signal
Control / Mapping
occupancy patterns + Color Cube / OSC
Output
LED frames to physical dome

Why The Boundary Matters

Control should not depend on fragile CV internals. CV owns floor subtraction, segmentation, tracking, and PersonState. Downstream consumers receive either simplified blobs (occupancy) or control-space positions (colorcube_signal). The current production centroid semantics are WorldCoord(cam_x_m, height_m, cam_y_m); downstream code should consume the normalized transport contracts, not reinterpret raw sensing axes.

Recommendations For Artists

Learn The Vocabulary

The fastest way to get good at tuning is to use the system’s current terms: floor reference, occupancy center, relative height, tentative, confirmed, lost, lifecycle, presence, confidence, blob, PersonState, and colorcube_signal.

Use Side-By-Side Reference

Keep three things visible when possible: the live portal overlay, the tuning panel, and the downstream dome or visualization output. For depth-only tuning, segmentation quality and lifecycle behavior are often more important than any single downstream color symptom.

Helpful Visual Aids

  • Annotated screenshots of clean components, fragmented components, confirmed tracks, and lost tracks
  • One short crossing/occlusion video with notes about which lifecycle knobs mattered
  • A small symptom-to-control cheat sheet printed near the operator station

Glossary