{"id":18936870,"url":"https://github.com/moustacheful/midori","last_synced_at":"2025-09-05T06:32:00.591Z","repository":{"id":213876182,"uuid":"594578935","full_name":"moustacheful/midori","owner":"moustacheful","description":"A midi transform/mapping tool","archived":false,"fork":false,"pushed_at":"2023-12-23T20:16:15.000Z","size":149,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T01:03:45.316Z","etag":null,"topics":["cli","midi","midi-events","transformation"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/moustacheful.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-29T01:09:08.000Z","updated_at":"2024-07-29T21:46:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"df3468e2-e37c-4048-b899-1ea61543111c","html_url":"https://github.com/moustacheful/midori","commit_stats":null,"previous_names":["moustacheful/midori"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/moustacheful/midori","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moustacheful%2Fmidori","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moustacheful%2Fmidori/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moustacheful%2Fmidori/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moustacheful%2Fmidori/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moustacheful","download_url":"https://codeload.github.com/moustacheful/midori/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moustacheful%2Fmidori/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273722731,"owners_count":25156300,"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","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cli","midi","midi-events","transformation"],"created_at":"2024-11-08T12:09:07.005Z","updated_at":"2025-09-05T06:32:00.564Z","avatar_url":"https://github.com/moustacheful.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# midori\n\nName extremely temporary. But it's something on Mi-Do... something?\n\n## What\n\nDo you think music was missing a certain something, maybe bugs? well boy do I have the thing for you.\nA MIDI router/mapper/filter/transform etc for all your MIDI needs.\n\nFor instance, with the following YAML configuration file will:\n\n- Take all note events (note on and off)\n- Arpeggiate them on 1/8th notes\n- Take each of those note on events and distribute them over channels, 2,3,4\n- Output the notes on Electron Model Cycles\n\n```yaml\ninput_devices:\n  op1: \"OP-1\"\n\noutput_devices:\n  emc: \"Elektron Model:Cycles\"\n\npipelines:\n  - transforms:\n      # Only take note events\n      - type: Filter\n        event_types:\n          - NoteOff\n          - NoteOn\n\n      - type: Arpeggio\n        note_duration: 200\n        subdivision: 0.125 # 1/8th notes\n        direction: Forward\n\n      - type: Distribute\n        # Each note will be distributed in order among these channels\n        between: [2, 3, 4]\n\n      - type: Output\n        output_device: emc\n```\n\n## Why\n\nWhile playing with some of my devices I found it lacking or too difficult on how I could route midi signals from one place to another. This only solves the lacking part, not too sure about the difficulty.\n\nStill unsure whether this is useful, but at least it was fun to code.\n\n## Caveats\n\nBesides general wonkiness, this utility currently has no way of taking nor emitting clock events, and as such the tempo is currently fixed.\n\n## Installation\n\nNo installation methods yet. For now, I'd suggest cloning, then doing `cargo run`\n\n## Commands\n\n### `start`\n\nStarts the mapper with the given configuration\n\n```sh\ncargo run -- start --config-file=./path/to/your/file.yaml\n```\n\n### `devices`\n\nPrints a list of the available input/output devices.\nYou use those names in the configuration file.\n\n## Docs\n\nNot yet that's for sure. But here's a list of the available transforms. Some more complete than others. As a hint: you can also use the repo's `schema.json` so you get some auto complete hints.\n\n### `pipelines`\n\nThese are transformation pipelines. Events come in, are processed and then output.\nPipelines contain `transforms`, which will do things with the midi events coming in. Current list of `transforms`:\n\n- `Arpeggio` can arpeggiate the current chord\n- `Distribute` will distribute notes between multiple channels (can be useful to make monophonic synths with multiple channels into a polyphonic-ish)\n- `Filter` filters by `event_types`, `channel`, or `devices`.\n- `Inspect` prints out any events coming into this transform. Useful to debug.\n- `Map` maps an incoming event to a different `channel` or `cc`.\n- `Mirror` will duplicate incoming events among the given `channels`\n- `Output` outputs all events to a specific output device. This should be the last transform of every pipeline.\n- `Wasm` allows you to use a wasm module as a transform. Look into `examples/wasm` for an example with AssemblyScript\n- `Mirror` will mirror all incoming events to all the designated `channels`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoustacheful%2Fmidori","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoustacheful%2Fmidori","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoustacheful%2Fmidori/lists"}