Monkeyprint: all new and shiny DLP printer software

Good things come to those who wait! After weeks of fiddling and coding my Monkeyprint DLP printer software has undergone a complete makeover and now comes along with improved user-friendliness and a bunch of new features….

Monkeyprint 0.9 is up and alive!

To see the new version of my Monkeyprint DLP printer software in action check out this new video on Vimeo.  Music by

General improvements

The most notable improvement is that Monkeyprint is now based on GTK+ 2. Besides the fact that it looks much better, it will be able to run on a wider variety of linux distributions.

Other than that there now is multiple object printing support and all the settings and options have been included in the GUI. And the best thing: the firmware for the Monkeyprint controller board is now available and provides a seamless link between Monkeyprint and the controller board.

  • 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.


There’s a couple more new features, so check out the list below!

Model management

The model management code behind the Monkeyprint DLP printer software has been redone almost completely. This allows for some cool new features:

  • Multi-model prints: you can now load more than one model onto the build platform. Each of the models is individually configurable regarding it’s placement, orientation, scaling, supports and fill structures.
  • Build job files: once you have created your build job, you can now save it to file and store it for later use including all the settings.
  • Selective building: You don’t want to build all of the models currently in your build job? Simply activate or deactivate individual models on your build platform.

Monkeyprint settings

In the previous version all the settings were defined in a text file. This made the configuration cumbersome and rendered Monkeyprint pretty much unusable for the ordinary user. Until now…

Screenshot of Monkeyprint software showing a dialog with text boxes for a variety of 3d printer settings
Monkeyprint now offers easy configuration of all the settings relevant for setting up your 3d DLP printer.
  • Settings menu: simply edit your settings like your projector resolution, stepper configuration or serial port inside of a new settings dialog.
  • Default settings: you configured something wrong and don’t know what to do? Simply go back to default settings and start over.
  • Relax: your settings are saved on program exit and restored on restart.

Monkeyprint controller board firmware

Getting your own DLP printer controller board to work is now only a matter of soldering together some inexpensive bits and pieces. The Monkeyprint DLP printer software does the rest as it now includes the firmware needed to breathe some life into your controller board.

Screenshot showing the Monkeyprint software's firmware upload dialog.
Easily upload the Monkeyprint firmware onto your Arduino Pro Micro via the firmware dialog. The firmware comes with your Monkeyprint download so you are good to go in no time.
  • Motion control: Control of build platform (homing, moving layers etc), tilt mechanism and (coming soon) the shutter servo that blocks excess light from the projector.
  • Camera trigger: What’s a 3d printer without capability to record time lapse videos of your print? Simply connect your cam, the firmware will trigger it for you with every slice.
  • Projector control: Connect your projector’s serial port to the controller board. The firmware will activate it before the build and shut it down afterwards.
  • Firmware flash dialog: Flash the monkeyprint firmware right onto your Arduino Pro Micro using the firmware dialog found in the Settings menu.

Where can I get it?

You can download the latest Monkeyprint from my Github repository. To download Monkeyprint, simply start a terminal and type:
git clone git://

This will download Monkeyprint to your current directory. You will also have to install VTK and OpenCV libraries.  I will update the installation instructions shortly.

Next steps

Well, rewriting my Monkeyprint DLP printer software was quite a heap of work that kept me from advancing with my DLP printer design. However, there still needs to be some sort of manual on how to set up and use Monkeyprint as well as more detailed controller board schematics. I’m also thinking about designing a PCB for the controller board which should make it easier to build your own 3d DLP printer!

Do you already use or plan on using Monkeyprint? What would be interesting for you? Tell me in the comments!

18 thoughts on “Monkeyprint: all new and shiny DLP printer software”

  1. I know your current printer arrangement is “bottom up”, are there options available for “top down” printer in the software, to disable tilting

    1. Dear Rayon,

      thanks for your comment!
      Disabling tilting is not a problem, I will include an option in the settings dialog.
      Is there anything else that would be needed for a top down process? I can imagine that the build platform would have to move differently to submerge the print in the resin. Or is there some sort of wiper to spread new resin over the print for a new layer to be printed?


      1. Some small 3d printer setup’s with small built area that I have seen online, persons have obtained good quality prints for top down setup without a wiper. However a optional wiper system could be implement if the user desire to built a 3d printer with a larger built area. I think it should be optional, so that the user can enable or disable it for top down design

        1. Well, I’ve included an option to enable or disable tilt. Can you post some links to wiper set-ups that you could imagine to use? Then we could think about how the tilt stepper can be utilized to drive the wiper instead of the tilt mechanism.
          Happy new year and best wishes,

  2. I have found some videos of the wiper in operation. A linear rail system is use with a stepper motor to move the wiper back and forth.

    There is another problem the i see if we use the top down design with your software, and it is the infill pattern that your software generate after slicing. This infill will cause the resin to be trapped during and after the printing is complete. This could be resolved if the user can make the inside of the 3d object hollow on the inside with no infill pattern and the user can place a small hole somewhere strategically to let the all the resin drain out. or select a solid infill. Both options would be great to have. Tell me what you think about this.

    1. The infill or hollowing can simply be disabled in the software (in the slicing tab), so no problem there… I made the infill only to reduce the sticking forces on the vat floor — which you don’t have in the top down approach anyways.
      I think the wiper motion can be implemented as well by simply using the stepper which I use for the vat tilt motion. I can implement an option to switch between tilt (stepper turns a given angle and returns to end stop) and wipe (stepper goes back and forth between two end stops). You can then simply connect two end stops to the tilt end stop port of the micro controller and the wiper will go back or forth between those on each wipe command.
      Are you building a printer at the moment?

  3. Hi Paul,
    This Looks great. I like the 2D operations which can be extended with projector mask filtering. As you know projectors have hot spot and the light distribution is not uniform. You can add a mask image to every layer to make hot spot a little bit darker.

    I have ideas to determine the projector hot spot. Every projector has their own hot spot.

    if you interested in this topic we can discus.

    Making this effort open source is great please keep it open.

    1. Hi Nuri,

      I’ve also looked into this topic before when we build our last DLP printer.
      With the Acer H6510BD that we used there was a brighness fall-off of only 2% between center and corners (which surprised me a bit I have to say). So I did not include a calibration option into the software.

      Did you experience stronger fall-off values with your projectors? Then it would make sense to implement an option to account for the light intensity deviation.

      It could be something simple like subtracting the projector light intensity image (that has to be recorded beforehand) from the individual slice images. If the light intensity image values are shifted so that the corners are black and the middle is just a little lighter than black then we would end up with a slice image that is just white in the corners and a little grayish in the center after the subtraction.

      What do you think?


      1. I have Vivitek D535 projector in my hand. It is optically modified. And It has hot spot. For smaller layer heights this can be an issue. You have to decrease the exposure time to get thin layers this cause some parts not to solidify. You are very good at image manipulations so coding is not so difficult. The hard part is to determine the mask image. I am working on taking photo with filters which lets uv wavelength in and filter the others. We can also use a uv sensor and get samples over the surface of the tray.

        An other point I want to discuss with you is putting Raspi inside the machine. This is essential for me. Plating, support planning and slicing can be done with desktop PC but the printing loop must run on Raspi. A printing job file including images can be transferred to the Raspi via web browser. You can separate these two software parts to keep this project simple. What do you think?


        1. Dear Nuri,

          both topics seem pretty interesting to me.
          Implementing the calibration image would not be that hard indeed, I’ll put it on the list.
          Once you have recorded your calibration image send it to me and I’ll give it a try.

          Regarding the Raspberry Pi: as you can see in some previous posts I already thought about that and I’m pretty keen on this feature too.
          The steps to achieve this are:
          – Implement a stand-alone version of the print process (easy)
          – Implement the connection between PC and Raspberry Pi
          The 2nd step is not very clear to me yet. It might work using ftp to transfer the job file to the Pi and ssh to start the print process.

          Can you elaborate on the transfer of job files via web browser? The best, i.e. most elegant and user friendly thing would be a transfer from inside Monkeyprint — but a web based thing could be used as an interim solution to get things going. What do you say?

          Best wishes,

  4. Hi Paul,

    I have started to develop some nodejs web server code that runs on Raspi and let you to send job-files (zip file containing layer images) and chose some printing settings. It is not finished yet but I can share with you if you want.

    If you can finish Implementing a stand-alone version of the print process combining those two can be an interesting solution.

    Later on you can develop native communication between monkeyprint and Raspi

    Best wishes,

  5. Hi, Paul

    Sorry for the late response, yes I am currently building a top down printer. I am just waiting for parts and materials to complete my project. I like the options you have provided in your software to users, I think it is great!

  6. Hi Paul,

    Congratulation for this great work!
    I’m about to build my own DLP printer. Coming from the MuVE 3D printer where I’m not happy with the software I’m highly interested on your project.
    I build my mechanics with linear rails of course but with closed loop servo motors for ultimate accuracy in the Z-axes.

    The projector is a OPTOMA EH416 with stunning 20’000:1 contrast ratio. If you can tell me how to send photos to you I’ll send you some of my machine.

    For the tilt mechanics I’m using a powerful RC servo. The servo presses the VAT into a fixed position with a spring in it’s control arm. Is there a way to add the possibilty to control a RC servo instead of a stepper motor for the VAT tilting? It might be better controlable, a easier mechanics and pretty much cheaper. Stepper motors are loosing steps some times and the end position could loose it’s precise positioning. Springs in the servo arm can fix this problem . My machine is very smart in it’s construction and I’d like to show and maybe share it with you.
    Sorry for my poor English.

    1. Hi Bruno,

      thanks a lot for your comment!

      I’d love to see your machine, so if you don’t mind sharing the pictures here you can simply post them in a comment using the IMG button in the editor top bar.

      I’ve also sent you an email so you have my address…

      Good idea using a fixed mechanical end stop in combination with a spring on the actuator. We’ve done the same in the Groningen printer using an RC car suspension unit connected to the eccentric axle of a stepper motor.

      An electric end stop will be sufficient as well because then it is irrelevant if the stepper lost steps.
      Using a servo can theoretically be done if I can find the time to implement it in the software/firmware. The connections are there already if the tilt stepper driver is removed…

      It would be cool if you could file a feature request in my github so I can keep track of peoples desires regarding the software. Simply open an issue and apply the feature request tag to it.

      Thanks and please keep us updated about your printer build!

      Best wishes,

  7. Hi Paul,
    I’ll do so. You’ll get alot more and I have a few other ideas.
    The POLOLU controllers are not very powerful and so it’s possible to loose a few steps at each revolving. If you have only e few dozens of them it will be no problem. If you have a few hundret movings it becomes a bigger problem.
    The solution for this might be a synchronisation after each revolving with a reference switch.
    A Servo has no such problems. The controller software could made ajustable for the moving angle that the servo is stalling against the spring coil. This will compensate each mechanical disajustement in case of rising temperature and other mechanical problems.
    Aditionally the tilt speed could be made with progressive speed for smoother moving. High quality digital servos are able to handle that all perfectly.

    Keep in touch and kind regards


  8. Hi Paul,

    Thank you very much for your great work and the implementation for RC servo tilting. With the ARDUINO MEGA 2560 and the RAMPS board all is pretty much easier to handle. The mechanics of my selfmade 3D printer is nearly finish. All what is left to do is the servo mount.
    If you could compile your code for WINDOWS would be great. I’m not very familiar with LINUX but I can handle it .

    Kind regards


Leave a Reply

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