Universal Controller MIDI

Templates

Share a template to the marketplace

Upload your custom template to the Universal Controller MIDI marketplace. Auth, validation, file size cap, approval queue, and what ships now vs roadmap.

Updated

You built a banger mapping. Other people want it. The marketplace is the Supabase-backed shared library where any signed-in user can upload templates and any visitor can download them. Behind the scenes, your JSON is stored in the bridge_presets table with a status column that flows pending → approved (or rejected, but we'll come back to that).

Auth uses Supabase's magic-link email flow — no passwords to manage, no OAuth dance. One email link, signed in, ready to upload.

What ships now

Available today, in the app:

  • Upload — sign in with email link, hit Templates → Share, your JSON gets validated against schema_version: 2 and queued for approval.
  • Metadata — title, description, tags (DAW, controller, use case), and a 256-char author note.
  • File cap — 64 KB per template. A normal mapping is ~3 KB so you have headroom for ambitious corner configs and verbose author notes.
  • Approval queue — manual review for the first 100 uploads to keep quality high. Usually under 24 hours.
  • Favourites + ratings — the bridge_preset_favourites and bridge_preset_ratings tables are live; users can already star your work, even if the UI is still landing.

Roadmap

Not yet — but soon:

  • Versioned updates to your own listings (right now it's upload-once).
  • Likes, downloads count, and a "trending" tab built off the favourites/ratings tables.
  • Auto-approval after your first three accepted uploads.
  • Bundles — ship a pack of related templates as one download.
local file upload listing live moderation queue clears in <24h
Share to the marketplace — local template flows through upload and moderation into a public listing.

Approval criteria — what reviewers actually check

The reviewer dashboard runs through a fixed checklist. If your upload hits all of these, it usually clears within a day:

CheckRequiredAuto or manualCommon failure
schema_version: 2yesautov1 file uploaded — migrate first
JSON ≤ 64 KByesautoUnstripped _import_meta bloat
No underscore-prefixed top-level fieldsyesautoForgot to strip import metadata
Title 6–60 charsyesauto"my preset" is too short
Description 20–500 charsyesautoEmpty or one-liner descriptions
Tags lowercase, no spaces, 1–8 totalyesauto"FL Studio" instead of fl-studio
Has at least one mapped surfaceyesmanualEmpty buttons and empty axes
Not a near-duplicate of an existing listingyesmanualTwo-field diff from a bundled template
Description matches behaviouryesmanual"VJ" tag on a finger-drum mapping

The upload manifest

The app builds this for you, but it's good to know what gets sent. The template JSON is wrapped in a manifest with marketplace metadata, then inserted into the bridge_presets row:

{
  "manifest_version": 1,
  "template": {
    "name": "Resolume LL Plus",
    "schema_version": 2,
    "midi_channel": 0,
    "deadzone": 0.05,
    "poll_hz": 120,
    "axes": { "0": 1, "1": 2, "2": 11, "3": 7 },
    "right_stick_corners": { "enabled": true, "n": 8, "notes": [72,74,76,77,79,81,83,84], "r_enter": 0.9, "r_exit": 0.72 }
  },
  "title": "Resolume LL Plus",
  "description": "Extends the bundled Resolume mapping with corner triggers for clip launching. Tested on 7.16, four-deck layout.",
  "tags": ["vj", "resolume", "ps5"],
  "controller": "ps5-dualsense",
  "author_note": "Tested on Resolume 7.16 with iPad-side companion."
}

The row it produces in bridge_presets looks roughly like this:

{
  "id": "uuid",
  "author_id": "uuid",
  "title": "Resolume LL Plus",
  "tags": ["vj", "resolume", "ps5"],
  "controller": "ps5-dualsense",
  "preset_json": { "...": "..." },
  "status": "pending",
  "created_at": "2026-05-29T10:00:00Z"
}

Validation gotchas

Uploads bounce for predictable reasons. Fix these before clicking Share:

  • Missing schema_version or value other than 2.
  • Tags with spaces or non-lowercase characters.
  • Description under 20 chars or over 500.
  • Duplicate title in your own listings.
  • Leftover _import_meta from a .tsi conversion.

Approval review exists so the marketplace doesn't fill with broken or near-identical mappings. Once we hit critical mass, trust scores replace manual review — the first three accepted uploads from any account unlock auto-approval.

Don't upload from a controller you've never tested the template on. Reviewers run uploaded templates against bundled controllers, and a mapping that only works on a Steam Controller but is tagged ps5 bounces fast.

Real-world template patterns worth sharing

  • DAW + controller combo packs — "Ableton Live + 8BitDo Pro 2", "FL Studio + DualSense Edge". Specific beats generic.
  • Genre-locked drum kits — drill, lo-fi house, dnb. Pre-mapped to GM drum notes most producers can route easily.
  • Per-DAW transport remap — face buttons rewired to play, stop, record, loop, undo.
  • OSC bridges for lightingosc block targeting QLC+, Resolume Wire, or TouchOSC layouts.
  • Accessibility-focused mappings — single-hand layouts, larger deadzones, fewer required surfaces.

To pull other people's work, see download from the marketplace. For the conceptual model, see marketplace concept.

Edit this page on GitHub Updated
ESC

Type to search.