Patch submodule pinout limits

Hi there, I need some help understanding the pinout capabilities of the Daisy Patch submodule.

I am planning to build my first module using the Eurorack blocks system by @raf

I have designed the software in Gen~ and am looking to start developing the hardware.

I’m struggling to work out from the pinout diagram if it will be possible to make all the following connections to the submodule, or if I will need to cut some items from my design?

If someone could help clarify this for me before I get started, it would be massively appreciated. Thank you.

INPUTS

Potentiometers - 4
Buttons - 7
Audio in - 2 channels (L/R)
Rotary Encoder - 1

OUTPUTS

LED - 5
Audio out - 2 channels (L/R)

1 Like

Yea, patchSM’s hardware would support those inputs and outputs. Your biggest usage is digital gpio for the buttons, LEDs and encoder, but the patch submodule has 16 gpio pins so you should be good. There would be enough I/o to also add CV ins for your 4 knobs too.

Thanks very much, I got confused by the names of the GPIO pins on here.

Makes it sound like only 4 of them are usable as Digi Pins. To be clear, am I able to use all of those GPIO pins for my buttons, LED’s and encoders without obstruction?

Hey @sam and welcome!

For Eurorack-blocks, are you planning to use already the bleeding edge “custom-board” feature?

If not kivu12 has 12 pots, 16 gate in/buttons, 16 LEDs, and all the rest that Daisy Patch Submodule offers by default (8 CvIn, 2 AudioIn/Out, 2 CvOut, 2 GateOut, SD/MMC), so all good for your specs, unless you can’t make the design fit in 12HP? (given the specs it seems doable) Or you want already to have something you can massively produce (and so the custom board feature?)

Actually given your specs @sam, making a custom board would totally make sense, as everything in your spec fits with the Daisy Patch Submodule, as long as you don’t use more than 4 LEDs with variable intensity (There are 2 pins you can use to drive some LEDs with PWM, another 2 from CV out, but 1 needs to be an on/off LED). So that saves you from soldering anything SMD almost (just some resistors for the LEDs, but we could use THT as well I guess)

Ah also, I didn’t make an encoder implementation yet, but I have the Daisy Patch (Eurorack module) which has an encoder, so I guess I could add one quickly.

I could make an online video course on that project. I don’t think that would be too long, but for sure very fun :slight_smile: What do you think? Anyone else wants to join?

Wow! Hi @raf thank you so much for your help. I’m blown away by Blocks. Such a good idea! I’m really looking forward to developing some modules with it.

I’ve only just got to the stage of designing the physical module so I’m not sure yet which board i’ll use. I’m probably going to try both because I want to learn as much as possible about Eurorack development. I think my module will fit 12hp but i’ll consider all options. I have a little experience designing a PCB before and it would be nice to utilise that for this project. I wouldn’t rule out commercially manufacturing the module at some point if it works well, but that’s a much later decision I think.

If there were an encoder implemention, I would gratefully utilise it but obviously don’t worry too much about me :slight_smile:

Of course, I would be very interested in an online video course of the project. I’m trying to make the Reverb module as a practice at the moment and I think there are a few moments in the process when a video tutorial would help a lot.

That said, I think I managed to complete the installation process OK and I have got to the point of opening the Reverb patch in Max. The guide says, if this Max patch opens successfully then the installation has worked, so I guess I did it right.

I’m stuck at the moment because I can’t make the Reverb module show up in VCV rack. I’ve saved the max patch but it doesn’t show up in the Library. I am using Rack 1.1.6. I’ve found the [Rack/plugins-v1] folder but i’m not sure what it should have in it. I’ve tried copying the files from [eurorack-blocks/max/reverb], but it didn’t help. Could you possibly offer any advice?

The only other question I have is - When designing the front panel. Are there any rules for how inputs/ outputs/ buttons/ knobs, etc must be laid out? For example, must the inputs/outputs be at the bottom of the module? I’m not trying to do anything crazy but I don’t want to accidentally make an impossible design.

Thank you again for your help. I’m really excited to discover what is possible and I’ll be sure to keep you updated with progress.

1 Like

Hey @sam !

I’ve only just got to the stage of designing the physical module so I’m not sure yet which board i’ll use.

If you don’t specify a board in your erbui file then the default board is used.
It has like 128 digital/analog inputs/outputs, so that’s a way to start when you don’t have a precise idea and you are first focusing on what the product should do (rather than how it will be produced).

When getting to hardware, you have only two choices for now: the kivu12 12HP board and the custom boards.

Since the custom-board is a new feature, just to be sure I put more context:

The kivu12 is a back board that is made to be reused from one front pcb to another and is depicted here in the middle:

The pin headers/sockets on the borders are placed so that they don’t get into the way of your components for generic layouts.

Given this view, what does the “custom-board” system is to “merge” the back board and the front pcb into one PCB:

  • There is no more headers so more freedom to route what you want, at the expense of having to put the Daisy Patch Submodule yourself (see screenshot at the end of this message)
  • The board can’t be reused for another module unless the other module has the same component layout (which Noise engineering did for the Versio series for example)
  • The board can be massively produced

If there were an encoder implemention, I would gratefully utilise it but obviously don’t worry too much about me

All good, I was thinking adding it also, but the question is mainly when :slight_smile:
For now please one button (like tl1105) for encoder up and another for encoder down. The encoder will basically be that, and the Encoder implementation will return an increment.

Of course, I would be very interested in an online video course of the project.

:+1:

I’m trying to make the Reverb module as a practice at the moment and I think there are a few moments in the process when a video tutorial would help a lot.

Could you please recall those moments so I could improve the project? The installation in this project is quite massive and I can totally picture people stopping in the middle of it.

I’m stuck at the moment because I can’t make the Reverb module show up in VCV rack. I’ve saved the max patch but it doesn’t show up in the Library.

Here I think there would be a few things to check:

  • Please open the Max console, save again to trigger build, and send me the content of the Max log (I want to check for any error)
  • Do the same with the Rack logs, it’s in your ~/Documents/Rack/log.txt

The only other question I have is - When designing the front panel. Are there any rules for how inputs/ outputs/ buttons/ knobs, etc must be laid out? For example, must the inputs/outputs be at the bottom of the module? I’m not trying to do anything crazy but I don’t want to accidentally make an impossible design.

I guess there are no strong rules, everything is about usability. For example sequencers tends to have their jack connectors on the top of the modules, and all other modules tends to have their connectors on the bottom, simply for cable management (you tend to put sequencers at the bottom of your rack, closer to your body).

Remember to leave enough space between knobs, as you need to be able to put a finger between two knobs so you can touch one knob but not the other.

On this actually we plan to recreate some sort of VCV Rack in 3D with a virtual hand with fingers, so people could ensure everything is correct, because this also depends on the knob height and shape. But that’s another big project :slight_smile:

There are however physical constraints you need to comply with: components need to not collide.
For this I designed controls in Illustrator so that you can see the footprint on the PCB to avoid collision.
I think I’ll add it in an extras folder to help with design. What do you think?

1 Like

It’s so kind of you to provide such detailed responses. Thank you! I truly appreciate it.

I think it will make sense to make a version of my module with the Kivu12 first. My Multichannel Looper module will certainly fit in 12HP. I’ll definitely be interested to try making a custom board as soon as possible but it makes sense to learn this process one step at a time. Sorry if i’m missing something obvious but what is the best place to learn how to create a custom board? Is there a guide?

Could you please recall those moments so I could improve the project? The installation in this project is quite massive and I can totally picture people stopping in the middle of it.

Completing the installation on MacOS using homebrew is tricky. Perhaps a video walkthrough of exactly how the software is installed would be helpful for some users. Also an explanation of how to identify and manually install any parts which fail to install automatically might be useful for those who are relatively inexperienced with command line interfaces, like myself. I’m sure a walkthrough of the process of making the reverb module from start to finish would be a good way to attract more visual learners to this fantastic project.

I guess there are no strong rules, everything is about usability. For example sequencers tends to have their jack connectors on the top of the modules, and all other modules tends to have their connectors on the bottom, simply for cable management (you tend to put sequencers at the bottom of your rack, closer to your body).

It seems very unrestrictive. I’m confident I can come up with a practical design, I just wanted to avoid causing your build.py script any problems.

For this I designed controls in Illustrator so that you can see the footprint on the PCB to avoid collision.
I think I’ll add it in an extras folder to help with design. What do you think?

This is a great idea, I was going to do this myself so i’m sure many users would find it useful.

Here I think there would be a few things to check:

  • Please open the Max console, save again to trigger build, and send me the content of the Max log (I want to check for any error)
  • Do the same with the Rack logs, it’s in your ~/Documents/Rack/log.txt
gen~: exported: Untitled:/Users/clam/eurorack-blocks/max/reverb/artifacts/module_max.cpp
node.script: Build starting
node.script: module: /Users/clam/eurorack-blocks/max/reverb/
node.script: Error: Traceback (most recent call last):
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 467, in <module>
    sys.exit (main ())
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 421, in main
    import erbb
  File "/Users/clam/eurorack-blocks/build-system/erbb/__init__.py", line 23, in <module>
    import gyp
ModuleNotFoundError: No module named 'gyp'
node.script: Error: Traceback (most recent call last):
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 467, in <module>
    sys.exit (main ())
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 421, in main
    import erbb
  File "/Users/clam/eurorack-blocks/build-system/erbb/__init__.py", line 23, in <module>
    import gyp
ModuleNotFoundError: No module named 'gyp'
node.script: child process exited with code 1


[0.000 info src/main.cpp:119] VCV Rack v1.1.6
[0.000 info src/main.cpp:120] Darwin 20.6.0 Darwin Kernel Version 20.6.0: Mon Aug 30 06:12:20 PDT 2021; root:xnu-7195.141.6~3/RELEASE_ARM64_T8101 x86_64
[0.000 info src/main.cpp:126] Args: /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/MacOS/Rack 
[0.000 info src/main.cpp:129] System directory: /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources
[0.000 info src/main.cpp:130] User directory: /Users/clam/Documents/Rack
[0.000 info src/main.cpp:132] Bundle path: /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app
[0.000 info src/settings.cpp:206] Loading settings /Users/clam/Documents/Rack/settings-v1.json
[0.000 info src/main.cpp:155] Initializing environment
[0.014 info src/plugin.cpp:154] Loaded plugin Core v1.1.6 from 
[0.022 info src/plugin.cpp:154] Loaded plugin Fundamental v1.3.1 from /Users/clam/Documents/Rack/plugins-v1/Fundamental
[0.022 warn src/plugin.cpp:158] Could not load plugin /Users/clam/Documents/Rack/plugins-v1/gen_dsp: Manifest file /Users/clam/Documents/Rack/plugins-v1/gen_dsp/plugin.json does not exist
[0.022 warn src/plugin.cpp:158] Could not load plugin /Users/clam/Documents/Rack/plugins-v1/reverb: Manifest file /Users/clam/Documents/Rack/plugins-v1/reverb/plugin.json does not exist
[0.119 info src/bridge.cpp:384] Bridge server started
[0.120 warn src/window.cpp:205] GLFW error 65544: Cocoa: Failed to find service port for display
[0.122 info src/main.cpp:171] Initializing app
[0.251 info src/window.cpp:238] Window content scale: 2.000000
[0.444 info src/window.cpp:279] Renderer: Apple M1
[0.444 info src/window.cpp:280] OpenGL: 2.1 Metal - 71.7.1
[0.450 info src/window.cpp:33] Loaded font /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/fonts/DejaVuSans.ttf
[0.451 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/RackBusboard.svg
[0.451 info src/settings.cpp:189] Saving settings /Users/clam/Documents/Rack/settings-v1.json
[0.451 info src/patch.cpp:163] Loading patch /Users/clam/Documents/Rack/autosave-v1.vcv
[0.452 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/Core/AudioInterface.svg
[0.453 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/ScrewSilver.svg
[0.453 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/PJ301M.svg
[0.453 info src/window.cpp:33] Loaded font /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/fonts/ShareTechMono-Regular.ttf
[0.454 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/VCMixer.svg
[0.454 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/RoundLargeBlackKnob.svg
[0.455 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDSlider.svg
[0.455 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDSliderHandle.svg
[0.455 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/LEDSliderHandle.svg
[0.455 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDSliderHandle.svg
[0.455 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDSliderHandle.svg
[0.455 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDSliderHandle.svg
[0.457 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/VCO-1.svg
[0.457 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/CKSS_0.svg
[0.457 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/CKSS_1.svg
[0.457 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/RoundHugeBlackKnob.svg
[0.458 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/VCF.svg
[0.458 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/Core/MIDI-CV.svg
[0.459 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/ADSR.svg
[0.460 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/Scope.svg
[0.460 info src/window.cpp:33] Loaded font /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/sudo/Sudo.ttf
[0.460 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/RoundBlackKnob.svg
[0.460 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/CKD6_0.svg
[0.461 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/CKD6_1.svg
[0.461 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/Core/Notes.svg
[0.462 info src/window.cpp:72] Loaded SVG /Users/clam/Documents/Rack/plugins-v1/Fundamental/res/SEQ3.svg
[0.462 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/ComponentLibrary/LEDButton.svg
[0.463 info src/window.cpp:72] Loaded SVG /private/var/folders/5p/bqky45gx2l9fdhrq0r3rr45c0000gn/T/AppTranslocation/765B2E08-1A05-4BEB-9414-877D288A6BC4/d/Rack.app/Contents/Resources/res/Core/MIDI-CC.svg
[0.463 info src/main.cpp:189] Starting engine
[0.463 info src/main.cpp:201] Running window
[15.122 info src/patch.cpp:86] Saving patch /Users/clam/Documents/Rack/autosave-v1.vcv
[15.125 info src/settings.cpp:189] Saving settings /Users/clam/Documents/Rack/settings-v1.json


1 Like

Sorry if i’m missing something obvious but what is the best place to learn how to create a custom board? Is there a guide?

Nothing obvious, I mentioned it because it is actually missing, partly because it is being evaluated.

The discussion about the experience with it (for now quite a monologue :smiley: ) can be followed here

Also an explanation of how to identify and manually install any parts which fail to install automatically

I’m exactly interested into those specific parts :slight_smile: You see, we have automated workflows that checks everything, including installation, continuously and automatically, everytime I want to add a feature.

So when something fails, I could try somehow to replicate it in those automatic checks, if possible. Here it seems that you use a Mac computer with a M1, so I guess there might be something to do with it.

I should get a M1 from work more or less soon, so I guess I’ll be able to be in the same configuration as yours, if my intuitive guess is correct.

ModuleNotFoundError: No module named 'gyp'

That definitively comes from here at least. Can you please check that you have a gyp-next folder in the Eurorack-blocks submodules folder and that it seems populated? Normally the command git clone --recurse-submodules git@github.com:ohmtech-rdi/eurorack-blocks.git should have recursed submodules, and so should have fetched gyp.

Thanks a lot!

Also FYI, started to work a bit on the encoder this week-end :slight_smile:

Hi Raf. You were right about gyp. Once I fixed my SSH permissions, it installed correctly. Thanks so much for your help. I’m sure I’ll get there in the end.

I’m stuck with this now in the Max Console. I have tried the installation on my Windows desktop and got the same error. Getting Euroblocks working on either would be fine for me so if you have any suggestions for Windows rather than M1, they would be equally helpful.

I’ve manually installed GTK but that didn’t help.

node.script: Error: Traceback (most recent call last):
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 467, in <module>
    sys.exit (main ())
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 422, in main
    import erbui
  File "/Users/clam/eurorack-blocks/build-system/erbui/__init__.py", line 15, in <module>
    from .generators.vcvrack.panel import Panel as vcvrackPanel
  File "/Users/clam/eurorack-blocks/build-system/erbui/generators/vcvrack/panel.py", line 10, in <module>
    import cairocffi
  File "/opt/anaconda3/lib/python3.8/site-packages/cairocffi/__init__.py", line 48, in <module>
    cairo = dlopen(
  File "/opt/anaconda3/lib/python3.8/site-packages/cairocffi/__init__.py", line 45, in dlopen
    raise OSError(error_message)  # pragma: no cover
OSError: no library called "cairo-2" was found
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': dlopen(libcairo.so.2, 2): image not found
cannot load library 'libcairo.2.dylib': dlopen(libcairo.2.dylib, 2): image not found
cannot load library 'libcairo-2.dll': dlopen(libcairo-2.dll, 2): image not found

When I tried to run Erbb configure in Git Bash on Windows, I get this error, which seems to be similar to the problem i’m getting on M1 mac.

Sam@Sam-PC MINGW64 ~/eurorack-blocks/samples/drop (main)
$ erbb configure
Traceback (most recent call last):
  File "C:\Users\Sam\eurorack-blocks\build-system\scripts\erbb", line 467, in <module>
    sys.exit (main ())
  File "C:\Users\Sam\eurorack-blocks\build-system\scripts\erbb", line 422, in main
    import erbui
  File "C:\Users\Sam\eurorack-blocks\build-system\erbui\__init__.py", line 15, in <module>
    from .generators.vcvrack.panel import Panel as vcvrackPanel
  File "C:\Users\Sam\eurorack-blocks\build-system\erbui\generators\vcvrack\panel.py", line 10, in <module>
    import cairocffi
  File "C:\Users\Sam\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\cairocffi\__init__.py", line 48, in <module>
    cairo = dlopen(
  File "C:\Users\Sam\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\cairocffi\__init__.py", line 45, in dlopen
    raise OSError(error_message)  # pragma: no cover
OSError: no library called "cairo-2" was found
no library called "cairo" was found
cannot load library 'C:\Program Files (x86)\GtkSharp\2.12\bin\libcairo-2.dll': error 0xc1
cannot load library 'libcairo.so.2': error 0x7e
cannot load library 'libcairo.2.dylib': error 0x7e
cannot load library 'libcairo-2.dll': error 0x7e

Also FYI, started to work a bit on the encoder this week-end :slight_smile:

That’s really cool, thank you. I’m looking forward to having fun with it :slight_smile:

Hi @sam Thanks so much for your patience. Given the errors you are hitting right now, I feel this might be super frustrating.
Please don’t give up! This is super helpful for the project.

You are hitting the “cairo wall” right now, which is known to be the last one among Eurorack-blocks users. Everytime comes a new thing on Windows. New thing though it seems you are hitting it also on macOS (usually macOS and Linux works fine on this, so I’ll learn something super important here on macOS).

  File "/Users/clam/eurorack-blocks/build-system/erbui/generators/vcvrack/panel.py", line 10, in <module>
    import cairocffi
  File "/opt/anaconda3/lib/python3.8/site-packages/cairocffi/__init__.py", line 48, in <module>
    cairo = dlopen(
  File "/opt/anaconda3/lib/python3.8/site-packages/cairocffi/__init__.py", line 45, in dlopen
    raise OSError(error_message)  # pragma: no cover
OSError: no library called "cairo-2" was found
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': dlopen(libcairo.so.2, 2): image not found
cannot load library 'libcairo.2.dylib': dlopen(libcairo.2.dylib, 2): image not found
cannot load library 'libcairo-2.dll': dlopen(libcairo-2.dll, 2): image not found

So I guess this is on your M1, and on this one, the Anaconda packager manager took over pip in the PYTHONPATH with a cairocffi it couldn’t properly install. On this I would try to manually call brew install cairo, which I suppose won’t work because the install script already did. Tell me if it doesn’t work, and I’ll contact the people at Anaconda about this.

cannot load library 'C:\Program Files (x86)\GtkSharp\2.12\bin\libcairo-2.dll': error 0xc1

On this one, the “GtkSharp”, whatever it is, on your Windows machine, took precedence over the msys64 install.
This means starting to tweak your PATH, which I wouldn’t do except if you have a very clear understanding of your Windows install.

So basically what you have in both cases is package managers which are fighting against each others, but not able to install programs properly either. This is ridiculous. But don’t feel bad, you are not the first one experimenting this with cairo (macOS with Anaconda is a first, but I will contact them), and I need to solve that (because this is as frustrating to me to see a motivated user whom can’t use the Eurorack-blocks project).

For now I would say let’s stick on your Mac M1, and let’s see what we can do.

I would say:

  • Please tell me how you installed cairo with anaconda (if you did so, or could remember)
  • Start a python3 interactive session and import cairo, and report the error again:
$ python3
Python 3.8.1 (v3.8.1:1b293b6006, Dec 18 2019, 14:08:53) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cairo

And please send me the log of your session (from the python3 call to the end of the error message so that I have all the context to report to the package manager)

Thanks a lot!

On your Mac M1 please also reply with the output of:

echo $PYTHONPATH

Because I think we can tweak it properly. Also send a PM about your daily work, so we can troubleshoot this with compromising your daily workflow.

Thanks!

Thanks so much for your help. I’m certainly not going to give up. It’s been fine, i’m learning loads and i’m confident we’ll get it working and complete some exciting projects. I’m glad it’s useful for you. I’m very grateful to you for putting so much time into assisting me.

So I tried calling brew install cairo but, as you supposed, the installed script had already installed it.

On this one, the “GtkSharp”, whatever it is, on your Windows machine, took precedence over the `msys64` install.
This means starting to tweak your `PATH`, which I wouldn’t do except if you have a *very clear understanding* of your Windows install.

GTKsharp is a binary package for windows which contains Cairo, etc but it didn’t work. I’ll uninstall it. I tried tweaking the PATH but it didn’t make any difference. For all intents and purposes, the install is at the same stage on both the M1 and Windows machines. As I say, whichever one we get working first is fine and, if it’s helpful for you, I can try to get the other working at your convenience.

Here’s the result of import cairo

Last login: Mon Apr  4 22:31:56 on ttys000
clam@Clams-MacBook-Air ~ % python3
Python 3.9.12 (main, Mar 26 2022, 15:45:34) 
[Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cairo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cairo'
>>> 


echo $PYTHONPATH outputs blank, which I think is the default.

Thank you!

I can’t find the PM function. Thank you for considering my daily workflow, as it happens, it’s very scattered at the moment because I have a new baby. Making incremental developments in this project whenever possible is perfectly convenient. Please let me know if it would be easier for you if I left it for a couple of days while you make enquiries to the relevant package managers.
I’ve just spotted you made the fantastic OhmForce plugins. I have used them a lot over the years :+1:

So we had a troubleshooting session with @sam and this is what came out:

  • For some reason the anaconda package manager takes precedence, but it might be related to some other Max package installation as there is no cairocffi problem from the command line,
  • Building for the simulator won’t work using makefiles on Apple M1. You need to use Xcode for that as a workaround for now.

Then everything seems to work as expected.

So the workflow is:

  • Save the Max patch (gen~ code is exported),
  • Ignore errors on the Max console,
  • Go to the terminal and execute erbb configure && erbb build simulator_xcode,
  • Start or Restart VCV Rack 1.1.6 (which will run in Apple emulator),
  • Enjoy,
  • Rinse and repeat :slight_smile:

I will capture this as different issues on GitHub.

Thanks again Sam for your time!

Thanks Raf. It was my pleasure. Everything is working well now :slight_smile:

1 Like

I had to do the following to get my stuff to work:

pip install soundfile
pip install cairocffi
pip install cairosvg
pip install ezdxf

1 Like

I have a similar question on the submodule limits, and didn’t think it necessary to start a new thread as it is almost the same question :slight_smile:

Beginner here hardware wise. Making a eurorack module with Max/oopsy on Windows 11, kicad 6 and either a daisy seed or submodule as the hardware brains. No audio rate ins or outs required as of now.

The design has:

  • One screen (either low res monochrome or something akin to Squarp Rample is the idea, this depends on what is possible hardware-wise)

INPUTS:

  • 5 encoders (if possible maybe with rgb - think Make Noise Rene)
  • 5 rgb leds (if not possible to have them “in” the encoders)
  • 5 medium rgb buttons (think Acid Rain Maestro-buttons)
  • 5 small rgb buttons (think Intellijel Metropolix)
  • 3 small buttons (maybe on/off light)

8 cv in (some bipolar some purely for gates)

Outputs:
5 gate outs
5 cv outs for v/oct

Is this possible with the seed or the submodule as is with a custom board? I have read about multiplexing would this be required to be used to have the above I/O?

Thank you for taking the time to ponder over my question !