This project is part of the MSc in Applied Artificial Intelligence program at Universidad ICESI, Colombia. It focuses on symbolic music generation using deep learning techniques to bridge natural language and musical representation.
0
stars
56
commits
Python
primary language
Jun 7, 2026
updated
This repository implements a text-to-MIDI generation system that creates symbolic music from natural language descriptions.
MSc Applied Artificial Intelligence - ICESI University
This project is part of the MSc in Applied Artificial Intelligence program at Universidad ICESI, Colombia. It focuses on symbolic music generation using deep learning techniques to bridge natural language and musical representation.
Specific Objectives
This project requires Python 3.12+ and uv package manager
# Clone the repository
git clone https://github.com/NickEsColR/symbolic-music-generation.git
cd symbolic-music-generation
# Install dependencies with uv
uv sync
If you plan to use natural language translation via LLM (e.g., Gemini) by passing --translator-model in the CLI, you must set up your environment variables:
.env file or create a new one:cp .env.example .env
.env file:GOOGLE_API_KEY=your_api_key_here
To run the generation models effectively, please note the following hardware constraints:
Note: All notebooks can be run directly in Google Colab using their respective badges below.
This notebook addresses the first part of Objective 2 by providing a deep dive into the encoder-decoder architecture and the training process of the model.
The analysis covers:
This notebook addresses the second part of Objective 2 by focusing on the generation process. It explores how to use the pre-trained text2midi model to generate symbolic music from natural language prompts.
The analysis covers:
This notebook addresses Objective 3 by evaluating the complete MIDI generation pipeline from natural language descriptions. It compares two distinct generation strategies and assesses their impact on the final musical output.
The analysis covers:
one-shot profile to evaluate progressive search capabilities.midillm-fast profile to evaluate batch generation and selection.The project use jupytext to create jupyter cells using a .py file.
To syncronized the .ipynb with the .py run
uv run jupytext --set-formats ipynb,py:percent notebooks/notebook.ipynb
To syncronized the .py with the .ipynb run
uv run jupytext --sync notebooks/notebook.py
This document addresses the structural design of the project, focusing on how the MIDI generation pipeline is built for maintainability and extensibility.
The overview covers:
src/domain/).ProgressiveSearch and BestOfNSearch (src/use_cases/).src/adapters/).pipeline.py).The project includes a robust CLI to generate MIDI files directly from the terminal.
Basic Usage:
python -m src.cli --text "A peaceful piano melody" --output peaceful.mid
For a comprehensive guide on all available arguments (like --profile, --translator-model, and --strict-instruments) and advanced usage examples, refer to the CLI Reference.
The project includes a comprehensive test suite covering the domain, use cases, and adapters. To run the tests, use pytest via uv:
uv run pytest tests/
When working locally, you should place downloaded model weights and vocabularies (e.g., the pre-trained text2midi model from Hugging Face) inside a models/ directory at the root of the project.
mkdir -p models/
# Download hugging face model bin and vocab to this folder
If you use this project or our research in your work, please cite the underlying models and papers:
@inproceedings{bhandari2025text2midi,
title={text2midi: Generating Symbolic Music from Captions},
author={Keshav Bhandari and Abhinaba Roy and Kyra Wang and Geeta Puri and Simon Colton and Dorien Herremans},
booktitle={Proceedings of the 39th AAAI Conference on Artificial Intelligence (AAAI 2025)},
year={2025}
}
@inproceedings{wu2025midillm,
title={{MIDI-LLM}: Adapting large language models for text-to-{MIDI} music generation},
author={Wu, Shih-Lun and Kim, Yoon and Huang, Cheng-Zhi Anna},
booktitle={Proc. NeurIPS AI4Music Workshop},
year={2025}
}
@misc{llama3researchcloud,
title={The Llama 3 Herd of Models},
author={Meta Llama Team},
year={2024},
eprint={2407.21783},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
56 commits
Python
57.1%
Jupyter Notebook
42.9%
This project is part of the MSc in Applied Artificial Intelligence program at Universidad ICESI, Colombia. It focuses on symbolic music generation using deep learning techniques to bridge natural language and musical representation.
0
stars
56
commits
Python
primary language
Jun 7, 2026
updated
This repository implements a text-to-MIDI generation system that creates symbolic music from natural language descriptions.
MSc Applied Artificial Intelligence - ICESI University
This project is part of the MSc in Applied Artificial Intelligence program at Universidad ICESI, Colombia. It focuses on symbolic music generation using deep learning techniques to bridge natural language and musical representation.
Specific Objectives
This project requires Python 3.12+ and uv package manager
# Clone the repository
git clone https://github.com/NickEsColR/symbolic-music-generation.git
cd symbolic-music-generation
# Install dependencies with uv
uv sync
If you plan to use natural language translation via LLM (e.g., Gemini) by passing --translator-model in the CLI, you must set up your environment variables:
.env file or create a new one:cp .env.example .env
.env file:GOOGLE_API_KEY=your_api_key_here
To run the generation models effectively, please note the following hardware constraints:
Note: All notebooks can be run directly in Google Colab using their respective badges below.
This notebook addresses the first part of Objective 2 by providing a deep dive into the encoder-decoder architecture and the training process of the model.
The analysis covers:
This notebook addresses the second part of Objective 2 by focusing on the generation process. It explores how to use the pre-trained text2midi model to generate symbolic music from natural language prompts.
The analysis covers:
This notebook addresses Objective 3 by evaluating the complete MIDI generation pipeline from natural language descriptions. It compares two distinct generation strategies and assesses their impact on the final musical output.
The analysis covers:
one-shot profile to evaluate progressive search capabilities.midillm-fast profile to evaluate batch generation and selection.The project use jupytext to create jupyter cells using a .py file.
To syncronized the .ipynb with the .py run
uv run jupytext --set-formats ipynb,py:percent notebooks/notebook.ipynb
To syncronized the .py with the .ipynb run
uv run jupytext --sync notebooks/notebook.py
This document addresses the structural design of the project, focusing on how the MIDI generation pipeline is built for maintainability and extensibility.
The overview covers:
src/domain/).ProgressiveSearch and BestOfNSearch (src/use_cases/).src/adapters/).pipeline.py).The project includes a robust CLI to generate MIDI files directly from the terminal.
Basic Usage:
python -m src.cli --text "A peaceful piano melody" --output peaceful.mid
For a comprehensive guide on all available arguments (like --profile, --translator-model, and --strict-instruments) and advanced usage examples, refer to the CLI Reference.
The project includes a comprehensive test suite covering the domain, use cases, and adapters. To run the tests, use pytest via uv:
uv run pytest tests/
When working locally, you should place downloaded model weights and vocabularies (e.g., the pre-trained text2midi model from Hugging Face) inside a models/ directory at the root of the project.
mkdir -p models/
# Download hugging face model bin and vocab to this folder
If you use this project or our research in your work, please cite the underlying models and papers:
@inproceedings{bhandari2025text2midi,
title={text2midi: Generating Symbolic Music from Captions},
author={Keshav Bhandari and Abhinaba Roy and Kyra Wang and Geeta Puri and Simon Colton and Dorien Herremans},
booktitle={Proceedings of the 39th AAAI Conference on Artificial Intelligence (AAAI 2025)},
year={2025}
}
@inproceedings{wu2025midillm,
title={{MIDI-LLM}: Adapting large language models for text-to-{MIDI} music generation},
author={Wu, Shih-Lun and Kim, Yoon and Huang, Cheng-Zhi Anna},
booktitle={Proc. NeurIPS AI4Music Workshop},
year={2025}
}
@misc{llama3researchcloud,
title={The Llama 3 Herd of Models},
author={Meta Llama Team},
year={2024},
eprint={2407.21783},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
56 commits
Python
57.1%
Jupyter Notebook
42.9%