Views
No views yet
MAJEPPA is a unified self-supervised model for piano performance that both generates and understands solo-piano MIDI in a single framework. Built on a pre-trained MIDI autoregressive backbone, it combines score-conditioned next-token prediction with a Joint-Embedding Predictive Architecture (JEPA) objective — learning to produce expressive continuations while also yielding transferable embeddings for downstream analysis.loubb/aria-medium — 660M-parameter LLaMA-style autoregressive MIDI transformer.[COND_perf], [COND_rec]) and prediction ([PRED]).model.safetensors contains the full set of weights (base model, LoRA adapters, projection head, and added token embeddings), ready to be loaded together.1pip install torch safetensors transformers
2pip install git+https://github.com/EleutherAI/aria-utils.git1from majeppa import load_model, load_tokenizer
2
3model = load_model("anusfoil/majeppa", device="cuda")
4tokenizer = load_tokenizer()
5
6tokens = tokenizer.encode_from_file("performance.mid", return_tensors="pt")
7embedding = model.encode(tokens.to("cuda")) # (1, 1536)
8token_emb, ts = model.encode_tokens(tokens.to("cuda")) # (T, 1536), (T,)1score_tokens = tokenizer.encode_from_file("score.mid", return_tensors="pt")
2
3# Condition on performer type and recording context
4performance = model.generate(
5 score_tokens.to("cuda"),
6 cond_performer="virtuoso", # or "child_beginner", "adult_intermediate", ...
7 cond_recording="concert", # or "practice", "sight_reading", "demo", ...
8 max_new_tokens=2048,
9 temperature=0.8,
10 top_k=50,
11)
12tokenizer.decode_to_file(performance, "generated.mid")1@inproceedings{zhou2026majeppa,
2 title = {MAJEPPA: Morphing and Assessing in a Unified Piano Performance Space},
3 author = {Zhou, Jinwen and Zhang, Huan and Zhai, Weixi and Liang, Jinhua and Hogg, Aidan O. T. and Dixon, Simon},
4 booktitle = {Proc. International Society for Music Information Retrieval Conference (ISMIR)},
5 year = {2026}
6}