← Collaboration overview

📝 Async PR & Smart-Paste Tokens

Bundle a change-set into a single token, send it through any channel (Discord, email, file drop), and the recipient hits Ctrl+V in MidiEditor to review each hunk before merging. This is the simplest collab mode - no servers, no realtime, just text.

Create PR dialog with title, message, and Copy inline token button
The Create-PR dialog - pick title and message, then copy a single token to share.

When to use it

PRs shine when realtime co-editing would be the wrong tool: an AI agent just generated a draft you want to look over before merging; a friend sent a few-bar suggestion you want to cherry-pick from; you're working across timezones and don't want to wait for the other side to be online. A PR is a snapshot of your changes since the last share - the recipient sees a per-hunk diff and chooses what to merge.

Compared to a Live Session, a PR is asynchronous, leaves no servers running, and gives the receiver explicit veto power on every change. For small back-and-forth changes between two people on the same network, a Live Session is faster; for larger reviewable change-sets, the PR flow is better.


Quick start

  1. Make some edits in your MIDI file, save it (so the changes are captured in the local commit history).
  2. Open Collab → Create PR…. Pick a short title and an optional longer message describing what's in the change.
  3. Click Copy inline token. The clipboard now holds a single string that fully encodes your change-set.
  4. Paste the token into Discord, email, a chat, a text file - anywhere it'll reach the recipient.
  5. The recipient opens MidiEditor with their copy of the file, hits Ctrl+V in the matrix view, and the Review dialog opens.

Creating a PR

Open Collab → Create PR… after you've made and saved some edits. The dialog shows what'll be included in the bundle and gives you two share modes:

The PR's scope is automatically "everything since your last share" - the local commit history (sidecar file) is the source of truth. If you've shared 3 PRs already, the 4th covers only the changes since the 3rd.

When the inline token gets long, the dialog still lets you copy it in one click. If your audience is Discord, the bundled Webhook integration can post the same token to a channel automatically.


Receiving a PR

Review PR dialog showing per-hunk cherry-pick checkboxes and a summary of additions, removals, and modifications
The Review dialog - check the hunks you want, leave the rest for now or never.

Copy a smart-paste token from anywhere - chat, mail, file. In MidiEditor, with your copy of the file open, press Ctrl+V while the matrix view has focus. The Review dialog opens automatically.

The dialog lists every change as a hunk - events added, removed, or modified, grouped by track and channel. Each hunk has a checkbox; uncheck to skip. When you click Apply, only the selected hunks merge into your file as a single undo step. Anything you skipped stays in the bundle for next time (you can always paste the same token again to revisit them).

If the token's session ID doesn't match the file you have open, MidiEditor warns you with a "PR is from a different session" dialog - useful catch for "I pasted into the wrong file" cases.


Token formats

Both forms start with the unique mep:// scheme so Ctrl+V can route them to the Review dialog instead of falling through to a normal paste:

The recipient never has to know which form was used - the Review dialog handles both transparently.


History tab

Collaboration history tab showing per-commit rows with author, message, and hunk count
The Collab History tab in the right side panel - one row per commit, expandable for per-hunk detail.

The Collab History tab (right side panel, next to Tracks / Channels / Protocol / Event) shows every commit on the current file's local history. Each row is one save: timestamp, author, hunk counts. Expanding a row reveals the per-hunk summary - useful for verifying a PR's contents before sharing it, or for understanding how the file got into its current state after a few merges.

The history lives in a small .midiedit-collab.json sidecar file next to the .mid. Sharing the sidecar is optional - in a Live Session it gets shipped automatically; in async PRs the bundle carries only the slice you chose.


Troubleshooting