1
0
Fork
You've already forked tweak
0
Tweak is a command line tool written in Go for detecting live patch changes (tweaks) in devices which emit MIDI CC messages, including NRPN (non-registered parameter numbers).
  • Go 100%
2026年06月10日 20:01:39 +02:00
examples/devices v0.12.0 2026年06月10日 20:01:39 +02:00
pkg v0.12.0 2026年06月10日 20:01:39 +02:00
test v0.12.0 2026年06月10日 20:01:39 +02:00
tui v0.12.0 2026年06月10日 20:01:39 +02:00
.gitignore v0.6.3 2026年05月22日 08:32:22 +02:00
.goreleaser.yaml goreleaser no testing 2026年05月22日 08:45:18 +02:00
ASCII_ART.txt v0.11.0 2026年06月06日 10:45:29 +02:00
CHANGELOG.md v0.12.0 2026年06月10日 20:01:39 +02:00
demo.tape 0.8.1 2026年05月24日 14:34:21 +02:00
device_schema.yaml v0.12.0 2026年06月10日 20:01:39 +02:00
go.mod v0.11.0 2026年06月06日 10:45:29 +02:00
go.sum v0.11.0 2026年06月06日 10:45:29 +02:00
LICENSE migration 2026年05月15日 09:51:33 +02:00
main.go v0.11.0 2026年06月06日 10:45:29 +02:00
README.md Update README.md 2026年05月24日 14:56:51 +02:00
VERSION v0.12.0 2026年06月10日 20:01:39 +02:00

Tweak

Welcome to VHS

Tweak is a command line tool written in Go for detecting live patch changes (tweaks) in devices which emit MIDI CC messages, including NRPN (non-registered parameter numbers).

Currently only Darwin (MacOS) AMD64 and ARM64 prebuilt binaries are being released. If you are a Linux or Windows user you can clone this repository and build your own binary running go install.

Open source, with MIT license, community-driven. Feel free to contribute or fork this repository. Any contribution for implementing new devices or features will be highly welcome.

Special devices

Any device which emits MIDI CC data is supported by Tweak, but the following devices are considered "special", as their parameter mapping are implemented in Tweak and parameter changes will show up with descriptive parameter names and values:

  • Novation Peak

Motivation

While doing live improvisational synth sessions for EDEMLPUSC I came across the problem of finding an interesting idea but not being able to fully replicate it in future sessions, as any small forgotten configuration may have a huge impact in the final sound.

For solving my personal problem I created a prototype of what would suddenly become this CLT, just for my own peronsal use with the Novation Peak.

Having spent days fine designing the program and fine tuning the logic for processing the MIDI CC data, I realized it could be equally helpful for any digital synthesizer hobbyist or professional who wants to replicate to some degree their synth sessions without the need to manually write down what they are doing at the moment.

Goal

The ultimate goal of this project is to provide a fully open source and community-driven standardized software for capturing live MIDI CC tweaks for all MIDI devices.

The biggest difficulty for achieving this is that for implementing more devices in this tool, it's not only about finding on the internet their MIDI CC specifications, as some important details may be missed which only can be detected while testing them. Therefore it's necessary to phisically test the implementation with a physical unit, and contributions from people owning different models of devices is needed.

How it works

Tweak listens to MIDI CC messages emitted to a particular port and processes them in real time as defined in the parameters specification of the particular device, printing this information out in the terminal and also writing it down in a CSV file. The specific way in which this is done depends depends on the processing mode, these are the three currently implemented:

  • Capture: Once a parameter is detected to change, instead of printing out the value immediately, it waits until enough time have passed since the last change in the parameter. This is useful for removing a lot of noisy changes, like when you are rotating some knob continuously, as this means probably tens or hundreds of different irrelevant messages, and only the last value will be printed out.
  • Live: All the messages will be processed and printed out. This is good when you want the highest level of detail on what you are doing, although many of these messages will be irrelevant. But be aware that this may generate very big session files.
  • Raw: Bypasses the parameters specification of the device, printing out the raw CC / NRPN values. This was mostly implemented for debugging purposes while developing the processing logic and for implementing devices.

How to implement a device

To implement a new device a new package needs to be created under the devices/ directory. The only requirement is that it exports a variable of Device type and it needs to be added to the Devices array in devices/devices.go.