neato noiz!
and big PROPS for Soul Coughing!
i saw them in a small club here in H-town a long time ago.

get onto the BUS…that will take you back to Beelzebub.


This is lovely. I’m having so much fun!

Some thoughts after a night of jamming with this.

It would be great if there would be variables for the encoders and the buttons. If I can dream, even MIDI mappable variables.

Navigating the params page is a bit tricky when there’s a lot of samples. A jump shortcut from a sample to the next one would be nice. I thought shift + up/down did this but apparently it’s for sample selection.

If I have a pattern length of 17, and at 17 I have a (jmp 1), the playhead appears to start from row 1, but the first sample that gets played is from 2, and not from 1. So a jump to 1 is practically jump to 2. Is this how the logic should go?

I’ll definitely try hacking on this at some point myself. I see this as a beginning of a beautiful friendship. :heart_eyes:

1 Like

this should work across all params page

hmm, try (jmp 0)?

need to take a look, havent really used nisp myself :upside_down_face:


@its_your_bedtime What is the best way to retrigger / note repeat the same cell for stuttering? Ideally want to retrigger and random the stutter and hold a cell for x amount of time.

Here’s some Nisp

1 Like

Hey Y’all. I am having trouble understanding how to work this script. I just picked up my norns again after a break and saw this exciting looking addition to the library. I have been toying around and cant seem to get the hang of it. Im wondering if maybe Im missing some prerequisite knowledge here. Im pretty competent with programming and music tech in general but im finding myself stumped .

I have gotten sound out of it but its seems like Im shooting in the dark and it doesnt sound anything how i would expect ( not always a bad thing!). Essentially I cant seem to figure what I need to enter into the different cells. I have a solid understanding of the commands but its the sample part that has me scratching my head. Many thanks.

same here

any help would be greatly appreciated

Well it I think I figured out what my issues was. I switched to Orca to do something else and none of my samples were playing at all. I updated Timber and now Nisp is triggering samples as I would expect! Voila!

Hope this helps a little. I am not sure how well you know trackers so will give you a detailed breakdown to cover the basics.

First goto the parameters section of Nisp and load a folder of 1 shots drum hits. After that go back to the main program.

There are 2 main pages to Nisp - the ~ key flips between them. 1 page is a blank black screen with command line. The other page is a blank black screen that looks like an excel spreadsheet.

Make sure you are on the page with the excel grid. Move around the grid with the arrow keys.

shift + ctrl start / stop playback
So start the playhead going - default is 16 steps.

There’s 4 tracks columns running left to right. And the sequence runs top to bottom.
Each track step contains 3 cells

Cell 1 is the sample number
Cell 2 is pitch
Cell 3 is for typing code script - a “parameter lock”

So Cell 1 you can play a sample either by hand entering a sample number in the 1st block and / or writing code for that step via the 3rd cell.

Cell 2 is pitch but you can leave blank and it will default to the sample pitch. You can type a number here but you can also use note+octave for pitch, eg c4

Cell 3 can store a script. So goto the top left column, row 1, 3rd cell to the right. Place a cursor on it and press Enter to open text editor. Look as this editor as a parameter lock for that step. This is where you type in some code.

Type this :
(sample (rnd 0 20))
Shift+Enter to save (it’s important to do this or code will not be accepted and you will wonder why your script didn’t work)
Esc to close back to the excel screen.

You will now see a little star * in that block back on the excel page, that indicates it’s got extra code inside.

Every time the playhead passes that block it will randomly play a sample from 0 to 20.

That little star of code you can now copy/paste to any of the 4 tracks in the excel screen.

ctrl + c / v copy / paste

So you have an editor per step but you also have another editor - global master editor called “repl”. It’s a blank black page with a command line.

To get to the global editor.

~ open / close repl

Open repl

Change the global tempo type :

(bpm 80)
(bpm 220)

Change the pattern length from default 16 to 4 steps. Max of 100 steps - 0 - 99.
Patterns start at 0 not 1, so the length will be 3.

(length 3)

If you ever see the playheads running out of sync with the other channels

type :


From this live coding “repl” window you can do lots of global things like save and load patterns, mute tracks etc

If you want to mute tracks you can also do it via a short cut

shift + 1
this will mute track 1

Also remember samples start at 0 not 1.

If you want to make some polyrhythms, set each track length to different numbers using row one, cell 3 script of each track

Eg in Track 1, Row 1, Cell 3 - press enter, type :

(length 3)
Shift +Enter

Eg in Track 2, Row 1, Cell 3 - press enter, type :

(length 5)
Shift +Enter

If you want a random sequence length from 0 to 4.

(length (rnd 0 4))

With a random bpm from 80 to 200

(bpm (rnd 80 200))

and play a random note each time

(note (rnd 20 80))

All this can go together in the same script / per step.
Check the other parameters for messing with samples like scrubbing longer samples by randomly changing the start time with a step length of 1 :

(length 1)
(pos (rnd 1 99))

or playing with the filter resonance. Once you start copying and pasting these script sequences around the excel sheet it can get quite complex. Especially if you start using the combinations of logic / math commands and start calling saved patterns from cells.

Hope that helps


Thanks Jason!!! Can’t wait to get started! Helped eliminate polyend GAS in record time!!


Nisp looks basic and primitive but is quite powerful, it does some things the polyend can’t do via the scripting, which makes it unique for a tracker. Because I don’t use trackers full time, I couldn’t justify getting the polyend, this fills the itch especially if you just want to use samples and play about and get a feel of how trackers work. I can always use renoise.

The obvious thing missing from Nisp Is there is no midi out / i2c. That would be super useful for connecting it up to other gear. You could do a lot of interesting stuff with Midi and CC commands per step to an outboard synth / module.

If Polyend ever made a similar box, but with Hundred Rabbits Orca firmware on it, then that would be a game changer.


Tracking is my main sequencing method and the Polyend Tracker is my go to right now, which I ADORE. But it is much more of a composing and sequencing device, while Nisp is an exploratory sequencing mangling machine that takes much of its surface formalities from the tracker school of sequencing.

Nisp is a totally bonkers, totally rad tracker that is in a sense VERY different from the Tracker


Been eyeing Nisp for a while and finally diving in this weekend. Dipped my toe in a bit after work tonight… not as scary as I thought it would be at first.

Now to try and get some patern loading working.

    (to (mess-with this))
    (once (assembled-p (my norns-shield)))))

I already have my first PR planned (lol i don’t even have norns yet): replace the asterisk * with a lambda λ.

        (norns (and encoders keys))
        (midi device)))))
1 Like

A valuable contribution to wellbeing!

1 Like

Just wanted to say I just spent an hour noodling with this. I really like it!

1 Like

I’m skimming the sourcecode of Nisp, and wondering how meaningful would it be to extend it to have MIDI output? It would surely be fun tracker experience with notes, but I am not sure where would the parameters like strtch, ctf, m-sus etc. go. To an arbitrary array of MIDI cc, in which case the semantics would be super confusing, to some MIDI standard cc values based on a judgement call what’s what. Or nowhere and just focus on triggering notes? Also I am not sure when to release a note :thinking: :thought_balloon: :notes:

I guess I would start from NISP/tracker.lua at 463acbb1ab6a9f7cfddb0cc0f1e0b455a497335f · itsyourbedtime/NISP · GitHub to push some note_ons to a MIDI device, and build some norns parameters to select MIDI device and map to Nisp tracks to MIDI channels.

PS. messing with Nisp as it is is loads of fun!


What I would personally do is at the beginning just add separate inbuilt fns to output midi and then based on that users could easily develop their own.
So for me basic functionality would be:

  • note on
  • note off
  • midi cc

About releasing note I would personally allow users to both send note offs explicitly and alternatively allow optional duration argument to note on which could then reuse inbuilt Norns clock (or NISP one - don’t know if NISP uses something custom) to send note off n steps later.

1 Like

hmm getting a load fail error when i try to run nisp. i’m in the latest update for both norns and the script

You might want to look at this post and the thread it’s in (if you’ve not already seen it) as there were some issues with the latest update that have got a hotfix available in the short term:

1 Like