Event Console
The Live Event Console provides real-time visualization of MIDI events, helping you debug mappings, discover note numbers, and understand your controller’s behavior.
Overview
The Event Console displays:
- MIDI events: Note on/off, CC, aftertouch, pitch bend
- Timing information: Timestamps and event duration
- Velocity data: Press intensity values
- Processed events: Long press, double-tap, chord detection
- Action execution: What actions were triggered
- Error messages: Failed actions or validation issues
Access the Console
GUI Method
- Open Conductor GUI
- Navigate to Settings tab
- Click 📊 Show Event Console
- View live events in real-time
CLI Method
# Monitor all events
conductorctl events
# Filter by event type
conductorctl events --type note
# Follow mode (live tail)
conductorctl events --follow
Event Types
MIDI Events
Note On/Off
[12:34:56.789] NOTE_ON | Note: 36 | Vel: 87 | Ch: 1
[12:34:57.120] NOTE_OFF | Note: 36 | Vel: 0 | Ch: 1
Duration: 331ms
Control Change
[12:34:58.456] CC | CC: 7 | Value: 64 | Ch: 1
Aftertouch
[12:35:00.123] AFTERTOUCH | Pressure: 95 | Ch: 1
Pitch Bend
[12:35:01.789] PITCH_BEND | Value: 8192 | Ch: 1
Processed Events
Long Press Detected
[12:35:05.000] LONG_PRESS | Note: 36 | Duration: 2150ms
Trigger matched: "Emergency Stop" (mapping #5)
Double Tap Detected
[12:35:10.100] DOUBLE_TAP | Note: 37 | Interval: 245ms
Trigger matched: "Quick Launch" (mapping #8)
Chord Detected
[12:35:15.500] CHORD | Notes: [36, 40, 43] | Window: 87ms
Trigger matched: "Save All" (mapping #12)
Encoder Turn
[12:35:20.750] ENCODER_TURN | CC: 1 | Direction: Clockwise | Steps: 3
Trigger matched: "Volume Up" (mapping #2)
Action Execution
[12:35:25.100] ACTION_START | Type: Keystroke
Modifiers: [Cmd, Shift]
Keys: "S"
[12:35:25.105] ACTION_COMPLETE | Duration: 5ms | Status: Success
Errors
[12:35:30.000] ERROR | Failed to execute shell command
Command: "/usr/bin/notexist"
Error: "No such file or directory"
Mapping: #15 ("Custom Script")
Filtering Events
By Event Type
# Only note events
conductorctl events --type note
# Only CC events
conductorctl events --type cc
# Only processed events
conductorctl events --type processed
# Only actions
conductorctl events --type action
# Only errors
conductorctl events --type error
By MIDI Channel
conductorctl events --channel 1
By Note Range
# Only pads (notes 36-51)
conductorctl events --note-min 36 --note-max 51
By Time Range
# Last 5 minutes
conductorctl events --since 5m
# Last hour
conductorctl events --since 1h
# Specific time
conductorctl events --since "2025-01-15 12:00"
Use Cases
Discover Note Numbers
Problem: Don’t know which MIDI note a pad sends
Solution:
- Open Event Console
- Press the pad
- See
NOTE_ON | Note: 36in console - Use note 36 in your mapping
[12:40:00.000] NOTE_ON | Note: 36 | Vel: 92 | Ch: 1
↑
This is the note number
Debug Long Press Not Triggering
Problem: Long press mapping not activating
Solution:
- Open Event Console
- Hold the pad
- Check if
LONG_PRESSevent appears - Compare duration with your config:
[12:45:00.000] NOTE_ON | Note: 36 | Vel: 87
[12:45:01.500] NOTE_OFF | Note: 36 | Duration: 1500ms
↑
Too short! Config requires 2000ms
Fix by reducing duration_ms in config or holding longer.
Verify Velocity Ranges
Problem: Soft/medium/hard velocity ranges not working as expected
Solution:
- Press pad softly: Check velocity value
- Press pad medium: Check velocity value
- Press pad hard: Check velocity value
- Adjust ranges in config
Soft press: [12:50:00.000] NOTE_ON | Vel: 25 ← Within 0-40
Medium press: [12:50:05.000] NOTE_ON | Vel: 65 ← Within 41-80
Hard press: [12:50:10.000] NOTE_ON | Vel: 110 ← Within 81-127
Debug Chord Detection
Problem: Chord mapping not triggering
Solution:
- Press chord notes
- Check timing window in console:
[13:00:00.000] NOTE_ON | Note: 36
[13:00:00.150] NOTE_ON | Note: 40 ← 150ms gap, too slow!
[13:00:00.300] NOTE_ON | Note: 43
Config requires all notes within 100ms
Fix: Press notes faster OR increase chord_timeout_ms in config.
Test Action Execution
Problem: Action not executing as expected
Solution:
- Trigger the mapping
- Watch action execution in console
- Check for errors
[13:05:00.000] ACTION_START | Type: Shell
Command: "open -a 'Visual Studio Code'"
[13:05:00.250] ACTION_COMPLETE | Duration: 250ms | Status: Success
vs.
[13:05:05.000] ACTION_START | Type: Shell
Command: "open -a 'NotExist'"
[13:05:05.100] ERROR | Application not found
↑
This tells you what went wrong
Monitor System Performance
Watch event processing latency:
[13:10:00.000] NOTE_ON | Note: 36
[13:10:00.001] PROCESSED | Duration: 1ms ← Very fast!
[13:10:00.002] ACTION_START
[13:10:00.007] ACTION_COMPLETE | Duration: 5ms
Total: 7ms from button press to action complete
If latency >50ms, investigate performance issues.
GUI Console Features
Visual Event Timeline
The GUI console includes a visual timeline showing:
- Event type (color-coded)
- Timestamp
- Event details
- Expandable for full info
Event Highlighting
- Green: Successful events
- Yellow: Warnings (e.g., near timeout)
- Red: Errors
- Blue: Info (e.g., mode changes)
Auto-Scroll
Console auto-scrolls to latest events. Click Pause to freeze for inspection.
Event Export
- Select events
- Click Export
- Save as JSON/CSV for analysis
Event Statistics
View live statistics:
- Events per second
- Average velocity
- Most-pressed pad
- Error rate
Advanced Features
Pattern Recording
Record event sequences for analysis:
conductorctl record-events --duration 30s --output session.json
Playback recorded events:
conductorctl playback-events session.json
Event Filtering Rules
Create custom filters in config:
[event_console]
[[event_console.filters]]
name = "Only My Pads"
include_notes = [36, 37, 38, 39]
include_types = ["note", "processed"]
[[event_console.filters]]
name = "Errors Only"
include_types = ["error"]
min_severity = "warning"
Activate filter in GUI or CLI:
conductorctl events --filter "Only My Pads"
Event Triggers
Trigger actions based on events:
[event_console.triggers]
[[event_console.triggers.rules]]
condition = "error_rate > 5 per_minute"
action = { type = "Notification", message = "High error rate detected!" }
[[event_console.triggers.rules]]
condition = "note_36 pressed > 10 times in 5s"
action = { type = "Notification", message = "Stop mashing that button!" }
Performance Profiling
Enable detailed performance metrics:
[event_console]
enable_profiling = true
track_latency = true
track_memory = true
View profiling data:
conductorctl events --profiling
Output includes:
- Event processing time
- Memory allocation
- CPU usage per event
- Bottleneck identification
Troubleshooting
Console Not Updating
- Check daemon is running:
conductorctl status - Verify events are being generated (press pads)
- Restart daemon:
conductorctl restart - Check event monitoring is active:
conductorctl is-event-monitoring-active
Too Many Events
Filter aggressively:
# Only errors and warnings
conductorctl events --type error --type warning
# Debounce rapid events
conductorctl events --debounce 100ms
Or reduce update rate in config:
[event_console]
max_events_per_second = 30
Missing Events
-
Check buffer size isn’t full:
[event_console] buffer_size = 10000 # Increase if needed -
Verify event types are enabled:
[event_console] capture_midi = true capture_processed = true capture_actions = true -
Check log level:
DEBUG=1 conductorctl events
Best Practices
- Start with full view: See all event types initially
- Filter progressively: Add filters as you narrow down issues
- Use follow mode:
-fflag for live monitoring - Export for analysis: Save interesting sessions
- Watch timing: Event timing reveals latency issues
- Compare configs: Record events, change config, compare results
- Document discoveries: Note note numbers and velocities for future reference
Integration with Other Tools
Export to CSV for Analysis
conductorctl events --output events.csv --duration 60s
Analyze in Excel/Google Sheets:
- Event frequency
- Velocity distribution
- Timing patterns
Send to External Monitoring
# Stream events to external tool
conductorctl events --format json | jq '.' | your-monitoring-tool
Log to File
# Continuous logging
conductorctl events -f >> conductor-events.log
Next Steps
- Use console to build mappings with MIDI Learn
- Debug complex triggers in mapping configuration
- Monitor LED feedback in real-time
- Analyze per-app profile switching behavior