Downloads · 30 days
0
davidbraun/fm-synapse-dx7-gnn
fm-synapse-dx7-gnn is a machine learning model from davidbraun. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for synapse. The card lists the license as mit.
Joint embeddings of DX7 audio and DX7 presets, so an audio query retrieves presets by cosine similarity. Both modalities live in one space, trained with the SLAP objective (BYOL-style, non-contrastive, no negative sam…
Downloads · 30 days
0
Access
Public
Updated Aug 14, 2026
Repo size
754 MB
Likes
0
Public
Click a slice to open those files.
.safetensors754 MB · 100%
From the Hugging Face model README
Joint embeddings of DX7 audio and DX7 presets, so an audio query retrieves presets by cosine similarity. Both modalities live in one space, trained with the SLAP objective (BYOL-style, non-contrastive, no negative samples).
The parameter encoder is a DX7-GNN: a patch is a 6-operator graph, and messages pass along the algorithm's modulation and feedback edges, with each operator's state gated by its output level. Because the message-passing weights are shared across all nodes and layers, the encoder handles routing topologies it never saw during training — which is what the held-out variant below measures.
This repository holds two trained models, one per data split. Each is a complete SLAP model: the PANNs audio encoder, the DX7-GNN parameter encoder, and both arms' projector and predictor heads.
| Subfolder | Split | Audio→Preset R@1 | R@10 | MRR | Modality gap |
|---|---|---|---|---|---|
held-out | 16 odd algorithms train / 8 even test | 52.2% | 88.5% | 0.652 | 0.0446 |
80-10-10 | random 80/10/10 over all 32 algorithms | 86.1% | 99.5% | 0.917 | 0.0293 |
Galleries differ: 4,096 presets for held-out, 3,144 for 80-10-10. Each query's audio render has exactly one correct preset in its gallery.
pip install "synapse[hf] @ git+https://github.com/DBraun/SynAPSE"
from audiotree import AudioTree
from jax import numpy as jnp
from synapse import SynAPSE
model = SynAPSE.from_pretrained("davidbraun/fm-synapse-dx7-gnn", subfolder="held-out")
B = 1
batch = AudioTree(
jnp.zeros((B, 1, 176400)), # ~4 s at 44.1 kHz
sample_rate=44100,
extras={
"params": jnp.zeros((B, 145)), # dexed Preset.to_array()
"algorithm": jnp.zeros((B,), jnp.int32), # 0..31
},
)
out = model(batch)
out.audio_output.latent # [B, 768] audio encoder output (y_A)
out.audio_output.projection # [B, 384] audio projection (z_A)
out.audio_output.prediction # [B, 384] audio prediction (q_A)
out.parameter_output.latent # [B, 512] DX7-GNN output (y_P)
out.parameter_output.prediction # [B, 384] preset prediction (q_P)
Retrieval scores are cosine(q_A, q_P), following SLAP. Cosine similarity on the projections works too, but the paper reports the prediction-space distances.
Ablations in the paper show operator swapping is the decisive augmentation (removing it drops R@1 from 52.2% to 13.5%) and that the specific routing matters (a fully connected graph drops R@1 to 30.9%).
held-out model is the interesting one for topology generalization; the 80-10-10 model saw every algorithm during training and should not be read as evidence about unseen topologies.@inproceedings{braun2026fmsynapse,
title = {{FM} Synthesizer Audio-Parameter Shared Embeddings},
author = {Braun, David and Finkelstein, Adam},
booktitle = {Proc. of the 29th Int. Conference on Digital Audio Effects (DAFx26)},
address = {Cambridge, MA, USA},
year = {2026},
month = {September},
}