SyMuPe: Symbolic Music Performance modeling framework
Project description
SyMuPe: Affective and Controllable Symbolic Music Performance
Official release for the paper "SyMuPe: Affective and Controllable Symbolic Music Performance" (ACM MM 2025 Outstanding Paper Award)
Proceedings of the 33rd ACM International Conference on Multimedia (ACM MM '25), Dublin, Ireland, 2025
Authors: Ilya Borovik, Dmitrii Gavrilev, and Vladimir Viro
Description
SyMuPe is a framework for creating controllable, transformer-based models for rendering symbolic music performances.
Its flagship model, PianoFlow, applies conditional flow matching to solve diverse multi-mask performance inpainting tasks. By design, the model supports both unconditional generation and infilling of expressive performance features.
For more details, please refer to the paper and the demo page with samples.
Install
Install the symupe package using:
pip install symupe
Models in the SyMuPe Framework
Score-only models described in the paper are available on the Hugging Face Hub.
| Model Repo | Type | Objective | Description |
|---|---|---|---|
| PianoFlow-base | Encoder Transformer | CFM | Flagship model for high-fidelity rendering |
| EncDec-base | Encoder-Decoder Transformer | CLM | Slower sequence-to-sequence baseline |
| MLM-base | Encoder Transformer | MLM | Fast single-step language modeling baseline |
Quick Start
Render an expressive performance from a quantized MIDI score in just a few lines of code.
import torch
from symusic import Score
from symupe.data.tokenizers import SyMuPe
from symupe.inference import AutoGenerator, perform_score, save_performances
from symupe.models import AutoModel
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Load the model and tokenizer directly from the Hub
model_name = "SyMuPe/PianoFlow-base"
# model_name = "SyMuPe/EncDec-base"
# model_name = "SyMuPe/MLM-base"
model = AutoModel.from_pretrained(model_name).to(device)
tokenizer = SyMuPe.from_pretrained(model_name)
# Prepare generator for the model
generator = AutoGenerator.from_model(model, tokenizer, device=device)
# Load score MIDI
score_midi = Score("score.mid")
# Perform score MIDI (tokenization is handled inside)
gen_results = perform_score(
generator=generator,
score=score_midi,
use_score_context=True,
num_samples=8,
seed=23
)
# gen_results[i] is PerformanceRenderingResult(...) containing:
# - score_midi, score_seq, gen_seq, perf_seq, perf_midi, perf_midi_sus
# Save performed MIDI files in a single directory
save_performances(gen_results, out_dir="samples")
Dataset
The PERiScoPe (Piano Expression Refined Score and Performance MIDI) dataset used to train the models is available on Hugging Face.
Citation
@inproceedings{borovik2025symupe,
title = {{SyMuPe: Affective and Controllable Symbolic Music Performance}},
author = {Borovik, Ilya and Gavrilev, Dmitrii and Viro, Vladimir},
year = {2025},
booktitle = {Proceedings of the 33rd ACM International Conference on Multimedia},
pages = {10699--10708},
doi = {10.1145/3746027.3755871}
}
License
- The source code in this repository is licensed under the Apache License 2.0.
- The pre-trained model weights and the PERiScoPe dataset are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file symupe-1.0.0.tar.gz.
File metadata
- Download URL: symupe-1.0.0.tar.gz
- Upload date:
- Size: 236.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
125d8ca86834a987e74e340928dd1f6b3a59cd5f26145595727e68875ac011f1
|
|
| MD5 |
006bf0a223152fbfe8ab8ee08a23a89c
|
|
| BLAKE2b-256 |
991f00a3791511a348d802188236ccda39d97f4e80eaa1597dfb7f833ebfbed3
|
Provenance
The following attestation bundles were made for symupe-1.0.0.tar.gz:
Publisher:
publish.yml on ilya16/SyMuPe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
symupe-1.0.0.tar.gz -
Subject digest:
125d8ca86834a987e74e340928dd1f6b3a59cd5f26145595727e68875ac011f1 - Sigstore transparency entry: 1111586815
- Sigstore integration time:
-
Permalink:
ilya16/SyMuPe@4f0bb980144a0dc91d09525268742abebe314188 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/ilya16
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4f0bb980144a0dc91d09525268742abebe314188 -
Trigger Event:
release
-
Statement type:
File details
Details for the file symupe-1.0.0-py3-none-any.whl.
File metadata
- Download URL: symupe-1.0.0-py3-none-any.whl
- Upload date:
- Size: 280.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e66eb451e7ec20d49095ac3704ed1ed78db53ce08184dcae99ad755675f3c97e
|
|
| MD5 |
c5143dde7abd2773c4550e77a2a25379
|
|
| BLAKE2b-256 |
a796fa0fa2a2f9c9f9730dcce988d191b1835bdbee613858499c27ac3330d77c
|
Provenance
The following attestation bundles were made for symupe-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on ilya16/SyMuPe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
symupe-1.0.0-py3-none-any.whl -
Subject digest:
e66eb451e7ec20d49095ac3704ed1ed78db53ce08184dcae99ad755675f3c97e - Sigstore transparency entry: 1111587088
- Sigstore integration time:
-
Permalink:
ilya16/SyMuPe@4f0bb980144a0dc91d09525268742abebe314188 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/ilya16
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4f0bb980144a0dc91d09525268742abebe314188 -
Trigger Event:
release
-
Statement type: