A Tenori-on inspired multi-track grid sequencer for Linux with a touch-first UI, SoundFont instruments, MIDI output, and fullscreen support. Built for square displays but works on any screen.
SqrSeq is a 16-row step sequencer where you tap cells on a grid to place notes. A playhead sweeps left to right, playing each column's active notes in a loop. Notes use a pentatonic minor scale so everything sounds good together — no music theory required.
Think of it as a software clone of the Yamaha Tenori-on, running on a Linux box with a touchscreen.
- 16 tracks — each with its own grid, instrument, volume, and MIDI channel
- Unlimited sequence length — add pages of 16 steps with the
+button, no limit - 32 GM instruments — piano, strings, bells, pads, guitar, flute, synths, and more
- SoundFont support — use any
.sf2file, including MT-32 and Sound Canvas soundfonts - External MIDI output — send notes to USB MIDI devices, switchable between internal, external, or both
- Touch-first UI — slide-out menu, track tabs, page controls, no keyboard needed
- Volume slider with real-time MIDI CC control per track
- 9 pattern slots — save/load all tracks, pages, BPM, instruments, and volumes
- Fullscreen — auto-adapts to any resolution, optimized for square displays (720×720)
- Adjustable tempo — 40 to 200 BPM
- Ghost notes — dim dots show other tracks' notes on the current grid
- In-app screenshots — captures directly from pygame, works on DRM/KMS displays
sudo apt install fluidsynth fluid-soundfont-gm python3-pygame python3-numpy
pip install pyfluidsynth --break-system-packagespython3 sqrseq.pyWith a custom SoundFont:
python3 sqrseq.py /path/to/soundfont.sf2┌─────────────────────────────────────────┐
│ ☰ Instrument ▶ Play 120 bpm │ Topbar
│ < │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ > │ Track tabs (tap < > for 9-16)
├───┬─────────────────────────────────┬───┤
│ │ │ │
│ < │ 16×16 Grid │ > │ Page nav
│ │ │ │
│ - │ │ + │ Remove/add pages
│ │ │ │
├───┴─────────────────────────────────┴───┤
│ ● ● ● ● │ Beat markers + page indicator
└─────────────────────────────────────────┘
Everything is accessible via the touch UI:
| Element | Action |
|---|---|
| Grid | Tap cells to toggle notes on/off |
| Play/Pause | Centered button in top bar |
| Track tabs | Tap 1-16 to switch tracks (< > to page) |
| + / - | Add or remove 16-step pages |
| < / > | Navigate between pages |
| Hamburger menu | Top-left — opens settings panel |
| Tempo | −5 / +5 buttons in menu |
| Volume | Draggable slider in menu (per track) |
| Instrument | Tap to expand list, tap to select (per track) |
| MIDI output | Cycle mode: Internal / External / Both |
| Pattern slots | 1–9 numbered slots, Save/Load buttons |
| Clear | Clears current track (all pages) |
| Screenshot | Saves PNG to home directory |
| Exit | Closes the app |
SqrSeq supports 16 independent tracks, each mapped to a MIDI channel (0-15). Every track has its own grid, instrument, and volume. The topbar shows 8 track tabs at a time — use the arrow buttons to flip between tracks 1-8 and 9-16. Active tracks are color-coded, and tracks with notes are dimly highlighted.
Ghost notes from other tracks appear as small dots on the grid so you can see the full arrangement while editing a single track.
The grid starts with one 16-step page. Tap + on the right side to add more pages. The playhead sweeps through all pages in order before looping. Page navigation is manual — the display stays on the page you're editing while playback continues across all pages.
SqrSeq can send MIDI to external USB devices. In the menu under MIDI Output:
- Internal — FluidSynth only (default)
- External — USB MIDI device only
- Both — plays through FluidSynth and external device simultaneously
Tap a device in the list to connect. Use "Rescan MIDI" if you plug in a device after launch. FluidSynth virtual ports and MIDI Through are filtered from the list.
Patterns are saved as JSON in ~/.sqrseq/:
~/.sqrseq/pattern_1.json
~/.sqrseq/pattern_2.json
...
Each file stores all 16 tracks (grid, instrument, volume), BPM, and page count. Backward compatible with older single-track saves.
SqrSeq auto-detects GM SoundFonts from common system paths. You can also use:
- FluidR3_GM (installed via
fluid-soundfont-gm) — good general purpose - MT-32 SoundFonts — for that classic Roland LA synth sound
- SC-55 SoundFonts — for Sound Canvas GM sounds
- Any
.sf2file — pass it as a command line argument
- 16 independent tracks with per-track instrument, volume, and MIDI channel
- Track tabs in topbar with page flip (1-8 / 9-16)
- Unlimited sequence length via addable 16-step pages
- Side-mounted page controls (< > + -)
- Ghost notes showing other tracks' activity
- External MIDI output (Internal / External / Both)
- MIDI device scanning with virtual port filtering
- In-app screenshot button
- Touchscreen-only UI with slide-out hamburger menu
- Fullscreen with dynamic layout
- Volume slider with MIDI CC control
- Collapsible instrument submenu
- Tap vs drag detection
- 9 pattern save/load slots
- 16×16 grid sequencer
- 32 GM instruments via FluidSynth
- Pentatonic minor scale
- Keyboard controls
MIT


