Natron Logo
2.6
  • User Guide
  • Reference Guide
  • Developers Guide
  • Maintainer Guide
    • Overview: What Natron Is, at the Code Level
    • Building Natron from Source
    • Map of the Code Base
    • Core Architecture
    • Design Techniques and Idioms
    • The Engine Module
    • The Gui Module
    • Rendering, Threading and Caching
    • Natron as an OpenFX Host
    • Python Bindings (Shiboken / PySide)
    • Cross-Cutting Subsystems
    • Contributing and Workflow
    • Qt 6 Migration Plan
    • TODO and Recommended Fixes
      • Toolkit and build modernization
      • Stability and correctness (P0)
      • Robustness of critical subsystems
      • Testing and documentation
      • Quick-reference: important issues
    • Open Issue Triage
Natron
  • »
  • Maintainer Guide »
  • TODO and Recommended Fixes
  • View page source

TODO and Recommended Fixes

This chapter collects recommendations that emerged from reviewing the code base for this guide. It is meant as a living backlog of technical work — code health, correctness and modernization — complementary to the user-facing backlog analyzed in Open Issue Triage. Items are grouped by theme and tagged with a rough priority (P0 highest). Where an item maps to a tracked issue, the issue is linked.

  • Toolkit and build modernization

  • Stability and correctness (P0)

  • Robustness of critical subsystems

  • Testing and documentation

  • Quick-reference: important issues

Toolkit and build modernization

Complete Qt 6 support while keeping Qt 5 (P1). This is a first-class goal with its own chapter, Qt 6 Migration Plan, which is the single source of truth for the audited work items and counts. In short: the CMake build already has a NATRON_QT6 switch and the viewer already uses QOpenGLWidget, so the remaining work is bounded — modernize the removed Qt APIs (QRegExp → QRegularExpression, QDesktopWidget → QScreen, setMargin), bring the qmake build to Qt6 parity, and regenerate the PySide6/Shiboken6 bindings (resolving the enum/flag issue #854). Tracks #1011 and #827.

Keep the two build systems in sync, and pick a long-term direction (P2). Natron maintains both qmake and CMake builds. Every structural change must touch both, which is error-prone. Recommendation: treat CMake as the primary build (it already leads on Qt 6), keep qmake working during the transition, and document a date/criteria for eventually retiring qmake. Until then, add a CI job for each so neither silently rots.

Modernize CI (P1). Migrate CI from Travis to GitHub Actions (#601; the .travis.yml is already disabled). Build both Qt 5 and Qt 6 and run the Tests suite on all three platforms so regressions in the dual-toolkit build are caught automatically.

Adopt a modern C++ baseline consistently (P3). The CMake build already compiles as C++17, and the code has largely moved from C++98 to std::shared_ptr etc. Finish the job opportunistically: prefer override, range-based for (retiring foreach/Q_FOREACH, ~46 uses), nullptr, and enum class where it does not break the Python bindings. Do this file-by-file alongside other work, not as a mass reformat (which would fight the astyle hook and bloat diffs).

Stability and correctness (P0)

These are the code-level counterparts of the P0 issues in Open Issue Triage.

Make the cache respect its limits (P0). #192 reports that Natron does not observe disk/RAM cache size limits and crashes when the disk fills. Audit Cache.h / MemoryFile / TileCacheFile eviction and the disk-space checks; a compositor that fills the disk and crashes loses work.

Diagnose the silent render stall (P0). #248 (rendering silently stalls after N frames) points at the scheduler / abort / thread-pool machinery (OutputSchedulerThread, GenericSchedulerThread, AbortableRenderInfo) or a deadlock around the cache. High value; reproduce under a debug build with FP-exception trapping and thread sanitizer.

Fix launch/teardown crashes (P0). Startup crashes (#845, #1008) and shutdown/lifecycle crashes (#795, #1029, #1057) recur across platforms. Several likely involve OpenGL context creation (#516, amdgpu-pro) — a good place to add defensive checks and clearer diagnostics in OSGLContext_*.

Invest in the crash-reporting pipeline (P1). A large tail of issues are “random crashes” with no stack trace (#557). Making the Breakpad reporter reliably deliver usable minidumps/symbols converts that tail into fixable, evidence-backed bugs. High leverage.

Robustness of critical subsystems

Guard the serialization format (P1). Project loading uses Boost.Serialization (see Design Techniques and Idioms). There is no automated test that round-trips and cross-version-loads real project files. Recommendation: add regression tests that load a corpus of old .ntp files and assert they still open; require a BOOST_CLASS_VERSION bump review for any *Serialization change. This directly protects users from data loss.

Replace deprecated/removed Qt string and regex APIs (P1). Beyond Qt 6 compatibility, QRegExp and the QDesktopWidget family are the concrete deprecated APIs in use; migrating them (details in Qt 6 Migration Plan) improves the Qt 5 build immediately and is low-risk since the replacements exist in Qt 5.15.

Reduce the size of the largest translation units (P3). Several files are enormous (Node.cpp, EffectInstance.cpp and EffectInstanceRenderRoI.cpp, Knob.cpp, RotoContext.cpp, Settings.cpp, OfxParamInstance.cpp — each 100–240 KB). They are hard to navigate and slow to compile. Where a natural seam exists (as the numbered GUI files already show), split them into cohesive units. Do this incrementally and only when already working in the file.

Testing and documentation

Broaden automated test coverage (P2). The Tests suite covers curves, LUT, images, hashing, tracking and the file-system model, but not the render pipeline, the cache, serialization, or knob expressions — the subsystems where the P0 bugs live. Add targeted tests as these areas are touched; a headless NatronRenderer render of a known project compared against a golden image would be a strong end-to-end regression test.

Keep this Maintainer Guide current (P2). Update it when the architecture changes — especially the Qt 6 status in Qt 6 Migration Plan, and re-run the Open Issue Triage analysis periodically (the script used to produce it is simple GitHub-API + label aggregation).

Label and prune the issue tracker (P2). As noted in Open Issue Triage, ~half of issues are untriaged and ~124 are 2018 imports that may already be fixed. A labeling/pruning pass makes the backlog trustworthy and surfaces genuinely actionable work.

Quick-reference: important issues

Priorities as of the July 2026 snapshot (see Open Issue Triage):

Issue

Summary

Priority

#248

Rendering silently stalls after N frames

P0

#516

Won’t open on Ubuntu 20.04 (amdgpu-pro)

P0

#192

Cache ignores size limits; crash on full disk

P0

#845 / #1008

Startup crashes (Linux)

P0

#795 / #1029

Teardown / repeated-open crashes

P0

#864

CLI renders zero frames

P0

#1011 / #854

Qt 6 support / Qt flag binding bug

P1

#827

Qt version tracker

P1

#601

Migrate CI to GitHub Actions

P1

#215 / #990

Ubuntu PPA-Debian repo / Linux binary distrib

P1

#557

Reliable crash reporting

P1

#209

Viewer 8-bit textures

P2

#839

Undo broken for on-screen Transform

P2

#79

Vectorscope & Waveform (top feature)

P2

Previous Next

© Copyright 2013-2026 The Natron documentation authors, licensed under CC BY-SA 4.0.

Built with Sphinx using a theme provided by Read the Docs.