Portrait Painter

An autonomous robot for paint portrait with oils.

Similar projects worth following
I dream for this project for many years, and now I decide share it with all people in Hackaday because I understand this itsn't a project for doing alone.

I'm a portraits painter, I know the technics to paint a portrait with an acceptable level. But I'm a Maker too, and for many many years I dream with a robot capable to paint in an autonomous way, portraits.

I choose OIL as medium because it's de medium I use for my portraits, and because give as the possibility to correct and adjust all the times that we need.

Many times I have thought It's a crazy project, but I can see many people doing similar things. In fact the university of Konstanz the project eDavid, work developing a portraits' painter robot from more than eight years ago, expending a lot of money, and almost infinite resources.

In the opposite corner, Patrick Tresset develope PAUL, an inexpensive robotic arm, with the enough ability to draw an sketch of the human face.

This works are in a undoubted way, a good inspiration for my project. And I will be happy if I can develop a solution in the middle off this extremes.

Start point

I think that a good beginning would be to identify all the aspects involved in the project.

We can consider three general aspects: mechanics, electronics and software.

Mechanics: The most suitable mechanical device, it would be undoubtedly, a robotic arm, but it is very expensive and complicated to construct, if we claim a certain accuracy. For this motive I think that it would be more suitable to use a Cartesian machine that is simpler, cheap and easy to control.

Electronics: I think that a Raspberry Pi would be sufficient to control the whole device. Probably an Arduino, to control the mechanical parts.

Software: Undoubtedly one of the most complicated aspects. Reading several works on NPR (Non-Photorealistic Rendering), which adapts better to my idea is the writing for Aaron Hertzmann, who proposes an algorithm to turn an image into a series of curved brushstrokes. His algorithm realizes this task very efficiently transforming a photography into a painting of impressionistic, very convincing style.

The language, initially it might be "processing", since it can be loaded in the Raspberry Pi and use all the available library, for example OpenCV for the image processing.

We will need to control also the mechanisms. If we use an arduino for this task we will have to write the sketches of arduino and also routines of communication with the Raspberry Pi, to manage the bidirectional flow of information.

From general to particular

These three aspects are the first approximation to the problem. Certainly very general. To approach a practical solution we would have to do a detailed list of all the tasks that our device will have to realize.

The list

Some of the tasks:

- Brushstrokes' generation - Translate brushstrokes coordinate to gcode to send to the CNC machine . - send gcode to the CNC machine - move the paintbrush to reproduce the brushstrokes - take an specific oil colour with the paintbrush - clean the paintbrush - change the paintbrush- and many others.

All these tasks are relatively easy to do. Solutions exist to similar problems or can be solved with a bit of programming or designing some specific actuador. But there is a task that is not in this list, which is....

The great challenge

Which is the great challenge?.......

The great challenge it's MIXING COLOURS.

In one of the task mentioned above we said: "take an specific oil colour with the paintbrush". We need mix diferent colours to obtein this especific colour, and it's a very difficult task.

It's necessary define many sub-task and solve one at a time.
For instance: Each brushstroke have a color and we must make this color with oils. For this, we need a device who take some amount of paint of one colour with the brush,(one of the components of the final colour), put in a surface, clean the brush, take some amount of paint of other colour (other of the components), and so on. When we have all the components, mix all of them, and obtein the final colour. Now we need verify that this colour it's the colour we want (with a camera or color sensor with an...

Read more »


Explanation about procces for mixing colors

Adobe Portable Document Format - 1.84 MB - 12/19/2017 at 15:20



Portrait secuence of my first attemp with paint.

Adobe Portable Document Format - 14.21 MB - 05/22/2017 at 00:14



An idea of what could be the container for oil

Portable Network Graphics (PNG) - 81.85 kB - 01/22/2017 at 22:32


links robotart.txt

Some intersting links about competition of robots painters

plain - 484.00 bytes - 01/19/2017 at 17:02


  • Portrait Painter Robot Project

    jvsalatino04/23/2018 at 17:17 1 comment

    Maker Faire Rome 2017. David Cuartielles observing attentively how the robot painter makes his portrait

  • Robotart Competition

    jvsalatino04/20/2018 at 13:40 0 comments

    Hello, I wanted to tell you that this project is participating in this contest: and I wanted to ask you if you can vote for my portraits. You can vote through Facebook. I have sent 4 portraits and you have to vote individually and you can give up to 3 votes each. In this concussion I am competing with universities and even with the M.I.T. Beyond winning, being in this type of events helps my project a lot, so if you can give it a little diffusion it would be fantastic. In the attached image are the four portraits sent. In the link you can see a little the history of each one and a video of its execution. Share it with everyone you want. Thank you very much. Vote for me !!!!

  • Multi Brush

    jvsalatino08/10/2017 at 22:37 0 comments

    I upload this video to show the new version of the robot. Now  have four brushes of different size and

    can select them automatically to paint brushstrokes of different thickness

  • Maker Faire Barcelona 2017

    jvsalatino06/06/2017 at 18:05 2 comments
  • First attemp

    jvsalatino05/22/2017 at 00:19 0 comments

    I have built a prototype to test the algorithms and I have done this test.

    The results in "secuencia_retratos.pdf" file

  • Why HSB color mode?

    jvsalatino01/20/2017 at 19:24 0 comments

    Why HSB color mode?
    We are accustomed to using the RGB color model to define the color of
    our applications and it is unusual to hear about the HSB color mode.

    This mode allows us to define a color using the physical parameters that define any color.
    "H" is the color in itself, without any alteration. "S" is the saturation, ie the purity of the color. And "B" is the brightness, that is if it is lighter or darker.

    IF we take any color, and we express it in its RGB components, for example: R = 115, G = 75, B = 187, and then we take red, green and blue oil painting and mix quantities proportional to those values and We mix, we will not get by any chance the desired color.
    The reason is that the RGB color mode is based on the additive synthesis (mixture of lights), while when we want to achieve a certain color by mixing pigments, we use subtractive synthesis.
    In the "FILES" section, you will find a file called "proccess.pdf", where I try to explain how to use the HSB color mode to obtain the necessary information for pigment mixing.

    These videos are

    experiments I did long ago to verify that color information can be used

    using the HSB color mode to control a mechanical device.

    Enjoy them , wait for your feedback. thanks for read.

View all 6 project logs

Enjoy this project?



GeraldCruz wrote 09/20/2023 at 09:17 point

The Portrait Painter is a remarkable innovation, an autonomous robot capable of creating stunning oil portraits. This merging of technology and artistry is truly fascinating. Using its precision and programming, it can replicate intricate details and capture the essence of the subject. The blend of robotics and traditional painting techniques opens up new possibilities in the art world. To learn more about the intersection of art and technology, visit  for in-depth insights and discussions on creative advancements like the Portrait Painter. It's an exciting time for art and technology enthusiasts alike!

  Are you sure? yes | no

Jacob MacLeod wrote 10/14/2019 at 15:33 point

This is so cool! Do you you could train a neural network to create specific types of pictures, like a cityscape or landscape from a dataset of cityscapes/landscapes to give to the robot to paint?

  Are you sure? yes | no

John Opsahl wrote 08/20/2019 at 14:47 point

Any chance you would be willing to share the process you use to convert digital images to paint strokes? 

  Are you sure? yes | no

jvsalatino wrote 10/15/2019 at 08:44 point

If You see the files section, You can find some information about the basic aspects of the  process.  It's a work in progress. I don't finish the software jet.

  Are you sure? yes | no

John Opsahl wrote 08/20/2019 at 14:46 point

I found this article on predicting subtractive color mixing results using reflectance curves: Thought it might be useful to you if you are still working on the paint color mixing problem. 

  Are you sure? yes | no

jvsalatino wrote 10/15/2019 at 08:39 point


  Are you sure? yes | no

jvsalatino wrote 01/20/2017 at 20:26 point

Thanks a lot for your comments. 

This is the idea of share this project. I need all the people who have something to say about it. About CMYK+W mixing to obtain any color it's correct but the all master painter don't use it, and I want try make a robot capable to obtain the desire color with the traditional method. I follow the link of the robotic arm thor, it's an intersting idea. My comment about robotics arms was because almost all the actual projects of robots painter use very expensive industrial robotics arms. About RGB -> HSB I solved too this problem. I wait ansious for your electromagnetic "Pneumatic" cylinders . and wait too for more comments Thanks again. Sorry for my english.

  Are you sure? yes | no

Krzysztof wrote 01/20/2017 at 20:04 point

Mixing colors: how thick are your paints? Like wood glue or thicker? If they can be pumped with peristaltic pump you could just dose a little of CMYK+W paints into small container, mix it with your brush and paint. When other color is needed, you could just wash container and brush with water (even wash the brush in the same container). Or you could mix paints on some paper tape which would be "scrolled".

Robot arm: have you seen thor?

Also I'm working on electromagnetic "pneumatic" cylinders which should make such robot as easy as cutting out some shapes from wood and connecting them with rods. Will update you soon and post it on HaD.

Path planning (for strokes): If only I had more free time... I think you will find someone who could do it.

HSB: rgb and others can be translated back and forth almost without loss, for programmers it's a "solved" problem, requires just including some free library (there are dozens of them).

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates