every day it becomes less clear to me why I own an OP-1


tambla: rows -> midi out did the trick! realy nice :smiley:

Those sketches sound tasty, can’t wait to give this a try. Nice work.

a small test :
pyramid 4 drone Notes -> Tambla -> Microfreak

i love ur script! :slight_smile: thank you very much!


cool, thanks for sharing!

…there is a lot of potential which i haven’t fully explored by clocking the script from a sequencer and using norns parameter mapping to drive tambla parameters remotely via MIDI in addition to playing live.


This looks amazing!
Can’t wait for crow support and JF over i2c.

1 Like

need a little help, getting a load fail error:

script load: /home/we/dust/code/tambla/tambla.lua


script clear

ERROR (i2c/hp) failed to write
including /home/we/norns/lua/extn/sky/unstable.lua
including /home/we/norns/lua/extn/sky/prelude.lua
using /home/we/norns/lua/extn/sky/core/object.lua
using /home/we/norns/lua/extn/sky/v1/core/event.lua
using /home/we/norns/lua/extn/sky/v1/core/process.lua
using /home/we/norns/lua/extn/sky/v1/device/utility.lua
using /home/we/norns/lua/extn/sky/v1/device/virtual.lua
using /home/we/norns/lua/extn/sky/v1/device/make_note.lua
using /home/we/norns/lua/extn/sky/v1/device/arp.lua
using /home/we/norns/lua/extn/sky/v1/device/switcher.lua
using /home/we/norns/lua/extn/sky/v1/device/transform.lua
using /home/we/dust/code/tambla/lib/device/linn.lua
using /home/we/norns/lua/extn/sky/unstable/io/grid.lua
using /home/we/norns/lua/extn/sky/unstable/io/norns.lua
using /home/we/dust/code/tambla/lib/io/grid.lua
using /home/we/norns/lua/extn/sky/unstable/io/arc.lua
using /home/we/norns/lua/extn/sky/unstable/engine/polyperc.lua
including /home/we/dust/code/tambla/lib/halfsecond.lua
including /home/we/dust/code/tambla/lib/model.lua
including /home/we/dust/code/tambla/lib/pages.lua
using /home/we/norns/lua/extn/sky/unstable/core/page.lua

MISSING INCLUDE: lib/dep/rxi-json/json

SCRIPT ERROR: load fail

/home/we/dust/code/tambla/lib/pages.lua:4: MISSING INCLUDE: lib/dep/rxi-json/json
stack traceback:
/home/we/norns/lua/core/norns.lua:138: in function </home/we/norns/lua/core/norns.lua:138>
[C]: in function ‘error’
/home/we/norns/lua/core/startup.lua:48: in function ‘include’
/home/we/dust/code/tambla/lib/pages.lua:4: in main chunk
[C]: in function ‘dofile’
/home/we/norns/lua/core/startup.lua:42: in function ‘include’
/home/we/dust/code/tambla/tambla.lua:29: in main chunk
[C]: in function ‘dofile’
/home/we/norns/lua/core/script.lua:172: in function </home/we/norns/lua/core/script.lua:172>
[C]: in function ‘xpcall’
/home/we/norns/lua/core/norns.lua:139: in field ‘try’
/home/we/norns/lua/core/script.lua:172: in function ‘core/script.load’
/home/we/norns/lua/core/menu/preview.lua:21: in function ‘core/menu/preview.key’
/home/we/norns/lua/core/menu.lua:139: in function </home/we/norns/lua/core/menu.lua:116>

script clear

ERROR (i2c/hp) failed to write
clock: ignoring resumption of canceled clock (no coroutine)

sorry, my bad - i’m guessing the zip file was used? i just pulled down the link for now. the rxi-json lib is being pulled in as a git submodule which the maiden install will handle but the zip file is missing.

i’ll correct the zip file next chance i get.

i’d recommend deleting the install you have and using maiden


thanks for the help! i was unaware that i needed to refresh the community catalog actually haha. found on maiden now and working

lovely script by the way!

1 Like

love this! so easy to get good grooves going. I’ve been using ESQ in Live quite a lot, which shares some similarities, but this is so much more playable and fun.
do you have any plans on adding crow support? if not, I might give it a go.

crow support is definitely on the list but i don’t have any particular time table right now. one aspect that is holding me back is that crow support is more open ended than something like how polyperc is integrated into the framework. for crow one could imagine:

  • crow as 1 or 2 channel CV voice (trigger/env + pitch)
  • crow as driver of jf and/or w/ synth
  • crow as 4 channel CV voice by driving ansible outputs in conjunction with its own

just supporting a mono voice mode with crow could be really interesting for patterns with more extreme playhead bending. the voice stealing with a touch of legato might be nice (reminds me of using xor with a single channel MIDI-CV converter many moons ago)

i haven’t explicitly tried this yet but driving ansible in 4 channel MIDI mode via some USB host-to-host solution like a mio2 could be useful.

regardless ideas and contributions are always welcome.


glad to hear : )

if one could set output per row that would be brilliant. for instance, having row 1 and 2 set to crow (as two channels of trig + pitch), and row 3 and 4 to polyperc. perhaps even 3 to polyperc, and 4 to midi perhaps?

four rows to one mono voice via crow would also be cool, giving trig + pitch + cv + cv. then I imagine setting slide/slew time for the cv-channels would come in handy.

Hey! Lovely script! Is it possible to add midi start / stop commands to the clock?

1 Like

That should actually be fairly quick. I’ve created an issue for it here Support midi start stop · Issue #2 · ngwese/tambla · GitHub, hopefully it is something I can look into in the next week or two.

Sadly time has been in short supply and I’ve not gotten to crow support as quickly as I had anticipated. In the last few months I’ve added a sequencer (Five12 Vector) to my setup and that plus midi start/stop, plus crow is looking like an attractive combo.

I’ve created an issue for crow support Add crow support · Issue #3 · ngwese/tambla · GitHub - hopefully I can get something in place in the next month or few.


v1.2.0 (available in maiden)

updated documentation

note: this version requires norns 210927


  • fully independent output destination per row: polyperc, midi, crow cv, wsyn
  • start/stop/reset of play head based on system clock (sync to midi link transport)
  • crow support, two mono voices (with slewing) pitch cv + ar envelope/gate
  • wsyn support
  • allow note lengths up to 4x step duration


  • note duration actually varies! (was completely broken)

@2197 and @Wisdom.Water - thanks for the nudge, hopefully these improvements meet your needs.

one thing worth noting on the start/stop/reset behavior, by default the script will still start the playheads immediately when run but as soon as a transport message (start/stop/pause) is received it will sync to the transport.


w00t! brilliant, excited to give it a spin! really cool with wsyn support as well. love how playable this script is.

Wow thanks a lot, can’t wait to use it!

i totally missed this before (and also wondered about usage of sky when it was added to a previous system update)

digging in now!

Be forewarned that there is no documentation currently and there is some organic structure in the code.

The genesis for the framework was trying to imagine what high level building blocks for scripts might look like if there was an abstraction to chain together blocks of functionality to handle events coming in from various sources - in a crude sense like the device chains in Live.

The ambition is to polish and document but that hasn’t happened yet. In part there is still a desire to get more real world usage to validate the general direction… which of course probably requires some documentation!


fair enough and it might be too advanced for any scripting i’ll do for a while

i’ll probably try using tambla more and then gradually examine the code to see what i can learn

still exciting to see your vision in practical use!