Show HN: Pianoterm – Run shell commands from your Piano. A Linux CLI tool

A little weekend project, made so I can pause/play/rewind directly on the piano, when learning a song by ear.

github.com

61 points

vustagc

2 days ago


25 comments

vunderba 2 days ago

Nice job. Feels like there's a bit of misunderstanding of what this project is. It has nothing to do with audio - it's purely a means of mapping MIDI to shell commands.

There was (still is) a very popular program called BOME Midi Translator that did something similar - think of it like AutoHotKey but specifically for midi.

Back when I made heavy use of Kontakt libraries I got frustrated at the lack of an easy way to audition the patches (of which there could be hundreds on a single sampler). To get around it, I created a Bome script so when I pressed an unused button on my midi controller it would trigger a mouse click to advance to the next patch in my DAW and then send a note-on / note-off for C4 for half a second.

Made previewing the sounds much easier.

  • snthpy 2 days ago

    Thanks. So you essentially get an 88 key macro board in your lounge?

    • vunderba 2 days ago

      Exactly. Instead of buying something like an Elgato Deck, you can repurpose (or buy really cheap) midi keyboards/controllers and map them through a Midi->Script translators and achieve the same result.

Arkanosis 2 days ago

That's nice!

That may not seem like an obvious use-case when only thinking about a piano, but since it's mapping MIDI keys to commands, I guess it should be able — or at least no very far from being able — to map ergonomic MIDI controllers to actions that are not as ergonomic with the usual keyboard / mouse / trackball / touchpad most people use.

I wrote what I believe is a similar tool but with completely different goals initially: https://github.com/Arkanosis/smhkd ; I use it with a cheap MIDI controller (namely the KORG nanoKONTROL2) and was considering using another one with motorized faders (namely the Icon Platform M).

MIDI controllers are great for all kinds of non-musical things like: - setting the volume / balance / solo / mute for speakers / multiple headsets and mixing multiple applications (eg. using pactl); - setting the zoom level / brightness for camera / webcam (eg. using v4l2-ctl) ; - setting the source / brightness for monitors (eg. using ddcutil)…

  • vustagc 2 days ago

    I see I'm not the first to have this idea haha. I suppose you could use additional midi controllers as extra "function" keys, for things like volume control, brightness, etc.. Could be useful especially if using smaller keyboards without a numpad or a function row.

  • vunderba 2 days ago

    Same. In the past I've mapped cheap midi controllers with endless encoders over to act as a "scrubbers" when doing video editing.

sigseg1v 2 days ago

This is one of those projects that would be 10x better with a video demonstration!

recognity 2 days ago

Love this. Using a piano as a macro board is the kind of creative dev tooling I wish I saw more of.

Have you considered letting users define their own key mappings in a YAML config? That way people could customize it for their specific DAW workflow without touching the code.

  • vustagc 2 days ago

    You can define the mappings in a plain text (key = command) config file. No need to touch the code.

ctoth 2 days ago

How about chords? Melodies which are paths? Passwords? Lots of great potential here!

smokel 2 days ago

Ooh, let's spend next weekend doing this with my acoustic piano!

yarivk 2 days ago

Very interesting idea.

Mapping MIDI keys to shell commands opens some fun automation possibilities. Nice and clean project.

Thanks for sharing it.

gchamonlive 2 days ago

This reminds me of the Symphonic which is featured in the show Halt and Catch Fire

matthew_hre 2 days ago

My Claude Code sessions are about to sound like the Breath of the Wild soundtrack

runamuck 2 days ago

So I can run shell from a Miracle Piano connected to a NES running Linux?

shrubble 2 days ago

I thought you might have “composable” pipelines!