Heavily Edited
I want to make a procedural animation loop seamlessly and, while iterating, I'd like to vary the total frame count for length (& varied fps renders) without having to manually update all properties every time I experiment with this. Simply: I want to plug in a value once into the playback editor or properties panel and have all involved properties reference this to run each experiment.
I can foresee a frustrating experience with the housekeeping because of the number of properties (not only those in the following example) referencing total frame length / end frame.
Is it possible to reference this w/ an expression / driver?
When I create a driver via expression on a Musgrave Texture "W" socket or Mix "Factor" socket it returns an "Invalid Python Expression" error because of 'frame_end' in the following B texture W socket:
A MusTexture W: #frame/60
B MusTexture W: #(frame-frame_end)/60
Mix Factor: frame/frame_end
The first image below shows the end frame expression which works (600 is the end frame), however I have to input this manually into every expression which is becoming cumbersome and frustrating (from distraction). Can I automate this?
Thank you for your time and understanding.
Please reference both Markus von Broady's and Quellenform's answers for full understanding of the answer
Edit: Added detail of current Texture B socket code, 600 is current end frame.
Scene Time
andMath
. These two nodes in combination should do what you want. $\endgroup$1import bpy 2 3def frame_end: 4 """returns total frames""" 5 return bpy.context.scene.frame.end 6 7# Add function to driver_namespace. 8bpy.app.driver_namespace['frame_end'] = frame_end
but I'm just guessing at what to plug in where. $\endgroup$