← Music Guidance
Guidance · Interactive Tool

Arranging a MIDI Pattern and Signing the Export

A minimal in-browser step sequencer, built on Tone.js, for trying out how a MIDI file created entirely in JavaScript can leave with a C2PA manifest embedded directly in the exported .mid.

Draft · v0.1No account required to arrange or preview

1Arrange & Preview

Click cells to place notes on a 16th-note grid, then press Play. Arranging and previewing runs entirely client-side with Tone.js — nothing reaches the server until you export.

C5
B4
A#4
A4
G#4
G4
F#4
F4
E4
D#4
D4
C#4
C4
Builds a real .mid file from this pattern and signs it server-side with an embedded C2PA manifest.

2Exporting a Content Credential

Pressing Export to MIDI sends the pattern to the server, where it’s built into a real Standard MIDI File and signed. The manifest isn’t a sidecar or a different-format stand-in — it’s embedded directly in the .mid file itself, as a Sequencer-Specific Meta Event placed just before the track’s End of Track event, per the “Embedding manifests into Standard MIDI Files” section of the C2PA specification draft.

A pattern created this way, from nothing, with no prior ingredients, is a straightforward c2pa.created action. Since it was assembled by placing notes in a tool rather than performed or captured, digitalSourceType would typically be digitalCreation — the same value used for anything composed directly in digital form, as covered in Actions and digitalSourceType.

Rendered with c2pa-react-component — illustrative, not a real signed file
Click a node in the graph to view its details, or click two nodes to compare them.
Forensic view
Forensic viewValid
midi-arrangement.midActive
urn:c2pa:example-midi-arrangement
JSON
{
  "assertions": {
    "c2pa.actions.v2": {
      "actions": [
        {
          "action": "c2pa.created",
          "description": "Built a step-sequenced Standard MIDI File.",
          "digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/digitalCreation",
          "softwareAgent": "Mix-O-Tron MIDI Arranger"
        }
      ]
    }
  }
}

If the arrangement were instead built from an AI-generated pattern, digitalSourceType would move to trainedAlgorithmicMedia — see the AI Disclosure Assertion for how to layer on richer disclosure.