3 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

Video frames

Video assets used in VideoFrame instances allow for video playback in games. 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

Note

To upload video assets, enable the beta feature through File ⟩ Beta Features ⟩ Video Uploads.

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:

Videos that don't meet these requirements are rejected. Alpha channels are not supported and will be ignored. When uploading videos, consider the following:

Play videos

A VideoFrame must be parented to a ScreenGui, SurfaceGui, or BillboardGui in order to be playable. Currently, a maximum of two videos can play simultaneously.

To play a video in your game without code:

  1. Create a ScreenGui as outlined in On-Screen UI Containers, or a SurfaceGui or BillboardGui as outlined in In-game UI containers.

  2. Insert a video from the Toolbox or Asset Manager. A new VideoFrame object is inserted for the video.

  3. Parent the VideoFrame to the container.

  4. With the new VideoFrame selected, enable its Looped and Playing properties in the Properties window.

If you want to play a video in your game 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 = true
screenPart.Parent = Workspace

local surfaceGui = Instance.new("SurfaceGui")
surfaceGui.Parent = screenPart

local videoFrame = Instance.new("VideoFrame")
videoFrame.Size = UDim2.new(1, 0, 1, 0)
videoFrame.Parent = surfaceGui

videoFrame.Looped = true
videoFrame.Video = "rbxassetid://5608384572"  -- Replace with your video's asset ID

while not videoFrame.IsLoaded do
	videoFrame.Loaded:Wait()
end

videoFrame:Play()