17 min read

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

VideoFrame

Inherits from: GuiObject → GuiBase2d → GuiBase → Instance → Object

A VideoFrame renders a rectangle, like a Frame does, with a moving video image. The video must be from a file uploaded to the Roblox website.

The video is scaled to fit the entirety of the rectangle, but looks best when displayed at its native resolution.

2D and 3D Sound

A VideoFrame placed underneath SurfaceGui on a BasePart will emit its sound from that part's BasePart.Position.

A VideoFrame exhibits the Doppler effect, meaning its frequency and pitch varies with the relative motion of whatever part it is attached to.

The volume of the VideoFrame will be determined by the distance between the client's sound listener (by default the Camera position) and the position of the VideoFrame's part.

A VideoFrame is considered "global" if it is not placed underneath SurfaceGui on a BasePart. In this case, the sound will play at the same volume throughout the entire place.

Inherits from: GuiObject

Memory category: Gui

Code samples: View on Creator Hub (creating-and-playing-a-video).

Properties

NameType / ReturnsDescription
VideoFrame.IsLoadedbooleanIndicates when the VideoFrame.Video has loaded from Roblox servers and is ready to play.
VideoFrame.LoopedbooleanSets whether or not the VideoFrame.Video repeats once it has finished when it is playing.
VideoFrame.MaximumResolutionVideoSampleSizeInternal-only. Caps the resolution the video is allowed to stream at, expressed as an VideoSampleSize.
VideoFrame.PlayingbooleanIndicates whether the VideoFrame.Video is currently playing. It can be set to start or pause playback.
VideoFrame.ResolutionVector2Gets the original source resolution of the VideoFrame.Video file.
VideoFrame.RollOffMaxDistancefloatThe maximum distance, in studs, a listener can be from the video's part and still hear its audio.
VideoFrame.RollOffMinDistancefloatThe minimum distance, in studs, at which the video's audio starts to attenuate.
VideoFrame.RollOffModeRollOffModeControls how the video's audio volume attenuates with distance.
VideoFrame.TimeLengthdoubleIndicates the length of the VideoFrame.Video in seconds.
VideoFrame.TimePositiondoubleIndicates the progress in seconds of the VideoFrame.Video.
VideoFrame.VideoContentIdThe content ID of the video file a VideoFrame object is associated with.
VideoFrame.VideoContentContentThe video content a VideoFrame is associated with, as either an asset content ID (same value as Video) or a direct reference to a VideoCapture object for local screen recordings.
VideoFrame.VolumefloatIndicates how loud the VideoFrame.Video is currently playing back.

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject.ActivebooleanDetermines whether this UI element sinks input.
GuiObject.AnchorPointVector2Determines the origin point of a GuiObject, relative to its absolute size.
GuiObject.AutomaticSizeAutomaticSizeDetermines whether resizing occurs based on child content.
GuiObject.BackgroundColorBrickColorDetermines the color of the GuiObject background.
GuiObject.BackgroundColor3Color3Determines the GuiObject background color.
GuiObject.BackgroundTransparencyfloatDetermines the transparency of the GuiObject background and border.
GuiObject.BorderColorBrickColorDetermines the color of the GuiObject border.
GuiObject.BorderColor3Color3Determines the color of the GuiObject border.
GuiObject.BorderModeBorderModeDetermines in what manner the GuiObject border is laid out relative to its dimensions.
GuiObject.BorderSizePixelintDetermines the pixel width of the GuiObject border.
GuiObject.ClipsDescendantsbooleanDetermines if descendant GuiObjects outside of the bounds of a parent GUI element should render.
GuiObject.DraggablebooleanDetermines whether a GuiObject (and its descendants) can be dragged around the screen.
GuiObject.GuiStateGuiStateDetermines whether the player's mouse is being actively pressed on the GuiObject or not.
GuiObject.InputSinkInputSinkControls whether, and how, the GuiObject sinks input that occurs over it.
GuiObject.InteractablebooleanDetermines whether the GuiButton can be interacted with or not, or if the GuiState of the GuiObject is changing or not.
GuiObject.LayoutOrderintControls the sort order of the GuiObject when used with a UIGridStyleLayout.
GuiObject.NextSelectionDownGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved downward.
GuiObject.NextSelectionLeftGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved to the left.
GuiObject.NextSelectionRightGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved to the right.
GuiObject.NextSelectionUpGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved upward.
GuiObject.PositionUDim2Determines the pixel and scalar position of the GuiObject.
GuiObject.RotationfloatDetermines the number of degrees by which the GuiObject is rotated.
GuiObject.SelectablebooleanDetermine whether the GuiObject can be selected by a gamepad.
GuiObject.SelectionImageObjectGuiObjectOverrides the default selection adornment used for gamepads.
GuiObject.SelectionOrderintThe order of GuiObjects selected by the gamepad UI selection.
GuiObject.SizeUDim2Determines the pixel and scalar size of the GuiObject.
GuiObject.SizeConstraintSizeConstraintSets the Size axes that the GuiObject will be based on, relative to the size of its parent.
GuiObject.TransparencyfloatA mixed property of BackgroundTransparency and TextTransparency.
GuiObject.VisiblebooleanDetermines whether the GuiObject and its descendants will be rendered.
GuiObject.ZIndexintDetermines the order in which a GuiObject renders relative to others.

Inherited from GuiBase2d

NameType / ReturnsDescription
GuiBase2d.AbsolutePositionVector2Describes the actual screen position of a GuiBase2d element, in pixels.
GuiBase2d.AbsoluteRotationfloatDescribes the actual screen rotation of a GuiBase2d element, in degrees.
GuiBase2d.AbsoluteSizeVector2Describes the actual screen size of a GuiBase2d element, in pixels.
GuiBase2d.AutoLocalizebooleanWhen set to true, localization will be applied to this GuiBase2d and its descendants.
GuiBase2d.LocalizebooleanAutomatically set to true when a localization table's LocalizationTable.Root targets this object, or an ancestor of this object.
GuiBase2d.RootLocalizationTableLocalizationTableA reference to a LocalizationTable to be used to apply automated localization to this GuiBase2d and its descendants.
GuiBase2d.SelectionBehaviorDownSelectionBehaviorCustomizes gamepad selection behavior in the down direction.
GuiBase2d.SelectionBehaviorLeftSelectionBehaviorCustomizes gamepad selection behavior in the left direction.
GuiBase2d.SelectionBehaviorRightSelectionBehaviorCustomizes gamepad selection behavior in the right direction.
GuiBase2d.SelectionBehaviorUpSelectionBehaviorCustomizes gamepad selection behavior in the up direction.
GuiBase2d.SelectionGroupbooleanAllows customization of gamepad selection movement.

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

VideoFrame.IsLoaded

This property will be true when the VideoFrame.Video has loaded from Roblox servers and is ready to play.

FieldValue
typeboolean
tags["ReadOnly","NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":false,"can_save":false}
capabilities["Audio","UI"]

VideoFrame.Looped

This property sets whether or not the VideoFrame.Video repeats once it has finished when it is playing.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.MaximumResolution

Internal-only. Caps the resolution the video is allowed to stream at, as an VideoSampleSize rather than exact pixel dimensions.

The video may still stream below the cap on a slow connection. Defaults to VideoSampleSize.Full.

FieldValue
typeVideoSampleSize
tags["Hidden"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI","InternalTest"]

VideoFrame.Playing

This property indicates whether the VideoFrame.Video is currently playing. It can be set to start or pause playback as an alternative to the VideoFrame:Play() and VideoFrame:Pause() functions.

FieldValue
typeboolean
tags["NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.Resolution

This property gets the original source resolution of the VideoFrame.Video file.

FieldValue
typeVector2
tags["ReadOnly","NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":false,"can_save":false}
capabilities["Audio","UI"]

VideoFrame.RollOffMaxDistance

The maximum distance, in studs, a client's listener can be from the VideoFrame's part and still hear its audio. Defaults to 10000.

This property only affects playback when the VideoFrame is 3D, as described in the class's "2D and 3D Sound" section; it has no effect on a global VideoFrame. How RollOffMaxDistance affects the attenuation of the sound depends on the RollOffMode property.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.RollOffMinDistance

The minimum distance, in studs, at which the VideoFrame's audio begins to attenuate (decrease in volume). Defaults to 1.

This property only affects playback when the VideoFrame is 3D, as described in the class's "2D and 3D Sound" section; it has no effect on a global VideoFrame. How RollOffMinDistance affects the attenuation of the sound depends on the RollOffMode property.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.RollOffMode

Controls how the volume of the VideoFrame's audio attenuates (fades out) as the distance between the listener and the video's part changes. Defaults to RollOffMode.Inverse.

This property only affects playback when the VideoFrame is 3D, as described in the class's "2D and 3D Sound" section; it has no effect on a global VideoFrame. For details on the different modes, see RollOffMode.

FieldValue
typeRollOffMode
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.TimeLength

This property indicates the length of the VideoFrame.Video in seconds. If the video is not loaded, this value will be 0.

FieldValue
typedouble
tags["ReadOnly","NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":false,"can_save":false}
capabilities["Audio","UI"]

VideoFrame.TimePosition

This property indicates the progress in seconds of the VideoFrame.Video. It can be changed to move the playback position of the video both before and during playback.

FieldValue
typedouble
tags["NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.Video

The content ID of the video file a VideoFrame object is associated with. To save resources and improve performance, set this property to "" when the VideoFrame is not visible or in use.

FieldValue
typeContentId
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

Code samples: View on Creator Hub (creating-and-playing-a-video).

VideoFrame.VideoContent

The video content a VideoFrame object is associated with. Setting this property is equivalent to setting Video, and reading it returns a content ID equal to Video.

When referencing a video by content ID, build the value with the corresponding Content constructor: Content.fromAssetId() for a numeric asset ID, or Content.fromUri() for an rbxassetid:// URI.

Unlike Video, which only accepts a content ID string, VideoContent can also hold a direct reference to a VideoCapture object, such as one retrieved through CaptureService:ReadCapturesFromGalleryAsync(). This lets a local screen recording play back on the VideoFrame without first uploading it to Roblox. Build the value with Content.fromObject(), for example videoFrame.VideoContent = Content.fromObject(capture).

FieldValue
typeContent
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

VideoFrame.Volume

This property determines how loud the VideoFrame.Video plays back. It can be set to a number between 0 and 100.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryVideo
serialization{"can_load":true,"can_save":true}
capabilities["Audio","UI"]

Methods

NameType / ReturnsDescription
VideoFrame:Pause()Sets VideoFrame.Playing to false, pausing playback if the VideoFrame.Video is playing.
VideoFrame:Play()Sets VideoFrame.Playing to true, playing the VideoFrame.Video from the current VideoFrame.TimePosition.

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject:TweenPositionbooleanSmoothly moves a GUI to a new UDim2.
GuiObject:TweenSizebooleanSmoothly resizes a GuiObject to a new UDim2.
GuiObject:TweenSizeAndPositionbooleanSmoothly moves a GUI to a new size and position.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

VideoFrame:Pause

Sets VideoFrame.Playing to false, pausing playback if the VideoFrame.Video is playing.

As VideoFrame.TimePosition is not reset, when the video is resumed it will continue from its previous position.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Audio","UI"]

VideoFrame:Play

Sets VideoFrame.Playing to true, playing the VideoFrame.Video from the current VideoFrame.TimePosition. To save resources and improve performance, set the VideoFrame.Video property to "" when the VideoFrame is not visible or in use.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Audio","UI"]

Code samples: View on Creator Hub (creating-and-playing-a-video).

Events

NameType / ReturnsDescription
VideoFrame.DidLoopFires whenever the VideoFrame.Video loops.
VideoFrame.EndedFires when the VideoFrame.Video has completed playback and stopped.
VideoFrame.LoadedFires when the VideoFrame.Video is loaded.
VideoFrame.PausedThis event fires whenever the VideoFrame.Video is paused using VideoFrame:Pause() or by setting VideoFrame.Playing to false.
VideoFrame.PlayedFires whenever the VideoFrame.Video is played using the VideoFrame:Play() function or by setting VideoFrame.Playing to true.

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject.DragBeginFired when a player begins dragging the object.
GuiObject.DragStoppedFired when a player stops dragging the object.
GuiObject.InputBeganFired when a user begins interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.InputChangedFired when a user changes how they're interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.InputEndedFired when a user stops interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.MouseEnterFires when a user moves their mouse into a GUI element.
GuiObject.MouseLeaveFires when a user moves their mouse out of a GUI element.
GuiObject.MouseMovedFires whenever a user moves their mouse while it is inside a GUI element.
GuiObject.MouseWheelBackwardFires when a user scrolls their mouse wheel back when the mouse is over a GUI element.
GuiObject.MouseWheelForwardFires when a user scrolls their mouse wheel forward when the mouse is over a GUI element.
GuiObject.SelectionGainedFired when the GuiObject is being focused on with the Gamepad selector.
GuiObject.SelectionLostFired when the Gamepad selector stops focusing on the GuiObject.
GuiObject.TouchLongPressFires when the player starts, continues and stops long-pressing the UI element.
GuiObject.TouchPanFires when the player moves their finger on the UI element.
GuiObject.TouchPinchFires when the player performs a pinch or pull gesture using two fingers on the UI element.
GuiObject.TouchRotateFires when the player performs a rotation gesture using two fingers on the UI element.
GuiObject.TouchSwipeFires when the player performs a swipe gesture on the UI element.
GuiObject.TouchTapFires when the player performs a tap gesture on the UI element.

Inherited from GuiBase2d

NameType / ReturnsDescription
GuiBase2d.SelectionChangedFires when the gamepad selection moves to, leaves, or changes within the connected GuiBase2d or any descendant GuiObjects.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

VideoFrame.DidLoop

An event that fires whenever the VideoFrame.Video loops. Returns the content ID of the video.

Parameters

NameTypeDefaultDescription
videostringThe content ID of the video that looped.
FieldValue
securityNone
capabilities["Audio","UI"]

VideoFrame.Ended

This event fires when the VideoFrame.Video has completed playback and stopped.

Parameters

NameTypeDefaultDescription
videostringThe content ID of the paused that ended.
FieldValue
securityNone
capabilities["Audio","UI"]

VideoFrame.Loaded

This event fires when the VideoFrame.Video is loaded.

Parameters

NameTypeDefaultDescription
videostringThe content ID of the loaded video.
FieldValue
securityNone
capabilities["Audio","UI"]

VideoFrame.Paused

This event fires whenever the VideoFrame.Video is paused using VideoFrame:Pause() or by setting VideoFrame.Playing to false.

Parameters

NameTypeDefaultDescription
videostringThe content ID of the paused video.
FieldValue
securityNone
capabilities["Audio","UI"]

VideoFrame.Played

This event fires whenever the VideoFrame.Video is played using the VideoFrame:Play() function or by setting VideoFrame.Playing to true.

Parameters

NameTypeDefaultDescription
videostringThe content ID of the played video.
FieldValue
securityNone
capabilities["Audio","UI"]