Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Register
    • Login

    GetEffectiveRenderData does not return per-take overrides for RDATA_FRAMEFROM / RDATA_FRAMETO

    Scheduled Pinned Locked Moved Cinema 4D SDK
    20252026linux
    1 Posts 1 Posters 7 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • V Offline
      vaishhg
      last edited by

      Dear community,

      I'm facing an issue reading per-take frame range overrides via the Python API. When takes override the frame range on the render data, all methods I've tried return the Main take's frame range instead of the overridden values.

      Environment:

      • Cinema 4D Version: 2025, 2026
      • Operating System: macOS
      • Python Version: 3.11 (Cinema 4D native)

      Issue Description:
      When multiple takes each override the render data's frame range (e.g., Main: 0-6, V: 0-9, E: 0-23, R: 0-13, A: 0-17), reading RDATA_FRAMEFROM/RDATA_FRAMETO always returns the Main take's values (0-6) for every take.

      Steps to Reproduce:

      1. Create a Cinema 4D scene with a Main take (frame range 0-6)
      2. Create child takes (V, E, R, A) and override the render data's frame range on each (e.g., V: 0-9, E: 0-23, R: 0-13, A: 0-17)
      3. Run the following script:

      python
      import c4d

      def main():
      doc = c4d.documents.GetActiveDocument()
      take_data = doc.GetTakeData()
      main_take = take_data.GetMainTake()
      fps = doc.GetFps()

      takes = [main_take] + main_take.GetChildren()
      for take in takes:
          rd, _ = take.GetEffectiveRenderData(take_data)
          frame_from = rd[c4d.RDATA_FRAMEFROM].GetFrame(fps)
          frame_to = rd[c4d.RDATA_FRAMETO].GetFrame(fps)
          print(f"Take '{take.GetName()}': FRAMEFROM={frame_from}, FRAMETO={frame_to}")
      

      if name == 'main':
      main()

      1. Observe that all takes print FRAMEFROM=0, FRAMETO=6

      Expected Behavior:
      Each take should report its own overridden frame range.

      Actual Behavior:
      All takes return FRAMEFROM=0, FRAMETO=6 (the Main take's range).

      What I've Tried:

      1. take.GetEffectiveRenderData(take_data) — returns 0-6 for all takes
      2. take_data.SetCurrentTake(take) then reading from doc.GetActiveRenderData() — returns 0-6 for all takes
      3. take_data.TakeToDocument(take) then reading from the isolated document's active render data — returns 0-6 for all takes

      Questions:

      1. Is this a bug in the Python API, or is there a different method we should be using to read per-take frame range overrides (RDATA_FRAMEFROM/RDATA_FRAMETO)?
      2. Are there any known workarounds to get the fully resolved render data with all take overrides applied?

      Any guidance would be greatly appreciated. Thank you!

      1 Reply Last reply Reply Quote 0
      • First post
        Last post