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.**
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:
// 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 high3. Metal/SceneKit for 3D Latent Orb
The orb needs to be a real-time 3D object:
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
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)
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:
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
| Feature | Current | Vision | Priority |
|---|---|---|---|
| Sensor streaming | β | β | β Done |
| Local recording | β | β | β Done |
| Network stats | β | β | β Done |
| Raw sensor debug | β | Optional | - |
| Latent Orb | β | β | π΄ CRITICAL |
| Phrase Spine | β | β | π΄ CRITICAL |
| Trajectory Horizon | β | β | π‘ High |
| Embodied Params | Partial (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