PaintFromRef

PaintFromRef turns any image into a standalone, fully editable RotoPaint node using thousands of painterly brush strokes.

First submitted: 1 September 2026

Author: Marty Blumen

Website: https://www.martyblumen.com/

Compatible Nuke versions: 14.0 or later

Compatibility: Source

PaintFromRef turns a reference image into a fully editable RotoPaint node made from real brush strokes.

Point it at a plate, still, matte painting or reference image, hit Create RotoPaint, and a new standalone painting is generated in seconds.

Large strokes establish the overall image, smaller strokes add detail, and the strokes follow the contours of the image rather than simply sitting on top of it.

Why it's different

This isn't a filter or texture effect. The result is a genuine RotoPaint node containing thousands of individual strokes.

You can open the curves and:

  • Edit, move or delete individual strokes

  • Paint additional strokes manually

  • Change brush size, hardness and opacity

  • Generate anything from a loose sketch to a detailed reproduction

The generated RotoPaint is also completely standalone. The image format and all paint data are embedded in the node, so the original Read and PaintFromRef can be removed and the .nk will still render.

How it works

PaintFromRef is a native C++ implementation based on Aaron Hertzmann's SIGGRAPH 1998 paper, Painterly Rendering with Curved Brush Strokes of Multiple Sizes.

The renderer:

  1. Builds the painting progressively from large to small brush sizes.

  2. Finds areas where the current painting differs most from the reference.

  3. Places strokes along image contours using the local luminance gradient.

  4. Simulates the canvas as strokes are added, so subsequent strokes respond to what has already been painted.

  5. Limits the final stroke count to keep the resulting RotoPaint practical.

The analysis is performed in native code, while strokes are written into Nuke using a single serialized-curves operation rather than the per-stroke Python API.

20,000 strokes can be generated and inserted in around 4 seconds.

Generation is deterministic, so the same image and settings produce the same result.

Features

  • Draft / Normal / Fine / Ultra quality presets

  • Manual control over brush size, threshold, density, length, curvature, opacity and hardness

  • Standalone RotoPaint output with no input dependency

  • Non-buildup opacity

  • Cropped data windows supported

  • Deterministic generation with configurable seed

  • Headless/farm support via the hidden run_trigger knob

  • Native C++ processing for fast generation

  • Automatic Nuke-version binary selection

Install

Copy the PaintFromRef folder to:

%USERPROFILE%\.nuke\

Add to init.py:

nuke.pluginAddPath('./PaintFromRef')

Restart Nuke. PaintFromRef will appear under the Draw menu.

Supported versions: Nuke 14.1, 15.2, 16.0, 16.1, 17.0 and 17.1

Notes

  • Colours are authored in linear space from the source image.

  • Windows x64 binaries are included.

  • Linux is compile-ready but has not yet been load-tested in Nuke.

  • MIT licensed.

  • No third-party libraries are bundled.

  • Based on a reimplementation of Hertzmann's published algorithm.

Opensource

https://github.com/bratgot/PaintFromRef

MIT License

Copyright (c) 2026 The PaintFromRef Authors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

or register to download or rate.

Comments

or register to join the conversation.

Download Verification