Open-source project
jisungk/deepjazz avatar
jisungk/deepjazz

deepjazz: two layers, 36 hours, and a preprocessing step you have to edit yourself

Deep learning driven jazz generation using Keras & Theano!

2,894 stars437 forksPythonApache-2.0

At a glance

What is it?
A hackathon project that generates jazz with a two-layer LSTM on Keras and Theano, whose readme opens by saying it is finished, whose main dependency is a development snapshot rather than a release, whose preprocessing script must be hand-edited before it will read any MIDI file other than the bundled one, and whose code and media carry different licences.
Who is it for?
deepjazz is worth reading as a compact example of a generative recurrent network applied to music, and not worth installing as a dependency. Take it if you want to see the whole pipeline in five files, because the preprocessing, the model, the grammar and the generator are all at the top level with nothing hidden.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The first line of the readme says the project is over

The readme opens with a note rather than a description. It says deepjazz is no longer being worked on, that it may be refactored at some point in the future, and it says goodbye and thanks the reader, with a crying emoji at the end. That framing is not contradicted by the forge: the repository is not archived, and the last commit is dated 2026-03-19, so somebody has touched it within the last half year. What is absent is any sign of a release. The repository has no tagged releases at all, which for a project people are invited to run means there is no version to pin, no changelog to read and nothing to compare a checkout against. The promise of a future refactor is the only forward-looking sentence in the file, and nothing on the page says what a refactor would change.

preprocess.py must be edited before it reads your file

This is the constraint that decides whether the project works for you. A note states that preprocess.py must be modified to work with other MIDI files, because the relevant melody part needs to be selected, and that the ability to handle this natively is a planned feature. So out of the box the pipeline is wired to one input: the MIDI file in the repository, chosen by hand at some point in the preprocessing script. Anyone bringing their own file has to open the script and change it, and anyone hoping for a flag has to wait for a feature that the closing note says will not be coming. The generator itself takes one positional argument, the number of epochs, with no default and no validation described. Everything else about the run is a single command.

bash
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python generator.py [# of epochs]

The dependency you install is a branch, not a release

Three dependencies are named and one of them is unusual. Keras and a music theory library are ordinary installs. The deep learning backend is not: it is specified as the bleeding-edge version on the project's GitHub rather than as a published release, which means you are building against whatever the tip of that repository is on the day you clone it. That is the instruction as written, and it is the instruction that ages worst, since a library with no tagged releases can change under an existing install. The page is careful about the other half of the stack: running the pair on a GPU is described as formally supported only for cards from one vendor, through the CUDA backend. The environment variables in the run command set the execution mode, the device and the floating point type together, which is the documented way to ask that backend for GPU execution.

Five Python files at the top level

The whole project is small enough to read in one sitting, and the layout tells you the pipeline. At the root there are five Python files and one directory. The generator is the entry point the instructions name. There is a file for the recurrent model, one for the musical grammar the model learns, one for preprocessing, and one more file whose purpose the readme never explains, which is named for quality assurance and appears in no command. The MIDI directory holds the input material. A licence file and a notice file sit alongside them, which is the correct pairing for an Apache-licensed project that carries third-party attribution. There is no package manifest, no requirements file, no configuration file and no test directory, so there is nothing to install and nothing to pin.

The code is Apache, the recordings are not

The licensing section splits the project in two and is unusually clear about it. Code is under the Apache License 2.0. Images and other media are copyrighted by the author. So the music you hear on the linked sound page is not covered by the licence of the code that produced it, and anyone reusing either needs to read both statements. Attribution is handled rather than hand-waved: the project says it develops a lot of preprocessing code with permission from another project, names that author and links to it, and adds that public examples from the framework's own documentation were referenced. That is what the notice file at the root is for, and its presence alongside the split licence statement is the clearest part of the legal picture here.

Two layers, thirty-six hours, one hackathon

The technical claim is small and specific, which is to its credit. It builds a two-layer LSTM and trains it on a given MIDI file, using the recurrent network to generate music rather than to classify anything. The provenance is stated just as plainly: the author built it in thirty-six hours at a hackathon. That framing explains the shape of everything else, from the one bundled input file to the absence of releases, and it is worth holding in mind when reading the marketing around it. The page positions the work by pointing at the two systems it says the technique powers, a game-playing system and a question answering system, and then argues that generating music is the harder demonstration because music is treated as deeply human. The output is published on a sound hosting page rather than in the repository.

One author, a plain http site, and no version anywhere

The project page is served over plain http rather than https, and the author's contact details are given in an obfuscated form, with the at sign written out in parentheses. The affiliation is a university department, which tells you the context this was built in. What is missing is any version identifier. There is no release, no tag, no version constant documented and no way to tell whether the copy you cloned this morning is the copy from a hackathon two years ago or something edited since. The readme's own links point outward for everything procedural: the dependencies, the recurrent network background, the installation instructions for the backend, and the music itself. Nothing in the repository tells you which commit is the good one.

Editorial conclusion

deepjazz is worth reading as a compact example of a generative recurrent network applied to music, and not worth installing as a dependency. Take it if you want to see the whole pipeline in five files, because the preprocessing, the model, the grammar and the generator are all at the top level with nothing hidden. Expect to edit the preprocessing script before it will read your own MIDI, since the melody track is selected by hand and native support is described as a planned feature that never arrived. Install the dependency from its GitHub branch rather than expecting a release, and treat the output as a starting point rather than a tune. And note that only the code is Apache-licensed; the audio and images are not.

Frequently asked questions

What is deepjazz?

A project that generates jazz music using deep learning, built on Keras and Theano with a two-layer LSTM trained on a given MIDI file. The author states it was built in 36 hours at a hackathon, and generated music is published on a sound hosting page rather than in the repository.

How do I run deepjazz?

On CPU, run the generator with the number of epochs as its argument. On GPU, set environment variables for the execution mode, the device and the floating point type before the same command. The page notes that GPU execution is formally supported only for NVIDIA cards through the CUDA backend.

Can deepjazz read any MIDI file?

Not without editing the preprocessing script. The readme states that preprocess.py must be modified to work with other MIDI files, because the relevant melody part needs to be selected there, and that handling this natively is a planned feature.

What license is deepjazz under?

The code is licensed under the Apache License 2.0, while images and other media are copyrighted by the author. Preprocessing code was developed with permission from Evan Chow's jazzml, public examples from the framework documentation were referenced, and a notice file sits at the repository root.

Is deepjazz still being developed?

The readme opens by saying it is no longer being actively developed and may be refactored at some point in the future. The repository has no releases at all, and its last commit is dated 2026-03-19.

Official sources

  1. Issues
  2. jisungk/deepjazz on GitHub
  3. License: Apache-2.0
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/jisungk-deepjazz.svg)](https://hysenlabs.com/projects/jisungk-deepjazz)