^^ crow help: druid


Might as well dive in: I’ve installed Python 3.7 and installed all the required libraries. How do I install Druid itself?

1 Like

Looks like you’ll want to download the repo and open a terminal in that directory. Once in the directory, run:

python3 druid.py

Are the serial commands documented somewhere? I’m probably getting ahead of myself but am interested in talking serial to crow from alternative clients. Perhaps a druid option to print the serial command?

There isn’t a binary serial protocol like monome grids use. Crow sends and receives plain ASCII text on the USB serial port. There are some wrinkles, like the need to break up large multiline packets.

Details in the development readme: https://github.com/monome/crow/blob/master/readme-development.md

… Actually…

I guess there are a couple subtle things about the serial fornat that aren’t documented.

  • druid, a python program, explictly encodes bytes as utf-8. the crow interpreter, a C program, treats incoming strings as ascii. My hunch is that sending non-ascii characters will not work.

  • i I think the repl module assumes strings are null-terminated.


You’ll need to run this command before you run druid for the first time in order to install several dependencies:

pip3 install pyserial asyncio prompt_toolkit

Then you can run the following from the druid directory to launch it:

python3 druid.py

fwiw, on my machine, I actually have to use python not python3 to launch python 3 scripts… so if you get an error at first try that.

1 Like

might i suggest incuding a requirements.txt with druid.py

(these days i never work with python outside a clean virtual environment, only way to stay sane)

1 Like

He said he installed the dependencies already, so I did not include that.

I guess I forgot how to read today :wink:

1 Like

Would it technically be possible to port Druid to IOS/iPad (pyhonista or similar)?


Id like to make a sloooow ramp LFO, somethin that can have one cycle over several minutes, and use that to drive the STS’ Start Position input, the effect being playback of tracks with variable speed based on the ramp’s frequency… the reason being that the STS can play back long-form audio files (3-6 minutes from what I’ve tried) surprisingly welI and I’m interested in messing with that further to see how much of it can be harnessed. I wonder how simple of a thing this is to code up in druid, if its even possible? Can crow run an LFO that slow?

In addition (this part feels a little trickier to me), I’d like to use my TT+grid to jump to different positions in the ramp LFO by communicating with crow, using an MLR-style sequencer running on TT, the idea being a type of MLR. Are either of these ideas something that can be written effectively, or could it get in the weeds fast? Coding on Teletype is now the most experience I have, but I’d really love to learn some Lua and crow really seemed to come at the perfect time as I trudge through this bizarre modular-granular-DJ project that I’ve found myself caught up in :grin:


edit: so used to doing things in terms of ms, I had 60000 in there before instead of 60, sorry!

It’s as simple as that! That creates a bipolar LFO with an amplitude of +/- 5V and a minute long period.

You can do all sorts of other things to change the voltage range, period, making a skewing a triangle into a ramp or saw, etc., but this is just meant to illustrate that you can create minutes long LFOs in less than 25 characters!


I have investigated this a bit and the challenge is that iOS applications are not allowed to directly access connected devices. While crow presents itself as usb “modem” iOS roundly appears to ignore it.

I searched for examples of iOS apps which supported interacting with a modem and I couldn’t find any.

I figured as much. IOS 13 USB enhancements are just for mass storage devices right?

Last I looked iOS 13 wasn’t opening the door much to other USB devices beyond storage. Personally I just ended up buying a long USB cable which could reach from my desktop computer over to the modular :mountain_cableway:

1 Like

Is it possible to tail a log from the current running script, if I want to print a value and see what it is?

1 Like

I was just wondering the same thing. Being able to print to to druid/repl would certainly make debugging easier

1 Like

print(‘caw’) does the trick!


ah I had tried that but couldn’t get it to work for some reason. it’s working now after another re-upload and power cycle. Thanks!

1 Like

I’ve just received a crow as my first dive into the Monome world. I’m excited to start working but I’m running into some very beginner connectivity problems and I’d really appreciate any advice anyone has. I’ve got a little bit of coding experience, so I feel fairly comfortable with the learning process for lua, but I’m struggling with figuring out how to actually get scripts into crow (I haven’t worked much with terminal-based things).

When I upload something in druid by entering “u <xxxx.lua>” I get text saying that the file is bootstrapped, and that input, asl, asllib, metro, ii, and crowlib are loaded. This action seems to freeze First into a strange pulsing. If I then enter “^^clearscript” there is a slight pause before the pulsing continues. Entering “p” tells me that there’s no user script. I get the same result whether or not I’ve typed the name of an actual file. Restarting my modular results in First running normally again.

How do I point druid to the correct location of the lua file?

Do I need to do anything to prepare the file other than saving it as a .lua (I’m writing in ZeroBraneStudio)?

Do I need to do anything to include asl when programming?

I’m wondering if it is partially where I’ve stored things as I also can’t boot druid directly in terminal, but instead have to drag the druid.py file in to terminal at the start of each session (typing python3 druid.py I get a notice that there’s no such file).

1 Like