Monkeyprint is a pre-processing and print control software for 3d DLP printers published under GPL license. It aims to be an easy to use and complete solution for your own DIY 3d DLP printer build.

  • Screenshot of Monkeyprint DLP print software
    Monkeyprint now comes with a GTK+ gui that uses your window managers look and feel. It also has some new elements like the menu bar and the model management list that reflect new features like multiple object printing.



It provides features such as:

  • model positioning and orientation in the build volume of your printer,
  • automatic support generation by user defined parameters,
  • slicing,
  • hollowing and fill structures and
  • print job execution by sending the slices to your projector via HDMI and sending stepper motor commands to your printer via USB/Serial port.

In addition Monkeyprint comes with schematics for the hardware side of your printer. The hardware consists of inexpensive and widely available components. And the best thing: Monkeyprint already includes the firmware needed to breathe some life into your hardware and make it communicate with your PC.

Photograph of an electronics board for a 3d DLP printer with a micro controller and stepper drivers
The Monkeyprint DLP printer controller board is made of inexpensive and widely available components. It can control the steppers for build platform and tilt mechism

The following article will provide information on how to download, install and use Monkeyprint.

Install Monkeyprint software

The following installation procedure has been tested on a fresh install of Ubuntu 12.04 and 16.04. If you encounter any incompatibilities with the linux distribution of your choice, don’t hesitate to comment.

Installation of dependencies

Monkeyprint depends on the following libraries:

  • Python including GTK libraries
  • Visualization Toolkit VTK (currently developed with version 5.8 or 5.10)
  • OpenCV (version 2.3 or 2.4)
  • Git for downloading and updating the code
  • avrdude for uploading the firmware to the Arduino

If you are running Ubuntu or a similar Debian-based distro you can install these dependencies by executing the following command in your terminal.

For Ubuntu 12.04:

sudo apt-get install
git-core libvtk5.8 libopencv-core2.4 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-scipy python-serial python-zmq avrdude

For Ubuntu 16.04:

sudo apt-get install git-core libvtk5.10 libopencv-core2.4v5 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-scipy python-serial python-zmq avrdude

Download Monkeyprint

After the installation of dependencies has finished it is time to download Monkeyprint itself. Navigate to the directory you want Monkeyprint to be installed in and simply run this in your terminal to download from Github:

git clone git:// -b release

Running Monkeyprint

To start the program, navigate to your Monkeyprint directory:

cd monkeyprint

Now run the following command:


Set up your hardware

Before you can use Monkeyprint, you need to set up your hardware.  You will need the following components:

  • 1 x Arduino Pro Micro micro controller board
  • 2 x Pololu DRV8825 stepper driver boards
  • 1 x LM2596 step down converter board
  • Some small components (refer to the schematics below)
Schematics for the Monkeyprint controller board. It connects an Arduino Pro Micro with the Pololu DRV8825 stepper drivers and to other peripherals like end stops. The board uses an input voltage of up to 36 V. An LM2596 step down converter board is used to create a 5 V supply for the micro controller and the other peripherals.

Once you have downloaded Monkeyprint from Github, you can find the schematics drawn in Eagle 6 in the hardware folder.

Please refer to this blog post and also to this one for more details on the circuitry. There will also be a PCB layout soon.

Getting started




Monkeyprint controls a DLP printer in two respects: it sends the slice images to the projector and the stepper motor commands to a micro controller. For this to work, you need to meet the following requirements:

  • The projector needs to be connected to your PC and it has the be set up to expand your desktop.
  • You need to have a microcontroller (I use an Atmel AVR AtMega32U4) that is able to control the stepper motors for vat tilt and build platform movement. I will soon post my code for the stepper motor control.

The set-up currently takes place in the file and (this will be working via the GUI soon). Open with your preferred text editor and change the parameters to your needs.
The first is your build volume size in millimeters (width, depth, height).

self.buildVolumeSize = [192, 108, 300] # [mm]

Next are the projector settings:

projectorSizeXY = [1920, 1080]   # [px]
self.projectorPositionXY = [1280, 0]

The first is the resolution of your projector, the second is the position of the projector relative to your main screen. This is basically the width of your main screen.

As a last thing, change the line

self.stepsPerMm = 100

to the number of steps your build platform stepper has to make in order to rise the build platform by one 1 mm.

Next, open Here, you can modifiy the serial port your stepper controller is connected to as well as the commands that are sent to it during a print. The commands are simple strings like “tilt” or “buildUp” or “buildHome” for the various functions. You can modify these if needed.

However, I will soon publish the code for the stepper controller as well, so there should no longer be a need for any changes here.

The program should become easier to set up within the next months as I will be starting to build my next printer and improve the software along with that.

If you experience any problems or have questions or suggestions, please comment.



81 thoughts on “Monkeyprint”

    1. Hi Bulent,
      thanks for trying out Monkeyprint.
      Where exactly do you need help?
      You can download the code either directly from my Github page or download it using git in your terminal:
      git clone git://
      If you need more help on a specific topic, feel free to post it here!
      Best, Paul

        1. Hi Gracie,

          I do not plan to implement STL repair at the moment. There’s probably some library that could be used for that, but at the moment some other things like a Windows port are more important to me. However, you can still file an issue on my github page and assign the feature request tag to it, so your request won’t be forgotten…

          Best wishes,

    1. Hi there,

      well, that might be tricky. I developed Monkeyprint for Linux so I do not know if it will work on Windows. You could just download it, install Python 2.7 and try to find the necessary libraries:


      Then, start Monkeyprint and tell me what the error messages say 😉
      As an alternative, try out Creation Workshop which is made for Windows.

      Good luck and best wishes,

  1. Hi, just found your software and site, and I love it. I definitely want to run MonkeyPrint. My question: is it compatible with a Arduino based 2560 board or will have to build the hardware as stated above?



    1. Dear Brett,

      thanks a lot for your interest in Monkeyprint 🙂

      By Arduino 2560 based board you mean something like the RAMPS 1.4 I reckon?

      In principle this is possible, as both connect to the PC via a virtual serial port.
      The problem is the communication between Monkeyprint and the firmware on that board (Marlin firmware for example). While probably all of those firmwares use G-code, the Monkeyprint firmware I use on my board just receives simple strings like “tilt” or “buildUp”. I did this because the actions that a DLP printer has to perform are so simple that G-code is just overpowered for this task.

      So there are three options:

      1: I would have to write a firmware for your board which is able to communicate with Monkeyprint. This would be pretty time consuming and also not very elegant.

      2: I could make the commands sent by Monkeyprint configurable. So you would have to find out what G-code commands you need to get your motors running, for example “G1 Z0.1” to lift your Z axis by 0.1 mm. Then these could be issued by Monkeyprint during the print process.

      3: You build the board that I use. There is a PCB layout to be posted in the next days. It is one layer and easy to build. Also, the components are a little cheaper than the whole RAMPS board…

      Just let me know what you think about it. As you can imagine I would prefer option 3 🙂

      I also would be really interested in your printer!

      Best, Paul

      1. Thanks for the reply. I guess I’ll try to build the board. I guess it’s just a little intimidating being that this will be the first PCB board that I’ve ever built. I think possibly offering pre-built boards is something that you may look into in the future. I’m still building my printer. I should have it up and running soon. I’ll post a link when I do.


        1. Hi Brett,

          good to hear you’re going to build the board.
          Rumor has it there will be a step by step tutorial on making the PCB and building the board coming up during the weekend 🙂


        2. Hi Brett,

          good to hear you’re going to build the board.

          A pre-built board is definitively on the list as well. Might be possible to get it done with Sparkfun. But there has to be a working prototype first and at the moment other things are more pressing…

          About your PCB making plans: Rumor has it there will be a step by step tutorial on making the PCB and building the board coming up during the weekend 🙂


  2. Can you update the installation part of the blog I am getting errors for both the old and the new version Can you please help me to install monkeyprint

    new version error

    Traceback (most recent call last):
    File “./”, line 25, in
    import monkeyprintGui
    File “/home/nerginer/code/monkeyprint/”, line 26, in
    import monkeyprintModelViewer
    File “/home/nerginer/code/monkeyprint/”, line 25, in
    import gtkGLExtVTKRenderWindowInteractor
    File “/home/nerginer/code/monkeyprint/”, line 23, in
    import gtk.gtkgl
    ImportError: No module named gtkgl

    old version error
    Traceback (most recent call last):
    File “./”, line 110, in
    view = modelHandling.modelViewer(root, console)
    File “/home/nerginer/code/monkeyold/monkeyprint-oldVersion/”, line 57, in __init__
    self.renderWindowInteractor = vtkTkRenderWindowInteractor(self.frameView, rw=self.renderWindow, width = viewWidth, height = viewHeight)
    File “/usr/lib/pymodules/python2.7/vtk/tk/”, line 48, in __init__
    File “/usr/lib/pymodules/python2.7/vtk/tk/”, line 15, in vtkLoadPythonTkWidgets
    if string.find(loaded, pkgname) >= 0:
    File “/usr/lib/python2.7/”, line 363, in find
    return s.find(*args)
    AttributeError: ‘tuple’ object has no attribute ‘find’

    1. Dear Nuri,

      sorry about the inconvenience.
      I forgot one dependency in the installation instructions: gtkglext1.
      Just do a sudo apt-get install python-gtkglext1 and you should be fine.

      I updated the installation instructions as well.

      Thank you for pointing out the mistake.

      ps: please do not use the old version, I will not support it anymore…

  3. Hello Paul

    I am interested in develop a 3D printer with 2 or more DLP projectors for big parts size. Is possible to run your software with 2 or more DLP projectors. Or is possible to divide the STL geometry and run each part with one program session / window.



    1. Dear Luís,

      printing on 2 or more projectors is not a problem as far as Monkeyprint is concerned.
      You can simply enter the combined size of your projectors in the settings menu.

      The challenge will be to perfectly align your projectors so that they do not overlap — which will lead to over exposure — but also do not show a gap — which will result in a gap in your part.

      Splitting an Stl into two parts and running two Monkeyprint instances is not the way to go as it would be tricky to synchronize the two instances…

      I hope this helps!


  4. Hi Paul,

    First of all, great job! Thanks for sharing with us all!
    Then, I ask you if you think there’s a chance it might work on a Raspberry Pi 3 (and how!). Also, might the Raspberry also replace the Arduino board?
    Please let me know, I am developing a new DLP printer with a super cool feature and I want to use your Monkeyprint software&hardware combination.

    1. Hi Eugenio,

      thanks a lot for your comment 🙂

      I don’t have a Raspberry Pi 3 yet, but I do not see why it shouldn’t work. However, I’m still working towards testing it on a Raspberry Pi 2, so I will make no promises at this point…
      The Pi will not replace the board because it is safer to keep all the low level stuff (stepper motor control, reading the end switches etc) on that board. If you do that stuff on the Pi and it hangs while your build platform is moving it might travel into your vat. The second reason I’m keeping the Arduino board is that I want to be able to use Monkeyprint without the Pi.

      If you make progress on your printer, think about posting some pictures here 🙂


      1. Hi Paul,

        Ok, your point about why not getting rid of Arduino is clear.
        So you are saying I can use a RaspPi instead of a “real” computer?
        Fantastic. I’ll try on a RP3 and tell you what happens.
        Let’s just keep in touch, I’ll share pictures of my printer as soon as it’s ready.
        Thanks again for your awesome work! Never give up!!

        1. Hi Eugenio,
          I’ve been pretty busy with other stuff over the last weeks, so sorry for the delay!
          Has your Raspberry Pi 3 arrived already? I’m just working on getting a print job running on my Pi 2 via Wifi. Looks promising so far, but still some work to do. I’ll write a new post once it works… I’d be happy if you could test it on your Pi 3 soon 🙂
          Best wishes,

  5. Hi, I just installed your software and it looks pretty cool. Unfortunately when I first run your program (on ubuntu) I encountered the following error message:

    glib.GError: Failed to open file ‘./logo.png’: No such file or directory

    I fixed this by downloading a random image of a potato and saving it as logo.png in monkeyprint-master. When I tried running it again it showed an image of the potato then continued to run perfectly. I’m not really bothered by this, I like my potatoes, but I just thought you should know about this.

    Anyway congrats on a cool peice of software, have a good day and good luck fixing this.

    1. Hi Billy,
      Thanks for trying out Monkeyprint and for pointing out the bug! Thought it would be cool to have a splash screen on start-up but forgot to commit the image itself… It’s fixed now, so if you get tired of the potato just pull the latest changes and it should work.
      Are you building your own printer and plan in using Monkeyprint?
      Thanks again and best wishes,

      1. Good to know I helped. I quite like my potato, so I think I’ll keep it.

        To answer your questions I’m building a printer similar to this: however I’m using a dc motor instead of a stepper motor. Mechanically all is working well, the cd drive seams to be fairly precise and the gearing allows for high precision and torque. My current program uses short pulses to drive the dc motor, this seams to be fairly reliable.

        Unfortunately no one has yet to create arduino software to drive a dc from 3d serial commands, so I’m creating my own software to interpret monkey print commands. I’ll send you a link when I’m done, you could maybe add it to your page if you like it.

        I’ll send a few pictures of my build when I’m finished, thanks for the quick reply.

        P.S. I’ve had time to have a through look through the program since the last time I commented and it looks really useful, I especially like the checklist that comes up right before you print.

        1. Well, can’t say nothing against a good ol’ potato 🙂

          Seems to be a cool instructable, the print results look promising…
          Depends on what your scrap box has to offer I guess.

          Is there a reason you prefer a DC motor?
          I can imagine at least a little trouble when the motor warms up and runs at different speeds at the same current.
          A simple solution to the problem would be a decoder disc on the motor (maybe before the gear to achieve higher resolution) to keep track of where your build platform is.

          When you make your Arduino software, make sure the printer sends a “Done\n” string after an action is completed (for example after homing the build platform).
          Monkeyprint waits for this and will only commence with the print process once the Arduino has signalled that it has finished.

          I’d be happy to link to your Github once you’re done or make a post about your printer 🙂

          The checklist you mention is great, isn’t it? One should always check if Everything Else is OK, not only for 3d printing 🙂

          Good luck with your printer, I’m looking forward to seeing your build!

  6. Hi Paul,
    as many others I’m at the point to choose a software for my DIY
    DLP-printer. I read earlier in the discussion that someone wanted to use monkeyprint with some different hardware. I actually got the same problem now. I build everything with standard components and choosed ramps 1.4 with Merlin firmware. I’m kind of stuck with it because I’d like to build some extra controls/mechanics to be driven by that board.
    I was hoping to be able to convince you to take another look at your software and finally make the commands it sends configurable.
    The reason why you wrote this software at the first place was probably because there was nothing really fitting for your system (besides creation workshop maybe ..or this raspberry thing- which of course depends on raspberry)
    I would say everybody gets to this point and if you are not a programmer the project (building your own printer) might become
    bigger and more expensive than you ever thought.
    If you would change this part of your software it would become the real thing I guess.. everybody would like to have it. It might become sort of a standard in this area. Of course it seems to be a little more work on your side – but it would help so many people if they had a real alternative to commercial products. Monkeyprint would be very popular I think.
    I’d be really happy if you could take this under concideration.

    ..thanx and have a nice day 🙂

    1. Hi Flokraft,

      thanks a lot for your thoughts on this topic and sorry for the delay…

      You are right, making the print commands configurable would make Monkeyprint much more versatile for a whole lot of people. The Ramps board seems to be a standard when it comes to 3d printers, so I do see the advantage in supporting that board (and probably others).
      Even before your comment I was convinced already that this should be a feature in the future.

      There is already an opportunity coming up for me to get my hands onto a complete printer equipped with the Ramps board, so it should only be a matter of time before the configurable print commands will find their way into Monkeyprint. Just like with my own board, the communication with Ramps is string based via USB I reckon (does it show up as a virtual serial port on your PC?), so it’s just a matter of providing ways to modify those strings in the GUI. Did you try sending gcode commands to the Ramps board via your terminal like this:
      echo "G1 Z50" > /dev/ttyACM0?

      However, before this happens I need to finish my current work on getting Monkeyprint to run from a Raspberry Pi to act like a print server. It’s almost done and there will finally be a new blog post about this soon. And then I will also need to find some time to do the thing that made me start all this: to finally build my own printer…

      Until the next update (make sure to subscribe to get notified 😉 ) and best wishes for your printer,

  7. Hi Paul,
    sorry it’s me with the late response.
    That sounds like good news for me.
    As you probably know ..the “build” process of your own printer
    is rather time consuming. I’m still constructing things.. and I’m procrastinating the actual software issue a little. So far I did some tests with “repetier host” and “simplyfy 3d” – software I use for my other ff-printer. I just needed to see if my steppers and the board are working. So yes and no ..I did send some commands via the software ..and no ..not directly with the console yet. I got a mini PC last week – the use of two projectors demands a little more powerful solution than a raspberry. I actually have to use python at my work from time to time.. but ..I don’t really want to spend so much time on it. And there is no need for new inventions as long there are people like you sharing their work. THANKS for that btw!!
    I hope I’ll soon be able to print my first object. And that’s gonna be the moment when I have to deal with the software.
    I’m sure I’ll get back to you ..and drop a line once I’m set and ready to go to test monkeyprint ..and/or add some lines of code to it for my specific printer-needs. 🙂 I’ll be pationately waiting for updates ..and maybe the timing fits perfectly.
    …so keep up the good work and mood


  8. Hi Paul,
    I just tested Monkeyprint on my laptop and saw how it works. It’s pretty nice and it could be usefull with my DLP printer if you could save the sliced images on a folder.
    Is it possible for you to implement this feature?

    1. Hi Roberto,
      saving the slices as images should be easily implemented. I just didn’t think that it might be useful until now. I’ll put it on the list.
      What kind of printer are you using?
      Kind regards,

  9. Hi,

    I wonder if would like to install on OSX , since it is similar to Linux . Could help me at that point. ?

    1. Hi Rafael,
      thanks for your comment!
      Unfortunately I don’t have a Mac at hand but in theory it should be possible.
      First of all you need to get all the necessary libraries I guess. They are stated on the monkeyprint page.
      I don’t really know about the installation procedure though…
      May start there and I can give you assistance if you encounter specific problems.
      Best luck,

  10. Hello Paul,

    pretty impressed by the work you´ve done here. I´m a long time CW user for my DLP printer, but i´m also limited by its missing features and the lack of progress which seems to be growing.
    I started with Linux a few days ago and will definately give it a try!

    One thing that makes me curious: Why did you develop your own board, when there are cheap RAMPS units? Would you be able and willing to assist migrating your software over to RAMPS? I have a friend which has some programming skills, so i´m not totally lost 🙂

    Kind regards

    1. Hi Daniel,

      thanks a lot for the nice comment!

      To answer your question:
      I made my own board for various reasons.
      First, at the time I started there were no cheap RAMPS boards around.
      I also had the impression that G-Code was simply too over-powered for the simple tasks that a DLP printer asks for.
      On the other hand it lacked some capabilities, for example the ability to send feedback back to the PC (e.g. when the build platform homing was done so Monkeyprint would know when to commence the print process).
      Well, and the most important reason was that I wanted to learn how it’s done 🙂

      In essence, my own board brings the freedom to implement every feature I like without any third party involved.

      While this is great, I recently received lots of inquiries from people who want to use a RAMPS board (mainly because they already have one, but also because I have not yet made a commercially available board).
      To meet this demand, I plan to implement a configurable print process that lets the user configure the commands that are sent to the board. This way, you should be able to also set up G-Code commands.
      So instead of your suggestion, migrating my firmware to a RAMPS board, I will make it possible to talk to a RAMPS board directly.

      I am receiveing a complete printer with RAMPS board in the near feature so I can start testing…
      If you want to help, it would be cool if you could provide the G-Code commands that you use for your print process including a description of what they are used for.

      If you want to stay updated on the development, consider to subscribe 🙂

      Best wishes,

      1. Hello Paul,

        thats awesome news 🙂 Thanks for taking that amount of time.

        I’ve been tinkering with Ubuntu 16.04 right now, running from a Live Disk as my internet connection is lost when installing Ubuntu. I downloaded Monkeyprint without any hassle, but i have a hard time getting the dependencies. I get some error messages… Do you happen to know a solution? Linux-Noob…:-/

        “ubuntu@ubuntu:~/Downloads/monkeyprint$ sudo apt-get install git-core libvtk5.8 libopencv-core2.4 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-scipy python-serial
        Reading package lists… Done
        Building dependency tree
        Reading state information… Done
        Package python-gtkglext1 is not available, but is referred to by another package.
        This may mean that the package is missing, has been obsoleted, or
        is only available from another source

        Package python-scipy is not available, but is referred to by another package.
        This may mean that the package is missing, has been obsoleted, or
        is only available from another source

        Package python-imaging is not available, but is referred to by another package.
        This may mean that the package is missing, has been obsoleted, or
        is only available from another source
        However the following packages replace it:

        E: Unable to locate package libvtk5.8
        E: Couldn’t find any package by glob ‘libvtk5.8’
        E: Couldn’t find any package by regex ‘libvtk5.8’
        E: Unable to locate package libopencv-core2.4
        E: Couldn’t find any package by glob ‘libopencv-core2.4’
        E: Couldn’t find any package by regex ‘libopencv-core2.4’
        E: Unable to locate package python-vtk
        E: Package ‘python-gtkglext1’ has no installation candidate
        E: Unable to locate package python-opencv
        E: Package ‘python-imaging’ has no installation candidate
        E: Package ‘python-scipy’ has no installation candidate”

        1. Hi Daniel,

          seems like you have not activated the necessary software sources.
          Simply run the following command to activate all Ubuntu sources (“Universe”, “Restricted” and “Multiverse”):

          sudo add-apt-repository "deb $(lsb_release -sc) main universe restricted multiverse"

          I hope this solves your issue! Please tell me if it works 🙂

          Thanks and good luck,

          1. Will try after work, thanks.

            If you need assistance getting a small batch of boards i may help you with that 😉 Either milling or laser etching is possible.

      2. Hello Paul,

        i´m not 100% confident on the GCode commands as i just use Creation Workshop, but here´s a list of what can be found in the software:

        ;********** Header Start ********
        ;Here you can set any G or M-Code which should be executed BEFORE the build process
        G21 ;Set units to be mm
        G91 ;Relative Positioning
        M17 ;Enable motors
        ;********** Header End **********

        ;********** Lift Sequence ********
        G1{$SlideTiltVal != 0? X$SlideTiltVal:} Z($ZLiftDist * $ZDir) F$ZLiftRate
        G1{$SlideTiltVal != 0? X($SlideTiltVal * -1):} Z(($LayerThickness-$ZLiftDist) * $ZDir) F$ZRetractRate
        ; %d$BlankTime
        ;********** Lift Sequence **********

        Is that of any relevance?

        1. Hi Daniel,

          thanks for posting the code!
          Looks like they are using some sort of expression to get some user defined variables (like the Z lift distance for the build platform $ZLiftDist) converted into G-Code. That’s essentially very similar to what I’m planning 🙂

          So G1{$SlideTiltVal != 0? X$SlideTiltVal:} Z($ZLiftDist * $ZDir) F$ZLiftRate basically moves the X axis (the slide or tilt mechanism) if $SlideTiltVal is not zero, then it moves the Z axis (the build platform) $ZLiftDist millimeters in direction $ZDir (which is probably 1 or -1) at a given speed $ZLiftRate.

          The next line, G1{$SlideTiltVal != 0? X($SlideTiltVal * -1):} Z(($LayerThickness-$ZLiftDist) * $ZDir) F$ZRetractRate simply moves the tilt / slide axis back and then moves the Z axis up by $LayerThickness-$ZLiftDist at a different speed.

          That’s quite interesting: they’re moving the build platform upwards just a little while tilting/sliding the vat, probably this helps separating the print from the vat floor.
          Then, they complete the desired layer thickness while the tilt/slide mechanism is moving back.

          Well, that’s probably not super hard to implement I guess, I simply need some time and a RAMPs board.
          Have you tried sending those commands directly via a terminal to the serial port that feeds your RAMPs board? Would be interesting to see if that works…


  11. hi paul
    error line 23 import vtk what?
    pi@raspberrypi:~/monkeyprint $ ./
    Traceback (most recent call last):
    File “./”, line 23, in
    import monkeyprintModelHandling
    File “/home/pi/monkeyprint/”, line 23, in
    import vtk
    ImportError: No module named vtk

    not runing ./ monkeyprint .py

    please help
    best regard.

    1. Hi there,

      seems like you didn’t install the dependencies.
      Simply run this:

      sudo apt-get install
      git-core libvtk5.8 libopencv-core2.4 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-scipy python-serial python-zmq

      I notice you are running Monkeyprint from a Raspberry Pi.
      If you intend to run it in server mode so that is accepts print jobs via network, you should run it like that:

      ./ --server

      Otherwise (if you want to run it in GUI mode to set up prints) ou should run it from your PC (I would recommend that for the moment).

      The Raspberry Pi version is pretty experimental still and requires some more to get it working properly.
      I’m still working on a blog post on this topic, so please be patient for a couple more days 🙂

      Best luck,

      1. hello mr paul
        very thanks.
        i install monkeyprint.
        but to test . i can not test electronical & steper motor.
        software runing but electoronic board not runing.
        Electronic circuit is correct.
        if Should I import g. code ?where?
        i can flshed monkeyprint Matching Instructions in menu bar /setting .& load file.stl &suport&slice&print runing & i see layers in view screen small. but step motor &tilt&shutter not runing.
        How can the right software to correlate pcb( arduino micro pro)?
        Is automatic communication frimware monkeyprint do?
        please help me.

        please send film your help for me
        very thanks. dear paul
        best regard.

        1. Hi there,

          thanks for your comment!
          In order to help you I’ll need some more info:

          Which board are you using?
          Did you build my Monkeyprint board?
          If so, did you successfully upload the firmware?

          Best wishes,

          1. hi paul
            i am using your
            pc board &monkeyprint software & monkey print bord ver 0.92 & but in time uploding firmware error :
            Exception in thread Thread-2:
            Traceback (most recent call last):
            File “/usr/lib/python2.7/”, line 810, in __bootstrap_inner
            File “/home/m/monkeyprint/”, line 830, in run
            avrdudeProcess = subprocess.Popen(avrdudeCommandList, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            File “/usr/lib/python2.7/”, line 710, in __init__
            errread, errwrite)
            File “/usr/lib/python2.7/”, line 1335, in _execute_child
            raise child_exception
            OSError: [Errno 2] No such file or directory

            please help me to runing & please send your email for me . for send picture board & wire &
            cable conected.
            best regard.

          2. Hi Amin,

            great to hear you’ve built the Monkeyprint board!
            I’m really looking forward to seeing some pictures 🙂
            If you don’t mind, you can simply post them here as a comment using the “img” button above the comment text editor.
            I’ve also sent you an email so that you have my address.

            Regarding your problem: seems that there is no avrdude installed on your machine.
            I forgot to mention that in the install instructions, so thanks for pointing it out!
            I’ve fixed the instructions now. You can install avrdude with the following command:

            sudo apt-get install avrdude

            If you want to upload the firmware, make sure to pull the Arduinos Reset pin to ground twice, otherwise it will not jump into the bootloader. After you’ve done so, you’ve got 10 seconds to start the firmware upload in Monkeyprint.

            I hope it works (please post the result here 🙂 )

            Kind regards,

  12. Hi paul
    I’m very excited with mokeyprint, i want make one by myself. But i’m very bad in electricity. Where i can buy a full part of mokeyprint include mokeyprint board, ubutu, and rasperry pi (if nessesary), and it all connect i just plus and play.
    Thank you 😀

  13. Hi Paul,
    I had plans of making something similar, but then I found monkeyprint and saw it is already there 🙂 Have you made any progress on the customizable G-Code side? Could you use some help with that? I have some experience with communication to GRBL and was planning to make a communication module for GRBL (and I found that bCNC (G-Code Sender) has a pretty nice implementation). Maybe I could help you a bit.

    BTW, I have tried to test monkeyprint and got it to run, but when I tried to load a .stl, I got the following error:

    Traceback (most recent call last):
    File “/home/sebste/Projekte/Software/Playground/monkeyprint/”, line 1721, in callbackLoad
    self.modelCollection.add(filename, filepath)
    File “/home/sebste/Projekte/Software/Playground/monkeyprint/”, line 544, in add
    self[modelId] = modelContainer(filenameOrSettings, self.programSettings, self.console)
    File “/home/sebste/Projekte/Software/Playground/monkeyprint/”, line 63, in __init__
    self.model = modelData(filename, self.settings, programSettings, self.console)
    File “/home/sebste/Projekte/Software/Playground/monkeyprint/”, line 857, in __init__
    self.slicerThread = backgroundSlicer(self.settings, self.programSettings, self.queueSlicerIn, self.queueSlicerOut, self.console)
    File “/home/sebste/Projekte/Software/Playground/monkeyprint/”, line 1953, in __init__
    AttributeError: SetInput

    Is this something you know already? Otherwise I will investigate it a little further when I can carve out some time.

    Take care

    1. Hi Sebastian,

      thanks for your comment 🙂
      Regarding the gCode implementation I was planning to make a settings dialog in the GUI that allows the user to set up his own print loop out of predefined and customizable commands.
      Predefined commands would be something like doing the exposure etc, while the customizable commands should be anything that gets sent to the stepper board, like moving the build platform. The user would then simply configure the gCode string that’s needed to do the action.
      This approach doesn’t need an actual gCode module, just some GUI coding and some new code for the print process.

      What do you mean by communication module?

      Regarding your error message: I think it’s a bug related to your VTK version (I’m guessing you are running version 6.x.x). I’ll make a fix today.
      I’ve created an issue on my github:
      You can subscribe to that issue I think, so you’ll get a notification once its solved.

      Thanks for pointing out the bug!


    2. Seems it’s not so super easy to fix as I thought.
      I’ll have to get VTK 6 first, unfortunately I’ll have to compile it as there’s no package available for my Ubuntu 12.04…
      I’ll get back to you once it’s done.

  14. hi paul
    please error after flashed frimware.

    Starting Monkeyprint with GUI.
    Connected to communication socket on tcp://
    Connecting file transmission server to tcp://
    File transmission server running.

    Traceback (most recent call last):
    File “/home/m/monkeyprint/”, line 1943, in callbackFlash
    File “/usr/lib/python2.7/”, line 739, in start
    raise RuntimeError(“threads can only be started once”)
    RuntimeError: threads can only be started once

    best regard.

    1. Hey Amin,

      that was a bug happening when you try to flash the firmware twice.
      Sorry about that and thanks for finding it 🙂

      It should be fixed now, so just pull the new version from Github. When you’re in the Monkeyprint directory, simply use the following command:

      git pull

      I hope it works!


  15. Hi,

    I have previously installed this program, however unfortunately I had to re-install my OS. When I tried installing it again I got these errors (on Ubuntu):

    E: Package ‘libvtk5.8’ has no installation candidate
    E: Package ‘libopencv-core2.4’ has no installation candidate

    I did a bit of looking around and saw both these packages have been updated, so I installed the updated packages. 3D objects can still be loaded, but the preview box now only shows me a black screen.

    Any idea when there will be a fix?

    1. Hi Bill,

      I guess you are now running Ubuntu 16.04.
      I think they changed to VTK version 5.10 and OpenCV 2.4v5.
      Try this:
      sudo apt-get install libvtk5.10 libopencv-core2.4v5

      I hope it works, please tell me if it does 🙂

      Best wishes,

      1. Hi,

        I’m one step closer…

        The packages are now recognized but I am now getting the follwing error:

        Starting Monkeyprint with GUI.
        Traceback (most recent call last):
        File “”, line 196, in
        File “”, line 79, in main
        File “”, line 95, in runGui
        File “/home/bil/monkeyprint/”, line 242, in readFile
        File “/home/bil/monkeyprint/”, line 221, in string2Setting
        self[strSplit[0]].setValue(strSplit[1]) # Use eval to turn string into object.
        KeyError: ‘G91’

        Thanks for your help.

        1. Hi again,

          that was a bug with the settings file that stores all your settings.
          Please pull the latest version from github and delete the file programSettings.txt in your Monkeyprint directory. That should do it…
          Thanks for pointing out the bug 🙂

          Best wishes,

          1. Thanks,

            The program is running now. Unfortunately the slicing is not working correctly, in the slice preview window, I only see a square filled with static with a black border. I can send a photo if needed.

          2. Hi Bill,

            you should indeed post a screenshot.
            If your model is big and/or your computer is slow it might be that Monkeyprint just didn’t finish slicing which will look like a noisy box just the size of your model.
            If that’s the case there should be a message like ‘Slicer started’ in the message window on the right.

            If it still doesn’t work, please start Monkeyprint from a terminal using the -d-flag for debug mode. Then, you can see the output of the slicer while it is running in the terminal.
            I am already working on the slicer code to make it more responsive…

            Thanks for trying Monkeyprint anyway!


    1. Hi Necmettin,

      I’ve had a look at the LightCrafter 4500 and am not exactly sure if this can be controlled with Monkeyprint. It looks like you have to use TI’s program to upload images directly into the firmware. If it has a HDMI or DVI input things would be different, but I think it has none of these.
      Furthermore, the LightCrafter is super expensive regarding the fact it only features WXGA resolution.
      Better use the 2000 bucks and get yourself a top notch super high brightness Full HD projector…

      Best regards,

  16. Hi Paul, I downloaded monkey print tonight and it is beautiful!

    Can intersecting geometry be treated as one solid piece in the slicer? I know nano dlp does this, maybe by screening each white cross section ontop of eachother?


    1. Dear Vaughan,
      thanks for the nice comment!
      As you assume, intersechting parts will be unified, resulting in one part. You can think of a logic “Or” Operation between all slice images from individual models. However, intersecting parts of the same model (read: same stl file) might be unified as well if each of them is watertight, but I haven’t yet tested this.
      BTW, there’s a new release with a much better slicer (doesn’t crash all the time and is faster) in the release branch.

      I’ve checked out your website, nice modelling work! If you slice or even print some of your models with Monkeyprint, I would be pleased to have some pictures uploaded here!

      Best, Paul

    2. Hi Vaughan,
      sorry, I didn’t see the picture you attached — which proves that it doesn’t work the way I thought. Well, I’ve just published a new release with a fix for that. Enjoy 🙂


    3. Ahhhhrgg, my updated code now ignores nested slice contours… So if you slice a pipe, your slice image shows a circle instead of a ring. Seems like it’s not too easy to keep intersections and nested contours apart. I’ll have to investigate a little further…


        1. Hey Vaughan,

          the bike looks awesome!

          I’ve created a feature request regarding the handling of multiple solid stls. You can watch it here.
          There’s a subscribe button on the right, click it to be notified once the issue is solved.


  17. Hello Paul,
    They are very inexperienced ubuntu; I’m trying to install monkeyprint but I get this error message.
    Thanks in advance for the help

    ale @ ale-MS-7A70: ~ $ sudo apt-get install git-core libvtk5.10 libopencv-core2.4v5 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-SciPy python-serial python-zmq avrdude
    [Sudo] ale password:
    Reading package lists … Done
    dependency tree generation
    Reading state information … Done
    The python-vtk Package not available, but is referred to by another
    package. This may indicate that the package is missing, obsolete
    or it is only available from another source

    The libvtk5.10 Package not available, but is referred to by another
    package. This may indicate that the package is missing, obsolete
    or it is only available from another source

    E: The “libvtk5.10” package has no installation candidate
    E: The “python-vtk” package has no installation candidate

    1. Hi Alessandro,

      seems like you have an older Ubuntu version, you could try this:
      sudo apt-get install git-core libvtk5.8 libopencv-core2.4 python2.7 python-vtk python-gtkglext1 python-numpy python-opencv python-imaging python-scipy python-serial python-zmq avrdude

      Does it work?


      1. Thanks for the reply!
        Still I do not see me libvtk5.8, but I installed libvtk6 and monkeyprint starts …
        Unfortunately now I get this error!
        Thank you again
        Starting Monkeyprint with GUI.
        Monkeyprint version 0.13.0
        ERROR: In /build/vtk6-v8B4CW/vtk6-6.3.0+dfsg1/Rendering/OpenGL/vtkOpenGLTexture.cxx, line 200
        vtkOpenGLTexture (0x5589d8da2de0): No scalar values ​​found for texture input!

        ERROR: In /build/vtk6-v8B4CW/vtk6-6.3.0+dfsg1/Rendering/OpenGL/vtkOpenGLTexture.cxx, line 200
        vtkOpenGLTexture (0x5589d8dba8b0): No scalar values ​​found for texture input!

        ERROR: In /build/vtk6-v8B4CW/vtk6-6.3.0+dfsg1/Rendering/OpenGL/vtkOpenGLTexture.cxx, line 200
        vtkOpenGLTexture (0x5589d8dd0b50): No scalar values ​​found for texture input!

        ERROR: In /build/vtk6-v8B4CW/vtk6-6.3.0+dfsg1/Rendering/OpenGL/vtkOpenGLTexture.cxx, line 200
        vtkOpenGLTexture (0x5589d8df06e0): No scalar values ​​found for texture input!

        The program ‘’ received an X Window System error.
        This probably Reflects a bug in the program.
        The error was ‘BadMatch (invalid parameter attributes)’.
        (Details: serial 624 error_code 8 request_code 155 minor_code 11)
        (Note to programmers: normally, X errors are reported asynchronously;
        That is, you will receive the error a while after causing it.
        To debug your program, run it with the –sync command line
        option to change this behavior. You can then get a meaningful
        backtrace from your debugger if you break on the gdk_x_error () function.)

        1. Hi Alessandro,
          sorry for the delay. Could you please post your Linux version so I can try to replicate this bug on my machine?
          Best, Paul

  18. can you send commands via to a usb based projector such as the Acer x112?? we would like to use the software on a raspberry pi 3 but it only has one HDMI butthe Acer x112 uses USB connection to a pc to project a screen image…

    1. Hi Andrew,

      no, that’s not possible. Not because it could not be implemented, but simply because afaik there is no projector with a USB video input.
      I guess the USB connector on your Acer x112 is for sending keyboard commands from the projectors IR remote to your PC. Please correct me if I’m wrong and you actually tested this…

      Best, Paul

  19. Hi Paul, Thank you very much for helping all of us , i like your dlp 3d printer and i like to build one for myself i start to buy compenents and buil monkey prind bord. i wil post when i finish it one question i use windows is it possiable to use monkey print with windows 10 ? Thanks a lot …
    All my best

  20. Hi Paul,

    Since I wanna build LCD based 3D Printer, is it possible to swap your end stop to induction sensor?

    and how was your windows version progress? I just can’t wait :))


Leave a Reply

Your email address will not be published. Required fields are marked *