GetEffectiveRenderData does not return per-take overrides for RDATA_FRAMEFROM / RDATA_FRAMETO
-
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:
- Create a Cinema 4D scene with a Main take (frame range 0-6)
- 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)
- Run the following script:
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()- 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:
- take.GetEffectiveRenderData(take_data) — returns 0-6 for all takes
- take_data.SetCurrentTake(take) then reading from doc.GetActiveRenderData() — returns 0-6 for all takes
- take_data.TakeToDocument(take) then reading from the isolated document's active render data — returns 0-6 for all takes
Questions:
- 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)?
- 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!
-
Hello @vaishhg,
Thank you for reaching out to us and your comprehensive yet sparse problem description, this really makes things easier for us.
The problem is a bit that you somewhat forgot a crucial part: The scene data :). You provided this:
Create a Cinema 4D scene with a Main take (frame range 0-6)
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)But I cannot recreate a scene with these instructions, unless you meant the second step in a rather metaphorical way (switching the render data itself via takes). I also talked with some of our support specialists, and the consensus seems to be that what you claim to be the case - a scene with take overwritten FROM/TO values - is not possible. What you can do, is create multiple render settings and then activate them via takes.
But Takes are a tricky subject, and I would not rule out that you somehow found a way to create take overrides for parameters of a render data instance. If so, please share the scene. Find also a scene attached which demonstrates what I discussed above: A scene that switches the active render data based on takes. It will print this with your script:
Take 'Main': FRAMEFROM=0, FRAMETO=90 Take '0_45': FRAMEFROM=0, FRAMETO=45 Take '0_90': FRAMEFROM=0, FRAMETO=90So, to formally answer your main question: When my assumptions above are true, your scene is printing the same values because each take does have the same values, as these two parameters are not directly overridable.
Cheers,
Ferdinand