Templates
Best practices for template design
Hard-won rules for building Universal Controller MIDI templates that feel good, scale to performance, and pass marketplace review on the first try.
Updated
Most templates work. Few feel good. The gap is a handful of design rules that take seconds to follow and save hours of "why is this twitchy" debugging. Every rule on this page exists because someone (often me) shipped a template that violated it and immediately regretted it on stage or in a session.
Naming and scope
- One template, one job. Don't try to be a finger drummer and a VJ in the same file. Split.
- Name like a search query.
DAW — Use caseis the convention: FL Studio — Channel Rack + Mixer, not my fl thing. - Keep
nameunder 50 chars. Long names truncate in the dropdown. - Suffix custom versions with
(custom)or(v2)— never overwrite the source name silently.
Deadzone and poll rate
Two settings, big impact. Defaults are conservative; tune them per controller. Here's the table I keep pinned:
| Use case | deadzone | poll_hz | Why |
|---|---|---|---|
| Finger drumming | 0.05 | 120 | Tight enough to trigger cleanly |
| DJ scratching | 0.03 | 200 | Latency is everything |
| VJ / clip launching | 0.08 | 60 | Triggers don't need sub-frame timing |
| MPE / aftertouch | 0.02 | 200 | Tiny movements matter |
| Drifty 3rd-party stick | 0.10–0.12 | 100 | Filter out resting jitter |
| Bluetooth on slow link | 0.05 | 60 | Don't flood the radio |
| OSC drone control | 0.04 | 150 | Smooth analog beats discrete |
| Streamer / podcast soundboard | 0.05 | 60 | Save CPU for OBS/Riverside |
{
"name": "Live DJ Scratch (custom)",
"schema_version": 2,
"midi_channel": 0,
"deadzone": 0.03,
"poll_hz": 200,
"axes": { "0": 1, "1": 11 }
} Stick corners — hysteresis matters
Set r_exit noticeably lower than r_enter. The gap is what stops chatter when you hover near a zone boundary. A tight gap (0.92 / 0.88) feels precise but jittery. A wide gap (0.92 / 0.70) feels confident.
{
"left_stick_corners": {
"enabled": true,
"n": 8,
"notes": [60, 62, 64, 65, 67, 69, 71, 72],
"r_enter": 0.92,
"r_exit": 0.72
}
} Setting r_exit too low (under 0.5) means notes hang once triggered. The stick has to return almost to centre before the zone releases. Fine for sustained pads, terrible for fast playing.
Haptics — restraint wins
Adaptive triggers are intoxicating. Resist. Pick one effect per trigger and stick with it. The full effect catalogue is at adaptive effects; the short version:
trigger_resistfor bow-like expression (continuous controllers).trigger_clickfor hard transients (kick triggers, sample one-shots).nullfor everything else — uniform feedback gets exhausting.
{
"l2_haptic_effect": "trigger_click",
"r2_haptic_effect": null
} If a template needs more than a sentence of explanation to use, it's two templates. Split it.
For marketplace uploads
- Test on a clean install before sharing. The 48 bundled templates set unconscious expectations.
- Document quirks in the description, not in the JSON. Reviewers read descriptions.
- Tag aggressively — three to five tags is the sweet spot.
- Strip
_import_metaand any other underscore-prefixed fields; the validator rejects them and they bloat your 64 KB budget. - Pre-flight against the approval criteria table — every auto-check should pass locally before you upload.
Most rejected uploads fail on three things: missing description, non-lowercase tags, and being a two-field diff from a bundled template. None of those are about quality — they're about hygiene. Fix them and your acceptance rate goes from 60% to 95%.
Real-world template patterns that consistently pass review
- Tuned DAW transport — bundled DAW template + remapped face buttons + description naming the DAW version. Clear, useful, low controversy.
- Genre-locked drum kit — 16 buttons mapped to a specific genre's GM drum layout, deadzone tuned, name like "Drill Kit — DualSense + FL Studio".
- Hysteresis-tuned scale corners — both sticks at
n: 8, scale-locked notes, wider_enter/r_exitgap for live-playing confidence. - Adaptive-trigger MPE rig —
l2_haptic_effect: "trigger_resist"with axis routed to channel aftertouch, sticks driving expression CCs. - Per-controller hardware niche — fills a gap in the bundled set: 8BitDo Pro 2 paddles for transport, Steam Controller trackpads as XY pads.
Cross-references: customize, versioning, share to the marketplace, migrate from another controller.