SDK Change Notes for Cinema 4D 2027.0.0¶
Summarizes the API and API documentation changes made between Cinema 4D version 2026.0.0 and 2027.0.0.
Documentation Changes¶
Documentation
Added
and updated many manuals and removed outdated content.
Added API Overview, providing an overview of the major API components.
Added Debugging, explaining how to find errors with the mxutils debug tools, and how to track down crashes caused by threading violations.
Added Geometry Model, explaining the geometry model of Cinema 4D: polygons, edges, normals, caches, and splines.
Added Implementing Plugins, explaining the basic concepts of implementing plugins.
Added Matrices, explaining matrices in the Cinema API: coordinate systems, transforms, and the operations of
c4d.Matrix.Added Quickstart, explaining the basics of using the Cinema 4D Python API.
Added Dialog and Description Resources, explaining how to define dialogs and node parameters with resource files, and how to use them from Python.
Added Scene Execution, explaining how Cinema 4D updates a scene, and where Python code runs in that process.
Added Scene Structure, explaining how a scene is organized with hierarchies and branches, and how to traverse it.
Added Scripting Elements, explaining the Python scripting elements embedded in Cinema 4D scenes.
Added Style Guide, explaining the code style and conventions used in this SDK.
Added Vectors, explaining how to do vector operations.
Added Working with the SDK, providing an overview of how to work with the SDK in Cinema 4D.
Added
the Example Index, listing all example scripts and plugins of the SDK.
Added
the Resource Index, listing description resources, icons, description data types, and node templates.
Added
many improvements to the documentation UI.
Added dark mode support.
Added custom search functionality.
Added new change notes style.
Added card-based layout for manuals and links.
Added AI driven classification for entities in the Cinema API.
Added SDK license information.
Reworked the landing page by giving the Cinema and Maxon API a more logical structure.
Updated sidebar handling.
Added
stubs for the plugin reload and update functions.
Added the documentation for
c4d.plugins.ReloadPythonPlugin(), which reloads a single Python plugin file.Added the documentation for
c4d.plugins.ReloadAllPythonPlugins(), which reloads all Python plugin files.Added the documentation for
c4d.plugins.ReloadDocumentAfterReload(), which reloads documents so that their nodes use the classes of reloaded plugins.Added the documentation for
c4d.plugins.Update(), which adds the symbols of the c4d module to the namespace of a plugin after its registration.
Updated
the SDK structure and organization.
Added auto-generated overview tables to the SDK examples.
Added agentic metadata with .agents folder.
Added place for user projects with the projects folder.
Removed the old unnecessarily complicated example structure.
Updated
the Graph Descriptions manual, see Graph Queries and Lazy Literals in particular.
Added the ability to query connections between nodes.
Added query operators and query compositions; you can now do more than simple equality checks, and carry out multiple checks on the same value.
Added a query function which can be used outside of descriptions. With this function, you can also select ports as a query result, and not just nodes.
Added
maxon.GraphDescription.EvaluateQuery(), which evaluates a query against a node graph.Added multiple new attributes on
maxon.GraphDescription.Added syntax to describe groups in a graph description, and a command to dissolve groups.
Added the concept of input groups.
Added commands for setting nodes as start or solo nodes.
Updated the already existing but mostly undocumented lazy literal functionality.
Updated relevant description commands to now support specifying the ports to which the command selectively should apply to (some commands already supported this, but now all of them do where it makes sense).
Updated
maxon.GraphDescription.PARSE_FLAGS()to support new parsing modes.Updated
maxon.GraphDescription.QUERY_FLAGS()to support new query modes.
Updated
the documentation of element-local dirty states and hierarchical change propagation.
Updated the documentation for
c4d.C4DAtom.GetDirty(),c4d.C4DAtom.SetDirty(),c4d.C4DAtom.GetHDirty(),c4d.C4DAtom.SetHDirty(),DIRTYFLAGS, andHDIRTYFLAGSto clarify element-local dirty states and hierarchical change propagation.
Examples
Added
33 example scripts.
Example |
Description |
|---|---|
Demonstrates the usage of the central bitmap type. |
|
Demonstrates the usage of the fundamental container type in the Cinema API. |
|
Demonstrates important functions for the types c4d.DescID and c4d.DescLevel. |
|
Demonstrates important functions for the type c4d.Description. |
|
Demonstrates instantiation and usage of various Maxon data types. |
|
Initializes a bitmap from a vector image file. |
|
Demonstrates ray casting. |
|
Demonstrates working with matrices. |
|
Demonstrates working with noise functions. |
|
Demonstrates working with quaternions. |
|
Demonstrates working with vectors. |
|
Demonstrates deterministic random values with mxutils.Random. |
|
Demonstrates type and iterable validation with mxutils. |
|
Demonstrates mxutils helpers for diagnosing Cinema 4D scene data. |
|
Demonstrates mxutils helpers for diagnosing Cinema 4D scene data. |
|
Demonstrates importing a package relative to a saved Python script. |
|
Demonstrates translating Cinema 4D symbols with SymbolTranslationCache. |
|
Demonstrates how graph descriptions create and modify node graphs. |
|
Demonstrates graph description commands. |
|
Demonstrates graph description queries, including lazy color and vector literals. |
|
Demonstrates graph description references together with lazy color and URL literals. |
|
Demonstrates creating or getting node graphs in a scene. |
|
Demonstrates important functions for the type c4d.C4DAtom. |
|
Demonstrates important functions for the type c4d.BaseList2D. |
|
Demonstrates important functions for the type c4d.GeListNode. |
|
Demonstrates basic document operations. |
|
Demonstrates how to assign a scene element to a layer. |
|
Demonstrates basic operations on objects. |
|
Demonstrates different ways to access and modify parameters of Cinema 4D scene elements. |
|
Demonstrates the fundamental operations of the Take System. |
|
Demonstrates scene traversal. |
|
Demonstrates adding undo steps for document modifications. |
|
Demonstrates how to work with user data parameters. |
Added
2 example plugins.
Example |
Description |
|---|---|
Demonstrates how to implement a dialog that hosts an HTML viewer and can send and receive data to/from the displayed web page. |
|
Demonstrates NodeData serialization and custom branching. |
API Changes¶
Cinema API
Added
c4d.bitmaps.BaseBitmap.InitFromImageRef(), which initializes a BaseBitmap from an image reference.Added
c4d.bitmaps.BaseBitmap.InitWithVectorFile(), which initializes a BaseBitmap from a vector file.
Added
JavaScript execution and web messaging to c4d.gui.HtmlViewerCustomGui.
Added
c4d.gui.HtmlViewerCustomGui.ExecuteJavaScript(), which allows for executing JavaScript code within the HTML viewer.Added
c4d.gui.HtmlViewerCustomGui.PostWebMessage(), which allows for posting web messages to the HTML viewer, see the py_cmd_gui_html example for details.Added
c4d.gui.HtmlViewerCustomGui.SetRequestHeader(), which allows for setting custom request headers in the HTML viewer.Added
c4d.gui.HtmlViewerCustomGui.SetWebMessageCallback(), which is the counter part to PostWebMessage.
Added
c4d.plugins.NodeData.GetBranchInfo(), which allows for adding custom branches to your node based plugins, see the py_obj_assetcontainer example.
Fixed
c4d.plugins.ReloadPythonPlugin() scripts generated from the Plugin Manager to always use raw plugin paths, to avoid issues on Windows.
Maxon API
Added
maxon.GraphDescription connection queries, query operators, and port selection to graph descriptions.
Added the ability to query connections between nodes.
Added query operators and query compositions; you can now do more than simple equality checks, and carry out multiple checks on the same value.
Added a query function which can be used outside of descriptions. With this function, you can also select ports as a query result, and not just nodes.
Added
maxon.GraphDescription.EvaluateQuery(), which evaluates a query against a node graph.Added multiple new attributes on
maxon.GraphDescription.Added syntax to describe groups in a graph description, and a command to dissolve groups.
Added the concept of input groups.
Added commands for setting nodes as start or solo nodes.
Updated the already existing but mostly undocumented lazy literal functionality.
Updated relevant description commands to now support specifying the ports to which the command selectively should apply to (some commands already supported this, but now all of them do where it makes sense).
Updated
maxon.GraphDescription.PARSE_FLAGS()to support new parsing modes.Updated
maxon.GraphDescription.QUERY_FLAGS()to support new query modes.
Added
maxon.NodePath.GetPortPath(), which retrieves the port path component for a given node path.Added
maxon.NodePath.ToBlock(), which converts the node path to a block representation.
Updated
maxon.GraphNode.FindInnerNode() to also accept maxon.NodePath and strings.
Mxutils API
Added
mxutils.DebugNode and mxutils.DebugPrint for debug printing.
Added
mxutils.DebugNode, a class for representing debug printing results.Added
mxutils.DebugPrint, a class for performing debug printing operations.Added
mxutils.DebugPrint.GetContainer(), to get a DebugNode representation of a c4d.BaseContainer.Added
mxutils.DebugPrint.GetFlags(), to get a DebugNode representation of the flags of a c4d.BaseList2D.Added
mxutils.DebugPrint.GetGraph(), to get a DebugNode representation of a (partial) scene graph for a c4d.BaseList2D.Added
mxutils.DebugPrint.GetParameters(), to get a DebugNode representation of the parameters of a c4d.BaseList2D.Added
mxutils.DebugPrint.GetTreeString(), to get a string representation of a DebugNode.Added
mxutils.DebugPrint.PrintContainer(), to directly print the debug output of a c4d.BaseContainer.Added
mxutils.DebugPrint.PrintFlags(), to directly print the debug output of the flags of a c4d.BaseList2D.Added
mxutils.DebugPrint.PrintGraph(), to directly print the debug output of a (partial) scene graph for a c4d.BaseList2D.Added
mxutils.DebugPrint.PrintParameters(), to directly print the debug output of the parameters of a c4d.BaseList2D.Added
mxutils.DebugPrint.DiffParameters(), to get a string representation of the differences between the parameters of two c4d.BaseList2D objects.Added
mxutils.DebugPrint.DiffFlags(), to get a string representation of the differences between the flags of two c4d.BaseList2D objects.Added
mxutils.DebugPrint.DiffBaseList(), to get a string representation of the differences between two c4d.BaseList2D objects.Added
mxutils.DebugPrint.DiffGraph(), to get a string representation of the differences between the (partial) scene graphs of two c4d.BaseList2D objects.
Added
mxutils.GetNodeFromPath(), mxutils.IterateGraph(), and mxutils.SceneFaker.AddHierarchyFromString().
Added
mxutils.GetNodeFromPath(), which retrieves a GeListNode by a hierarchical path such as ‘ddn’ (down, down, next).Added
mxutils.IterateGraph(), a 20% faster and safer replacement for mxutils.RecurseGraph.
Updated
mxutils.IterateTree() to support depth-first, inverse depth-first, and breadth-first traversal.
Updated
mxutils.IterateTree()to now support the traversal modesmxutils.TRAVERSAL_DEPTH_FIRST,mxutils.TRAVERSAL_INVERSE_DEPTH_FIRST, andmxutils.TRAVERSAL_BREADTH_FIRST.
Deprecated
five functions, which now point to their replacements and keep working.
All deprecated functions and methods now point to their respective replacements. The old callables will never be removed but no longer show up in the documentation. All replacements are API stable, i.e., old code of yours will continue to run as is (but automatically be redirected to the new implementations).
Deprecated mxutils.GetContainerTreeString, please use
mxutils.DebugPrint.GetContainer()instead.Deprecated mxutils.GetParameterTreeString, please use
mxutils.DebugPrint.GetParameters()instead.Deprecated mxutils.GetSceneGraphString, please use
mxutils.DebugPrint.GetGraph()instead.Deprecated mxutils.GetTreeString, please use
mxutils.DebugPrint.GetTreeString()instead.Deprecated mxutils.RecurseGraph, please use
mxutils.IterateGraph()instead.