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: 2and 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_favouritesandbridge_preset_ratingstables 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.
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:
| Check | Required | Auto or manual | Common failure |
|---|---|---|---|
schema_version: 2 | yes | auto | v1 file uploaded — migrate first |
| JSON ≤ 64 KB | yes | auto | Unstripped _import_meta bloat |
| No underscore-prefixed top-level fields | yes | auto | Forgot to strip import metadata |
| Title 6–60 chars | yes | auto | "my preset" is too short |
| Description 20–500 chars | yes | auto | Empty or one-liner descriptions |
| Tags lowercase, no spaces, 1–8 total | yes | auto | "FL Studio" instead of fl-studio |
| Has at least one mapped surface | yes | manual | Empty buttons and empty axes |
| Not a near-duplicate of an existing listing | yes | manual | Two-field diff from a bundled template |
| Description matches behaviour | yes | manual | "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_versionor value other than2. - Tags with spaces or non-lowercase characters.
- Description under 20 chars or over 500.
- Duplicate title in your own listings.
- Leftover
_import_metafrom a.tsiconversion.
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 lighting —
oscblock 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.