Home | ER-101 | ER-102 | ER-301 | Wiki | Contact

Grid Ops Base Controller for ER-301


This started in the controllers thread but I didn’t want to get too deep into one controller in a more general thread,so starting a new topic. This is my first attempt at creating a monome Teletype grid ops “base” controller for the ER-301. In a way, this Teletype script almost seems too simple to bother sharing, but I really wanted it to be more of a discussion starter.

The idea here is to keep it simple, and have a baseline scene to serve as a starting point for an ER-301 patch. And leave plenty of room in the scripts for further customization. IE - it doesn’t do anything super fancy.

This is built for grid 128. There are 6 faders in the top 6 rows with max range and precision. They correspond to SC.CV 1-6.

The bottom starts with 8 buttons for sending triggers on the fly: SC.TR 1-8. The next 4 buttons are latching and send SC.TR.TOG commands. SC.TR 9-12. Those are for turning VCAs on/off, engaging “punch” buttons on recorders, etc.

The remaining for buttons are for additional pages, with this being page 1, and the rest being blank. Finally, metro is sending a clock to SC.TR 100. The tempo in BPM is stored in Teletype T variable (so you can change tempo easily with grid integration mode). Or, more visually:

Here is the script. You can put it on the root of a usb and rename to ttXX.txt where XX is the number of the scene you want to recall it to. It will overwrite what’s stored in the Teletype’s memory for that scene.

ER301 Base Controller.zip (485 Bytes)

So, what do you think of this? Are there some things you’d change? What and why? Would you have done something totally different? I’m sure we might all have some different prefs, and of course the beauty of this is that you can customize it the way you want. I’m just looking to gather ideas to maybe improve this.

Finally, here’s the script in text form for easy viewing



X $

L 1 4: G.GRP.EN I 0






SC.TR.P 100

G.GFX 1 1 0 0 16 1 4 224 2 1 6
G.GBX 1 1 0 7 1 1 0 4 1 8 1
G.GBX 1 9 8 7 1 1 1 2 1 4 1
G.GBX 10 13 12 7 1 2 1 4 3 4 1
G.BTN.PR 13 1; T 120

Interface modules for the ER-301?

Thanks for this.

I’ve got so many cool monome + 301 things to try post vacation…


So to use this, you have a teletype, a grids and a 301? Grids patched to teletype by usb and teletype to 301 by internal cable?


Yes, that’s right.


@joe this looks great. I am trying to catch up on the grid ops to implement something like this and this will be my starting point. I had however been resisting doing the i2c mod on the 301 but am realising I just have to replace my solder iron… So I can assign the @scanner_darkly’s generic grid controller to another page? Does it need scripting seperately? Sorry for basic question I am conceptually working all of this out but am getting limited hands on time because of sick family etc etc
And given the grid control page only takes half of the 128 grid, could you put a little 8 step trigger sequencer next to it? What I’m thinking is having a number of scripts manually triggered to the stack and having sequences clearing the stack so that the scripts are quantized.


By scanner_darkly’s generic grid controller, I think you mean grid control mode. That’s actually available for 'free" whenever you have the grid connected to the Teletype, regardless of what scene you’re using or even an empty scene. You don’t have to code a thing. You just press the button on the front panel of the Teletype and grid control overlays the right half of a grid 128 - you can still see whatever part of your scene is on the left. Press the button again and grid control goes back into hiding. It’s super sweet.

There’s plenty of room in this script to add a trigger sequencer. You could prob add multiple trigger sequencers. It’s actually a pretty good thought to include in a “base” ER-301 control scene, really… :thinking: I’ve been going back and forth on putting one in here vs. leaving more script space free…


as per the previous discussion, i did a similar scene earlier this week, so i might as well share it.
While trying to keep it generic it was actually made thinking of a future feedback and performance patch i have in mind.
I implemented pages and switching between them (using groups this is super simple).
Here it is: generic_grid_tt_301.zip (125.7 KB) (scene + a pdf documentation).
Full text:

V 0.1.0







G.GRP.EN 0 1

G.FDX 40 0 0 14 1 4 9999 1 1 8
G.DIM 2; G.KEY 15 7 1


G.GBX 0 241 15 0 1 1 1 4 7 1 8
G.GFX 1 1 0 0 1 8 5 255 1 14 1
G.GBX 3 30 5 0 1 1 0 4 1 6 3
G.GBX 3 48 5 5 1 1 1 6 1 6 3
$ 8

I did not do a lot of teletype stuff so this might be optimizable. I find it interesting how similar ideas can be made in different ways :slight_smile:

As for how this scene will evolve, it will depend on my subsequent patch.
I’d like to keep room in the tt scene for some logic / randomness so the final interface will probably end up all tangled and not as “one page per context” as one might hope.


Hi Joe! This might be basic but could you explain what the X $ lines are doing? Only getting my teletype next week but been trying to learn the syntax (as much as possible!).


Looking forward to checking this out!!

Not much. :slight_smile: It is setting the variable X equal to the last script that was run. It was in there for debugging purposes and should be removed to free up X.


Have only looked at the PDF so far but I think I like yours better. :slight_smile: Seems to have a lot more controls on there for not much more code.


Ah yeah grid control mode. I think that’s been some of the confusion plus only getting to read up for a few minutes here and there. Great to hear it works without scripts!!
My thoughts were to have a 3-4 scripts run off a simple 8 step sequencer basically running a patch and then have more complicated variants manually triggered in grid control mode as a meta control for a performative patch. Then also have a bunch of faders and manual gates to control the 301.
Anyway thanks again, your base controller is the perfect start!




Thanks for clarifying!


thank you, that’s great :slight_smile:


So again, thanks for sharing this! Well done! I tried it out and I had some questions/thoughts. Please don’t take this as any kind of criticism. I really like what you’ve done here, the code looks tight, and the difference between these two scenes we made leads to exactly the kind of discussion I was hoping to have here as I scratch my head about what would make a good “general purpose” ER-301 controller template.

  1. One thing I found myself wanting to do was fire one of the manual triggers while adjusting a fader. But they are on different pages.

  2. Do you think you’ll make use of that many buttons on page 3? For me, my short term memory probably isn’t good enough to remember what that many of them map to. Guess you see what I’m getting at here. This is why I went the route of fewer objects, but consolidated onto one page.

  3. Do you find the faders on page 1 have enough resolution for the things you’d want to do with them? I know there’s another longer set of faders on page 4. I was also tempted to make them vertical to fit a few more in. But on my template with the row of buttons on the bottom, that would really only leave room for them to be 5 tall (factoring in the inc/dec buttons at each end). So the resolution would only be about 80 steps. I just haven’t used it enough yet to figure out if that’s enough resolution for a general purpose fader for me or not.

  4. I like how you’ve consolidated all of the i2c actions into Script 1. In my (rather limited) Teletype programming experience so far, I can’t decide which is the more scarce resource - script lines or variables… I would be tempted here to use a one more script so that you didn’t have to use the IF statements, and therefore the A-D vars to make things fit on a line. But it is a REALLY tough call. I guess it all depends what patch specific stuff you might add on later and if you needed the variables. :thinking:

Edit: just another observation that neither of the scenes we’ve made take advantage of the patterns for storage, or the grid control mode, which basically lets you do a lot without having to tie up script lines. The whole concept is a really interesting challenge to me. :slight_smile:


with the addition of the grid control mode’s vars edit page, I feel like it’s gonna be useful to free those up for variable (in like, a performance context) behavior. There’s a section in the teletype docs advanced section with this suggestion too. That being said, whatever works! Excited to try these out. I did a performance with the grid control mode a couple days ago and it was a ton of fun. Excited to be able to control the er-301 from it as well :slight_smile:


I began to build a patch using my scene as a controller today, so i can bring some answers to your questions.

  1. that was one of the first things i needed. So on page 3 i moved all buttons to the left and added 6 vertical faders.

  2. It’s probably a bit too much buttons, but they are “free” in terms of code length, so i figured put them here and see if i end up using them. The idea behind this was also that each column of 2x3 buttons maps to the same parameters of similar units (for example, triggers to adsr, looper reset; latches to looper engage/punch), so memory is less a problem.

  3. I did not use the faders of page 1, because of those added on page 3 (^^’). To control feedback in a looper, the resolution (96 steps here) seemed ok for me.
    The grid faders are great to have but they lack the ability of instantly grabbing physical faders and the easiness of adjusting many (well, 4 to 8) of them simultaneously with great precision/expressiveness. So their use case is a bit different and a resolution similar to standard midi is fine imho.

  4. i wanted to keep as much free scripts as possible, but yes, at the cost of variables. I think script 1 could become:


and spare two variables. (I can’t think of situations where re-sending CV would cause trouble, as opposed to re-sending triggers).

On a more general impression, I realized too much page switching should be avoided because of cognitive overhead (this is probably mitigated by practicing a patch for some time and allowing controls to become transparent).
My first take on a generic grid ER-301 controller was driven by visual simplicity with one type of control per page which is actually impractical.
I think the next iteration will evolve towards two different pages of mixed controls, that seems a more useful approach.

Regarding grid control mode, I need to print the documentation and start using it.


I think you could free up a 3rd ABCD variable by using “I”. That is normally the loop increment counter but my understanding is that you can also use it without a loop, and that it is local to the script. I.e. it is a good temp variable.

Potentially you could also use “Q” as a single variable by leaving it’s length at 1. The advantage would be freeing up variables that can be modified with grid control, to @jlmitch5’s point.

“I” is kind of a freebie, I think - no real downside that I can think of to using it. “Q” you’d be sacrificing the queue op which is a special variable and available cross-script that might be useful elsewhere, so tougher call…

I’m still percolating on the rest of your thoughts. :slight_smile:


thanks for starting this thread, this is great! i’m hoping to contribute both actual scripts and just some general ideas.

when we started this discussion in the other thread i almost posted that i’m not sure how usable a generic er-301 grid teletype controller would be. simply because both er-301 and teletype allow such a high level of customization that having a generic controller wouldn’t offer much benefit (sorta like a generic midi controller vs a dedicated programmer). especially considering that both allow you to save and recall patches easily, so you could have many different configurations on er-301 and have a corresponding controller teletype scene for each.

thinking about it more i changed my mind, i think it can definitely be very usable - especially when you’re building a new patch from scratch and want to control it immediately, or adding control to older patches etc. it’s also nice to have a generic controller (or several) that you know well. having said all of that i certainly would love to see examples and talk about specialized controllers (maybe even custom unit + controller scene combos!) - i’m sure there is a lot of cross pollination of ideas that can happen.

2 directions i want to explore: a collection of simple controllers that are easy to use/remember (kinda what @ermina was doing with pages) and a more powerful complex generic controller.

for the former, one thing to do is not have controls to switch pages. simply use scripts 1-8 to switch between pages (or just redefine the UI in each script), and then use the grid control mode to change the pages by triggering the scripts.

for the latter, a couple of ideas - include some sequencers on separate pages and then build a patching matrix UI where you map say 4 sequencers and 4 faders to 8 SC.CV outputs. could also include random generators with different ranges, so then you could route a sequencer to a CV and add a vibrato from a small range random generator. similar patch matrix idea could be used for triggers.

a random suggestion: for faders don’t forget to use SC.CV.SLEW to smooth out transitions. you could use the param knob to set the slew value, for instance (i’ll post my morphing faders scene in a day or two which uses this technique).

final thought: the grid code exchange thread can be a good source of inspiration!


Yep, that was the idea. It’s funny, despite the deep saving capabilities of both the ER-301 and Teletype, you might be surprised how often I just start from a greenfield and see where it goes. The idea here was to just have something familiar and ready to go for external control, but with plenty of room to add things as you get rolling.

Oh, yeah, I am really liking this idea! There are such a huge number of possibilities between these three devices (grid, teletype, er-301) now. A patching matrix UI hadn’t even occurred to me. :exploding_head: Exciting times!