{"id":16101636,"url":"https://github.com/dubreuia/visual_midi","last_synced_at":"2025-03-16T08:32:28.852Z","repository":{"id":43869051,"uuid":"199149131","full_name":"dubreuia/visual_midi","owner":"dubreuia","description":"Converts a pretty midi sequence to a bokeh plot.","archived":false,"fork":false,"pushed_at":"2022-02-15T08:43:14.000Z","size":312,"stargazers_count":61,"open_issues_count":7,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-27T05:55:57.618Z","etag":null,"topics":["bokeh-plot","midi","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dubreuia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-27T10:15:34.000Z","updated_at":"2025-02-01T23:46:46.000Z","dependencies_parsed_at":"2022-09-04T22:00:51.703Z","dependency_job_id":null,"html_url":"https://github.com/dubreuia/visual_midi","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dubreuia%2Fvisual_midi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dubreuia%2Fvisual_midi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dubreuia%2Fvisual_midi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dubreuia%2Fvisual_midi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dubreuia","download_url":"https://codeload.github.com/dubreuia/visual_midi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243016478,"owners_count":20222260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bokeh-plot","midi","python"],"created_at":"2024-10-09T18:50:31.136Z","updated_at":"2025-03-16T08:32:28.438Z","avatar_url":"https://github.com/dubreuia.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Visual MIDI\n\n[![PyPI package](./docs/badge-pypi-website.svg)](https://pypi.org/project/Visual-MIDI/1.1.0/)\n\nConverts a [pretty midi](https://craffel.github.io/pretty-midi/) sequence to a [bokeh plot](https://bokeh.pydata.org/en/latest/). See [https://pypi.org/project/Visual-MIDI/](https://pypi.org/project/Visual-MIDI/).\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"512px\" src=\"./docs/logo-dark.png\" alt=\"Visual MIDI Logo Dark\"/\u003e\n\u003c/p\u003e\n\n## Installation\n\n```bash\npip install visual_midi\n```\n\n## Compatibility\n\nMight work with older versions but wasn't tested:\n\n- Python 3 (\u003e= 3.6)\n- pretty_midi \u003e= 0.2.8\n- bokeh \u003e= 2.0.2\n\n## Usage\n\nUse the `Preset` object to customize the appearance (height, width, colors, etc.) of the plot, and the `Plotter` object to change the render view (number of bars to show, pitch range, etc.). The resulting plot still has all its bars (in this example, 16 bars), but the plot is \"zoomed in\" to the desired number of bars (int this example, 8 bas). You can still drag and zoom the plot.\n\n- `Plotter#save` - Saves the pretty midi object as a plot file (html) in the provided file\n- `Plotter#show` - Shows the pretty midi object as a plot file (html) in the browser\n- `Plotter#show_notebook` - Shows the pretty midi object as a plot file in the notebook\n\n### Python\n\nCan show a plot from a MIDI file on disk, or from any PrettyMIDI object, including coming from libraries such as Magenta (like [Magenta note-seq](https://github.com/magenta/note-seq)).\n\n```python\nfrom visual_midi import Plotter\nfrom visual_midi import Preset\nfrom pretty_midi import PrettyMIDI\n\n# Loading a file on disk using PrettyMidi, and show\npm = PrettyMIDI(\"docs/example-01.mid\")\nplotter = Plotter()\nplotter.show(pm, \"/tmp/example-01.html\")\n\n# Converting to PrettyMidi from another library, like Magenta note-seq\nimport magenta.music as mm\npm = mm.midi_io.note_sequence_to_pretty_midi(sequence)\nplotter = Plotter()\nplotter.show(pm, \"/tmp/example-02.html\")\n```\n\n![Example 01](docs/example-01.png)\n\n\n```python\nfrom visual_midi import Plotter\nfrom visual_midi import Preset\nfrom pretty_midi import PrettyMIDI\n\n# Using the `Preset` and `Plotter` to customize appearance (smaller plot)\npm = PrettyMIDI(\"docs/example-01.mid\")\npreset = Preset(plot_width=850)\nplotter = Plotter(preset, plot_max_length_bar=4)\nplotter.show(pm, \"/tmp/example-01.html\")\n```\n\n### Notebooks\n\nSee [example Jupyter notebook](./docs/example-01.ipynb):\n\n```python\nfrom visual_midi import Plotter\nfrom visual_midi import Preset\nfrom pretty_midi import PrettyMIDI\n\npreset = Preset(plot_width=850)\nplotter = Plotter(preset, plot_max_length_bar=4)\npm = PrettyMIDI(\"docs/example-01.mid\")\nplotter.show_notebook(pm)\n```\n\n![Example 01 - Notebook](docs/example-01-notebook.png)\n\n### Command line\n\n```bash\nvisual_midi \"midi_file_01.mid\" \"midi_file_02.mid\"\n```\n\n### Flags\n\nThe same flags can be used both in Python and on the command line.\n\n```bash\nvisual_midi -h\nusage: visual_midi [-h] [--qpm QPM]\n                   [--plot_pitch_range_start PLOT_PITCH_RANGE_START]\n                   [--plot_pitch_range_stop PLOT_PITCH_RANGE_STOP]\n                   [--plot_bar_range_start PLOT_BAR_RANGE_START]\n                   [--plot_bar_range_stop PLOT_BAR_RANGE_STOP]\n                   [--plot_max_length_bar PLOT_MAX_LENGTH_BAR]\n                   [--plot_title PLOT_TITLE]\n                   [--bar_fill_alphas BAR_FILL_ALPHAS] [--coloring COLORING]\n                   [--show_velocity SHOW_VELOCITY]\n                   [--midi_time_signature MIDI_TIME_SIGNATURE]\n                   [--live_reload LIVE_RELOAD] [--plot_width PLOT_WIDTH]\n                   [--plot_height PLOT_HEIGHT] [--row_height ROW_HEIGHT]\n                   [--show_bar SHOW_BAR] [--show_beat SHOW_BEAT]\n                   [--title_text_font_size TITLE_TEXT_FONT_SIZE]\n                   [--axis_label_text_font_size AXIS_LABEL_TEXT_FONT_SIZE]\n                   [--axis_x_major_tick_out AXIS_X_MAJOR_TICK_OUT]\n                   [--axis_y_major_tick_out AXIS_Y_MAJOR_TICK_OUT]\n                   [--label_y_axis_offset_x LABEL_Y_AXIS_OFFSET_X]\n                   [--label_y_axis_offset_y LABEL_Y_AXIS_OFFSET_Y]\n                   [--axis_y_label_standoff AXIS_Y_LABEL_STANDOFF]\n                   [--label_text_font_size LABEL_TEXT_FONT_SIZE]\n                   [--label_text_font_style LABEL_TEXT_FONT_STYLE]\n                   [--toolbar_location TOOLBAR_LOCATION]\n                   [--stop_live_reload_button STOP_LIVE_RELOAD_BUTTON]\n                   files [files ...]\n\npositional arguments:\n  files\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --qpm QPM\n  --plot_pitch_range_start PLOT_PITCH_RANGE_START\n  --plot_pitch_range_stop PLOT_PITCH_RANGE_STOP\n  --plot_bar_range_start PLOT_BAR_RANGE_START\n  --plot_bar_range_stop PLOT_BAR_RANGE_STOP\n  --plot_max_length_bar PLOT_MAX_LENGTH_BAR\n  --plot_title PLOT_TITLE\n  --bar_fill_alphas BAR_FILL_ALPHAS\n  --coloring COLORING\n  --show_velocity SHOW_VELOCITY\n  --midi_time_signature MIDI_TIME_SIGNATURE\n  --live_reload LIVE_RELOAD\n  --plot_width PLOT_WIDTH\n  --plot_height PLOT_HEIGHT\n  --row_height ROW_HEIGHT\n  --show_bar SHOW_BAR\n  --show_beat SHOW_BEAT\n  --title_text_font_size TITLE_TEXT_FONT_SIZE\n  --axis_label_text_font_size AXIS_LABEL_TEXT_FONT_SIZE\n  --axis_x_major_tick_out AXIS_X_MAJOR_TICK_OUT\n  --axis_y_major_tick_out AXIS_Y_MAJOR_TICK_OUT\n  --label_y_axis_offset_x LABEL_Y_AXIS_OFFSET_X\n  --label_y_axis_offset_y LABEL_Y_AXIS_OFFSET_Y\n  --axis_y_label_standoff AXIS_Y_LABEL_STANDOFF\n  --label_text_font_size LABEL_TEXT_FONT_SIZE\n  --label_text_font_style LABEL_TEXT_FONT_STYLE\n  --toolbar_location TOOLBAR_LOCATION\n  --stop_live_reload_button STOP_LIVE_RELOAD_BUTTON\n```\n\n## Contributing\n\n### Development\n\nInstalling dependencies with:\n\n```bash\npip install -r requirements.txt\n```\n\nThen modify the code and install Visual MIDI:\n\n```bash\n# Installs the library, dependencies, and command line scripts\npython setup.py install\n\n# Installs the python library (necessary for python imports)\npython setup.py install_lib\n```\n\n### Guidelines\n\nUse this [code style](config/visual-midi-code-style-intellij.xml).\n\n## TODO\n\nSee [TODO](TODO.md).\n\n## License\n\nSee [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdubreuia%2Fvisual_midi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdubreuia%2Fvisual_midi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdubreuia%2Fvisual_midi/lists"}