Video assets used in VideoFrame instances allow for video playback in experiences. You can upload videos that you're certain you have permission to use, such as videos you make yourself, and the asset privacy system automatically ensures that the IDs of your uploaded videos can't be accessed by users without the proper permissions.
Upload videos
If you're a 13+ ID verified user, you can upload videos through the Asset Manager, the Creator Dashboard, or the Open Cloud API. You can upload a video as long as it meets the following requirements:
- You have the legal rights to use the video asset.
- It adheres to the Roblox Community Standards and Terms of Use.
- It's 60 seconds or less in either .mp4 or .mov format.
- Its resolution is less than or equal to 4096×2160.
- It's less than 750 MB.
- It includes only English, Spanish, Portuguese, Indonesian, Chinese (simplified and traditional), Japanese, and/or Korean audio and text.
Videos that don't meet these requirements are rejected. Alpha channels are not supported and will be ignored. When uploading videos, consider the following:
- Each video upload costs 2,000 Robux.
- You can upload a maximum of ten videos within any 30-day period, starting from the date of your first video upload.
Play videos
A VideoFrame must be parented to a ScreenGui, SurfaceGui, or BillboardGui in order to be playable.
To play a video in your experience without code:
Create a ScreenGui as outlined in On-Screen UI Containers, or a SurfaceGui or BillboardGui as outlined in In-Experience UI Containers.
Insert a video from the Toolbox or Asset Manager. A new VideoFrame object is inserted for the video.
Parent the VideoFrame to the container.
With the new VideoFrame selected, enable its Looped and Playing properties in the Properties window.
If you want to play a video in your experience with code, paste the following code into a Script within ServerScriptService to create a Part and play the video on its front surface.
local Workspace = game:GetService("Workspace")local screenPart = Instance.new("Part")screenPart.Size = Vector3.new(16, 9, 1)screenPart.Position = Vector3.new(0, 8, -20)screenPart.Orientation = Vector3.new(0, 180, 0)screenPart.Anchored = truescreenPart.Parent = Workspacelocal surfaceGui = Instance.new("SurfaceGui")surfaceGui.Parent = screenPartlocal videoFrame = Instance.new("VideoFrame")videoFrame.Size = UDim2.new(1, 0, 1, 0)videoFrame.Parent = surfaceGuivideoFrame.Looped = truevideoFrame.Video = "rbxassetid://5608384572" -- Replace with your video's asset IDwhile not videoFrame.IsLoaded dovideoFrame.Loaded:Wait()endvideoFrame:Play()