Frames vs timing - will my frame rate be automatically detected?

OS (e.g. Win10):
PsychoPy version (e.g. 1.84.x):
Standard Standalone? (y/n) If not then what?:
What are you trying to achieve?:

Hi all,
I’m creating a visual masking experiment in which I need to have images appear between masks for fractions of a second.

What did you try to make it work?:

I have it working by asking for specific timing to 3 decimal places according to some math I did to determine what 1Hz would be on a 120Hz refresh rate monitor.

What specifically went wrong when you tried that?:

Nothing went wrong as far as I can tell, but I saw a pop up stating that setting the timing by frames might be more accuarte, I was mainly curious as to how Psychopy determine what the frame rate is, and if this will change when I use a 60Hz monitor instead. I sometimes need to do this when writing the experiment on my laptop. I will also be extending my screen to be able to run the experiment on my 60Hz monitor laptop, but displaying the image on a 120Hz external monitor. I have the external extended setting output as 120 Hz. I suppose my question is if the Frame Rate option for timing is contingent upon the monitor I am using, or the settings I have selected for the output?
Thanks for your time!

Both. PsychoPy will attempt to measure the frame rate on the main display before the experiment begins and store the result in your data file. It can’t actually set the frame rate itself – you have to take care of that in the OS.

PsychoPy assumes you know what the duration of a frame is. If you specify that a stimulus should appear for one frame, then that will last approximately 16.7 ms when the experiment is run on your 60 Hz display and 8.3 ms on your 120 Hz display. PsychoPy will just count how many frames have elapsed, and not care about their duration, so frame-based stimulus timings can change markedly across different refresh rates.

Thanks very much for that explanation Michael, much appreciated! <3