π User Manual β’ πΊ See it in action
Signls (pronounced signals) is a non-linear, generative midi sequencer designed for music composition and live performance. It's cross-platform (Linux, macOS et Windows) and it runs in the terminal (TUI).
It takes inspiration from Orca and Nodal.
Feel free to open an issue.
Prebuilt binaries are available for the following platforms:
| OS | Architectures |
|---|---|
| Linux | x86-64 (amd64), arm64 |
| macOS | Intel (amd64), Apple Silicon (arm64) |
| Windows | x86-64 (amd64) |
The Linux arm64 build covers the 64-bit Raspberry Pi OS (Raspberry Pi 3 and later).
On Linux or macOS, you can install the latest release with this script:
curl -sSL empr.cl/get/signls | bashThe script downloads the right binary for your system, installs it to ~/.local/bin and adds it to your PATH.
brew tap emprcl/tap
brew trust emprcl/tap
brew install signlsscoop bucket add emprcl https://github.com/emprcl/scoop-bucket
scoop install signlsDownload the last release for your platform.
Then:
# Extract files
mkdir -p signls && tar -zxvf signls_VERSION_PLATFORM.tar.gz -C signls
cd signls
# Run signls
./signlsYou'll need go 1.26.4 minimum. Although you should be able to build it for either linux, macOS or Windows, it has only been tested on linux.
# Linux
sudo apt-get install libasound2-dev
make GOLANG_OS=linux build
# macOS
make GOLANG_OS=darwin build
# Windows
make GOLANG_OS=windows build
# Raspberry Pi OS
sudo apt install libasound2-dev
make GOLANG_OS=linux GOLANG_ARCH=arm64 build# Run signls
./signls
# Display current version
./signls --versionHit ? to see all keybindings. esc to quit.
Signls stores its config.json and bank files in your user config directory:
| OS | Location |
|---|---|
| Linux / macOS | ~/.config/emprcl/signls/ (or $XDG_CONFIG_HOME/emprcl/signls/) |
| Windows | %AppData%\emprcl\signls\ |
You can override either with an explicit path using the --config and --bank flags.
Some companion apps that receive MIDI for testing Signls:
- Webmidi synths
- Enfer (github) works only on linux
- QSynth
Keys mapping is fully customizable. After running signls for the first time, a config.json is created in your config directory.
You can edit all the keys inside it.
You can select one of the default keyboard layouts available:
# QWERTY
./signls --keyboard qwerty
# AZERTY
./signls --keyboard azerty
# QWERTY MAC
./signls --keyboard qwerty-mac
# AZERTY MAC
./signls --keyboard azerty-macFor qwerty keyboards, here's the default mapping:
spaceplay or stoptabshow bank1...9add nodesββββmove cursorshift+ββββmultiple selection (or modify alt parameter mode in edit mode)ctrl+ββββmodify selected node direction (modify parameter or alt parameter value).text edit mode for selected parameterbackspaceremove selected nodes (or grid in bank)enteredit selected nodesmtoggle selected nodes muteMmute/unmute all selected nodes/trigger selected node-=modify tempo';modify root note":modify scalectrl+cxvcopy, cut, paste selectionctrl+zyundo, redoescapeexit parameter edit or bank selectionf2edit midi configurationf10fit grid to window?show helpctrl+qquit
macOS and some terminals reserve a few keys the default layout uses β ctrl+arrows (Mission Control / Spaces), alt+β/β (word navigation), and the f2/f10 function-key row. Here's the qwerty-mac mapping (the azerty-mac layout applies the same remaps over the azerty symbols):
spaceplay or stoptabshow bank1...9add nodesββββmove cursoralt+shift+ββββmultiple selection (or modify alt parameter mode in edit mode)shift+ββββmodify selected node direction (modify parameter or alt parameter value).text edit mode for selected parameterbackspaceremove selected nodes (or grid in bank)enteredit selected nodesmtoggle selected nodes muteMmute/unmute all selected nodes/trigger selected node-=modify tempo';modify root note":modify scalectrl+cxvcopy, cut, paste selectionctrl+zyundo, redoescapeexit parameter edit or bank selectioncedit midi configurationffit grid to window?show helpctrl+qquit
Signls ships with a few color themes. Pick one with the --theme flag (your choice is saved to config.json):
./signls --theme default
./signls --theme mono # black & white
./signls --theme pink # white & pinkYou can also customize the colors: add a palette block under theme in your config.json and override only the keys you care about β anything you leave out falls back to the selected preset.
{
"theme": {
"name": "default",
"palette": {
"cursor": "205",
"gridBackground": { "light": "255", "dark": "232" },
"nodes": { "bang": "9", "dice": "12" }
}
}
}Color values are ANSI codes ("0"β"255") or hex strings ("#ff0088"). Use a { "light": ..., "dark": ... } object for a color that should adapt to the terminal background. See the user manual for the full list of palette keys.
Each time you start Signls, a json file (default: default.json, in your config directory) containing 32 grid slots is loaded.
For selecting a different file, use the --bank flag (relative or absolute path):
./signls --bank my-grids.jsonEach time you change grid or quit the program, the current grid is saved to the file.
Signls uses a few awesome packages:
- gomidi/midi for all midi communication
- charmbracelet/bubbletea as the main TUI framework
- charmbracelet/lipgloss for making things beautiful
