top of page




We are Adrien Lhabitant and Tom Perony, two students from ESMA Toulouse working on our graduation shorts, respectively “El Dodorado” with a Solaris USD pipeline and “Rush More” with a Maya pipeline.


You can check his website her :

We have created many tools for our production needs, and we will now delve into Dopoise, our tool designed to harness Renderman 25’s AI Denoiser.



Technical Limitations / Tractor


When the AOV part is done, the user can chose to either denoise locally or on the renderfarm using Tractor, for wich he may adjust the job parameters. (about deadline

And eventually the user can chose to denoise using crossframe mode or not.


The script takes over from here, it sorts the exrs in different folders based on their type : beauty, utilities and cryptomates. It then proceeds to generate either TCL (tractor) or Batch (local) code containing all the denoising and merging instructions.

Actually the major issue comes from the denoiser itself; it tends to generate a "PyRunSimpleString failed" error potentially related to saturated RAM. (remainder : crossframe denoising is more RAM intensive) It’s mostly anoying while denoising locally because the process needs to be restarted from the beginning. Meanwhile on tractor we recommend setting 1 “frame per server” and take advantage of the “max active task” parameter we’ve put in the UI to limit the impact of your job in the renderfarm. This way if a frame fails you can restart it without loosing any previous frame progress.


TJM (Tractor Job Management)

Despite reducing the problem of denoiser failure by isolating it on Tractor, we still needed to ensure that all images were available the next day. Hence, we developed a script called TJM (Tractor Job Management), which ensures to retry each task that failed by performing retries on each task in "error" status. TJM uses the Tractor API in Python 2.7, retrieving information from various JIDs (Job IDs), i.e., the different jobs present on the farm, and examining each TID (Task ID) to determine whether it needs to be restarted using the status of the TID.

The only issue lies in our Tractor procedure; each of the subtasks has multiple command IDs, the first handling denoising, followed by merging. If one of them fails, we are forced to retry the subtask from the beginning, even if the work has already been done. However, we can generate one image per blade, thus mitigating the problem. Additionally, we have the option to limit the number of PCs taken by the job to avoid flooding the entire render farm and prevent the aforementioned issue. Overall, this had minimal impact on our operation as errors are infrequent.


Nuke Problematic

After denoising our images, we observed impressive results from the denoiser. Since the majority of our images were rendered at 64 samples, we saved a significant amount of rendering time, making the rendering-to-denoising time ratio much more viable than with higher sampling rates. However, we encountered a new issue during compositing; upon examining our technical passes after unpremultiplying, we noticed that the denoiser left extremely low values in the alpha channel (around 10e-7), resulting in visual artifacts.

We use an expression to to get rid of these values, and haven’t noticed an further problem.

In the alpha section of the expression node : a * (1-step(a, 0.01))  you can adjust the 0.01 threshold to your liking.


Inside AOV


Before expression


After expression


Final result


About Deadline

We’d like to integrate a submission to deadline to really enable anyone to use Dopoise. 

We plan to work on it but since we use tractor in our school we will try make a deadline farm in our spare time to work on it. We will post a new version of the tool when this will be done !


Here you can download Dopoise and try it out :

It comes with documentation. If you need help or have any questions, you can contact us via our respective emails:

bottom of page