Skip to main content

SyMuPe: Symbolic Music Performance modeling framework

Project description

SyMuPe: Affective and Controllable Symbolic Music Performance

PianoFlow architecture

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

arXiv ACM DL Outstanding Paper Award Website Models Dataset

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

symupe-1.0.0.tar.gz (236.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

symupe-1.0.0-py3-none-any.whl (280.2 kB view details)

Uploaded Python 3

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

Hashes for symupe-1.0.0.tar.gz
Algorithm Hash digest
SHA256 125d8ca86834a987e74e340928dd1f6b3a59cd5f26145595727e68875ac011f1
MD5 006bf0a223152fbfe8ab8ee08a23a89c
BLAKE2b-256 991f00a3791511a348d802188236ccda39d97f4e80eaa1597dfb7f833ebfbed3

See more details on using hashes here.

Provenance

The following attestation bundles were made for symupe-1.0.0.tar.gz:

Publisher: publish.yml on ilya16/SyMuPe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for symupe-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e66eb451e7ec20d49095ac3704ed1ed78db53ce08184dcae99ad755675f3c97e
MD5 c5143dde7abd2773c4550e77a2a25379
BLAKE2b-256 a796fa0fa2a2f9c9f9730dcce988d191b1835bdbee613858499c27ac3330d77c

See more details on using hashes here.

Provenance

The following attestation bundles were made for symupe-1.0.0-py3-none-any.whl:

Publisher: publish.yml on ilya16/SyMuPe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page