Decomposer: Decompile Symbolic Music to Programs Researchers Yewon Kim, Apurva Gandhi, David Chung, Graham Neubig and Chris Donahue released Decomposer, an 8B-parameter model that decompiles symbolic music (MIDI) into executable, editable Strudel programs, detailed in arXiv paper 2607.01849. The release ships inference code with two backends — generate_transformers.py and generate_vllm.py — running on a GPU with 24GB+ VRAM and CUDA 12.4+, sampling 5 candidate programs by default at temperature 1.0 with a 4096-token generation cap. The model was mostly trained on clips under 30 seconds, so the authors recommend decompiling 15–30 second windows and filtering dense instrument selections that exceed the input limit. 📄 Paper https://arxiv.org/abs/2607.01849 | 🌐 Website https://yewon-kim.com/decomposer | 🎹 Live Demo https://huggingface.co/spaces/haiyewon/decomposer-demo | 🤗 Model https://huggingface.co/haiyewon/Decomposer-Qwen3-8B Decomposer decompiles symbolic music MIDI into executable, editable Strudel https://strudel.cc programs. This repo contains the inference code for our post-trained model. Requires uv https://docs.astral.sh/uv/ A GPU with 24GB+ VRAM and CUDA 12.4+ is recommended uv sync transformers backend uv sync --extra vllm vLLM backend We provide two inference backends with the same command-line interface: - generate transformers.py — simpler setup, slower generation - generate vllm.py — faster generation, heavier setup | Parameter | Default | Description | |---|---|---| | --midi path | required | input MIDI file .mid | | --model | haiyewon/Decomposer-Qwen3-8B | HF model id or local path | | --n outputs | 5 | number of Strudel programs to sample | | --start sec | file start | start of the time window to decompile seconds | | --duration sec | whole file | length of the time window seconds | | --instruments | all | comma-separated instruments to keep: GM program numbers 0–127 , GM names e.g. acoustic bass , or drum | | --list instruments | None | print the instruments found in --midi path and exit | | --bpm | from file | tempo override | | --meter | from file | beats-per-measure override | | --temperature | 1.0 | sampling temperature | | --max new tokens | 4096 | generation length cap | | --output root | outputs/ | directory for generation sessions | | --log prefix | None | session directory prefix: outputs/