Hello Creators! ![]()
Last year, we released an advanced Audio API which allows you to define how audio is created and processed in-experience by connecting powerful instances such as Wires and AudioListeners. Today, we bring to you the video equivalent with some added cherries on top!
The intent of this API is to give creators additional control and customization beyond what VideoFrame currently offers. We have no plans to deprecate VideoFrame at this time.
What’s New? 
There are two new instances:
VideoPlayer→ where a video asset is specified and stored, as well as where playback functionalities resideVideoDisplay→ renders a video asset on aSurfaceGui,ScreenGui, orBillboardGuiwhen connected to aVideoPlayerwith aWire
They are used in conjunction with Wires and other wireable instances (such as the AudioEmitter) to control, customize, and play videos.
With this API, you now have the power to…
-
Synchronize Playback → Play one video on multiple surfaces in perfect sync, agnostic of the maximum video playback cap, with no impact to performance. -
Control 3D Audio → Utilize AudioEmittersto position and customize the rolloff curves of a video’s audio track. -
Apply Audio Effects → Use wireable audio-processing effects on a video’s audio track for additional stylization. -
Manage Resources → Load and unload video resources from memory as needed. -
Customize Playback Speed → Play videos slooooooooowlyyyyyyy. -
Adjust Appearance → Alter a video’s color, transparency, and more to achieve desired effects. Parity with DecalsandImageLabelsandTextures, oh my! -
Swap Surfaces Seamlessly → Easily move a video from one surface to another without interrupting playback. -
Preview in Studio → Play and test your videos directly in Studio edit mode for a more convenient workflow.
For more information on how to use these new instances, we have this helpful documentation at your disposal:
Let us know! 
This feature is currently in Studio Beta and will not yet function in live experiences. If you encounter any bugs, issues, or have feature requests - please let us know! Feel free to tag @phri with your feedback. ![]()
ICYMI, we mentioned upcoming plans to make video uploads more powerful and delightful earlier this year!
Many thanks to @whiterider15, @SneakyCannoneer, @grumpy_solar, and @ameddserM for their hard work on this featureset. Give ‘em a hearty ![]()
![]()
.
FAQ 
Q: Are
VideoFramesorSoundsgoing to be deprecated?A: No. There are no current plans to deprecate these instances. The advanced APIs are intended to offer additional customization for complex use cases, while
VideoFramesandSoundsremain excellent solutions for simpler needs.
Q: Are there plans to make wiring easier to use, visualize, and debug?
A: Yes. Stay tuned!
Q: Does calling
LoadAsync()on the server preload the video on all clients?A: No.
LoadAsync()on the server fetches video properties (such asTimeLengthorResolution) for the server, but it does not preload the video for clients. You must callLoadAsync()on the client to preload the video asset locally.
Q: Why can’t I hear my video when I wire it to an
AudioEmitter?A: An
AudioListeneris required in order to hear anAudioEmitter.For play mode, be sure to set the
DefaultListenerLocationonSoundServiceto “Camera” or “Character”.For edit mode, you can leverage this plugin which will automatically create an
AudioListenerunder the camera while in edit mode.
Q: Why can’t I find these new instances?
A: You must enable the “New Video API” beta under File → Beta Features and restart Studio.
Q: Is it possible to map a video onto a 3D object (e.g.
MeshPart)?A: Not yet, but this is something we are actively exploring. If this is a feature you would want, please let us know what it would enable you to create!
Q: Do video uploads support alpha channel?
A: Not yet, but we’re interested in supporting this. If there’s anything this would allow you to do that you cannot currently do, please let us know!