zcx-core
Leveraging ClyphX Pro from NativeKontrol, zcx turns your matrix-equipped MIDI controller into a deeply customisable interface for Ableton Live. It offers an alternative configuration system that makes heavy use of yaml files and templating to allow rapid prototyping of new ideas. It aims to enable musicians to program more ambitious controller setups with less work than it took before.
hardware
zcx-core is currently maintained for these devices, with more planned:
- Ableton Push 1
- Ableton Push 2
- Akai APC mini mk2
- Novation Launchpad X
- Novation Launchpad Pro mk3
- Novation Launchpad Mini mk3
features
zcx scripts contain many features that are impractical or impossible to replicate natively in ClyphX
built for modes
Easily define any control as a modifier for any other control.
record:
color: red
gestures:
pressed: SEL / ARM ON
pressed__shift: SEL / STOP
pressed_delayed: SREC 8
pressed_delayed__shift: SREC 16
pressed__shift__select: SETSTOP
shift:
gestures:
pressed:
mode_on: shift
released:
mode_off: shift
select:
gestures:
pressed:
mode_on: select
released:
mode_off: select
unlimited pages
Turn an 8x8 matrix into an 8×8×∞ matrix.
# matrix_sections.yaml
home_row:
col_start: 0
col_end: 7
row_start: 0
row_end: 1
# pages.yaml
pages:
main:
- home_row
- main_left
- main_right
track_page:
- home_row
- track_control
- device_control
drums:
- home_row
- drums_section
rapid configuration
Configure dozens of buttons in seconds.
# matrix_sections.yaml
clip_section:
col_start: 0
col_end: 7
row_start: 0
row_end: 7
# matrix_sections/clip_section.yaml
color:
palette: nebula
gestures:
pressed: SEL / PLAY ${me.Index}
deeper customisation
Unlock the full capabilities of your hardware.
see howintelligent controls
Specialised control types give smart LED feedback without you writing any code.
__state_row:
includes: [
state_1, state_2, state_3, state_4
]
type: page
page: ${me.index}
gestures:
pressed:
page: ${me.index}
play:
type: transport
transport: play
gestures:
pressed: SETPLAY
reusable components
Use templates instead of repeating definitions. Make a change in one place to see the differences across the whole control surface.
# control_templates.yaml
my_green_button:
color: green shade ${me.index % 4}
hold_warning:
gestures:
released_immediately:
msg: You must hold this control to trigger it!
# named_controls.yaml
scene_1:
template: [hold_warning, my_green_button]
#color: green shade ${me.index % 4}
gestures:
pressed_delayed: SCENE 1
#released_immediately:
# msg: You must hold this control to trigger it!