NetComposer / Supplier spec

A Supplier publishes one index file and one manifest per sound. This page describes the fields exactly as musicmatter.art publishes them today (format version 0.1). Anything not yet in use there is marked PROPOSED.

Index: netcomposer.json

Served at the site root, e.g. musicmatter.art/netcomposer.json.

fieldmusicmatter.art valuemeaning
nc_version"0.1"format version
creator{"name": …, "link": "https://musicmatter.art/"}who publishes the sounds: name, link
default_license"CC-BY-SA-4.0"license for every offering unless its manifest says otherwise
default_audio_format"audio/flac"MIME type of the audio
offerings1356 entriesone per sound; keys: audio (absolute audio URL), manifest (absolute manifest URL), midi (relative path to a MIDI transcription)

Manifest: one per sound

At the URL in offerings[].manifest, e.g. /sounds/<name>.nc.json. Field counts are from the 2026-10-17 validation of all 1356 live manifests; sub-keys are from the same published files.

fieldpresentmeaning
audio1356/1356audio file name, relative to the manifest.
chords1356/1356list of chord names sounded.
creator1356/1356object: name, link. Keys: name, link.
format1356/1356audio format details. Keys: mime, container, codec, lossless, sample_rate, bit_depth, channels, frames, pcm_md5.
license1356/1356SPDX-style id, e.g. "CC-BY-SA-4.0".
loopable1356/1356true/false.
midi1356/1356relative path to a MIDI transcription.
midi_info1356/1356how the MIDI was derived. Keys: derived_from_audio, source, confidence, method, timing, notes, size_bytes, sha256.
nc_version1356/1356format version, "0.1".
register1356/1356pitch range and bass. Keys: low, high, root, bass, inversion.
sha2561356/1356sha256 of the audio file.
size_bytes1356/1356audio file size in bytes.
title1356/1356human-readable title.
type1356/1356"chord" or "arpeggio".
key1068/1356key context, where given.
arpeggio654/1356arpeggio details (arpeggio sounds only). Keys: direction, pattern, cycle, pitch_order, pitch_order_note, note_count, bars, restarts_each_bar, rate, notes, onsets_s, duration_s. Rate keys: note_value, bpm, step_s, meter.
register_source529/1356how the register was verified, e.g. "verified_v6".
near_duplicate_of6/1356audio file this sound nearly duplicates.
notes_confidence2/1356confidence note for the pitch analysis, e.g. "low".

PROPOSED

The fields describing the sound (type, chords, register, key, arpeggio) are what let a Performer choose musically without listening first. A Supplier of other kinds of sound may leave them out.

Validate

tools/validate_supplier.py (Python standard library only): python3 validate_supplier.py <index_url> [--sample 25] [--all-manifests] [--json report.json]. It checks the index, the manifests (parse, license, minimum fields, audio path matches the index) and a sample of audio files (sha256 and size). Exit code 0 means valid.

Then register: Supplier registry.