How to use RotoPaint to apply against object in footage with no need for Tracking?


I think I have a simple task. I just need to do some RotoPainting on an object that does not need to be tracked. It is stationary thoughout the footage.

I’ve tried creating three nodes- Read Node, RotoPaint, and the Viewer.
The RotoPaint Node seems to give options for it’s lifetime for painting on the frame.
It defaults to Single. It would like for it be “All.” It does not allow me to select this option. Only option you can select is “Single.”

What is the best way to go about doing this task?

Thanks so much!!!

Changing the lifetime to “All” works fine for me, not sure why that’s happening for you, have you selected a stroke you want to set the lifetime for?

That said, changing this on a per-stroke basis is usually time consuming and not the way to go. I like to do all my paint work on one frame and then frame hold it.

Timing aside the workflow is as follows:

  1. Degrain your footage!
  2. Create your clean-plate and remove what you need to with the rotopaint node and the framehold node after that to keep it all constant.
  3. Usually I like to make a seperate roto node using my masking setup and mask out the element from the again instead of using the rotopaint alpha but you can do this too, you just need the element itself and none of the original plate. It’s also important that we have an alpha here to work with in steps 5 and 6 which you won’t always have when using a mask merge operation with a merge node, if you’re doing it this way instead make sure to shuffle the alpha from your roto into your patch so that it has an alpha channel.
  4. Do any tracking (I know you don’t need to but this is where you’d do that)
  5. Regrain the element and match the grain to the source footage. This means that the grain will move like normal and the patch will look like it’s actually always been a part of the footage when really it hasn’t because we’re sneaky VFX people. If you don’t do this and the degrain step earlier other parts of the image with film grain will be moving but your patch will be static and it’s a dead giveaway that you’ve removed something.
  6. Merge into your main pipe, that’s it!

Hi Hank,

My FrameHold does not seem to work. Since my post this morning, I went with using
Tracking to copy a tutorial.

On Frame 1, I can see my RotoPaint efforts, where I cleaned up the cover of an
Address book (i.e. also called Rolodex in the graph). When I advance to the next frame, the Address book reverts to having no RotoPaint on it. The Tutorials I have been following say that the FrameHold should hold onto the graphic edits, It’s not. Something is wrong.

Appreciate your help with this!

Not sure what’s going wrong here, everything looks good node graph wise. Would you be able to share your script?

Hi Hank,

Attached is my Natron Config file.


SaveMe.ntp (2.3 MB)

Hmm, seems to be working fine for me, all the paint strokes appear on all frames as expected.

Here’s something I didn’t catch earlier though: Convert your mov to an image sequence before using it in Natron (or any compositing software for that matter). You will get much better performance and the FFMPEG reading & writeing in Natron isn’t terribly reliable at the moment. A PNG, TIFF, or EXR sequence will give you much better performance and hopefully solve this issue too.

Hi Hank,

I followed your suggestion, and I changed my Read Node to ingest single frames (i.e png files).

When I hit the play button, it does not seem to advance from the first frame.
Also, I cannot seem to see my paints from my RotoPaint node.
Attached is a screenshot.


Well if you’re looking through a framehold node that is set to frame 1 then yes, the viewer will not show anything other than frame 1. That is the intended use of the framehold node. If you want to view the sequence and have it move, connect the viewer directly to the read node.

I really don’t know what the issue is with rotopaint, it worked fine for me.