Realtime mode off speed boost

Hi all, So originally I wanted to learn about how to disable the project framerate boost when you turn real-time off, but soon realized from others that what Im seeing on my 2 machines is not normal behavior.

Ben suggested I post here to see if anyone has any ideas as to why my projects are doing this.

When I disable realtime, everything speeds up to around 120fps… Using this for an offline media encoder has been awesome, since it just renders videos at double time… but for this current project I would like to cap the speed at the project framerate, even any workaround ideas would be helpful.

I recorded a 2 min video showing / proving it happening.

useloom.com/share/ebc19fe5f … 523954207c

Touch 088 64 bit
Build 62610
Windows 10
GTX 1070

Can confirm that with realtime off the perform CHOP reports an fps rate that matches the display refresh rate.

Wild.

I guess I should also mention that I tried turning the vsync back on ( I have it off ) and it still happens… also should have also posted specs:

Touch 088 64 bit
Build 62610
Windows 10 ( creators update )
Quadro M6000

Looked into this further and the running frame rate does cap at the project’s set frame rate regardless of whether the Realtime flag is on or off. However things like the Beat CHOP, Timer CHOP and other time based CHOPs certainly do speed up considerably.

I’ll have to ask the team the reason for this or if its a bug. Its in both 088 and 099 so its been like this for a while!

Well hey, if it turns out being a bug, I would urge it to become a preference, because I have been harnessing its power for about a year now in my batch video effects media encoder. :laughing:

An update: I recently tried to remedy this and control the output speed… and HOG CHOP ftw!! Not sure how to calculate it precisely, but with some trial and error a HOG chop set to a 0.02 delay with this project what is supposed to take 15 seconds does… but with no hog chop on, it takes 10.

I’ve been building projects with real-time disabled for video encoding and the like for a few years now. In my eyes, this “speed boost” is definitely normal behaviour and should be expected.

I’m going to go over the concept of having real-time disabled in TouchDesigner in a bit more detail to speak to a wider audience of whoever might end up reading this thread.

When real-time mode is disabled, time in the context of TouchDesigner is no longer synced up with the quite literal real world time such as seconds on a stopwatch or a clock on the wall. Time is malleable at this point and one “second” in TouchDesigner with real-time disabled might be stretched into 10 seconds of real-time or compressed into 1/10th a second of real-time depending on the workload at hand. Relativity!

Frames will not be skipped if they are taking too long to draw, but also new frames will not wait to draw if the current frame has already been drawn. The frames per second will just increase along with the processing power available to spit frames out.

The latter explaining the increase of frames per second, withstanding the display refresh rate (e.g. 60, 120) whenever there is a window drawing on-screen. If you run your project headless, such as with window draw disabled or playing while minimised, you can achieve even higher FPS with real-time disabled.

The best solution I’ve found for when I need a project to run with real-time disabled, but also need some things to stay synced up with real-time (as if real-time was enabled) :

Set a Timer CHOP’s speed parameter expression to adjust with the current FPS from a Perform CHOP such as me.time.rate / op('perform')['fps']
This expression compensates for changes in the current FPS to maintain a synchronicity with real-time.
There is a small issue with this approach due to the jitter on the Perform CHOP’s FPS monitor reading jumping up one frame (e.g. 30/31, 60/61.) I’ve eliminated the jitter by quantising the FPS by a value step of 3 frames. (I did this using python’s round() to keep it all in one parameter expression but could be done with a Limit CHOP instead.)

Attached is an example TOE of my approach to sync a Timer CHOP to real-time while TouchDesigner has “Realtime” mode disabled. I would love to see a “Always play in real-time” toggle parameter added on the Timer CHOP.
timer_realtime_sync.toe (5.11 KB)

The specific use case I originally investigated this solution for was a project that needed to run with real-time disabled to render out videos but also needed to communicate with a server at a set regular interval to send a status ping/message.

Our back-end developer alerted us that TouchDesigner was flooding the render queue management server with pings that were only supposed to send once on a 10 second timer. Well, with a 30 FPS project running with real-time disabled at up to ~1000 FPS, those pings were actually sending every 0.3 seconds!

in some other animation software, there’s often a ‘play every frame but capped fps’ mode - so it’ll play every frame as fast as it can, but no faster than what the FPS is set at, would love that.

I was making use of the speed boost in export movie but in certain circumstances the audio would muck up when I did that, and would only work properly when playing at real time through the record on the movieOut CHOP

Hi all’

Im writing to ask… Was this changed in the more recent stable build? I may be crazy and wrong about this, but it appears the speed boost is now gone.

Nothing has changed as far as we know. You will still be limited to the frame rate of the system (monitor refresh rate) if you have vertical sync on which is the default.
Perhaps explain your exact steps and we can determine if something is unexpected.

Hello there,
Im trying to find a solution for this. Three years later.
Im recording at 30fps but if i push the realtime button it just doubles the speed rate (60-61fps).
If this was just a normal recording it will be great: half of the time.
But i want to be able to modulate parameters in the process, and since is twice the speed its not possible to match it correctly.

índice