Global Moderators

Forum wide moderators

Private

Posts

  • RE: We can update the Python API to align with the C++API

    Hey @Dunhou,

    Thank you for reaching out to us. We agree that this would be desirable. These methods are actually already wrapped but we hide them for now in the Python SDK. Find the reasons below.

    1. ExecuteJavascript: I just did remove the bindings of the Python API for that method in the current beta and also switched the C++ method to internal. The reason for that decision was is that we have security concerns about attackers being able to execute arbitrary JS in a web browser opened in Cinema 4D.
    2. SetWebMessageCallback: This is intended solution, i.e., the JS you want to execute must be already embedded into the HTML which is running in the HtmlView. On Windows/WebView2 it uses web messages, on MacOS/WebKit a custom solution emulating them. And SetURLCallback is then the way to get data back from the JS VM.
    3. For 2026.1 I already wrote examples for these methods, but on the last meters we discovered that something not only broke the Python bindings but the whole "execute JS" in the WebView2/WebKit bindings.

    My last info is that something broke there due to a project update, and that the two devs involved in it will have a look. I'll give them another bump and report here if there are any updates.

    Cheers,
    Ferdinand

  • RE: Creating custom asset nodes via Python API

    Good to hear that things worked out for you!

  • RE: [Cinema 4D/Redshift] Nested Redshift Proxy Files Not Detected by Project Asset Inspector

    Hey @vaishhg,

    As I tried to explain there are no nested dependencies. *.rs is a full blown scene file format which can express geometry, curves, simulation data, materials and more. When you save a Cinema 4D scene as *.rs al data in it is exported to that format, including the "nested" case where a *.c4d scene is referencing a *.c4d scene.

    So when you start out with this *.c4d scene:

    Scene.c4d
        +-- Objects
            +-- Cloner ( creates 5 instances)
                +-- Cube Generator 
                    +-- Cache
                        +-- Polygon Object
                    +-- Tags
                        +-- Material Tag (references 'Red Material')
        +-- Materials
            +-- Red Material
    

    And then export it to Scene.rs, you get this (this is not an actual depiction of the file format, just a visualization of what happens, rs is not an open format).

    Scene.rs
        +-- Objects
            +-- Cube.0 [Red Material]
            +-- Cube.1 [Red Material]
            +-- Cube.2 [Red Material]
            +-- Cube.3 [Red Material]
            +-- Cube.4 [Red Material]
        +-- Materials
            +-- Red Material (contains Red Material definition)
    

    If you load that file back into Cinema 4D you get this. All data - that these are 5 separate cubes with a red material each - resides in the Redshift core only, we only see a proxy in Cinema 4D, hence the name "RS Proxy Object". It is the Redshift Core which will resolve the data in the RS file at render time.

    ReferencingScene.c4d
        +-- Objects
            +-- RS Proxy Object.0 (loads Scene.rs)
                +-- Cache (will be empty by default, there is literally no data in the c4d core, 
                           only when we set 'Preview' to 'Mesh' there will be a cache so that the
                           viewport can display something)
                    +-- Polygon Object (one blob representing all 5 cubes and no material information)
            +-- RS Proxy Object.1 (loads Scene.rs)
                +-- Cache
                    +-- Polygon Object
    

    When we now export ReferencingScene.c4d to ReferencingScene.rs we get this. Because when the exporter runs, it will encounter the two RS Proxy Objects when flattening the c4d scene and do what you cannot do, grab the rs scene data from the referenced Scene.rs files and inline that into the new ReferencingScene.rs file. So we end up with 10 cubes in total, each with the red material assigned.

    ReferencingScene.rs
        +-- Objects
            +-- Cube.0 [Red Material] (from RS Proxy Object.0)
            +-- Cube.1 [Red Material] ...
            +-- Cube.2 [Red Material] ...
            +-- Cube.3 [Red Material] ...
            +-- Cube.4 [Red Material] ...
            +-- Cube.0 [Red Material] (from RS Proxy Object.1)
            +-- Cube.1 [Red Material] ...
            +-- Cube.2 [Red Material] ...
            +-- Cube.3 [Red Material] ...
            +-- Cube.4 [Red Material] ...
        +-- Materials
            +-- Red Material (contains Red Material definition)
    

    And when we load that back into Cinema 4D we get this:

    SecondGeneration.c4d
        +-- Objects
            +-- RS Proxy Object.0 (loads ReferencingScene.rs)
                +-- Cache
                    +-- Polygon Object (one blob representing all 10 cubes and no material information)
    

    The TLDR is that the Redshift Core can read *.rs files and the Cinema API cannot, it can only write them or load them via an RS Proxy Object. And there is no 'resolving [...] the full proxy chain' as you put it. An *.rs scene file is just a discrete scene representation that contains does not know concepts such as generators or assets known to the Cinema API/Core. When export a *.c4d scene that references *.rs files all data is just flattened into a single *.rs file (again, what I showed under the *.rs formats above was just a visualization, not the actual file format).

    There is currently no way to do what you want to do, even if you would request access to the Redshift Core C++ SDK. Because the RS file format is a GPU scene file format and very deeply integrated into the core. Even the RS Core SDK does not expose functionalities to read RS files to CPU memory structures.

    Cheers,
    Ferdinand

  • RE: Deadline Issues: TeamRender PRO

    I did not see this as a rant or rude, if I had, I would have reacted differently. I understand your concerns, but this is a developer forum and we cannot help you here with your issue.

  • RE: Deadline Issues: TeamRender PRO

    Hey @3dduff,

    Welcome to the Maxon developers forum and its community, it is great to have you with us!

    Getting Started

    Before creating your next postings, we would recommend making yourself accustomed with our forum and support procedures. You did not do anything wrong, we point all new users to these rules.

    • Forum Overview: Provides a broad overview of the fundamental structure and rules of this forum, such as the purpose of the different sub-forums or the fact that we will ban users who engage in hate speech or harassment.
    • Support Procedures: Provides a more in detail overview of how we provide technical support for APIs here. This topic will tell you how to ask good questions and limits of our technical support.
    • Forum Features: Provides an overview of the technical features of this forum, such as Markdown markup or file uploads.

    It is strongly recommended to read the first two topics carefully, especially the section Support Procedures: How to Ask Questions.

    About your First Question

    These are developer forums, and while you have posted in the correct off topic forum, I am not sure how well placed your topic here is. We as the SDK team have little to do with the active development of Cinema 4D outside of SDK features.

    But Deadline is not as dead as you make it out to be. AWS simply has shifted their focus to Deadline Cloud. There are also a c4d bindings for Deadline Cloud. I think they still struggle a bit with asset management, but the product is quite mature. The Deadline team is also active on these forums. I understand that some users will see Deadline Cloud not as an equivalent replacement, but 'deadline has stopped active development' is simply not a correct assessment either.

    The best way to make a feature request directed at Maxon is to create a ticket in our Support Center and share there a suggestion. When you are looking for a user-to-user discussion, you are probably better served with the Redshift forums.

    Cheers,
    Ferdinand

  • RE: Creating custom asset nodes via Python API

    Hey @itstanthony,

    Thank you for reaching out to us and sorry, I am somehow overlooked this topic. It is rather hard for me to reproduce what you did there since I am lacking that asset of yours. I understand that the nodes API in total but also its simplified variant of graph descriptions are not trivial, but I would recommend having a look at Graph Descriptions: Referencing Entities, it is all explained there.

    • You can either reference entities by their human readable name (English only at the moment) or by their ID.
    • When you use an ID reference, you must use the hashtag prefix so that the graph description parser knows that it is meant to be an ID. E.g., #com.maxon.nodes.stuff or #2348twiugrfjwsgrrwo4.
    • You can also use lazy references but I won't get into that here.

    So, you either must prefix the ID with a hashtag or you can just use the plain name of your node which seems to be "Normal Blender AOV". The danger with names is always, especially for user designed nodes, that there will be a name collision. Graph descriptions work by building a cache of IDs and labels right in a node space right before the description is executed. It does not matter if a node is native or not.

    The alure of graph descriptions is of course to use human readable identifiers. I would recommend naming custom nodes with a prefix to make name collisions less likely. E.g. instead of naming a node "Normal Blender", one could name it "MXN Normal Blender" where "MXN would stand for Maxon and would have to be customized to your company/name.

    Cheers,
    Ferdinand

    Example

    I created a Redshift node asset called "DoubleNoise":
    c5f80076-9856-4862-a45a-93f7c96d0973-image.png

    And then instantiated it like this. You can also access the ports just like for builtin nodes via their human readable name.

    import math
    import maxon
    from maxon import GraphDescription
    
    GraphDescription.ApplyDescription(
        GraphDescription.GetGraph(name="foo"), {
                GraphDescription.Type: "DoubleNoise",
        }
    )
    

    035fcdc3-9886-448d-8be3-5f762ee3608d-image.png

  • RE: how to detect obj selected in InExcludeData()?
  • RE: Import multiple Takes

    Hey @yannickkohn,

    Thank you for the source code, but pseudo code is often problematic, especially when it contains so many undefined functions. I cannot say much about any bugs, as your code is so 'pseudo' and you do not show the really deep down work (reading curves and keys here).

    What also is a bit weird is that you use FindOverride. That function is private for a reason. You should set the active take and then just evaluate the scene data or the tracks of scene data when you are interested in animations only.

    Cheers,
    Ferdinand

  • RE: Import multiple Takes

    Hey Yannick, as I said without code and your scene data we will not be able to help you. In understand what you want to do conceptually, but for concrete help we will need concrete code and concrete data. As I hinted at, not all aspects of takes can be faithfully exported into the Melange (a.k.a.) Cineware format. The Take export has be initially written for the Adobe After Effects bindings, so there might be gaps even when data could be discretized in principle.

  • RE: Import multiple Takes

    Hello @yannickkohn,

    Welcome to the Maxon developers forum and its community, it is great to have you with us!

    Getting Started

    Before creating your next postings, we would recommend making yourself accustomed with our forum and support procedures. You did not do anything wrong, we point all new users to these rules.

    • Forum Overview: Provides a broad overview of the fundamental structure and rules of this forum, such as the purpose of the different sub-forums or the fact that we will ban users who engage in hate speech or harassment.
    • Support Procedures: Provides a more in detail overview of how we provide technical support for APIs here. This topic will tell you how to ask good questions and limits of our technical support.
    • Forum Features: Provides an overview of the technical features of this forum, such as Markdown markup or file uploads.

    It is strongly recommended to read the first two topics carefully, especially the section Support Procedures: How to Ask Questions.

    About your First Question

    It is quite hard to answer your question in this form, please read the points listed above. From what I get, you have some C++ application and use there the Cineware SDK to import c4d files. You now want to read take data in these scenes. First of all, I would recommend to read the end user docs on takes, in case you have not already.

    Takes are somewhat comparable to render settings in Cinema 4D, as in that you always have at least one of them in a scene, but also can have many (which also can be nested). Just likes for render settings, there can only be one active take at a time. So unless you have called SetCurrentTake, the data of your scene will not change.

    Cineware is also a sparse/discrete data format, i.e., all procedural goodness of Cinema 4D has been baked down. Without knowing what take data you want to see being exported, it is hard to tell if what you are experiencing is working as intended or not. Please share your code and images or files of the scene you are trying to export, including examples/descriptions of what data is missing.

    Cheers,
    Ferdinand