# mfctl Like kubectl but for your MicroFreak synth. ## Usage ### Live state editing - `mfctl get` dumps your live controls as a YAML file - `mfctl apply ` applies it to the live state The YAML has an optional metadata section and equally optional `apiVersion`/`kind` just for fun; `spec`, however, is mandatory. Here's a basic example: ```yaml metadata: name: MyAwesomePatch spec: oscillator: type: Modal decay: 30 filter: cutoffHz: 1000 resonance: 40 ``` `mfctl apply` translates this patch into sysex incantations that are specific to firmware v5 - hence `apiVersion: microfreak/v5` is the only acceptable one, and you might want to add it to the top. `mfctl get` does not read your current preset - it reads the live values; hence it won't tell you the preset name nor the sequence tracks (metadata will be empty), but the whole control panel is covered. ### Format conversion `mfctl` can also convert back and forth between YAML and .mbp (Arturia) formats - `mfctl import ` outputs YAML to stdout - `mfctl export ` outputs .mbp (Boost serialization format) to stdout ### Miscellaneous - `mfctl schema` dumps a JSON schema that you can use e.g. for autocompletion with [yaml-language-server](https://github.com/redhat-developer/yaml-language-server) - `mfctl validate ` validates the patch without applying it ## Acknowledgements [Elektroid](https://github.com/dagargo/elektroid/) is an excellent tool for preset/wavetable management. It uses a completely different set of sysex opcodes that deals with permanent storage. Its existence is why `mfctl` scope can stay deliberately small. [Ghidra](https://github.com/NationalSecurityAgency/ghidra), [Unicorn](https://github.com/unicorn-engine/unicorn/) and, for SysEx parser, also [angr](https://github.com/angr/angr) are the tools that were used to decipher the firmware - by LLMs of course, which have become amazing at this recently. ## License This project is MIT-licensed - just like the Plaits oscillator engines' code. If you want to express your gratitude, https://ko-fi.com/datyoma is the right address.