If you set a material property to a media file reference directly, then Studio will construct a Material / Texture pair under the hood, set the texture’s source to the file, and queue a message to load the texture. You’ll see the object will get a “notready” event and then a “ready” event in the following frame when the texture data is uploaded.
When the hierarchy is initially loaded, the experience isn’t shown until “ready” has propagated all the way to the root node of the scene - this means we only need to load textures for Media Files that are actually in use in the hierarchy, so it’s a form of lazy-loading.
To swap instantly you can add ImageTexture nodes for the textures you want to swap between, and use them in your state / timeline changes. Those ImageTexture nodes will be loaded up-front, and as their source isn’t be reset during runtime they should just be instantly “ready” for use, and rendered in the same frame you set them.