Templates
Customize a template
Override fields on a built-in template without forking. Change MIDI channel, deadzone, button notes, and stick corner counts in place.
Updated
You almost never want to write a template from scratch. The faster move is customize an existing one — duplicate, override the fields that matter, save. The app keeps both versions, your edits live in the user library, and the original built-in stays clean even if you nuke your custom version.
Customisation is also how most marketplace templates are born. Somebody takes FL Studio — Channel Rack, swaps the channel, tunes the deadzone for their drifty third-party stick, adds touchpad XY, and ships the result. That's a totally valid contribution.
Duplicate first, edit second
Hit Templates → Duplicate on any preset. The app writes a copy to your user library with a (custom) suffix and selects it. Edit fields in the UI panels — buttons, axes, sticks, haptics — and changes save on blur. No "Save" button, no version conflicts, no orphaned drafts.
The user library is plain JSON in your app data directory. Open the folder from Settings → Reveal library and edit with your favourite editor if the UI feels slow. The app watches the directory and hot-reloads changes within ~250ms.
The fields most worth changing
Eighty percent of customisations touch three things. Here's the cheat sheet, with sane ranges and what each value actually does:
| Field | Default | Safe range | What it controls |
|---|---|---|---|
midi_channel | 0 | 0–15 | MIDI channel for all notes/CCs in this template |
deadzone | 0.05 | 0.01–0.20 | Radial deadzone applied to both sticks |
poll_hz | 100 | 30–250 | How often controller state is sampled |
buttons | varies | MIDI notes 0–127 | Face/shoulder/special button to note number |
axes | varies | CC numbers 0–127 | Stick / trigger axis to MIDI CC |
left_stick_corners.n | 8 | 4, 8, 12, 16 | Angular zone count on left stick |
right_stick_corners.n | 8 | 4, 8, 12, 16 | Angular zone count on right stick |
{
"name": "Beat Making — Finger Drumming (custom)",
"schema_version": 2,
"midi_channel": 2,
"deadzone": 0.08,
"poll_hz": 120,
"buttons": { "0": 36, "1": 38, "2": 40, "3": 41 },
"axes": { "0": 1, "1": 11 }
} Stick corners — the secret weapon
Most users ignore left_stick_corners and right_stick_corners until they discover them. Each stick can fire up to 16 notes based on angular zone. Set n to the zone count, list the notes, then tune r_enter / r_exit for hysteresis (prevents chatter at the deadzone boundary). Read the deep dive at stick corners.
{
"left_stick_corners": {
"enabled": true,
"n": 8,
"notes": [60, 62, 64, 65, 67, 69, 71, 72],
"r_enter": 0.9,
"r_exit": 0.7
}
} If r_exit is higher than r_enter the zone will retrigger on every micro-jitter. Always keep r_exit < r_enter, with at least a 0.10 gap between them.
Trigger haptics
On PS5 controllers, l2_haptic_effect and r2_haptic_effect turn analog triggers into tactile feedback. Set to "trigger_resist" for bow-like expression, "trigger_click" for hard transients, or null to keep the trigger free-running. The full effect catalogue lives at adaptive effects.
Customising in place beats forking because every saved field is independent. If a future schema bump adds vibration_curve, your customised template inherits the new field with a sensible default — a forked one wouldn't.
Real-world template patterns
- Channel-matched DAW preset — clone FL Studio — Channel Rack, set
midi_channelto 10 so it plays nice with drum tracks routed there. - Drift-tolerant live rig — clone any template, bump
deadzoneto0.10–0.12for stage-worn controllers. - Scale-locked corners — clone Beat Making, replace
left_stick_corners.noteswith a C-minor pentatonic, save per key. - Expression-heavy MPE — clone MPE Polyphonic, drop
deadzoneto0.02and bumppoll_hzto200. - Haptic-restricted streamer rig — clone any template, set both haptic fields to
nullso the controller stays quiet during long sessions.
Polished it? See best practices for safe defaults, then share when it's ready.