Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Module for Mixxx MIDI mapping automatic generation

Project Description

This project contains some python tools to automate Mixxx MIDI mapping file management. With this tool you can write well-formed XML .midi.xml files from simple text configuration files, possibly mapping multiple channels and decks with one configuration line.

The script does also create a stub .js template file for MIDI scripts.

This script was used to create controller mappings for CDJ-2000, all input files in this project are in data directory. Only manual changes were to finish the generated .js stub functions.

Example command used to create this mapping was:

mixxx-create-midimap –midi-id=’PIONEER CDJ 2000’ –name=’Pioneer CDJ-2000’
–prefix=PioneerCDJ2000 –decks=2 –midi-channels=1,2 –script-template-directory=/tmp –author=”Ilkka Tuohela” – -D “Pioneer CDJ-2000 configuration for 2 decks on midi channels 1 and 2” data/cdj.controls


See files in data directory for examples of control and output configuration files.


The script expects two configuration files on command line: - first argument contains configurations for controls - second argument contains configurations for outputs

Invalid lines in files are ignored, so we can keep all fields in there even if not mapped.

Control files have following syntax: Group:Key <midicode> <hexvalue> {options} # comment

  • If Group is ‘Channel’, you can automatically create configuration for both decks with flags -d2 and -c1,2 (MIDI channels 1 and 2) to the script
  • Key must be valid command in mixxx, unless scripts are created, in which case it needs to be valid js function name
  • midicode is a variable defined in mixxxmap.midi_constants, see pydoc mixxxmap.midi_constants. This is combined with MIDI channel to create mixxx config ‘status’ key
  • hexvalue is the MIDI code value, 0x00 to 0x7f
  • options can contain any of the valid control option names,separtated by comma. You can list supported values with following command: python -c ‘from mixxxmap.midimap import CONTROL_OPTION_NAMES;print CONTROL_OPTION_NAMES’
  • comment is just a comment string, which is added to the .midi.xml file for the control if defined.

If the options contain ‘Script-Binding’, the script function name is parsed from the ‘key’ field. In this case, ‘key’ doesn’t need to be valid mixxx key.

Output files have following syntax: Group:Key <midicode> <hexvalue> <on> <off> Similar to controls, with additional required arguments for on and off values. If both on and off are not given, values 0.0 and 1.0 are used.

Release History

This version
History Node


History Node


Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting