Grand Diomande Research Β· Full HTML Reader

EchelonCapture: Current State vs. Vision

**EchelonCapture is currently a sensor data streaming & recording app.** **It needs to become the visual performance dashboard for Computational Choreography.**

Embodied Trajectory Systems research note experiment writeup candidate score 30 .md

Full Public Reader

EchelonCapture: Current State vs. Vision

Executive Summary

EchelonCapture is currently a sensor data streaming & recording app.
It needs to become the visual performance dashboard for Computational Choreography.

---

🎯 What EchelonCapture SHOULD Be

Based on your performance loop diagram and UI vision documents, EchelonCapture should be the real-time visual manifestation of the entire CC system - showing the dancer what the machine sees, what it's generating, and where the performance is going.

The Vision (from your docs):

EchelonCapture = The Performance Mirror

It should display:
1. Latent Orb - Living visualization of LIM-RPS equilibrium (the machine's perception of you)
2. Phrase Spine - Current generative phrase as topological object
3. Generative Horizon - Predicted future latent states (what's coming)
4. Phrase Reservoir - Cloud of upcoming musical possibilities
5. Embodied Control Band - Real-time modulation parameters (tension, grounding, etc.)
6. Somatic Timeline - Compressed history of latent evolution
7. Audio Vessel - Musical form visualization
8. Ambient Aura - Global performance state atmosphere

---

πŸ“± What EchelonCapture IS Currently

A 5-tab iOS app for sensor streaming:

### Current Tabs:
1. Stream - Connect to cc-mcs-headless, stream sensor data, view FPS/latency
2. Record - Save sensor sessions locally
3. Sensors - Configure which sensors are active
4. Sessions - Browse saved recordings
5. Settings - Backend URL, device role, debug mode

### Current Visualization:
- ❌ No latent visualization
- ❌ No music/phrase visualization
- ❌ No generative prediction display
- βœ… Raw sensor debug view (accel, gyro, attitude)
- βœ… Motion energy meter (simple)
- βœ… Network stats (FPS, latency)

---

πŸ”„ The Performance Loop & EchelonCapture's Role

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ“± SENSORS (iPhones, Watch, AirPods)                        β”‚
β”‚      ↓                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ cc-mcs-headless (RUST)               β”‚                    β”‚
β”‚  β”‚ β€’ Sensor fusion                      β”‚                    β”‚
β”‚  β”‚ β€’ LatentState computation            β”‚ ← EchelonCapture   β”‚
β”‚  β”‚ β€’ Section state machine              β”‚   streams HERE     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚      ↓ Current LatentState                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ COMPUTATIONAL REHEARSAL (RUST)       β”‚                    β”‚
β”‚  β”‚ "What if you keep moving like this?" β”‚ ← Should RECEIVE   β”‚
β”‚  β”‚ β†’ LatentTrajectory (46 frames)       β”‚   this back and    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   VISUALIZE it     β”‚
β”‚      ↓                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ PATTERN CODER (PYTHON)               β”‚ ← Should RECEIVE   β”‚
β”‚  β”‚ β†’ [PatternEdit, PatternEdit, ...]   β”‚   these and        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   VISUALIZE them   β”‚
β”‚      ↓                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ MUSIC ENGINES                        β”‚ ← Should VISUALIZE β”‚
β”‚  β”‚ β€’ Strudel/Tone.js                    β”‚   what's playing   β”‚
β”‚  β”‚ β€’ Neural Audio (EchelonDiT)          β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Right now: EchelonCapture sends sensor data β†’ cc-mcs-headless (one-way)
Should be: EchelonCapture ⇄ full bidirectional visualization of entire loop

---

πŸ”¨ What Needs to Be Added

1. WebSocket Connection to cc-mcs (Backend β†’ App)

Currently EchelonCapture only sends data. It needs to receive:

swift
// NEW: Receive from cc-mcs
struct LatentStateUpdate {
    let position: SIMD3<Float>  // 3D latent position
    let velocity: SIMD3<Float>  // latent velocity
    let equilibrium: Float      // LIM-RPS equilibrium metric
    let tension: Float          // micro-tension
    let grounding: Float        // grounding metric
    let section: String         // current section name
}

struct TrajectoryPrediction {
    let predictedPositions: [SIMD3<Float>]  // 46 frames ahead
    let confidence: Float
}

struct PatternUpdate {
    let activePattern: String
    let patternPhase: Float  // 0.0 - 1.0 through pattern
    let nextPatternCandidate: String?
}

struct AudioState {
    let phraseId: String
    let phraseEnergy: Float
    let phraseProgress: Float  // 0.0 - 1.0
    let harmonic Density: Float
}

2. New Tab: "Performance" (Main View)

This becomes the primary view during a performance. Replace "Stream" tab focus.

Layout (portrait iPhone):

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    πŸŒ€ Latent Orb        β”‚  ← Center, largest element
β”‚   (3D visualization)     β”‚     Pulses, stretches, glows
β”‚                          β”‚     based on latent state
β”‚   β•±β•² force lines β•±β•²     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                          β”‚
β”‚  β”€β”€β”€πŸŽ΅ Phrase Spine───  β”‚  ← Flowing ribbon
β”‚  (current phrase)        β”‚     Color = harmonic density
β”‚                          β”‚     Thickness = energy
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ πŸ“Š Embodied Params       β”‚  ← Waveform-like shapes
β”‚ β–‚β–ƒβ–…β–‚ Tension            β”‚     Showing extracted
β”‚ β–ƒβ–…β–ƒβ–‚ Grounding          β”‚     latent features
β”‚ β–‚β–‚β–…β–ƒ Verticality        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ═══ Somatic Timeline    β”‚  ← Trailing history
β”‚     (last 3 sec)        β”‚     Glows where tension
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     was high

3. Metal/SceneKit for 3D Latent Orb

The orb needs to be a real-time 3D object:

swift
class LatentOrbRenderer {
    // 3D sphere that deforms based on latent state
    // - Stretches in direction of velocity
    // - Ripples when micro-tension spikes
    // - Glows with intensity = energy
    // - Color shift based on section state
}

4. Phrase Spine as Animated Path

swift
struct PhraseSpineView: View {
    let phraseState: AudioState

    // Bezier curve that:
    // - Flows left→right
    // - Thickness varies with energy
    // - Hue varies with harmonic density
    // - Animates as phrase progresses
}

5. Generative Horizon (Future Prediction)

swift
struct GenerativeHorizonView: View {
    let trajectory: TrajectoryPrediction

    // Translucent corridor showing
    // where latent *might* go in next 2 sec
    // Bends forward when dancer accelerates
    // Flattens when dancer pauses
}

---

🎨 Visual Design Language

### Colors (Ambient Aura)
- Blue-Purple: Low energy, exploratory
- Purple-Magenta: Medium energy, building
- Magenta-Red: High energy, intense
- Gold-Orange: Transitional states
- Green-Cyan: Grounded, stable sections

### Animation Timing
- Latent updates: 50 FPS (matches sensor rate)
- Phrase spine: Smooth 60 FPS Metal rendering
- Horizon updates: 20 FPS (predicted states)
- Aura transitions: 2-3 second eases

### Typography
- Section names: SF Pro Display Bold, 24pt
- Metrics: SF Mono, 12pt (for debug)
- No timecodes, no BPM - only embodied time

---

πŸ—οΈ Architecture Changes Needed

Current:

EchelonCapture β†’ cc-mcs-headless
   (sensors)        (compute)

Needed:

EchelonCapture ⇄ cc-mcs-headless ⇄ cc-ml (Pattern Coder)
   (sensors)      (latent compute)    (musical decisions)
      ↑                 ↓                    ↓
      └─────────── visualization β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   (latent, trajectory,
                    patterns, audio)

New Services Needed:

swift
class LatentVisualizationService: ObservableObject {
    @Published var currentLatent: LatentStateUpdate?
    @Published var trajectory: TrajectoryPrediction?

    // Subscribe to WebSocket updates from cc-mcs
    func connectToVisualizationStream(url: String)
}

class PatternVisualizationService: ObservableObject {
    @Published var activePattern: PatternUpdate?
    @Published var phraseReservoir: [String]  // upcoming candidates

    // Subscribe to Pattern Coder updates
}

class AudioVisualizationService: ObservableObject {
    @Published var currentPhrase: AudioState?
    @Published var audioVessel: VesselMetrics  // form, not amplitude
}

---

πŸ“Š Feature Comparison

FeatureCurrentVisionPriority
Sensor streamingβœ…βœ…βœ… Done
Local recordingβœ…βœ…βœ… Done
Network statsβœ…βœ…βœ… Done
Raw sensor debugβœ…Optional-
Latent OrbβŒβœ…πŸ”΄ CRITICAL
Phrase SpineβŒβœ…πŸ”΄ CRITICAL
Trajectory HorizonβŒβœ…πŸŸ‘ High
Embodied ParamsPartial (energy only)Full metrics🟑 High
Phrase ReservoirβŒβœ…πŸŸ’ Medium
Somatic TimelineβŒβœ…πŸŸ’ Medium
Audio VesselβŒβœ…πŸŸ’ Medium
Ambient AuraβŒβœ…βšͺ Nice-to-have

---

🎯 Recommended Implementation Path

### Phase 1: Backend Communication (Week 1)
1. Add WebSocket receive capability to NetworkService
2. Define data models for LatentState, Trajectory, Pattern, Audio
3. Create visualization services (Latent, Pattern, Audio)
4. Test data flow: cc-mcs β†’ EchelonCapture

### Phase 2: Latent Orb (Week 2)
1. Build 3D SceneKit orb renderer
2. Map latent state β†’ orb deformation
3. Add force field visualization around orb
4. Integrate into new PerformanceView

### Phase 3: Phrase Visualization (Week 3)
1. Design Phrase Spine as animated Bezier path
2. Map audio state β†’ spine properties
3. Add Generative Horizon (trajectory corridor)
4. Test with live performance

### Phase 4: Complete Dashboard (Week 4)
1. Add Embodied Control Band (tension, grounding, etc.)
2. Add Somatic Timeline (3-second history)
3. Add Audio Vessel (form meter)
4. Add Ambient Aura (background color field)
5. Polish animations and timing

### Phase 5: Integration Testing
1. Full system test: sensors β†’ cc-mcs β†’ rehearsal β†’ pattern coder β†’ audio β†’ visualization
2. Performance testing with real dancers
3. Refinement based on actual use

---

πŸ’‘ Key Design Principles

### 1. The Latent is the Truth
Everything radiates from the latent orb. It is the performer's embodied state made visible.

### 2. No DJ Metaphors
- No decks
- No crossfaders
- No track lists
- No BPM grids

Only: body β†’ latent β†’ music β†’ form

### 3. Embodied Time, Not Clock Time
- No timestamps
- No beat counters
- Only: tension, release, anticipation, resolution

### 4. Generative, Not Manipulative
The UI shows what's being born from your movement, not what you're controlling.

### 5. Unity Over Fragmentation
All visualizations are one organism. The orb, spine, horizon, and aura breathe together.

---

πŸš€ Next Steps

### Immediate (This Week):
1. βœ… Design WebSocket protocol for cc-mcs β†’ EchelonCapture
2. βœ… Implement LatentVisualizationService
3. βœ… Create basic PerformanceView layout
4. βœ… Build simple latent orb prototype (2D first)

### Short-term (Next 2 Weeks):
1. Full 3D latent orb with SceneKit
2. Phrase spine visualization
3. Live testing with cc-mcs streaming

### Medium-term (Next Month):
1. Complete all visualization components
2. Integration with Pattern Coder
3. Audio visualization
4. Full performance dashboard

---

🎭 The Vision in One Sentence

EchelonCapture should be a window into the machine's mind - showing you what it sees, what it predicts, and what music it's birthing from your movement.

Right now it's a sensor debugger.
It needs to become a living mirror of computational choreography.

Promotion Decision

Attach run IDs, datasets, metrics, and reproduction commands.

Source Anchor

projects/Documentation/06-status/ECHELON_CAPTURE_VISION.md

Detected Structure

Method Β· Evaluation Β· Figures Β· Architecture