Build the shot at original length, then attach any animated node to your retime so it follows every revision.
dhRetimeCurve
First submitted: 19 September 2026
Author: David Hochstadter
Website: https://www.paladinfx.com/dhretimecurve
Compatible Nuke versions: All
Compatibility: Linux, Mac, Windows

Build the shot at its original length. Let the retime change.
You track the plate at full length, because that is where the track is good and where the shot gets built, and the retime goes on at the end. Then the retime changes at the first review. Then it changes again.
Attach dhRetimeCurve to anything animated and it stays on the retimed plate: the matchmove camera, the tracked Transform or CornerPin, an animated Card, a patch, a light. Change the retime and the animation changes with it. No re-keying, no rebuild, no second version of the track.
Your original keys stay exactly where they were underneath. Nothing is baked and nothing is destroyed, so you can take it off at any point and get your curves back. Nothing is added to your image stream either; the node is not even connected to it.
When it earns its keep
The retime arrives after the work is done. You tracked, matchmoved and built at original length, the way you are supposed to. Put the retime on last and everything lands on it.
The client changes the speed ramp. They will. Change the retime, everything follows, and the note costs you a minute instead of an afternoon.
Editorial recuts the shot. Same thing: the timing moved and the comp did not have to be rebuilt.
A camera solved on the original plate, in a comp that is now retimed. Point it at the retime and the camera sits back down on the plate.
Several layers on one retime. The camera, the tracked patch, the animated card and the sky can all follow the same dhRetimeCurve node, so they stay in step with each other as well as with the plate.
You are still deciding the retime. Try a ramp, watch the whole comp answer, try another. Nothing to redo between attempts.
Using it
Select the retime node and everything that should follow it, press Tab and type dhRetimeCurve, or find it under DH_Tools > Time. A small dhRetimeCurve node appears beside the retime holding the frame map, and Nuke draws the link in the node graph. Select more nodes later and run it again and they join the same node. Key a channel that had nothing on it before and run it again and that channel is picked up too.

It works under Speed, not just Frame
A Kronos or an OFlow set to Frame, a TimeWarp, a TimeOffset and a FrameHold all say on a knob where they are looking, so those are read live: drag the frame curve and the camera moves with it, with nothing to press.
Set to Output Speed or Input Speed, the percentage way of retiming, a Kronos and an OFlow expose nothing at all. That is why other tools ask you to convert your retime to Frame mode first, which means rebuilding the retime you already made.
This one measures instead. A copy of your retime node is pointed at a flat plate whose pixel value is the frame number, and the average of what comes out is the input frame that retime used. Your own node is never disconnected and never rendered. Rebuilding a speed-mode Kronos render in Frame mode from the measured map comes back identical to the original, to four decimal places; rebuilding it from an integrated speed curve, which is what doing the arithmetic gives you, is out by most of a frame.
A measured map cannot follow an edit on its own, so after you change a retime that runs on a speed or a percentage, press measure again. The line at the top of the panel always says which of the two kinds of map you have.
The retime's own control is on the node too
Whichever knob actually drives your retime is mirrored onto the dhRetimeCurve node, with that knob's own label and its own range, so the retime can be set from either panel. When it is animated the mirror holds a copy of the curve, so it reads right at every frame and a key you set there lands on the retime.
What gets driven
Only channels that already carry motion: keyframes, or an expression, which is what a Tracker's normal export uses. A channel holding neither is left exactly as it is, because the sampling expression reads an empty curve as zero and would destroy a value you set on purpose. Knobs that are about time itself are never driven, so a retime can never end up driving itself.
Taking it off, or baking it in
Delete the dhRetimeCurve node and everything it drives goes back exactly as it was. There is also dhRetimeCurve (remove) for taking one node off a shared control, or for putting back a node whose control node is already gone.
When the shot is signed off, bake into keys writes the result onto the nodes as a real key on every frame and takes the node away, for handing the script to somebody who does not have the tool. That one is one way.
Everything is explained inside the node, on a How to use tab of its own, and the ? button carries the long version.

Installing
Unzip it. Drag the dhRetimeCurve folder into your .nuke folder. Add one line to init.py in that same folder:
nuke.pluginAddPath('./dhRetimeCurve')
Quit Nuke and start it again. It shows up under Tab, and in the Nodes menu under DH_Tools > Time.
Nuke 13 and up, Windows, Mac and Linux, tested on 15, 16 and 17. The node it makes is a plain Nuke NoOp with everything saved in the script, so scripts render on a farm without anything installed. The README in the download has the full version, including what to check if it does not turn up.
Comments