CinePaint Design for the Future

A look at upcoming features for the free open source deep paint program

By Robin Rowe

Image from "How to Draw the Head at Any Angle"

Image from "How to Draw the Head at Any Angle"

LONDON, ENGLAND ( 2011/12/20 – When you take an old car and replace the engine and drivetrain with modern high performance components, it becomes what’s known as a “sleeper”. It may look like nothing special on the outside, but boy is it fast. If there’s a software equivalent to the sleeper, it’s CinePaint. CinePaint was created by taking an existing open source paint app and replacing its low fidelity 8-bit core with an image engine that handles 8-bit, 16-bit and 32-bit high dynamic range channels.


As I work on the version 1.1 release of CinePaint, I’ve been giving thought to what CinePaint may offer in the future. Because CinePaint was originally based on the code of another open source project, even was intended by some Hollywood sponsors of that work to be version 2.0 of that software, very little was changed on the outside. There’s a lot I’d like to do on the outside of CinePaint, but first let’s talk about the inside.

CinePaint  Multi-bit Image Engine

CinePaint will continue to have a multi-bit engine. Some programs support deep paint by setting bittishness at compile time. You can have an 8-bit or a 16-bit core in ImageMagick, for example, but not both. It depends upon how ImageMagick was compiled. CinePaint has a true multi-bit engine where bittishness is chosen at runtime depending on the needs of an image. When you open a JPEG,  CinePaint will allocate 8-bit channels for it because that’s what the image holds. When you open a 16-bit TIFF, it will allocate 16-bit channels.

At present, CinePaint supports unsigned 8-bit, binary fixed point 16-bit, half float 16-bit and float 32-bit. That’s a lot of flexibility in channel allocation, but not quite as much as we’d like. OpenEXR files may contain unsigned 32-bit channels and TIFF may have unsigned 64-bit channels. It would be nice to be able to open those in CinePaint without a loss of fidelity.

Comic Book, Anime and Fashion Illustration, Heads at Any Angle

Adding to ideas expressed in an earlier story, it would be nice to have an interface that supports pulling images from a library of art created by the artist, such as having a character’s head drawn at many different angles. This would enable an artist to quickly drag in previously drawn elements to quickly build an illustration. It would be nice to be able to mirror clone when half of a face is drawn in order to quickly draw the other half.


There’s a lot that could be done to make architectural drawing easier. One would be a cross-hatch brush that would draw parrallel lines at a fixed separation locked to the background position so that drawing later with the same brush will line up perfectly. The angle of the cross-hatch would be a setting on the brush. Another important brush for architecture would be a perspective brush that draws straight lines according to the horizon specified by the artist for the picture. At zero degrees it would become a railings brush and have no crossing lines. There could also be brushes that draw boxes with proper geometry per the background horizon. There could be a clone brush that copies with perspective, whether it’s drawing bricks or a window that needs to be repeated across a building.

Roto and Tracking

Adobe After Effects has an excellent auto-roto feature that will separate foreground objects from their background. Surprisingly, Photoshop does not. It would be nice if CinePaint had auto-roto. It’s not surprising that Photoshop doesn’t have tracking and image stabilization like After Effects. It would be nice if CinePaint did.


There’s a plug-in for painting colors from a similar photo onto a B&W image. Would be nice to have that type of thing as a standard clone brush feature.

Slides and Sequences

CinePaint’s flipbook can be used as a PowerPoint-style slide presenter. That could be further developed. While you can load a sequence of numbered images in CinePaint, there’s no way to save that sequence as a sequence. It would be nice if it would.


In addition to the architecture brushes already described, it would be nice to have brushes that draw borders and to paint Apple-style liquid buttons. It would be nice to have a bucket brush that bucket fills but will not seek out through gaps smaller than the size of the brush. It would be nice to have a “sloppy” setting on the brush the can exaggerate or reduce the jitter with which a line is hand drawn, something like in Smart Sketch. There could be brushes that draw flowers or any randomly repeating “image tube” as in PaintShop Pro. As the brush paints it lays down the next image (or flower) in the tube. Another nice brush would be a human pores brush that adds pores to portraits that have been magnified.


It would be nice to have a magnifying glass like Apple Aperture.


It would be nice to support such things as keeping accounting data for the time spent working on an image.

Vector Graphics and Type

Artists seem to agree that moving between Adobe Illustrator and Photoshop is inconvenient, that we’d rather do to one app to paint. However, mixing vector graphics and rasters gets messy. A solution is to put vector objects, including type, in a separate layer.

Adjustment Layers and Nodes

It would be nice to have adjustment layers, that is, layers that dynamically enhance the image below instead of changing the layer with a filter. Layers and nodes can be thought of like waves and particles in physics. They’re two ways of looking at the same thing and yet seem quite different. It would be nice if CinePaint displayed nodes.


CinePaint has supported many scripting languages, but it hasn’t been a satisfactory user experience. Preferably, CinePaint would record macros/scripts implicitly and at all times like Apple Shake. That would be a better solution than the Adobe Photoshop macro recorder that requires the user to decide when to record a macro first. Taking scripts a step further, it would be nice to have a text-based way to create image files. For example, to be able to quickly snap together a color bars image from a text description of the sizes and colors of the bars.


CinePaint has a flipbook movie player, but no sound. It would be nice to have JACK support so external JACK-compatible sound tools like Traverso would play in sync.

High Fidelity Color

CinePaint has a RGBA color space by default. Work’s been done to support advanced color management and other color spaces such as CMYK in CinePaint. It requires a domain expert in the printing industry to really get this right. Enhancements provided by a German open source developer have been difficult for CinePaint users to comprehend. To advance in this area we first need a color expert who speaks English, someone who can explain to me what we really need in the color interface and who can test that we got it implemented right.

Leave a Reply