Roblox UtilitiesDevlHub Roblox Documentation

Class

CaptureService

NotCreatableService
Inherits
Instance › Object
Memory category
Instances

A service which provides control over screenshot and video capture features.

CaptureService is a client-side service that allows developers to control how the screenshot and video capture feature integrates with their experiences. It can be used to include preset moments where a capture is automatically taken for a user, and that user can then save, share, or delete the capture.

Methods 11#

CaptureScreenshotTakes a screenshot and provides a temporary contentId to identify it.
CheckUploadCaptureStatusAsyncPolls the status of an in-progress capture upload started by StartUploadCaptureAsync().Yields
PromptCaptureGalleryPermissionAsyncPrompts the user for permission to access their local capture gallery.Yields
PromptSaveCapturesToGalleryPrompts the user to save specified captures to their gallery.
PromptShareCapturePrompts the user to share a specified capture.
ReadCapturesFromGalleryAsyncReturns a paginated list of captures from the user's gallery.Yields
StartUploadCaptureAsyncBegins uploading a capture to the asset system and returns a token used to poll the upload's status.Yields
StartVideoCaptureAsyncInitiates a video capture recording.Yields
StopVideoCaptureEnds a video capture initiated by StartVideoCaptureAsync().
TakeScreenshotCaptureAsyncInitiates a screenshot capture.
UploadCaptureAsyncUploads a capture to the asset system and returns the result and asset ID.Yields

CaptureScreenshot(onCaptureReady: Function): ()#

This method captures a screenshot for the user but does not immediately save it to their Captures gallery within the experience's main menu. Instead, a temporary contentId is created to identify the new capture.

Note that any screenshots taken by this method will not be accessible via ReadCapturesFromGalleryAsync() or be uploadable via UploadCaptureAsync().

The onCaptureReady callback can be used to prompt the user to save or share the screenshot:

NameTypeDefaultDescription
onCaptureReadyFunctionA callback function that is called with the contentId of the new capture once it is ready.
Returns
  • ()

CheckUploadCaptureStatusAsync(token: string): Tuple#

Yields

Client-side function that checks the status of a capture upload started with StartUploadCaptureAsync(), using the returned token. Returns a tuple of the current UploadCaptureResult and, once the upload finishes successfully, the asset ID of the uploaded capture.

Poll until a terminal state. While processing, the result is UploadCaptureResult.UploadPending and the asset ID is 0. UploadCaptureResult.Success includes the final asset ID; UploadCaptureResult.CaptureModerated means moderation rejected the capture; UploadCaptureResult.UploadFailed means the upload did not complete.

NameTypeDefaultDescription
tokenstringThe token returned by StartUploadCaptureAsync() that identifies the in-progress upload.
Returns

PromptCaptureGalleryPermissionAsync(captureGalleryPermission: CaptureGalleryPermission): boolean#

Yields

This client-side function prompts a user for permission to access their local captures. Once they have accepted or rejected the prompt, it returns a boolean representing their choice. This function is a necessary prerequisite to ReadCapturesFromGalleryAsync and UploadCaptureAsync, as both of these require gallery permissions to work.

NameTypeDefaultDescription
captureGalleryPermissionCaptureGalleryPermissionAn CaptureGalleryPermission representing the type of access for which the user will be prompted.
Returns
  • boolean — A boolean representing whether or not the user has allowed access to their captures.

PromptSaveCapturesToGallery(captures: Array, resultCallback: Function): ()#

This method prompts the user to save the captures identified by the provided contentIds or Capture objects to their Captures gallery within the experience's main menu.

NameTypeDefaultDescription
capturesArrayAn array of content IDs and/or Capture objects.
resultCallbackFunctionA callback function that will be invoked with a dictionary mapping each contentId and/or Capture object to a boolean indicating if the user accepted saving that capture.
Returns
  • ()

PromptShareCapture(captureContent: Content, launchData: string, onAcceptedCallback: Function, onDeniedCallback: Function): ()#

This method prompts the user to share the capture identified by the provided contentId or Capture object using the native share sheet on their device.

The capture is shared along with an invite link to the experience when supported. Not all devices support including both a screenshot or video and an invite link.

The launchData will be available in the launchData field for users who join through the invite link.

For users or devices who are not eligible to use share sheets, this method prompts them to download the capture instead.

NameTypeDefaultDescription
captureContentContentA Content containing a contentId or Capture object.
launchDatastringAn optional string to include as launch data in the invite link.
onAcceptedCallbackFunctionAn optional callback function invoked if the user accepts sharing.
onDeniedCallbackFunctionAn optional callback function invoked if the user denies sharing.
Returns
  • ()

ReadCapturesFromGalleryAsync(captureTypeFilters: Array = {}, readFromAllEligibleExperiences: boolean = false): Tuple#

Yields

This client-side function returns a paginated list of captures from the user's gallery as a CapturesPages object sorted reverse-chronologically, which can be used to iterate through the captures. The results can be filtered by capture type with the captureTypeFilters parameter. If this parameter isn't provided, the function returns all captures.

If readFromAllEligibleExperiences is true, captures from all eligible experiences will be read. If false, only those from the current experience will be read. Additionally, captures taken with CaptureScreenshot() and subsequently saved with PromptSaveCapturesToGallery() will not be returned by this method.

NameTypeDefaultDescription
captureTypeFiltersArray{}An array of CaptureType.
readFromAllEligibleExperiencesbooleanfalseA boolean; default is false.
Returns

StartUploadCaptureAsync(capture: Capture): Tuple#

Yields

Client-side function that begins uploading a Capture (for example, one from ReadCapturesFromGalleryAsync()) to the asset system. Unlike UploadCaptureAsync(), which blocks until the asset is created, this returns as soon as the upload starts with a tuple of UploadCaptureResult and a token string. Use this when the user might leave before the upload finishes; a pending UploadCaptureAsync is lost if the player leaves. Pass the token to CheckUploadCaptureStatusAsync() to poll for completion and the resulting asset ID.

The user must grant gallery access through PromptCaptureGalleryPermissionAsync(); without it, the result is UploadCaptureResult.NeedPermission. The capture must be eligible and present in the gallery. Uploads are rate-limited per user and return UploadCaptureResult.UploadQuotaReached when exceeded.

NameTypeDefaultDescription
captureCaptureThe Capture to upload.
Returns

StartVideoCaptureAsync(onCaptureReady: Function, captureParams: Dictionary = nil): VideoCaptureStartedResult#

Yields

This method initiates a video capture recording. The recording will continue until the StopVideoCapture() method is called, or when 30 seconds have passed, whichever comes first. During the video recording, all user voices are muted.

The onCaptureReady callback can be used to prompt the user to save or share the video capture.

The captureParams parameter is currently non-operational.

NameTypeDefaultDescription
onCaptureReadyFunctionA callback function that is called on video capture completion with a VideoCaptureResult and, if successful, a VideoCapture.
captureParamsDictionarynilA dictionary of optional parameters that modify capture behavior. Currently non-operational.
Returns

StopVideoCapture(): ()#

This method ends a video capture that was started by the StartVideoCaptureAsync() method.

Returns
  • ()

TakeScreenshotCaptureAsync(onCaptureReady: Function, captureParams: Dictionary = nil): ()#

This method initiates a screenshot capture. The onCaptureReady callback can be used to prompt the user to save or share the screenshot capture.

Use the UICaptureMode parameter in captureParams to specify whether UI elements should be in the screenshot. By default, this is set to UICaptureMode.None.

NameTypeDefaultDescription
onCaptureReadyFunctionA callback function that is called on screenshot capture completion with a ScreenshotCaptureResult and, if successful, a ScreenshotCapture.
captureParamsDictionarynilA dictionary that modifies capture behavior.
Returns
  • ()

UploadCaptureAsync(capture: Capture): Tuple#

Yields

This client-side function uploads a capture, like one retrieved from ReadCapturesFromGalleryAsync, to the asset system. It returns a tuple of the result and the asset ID.

Notes:

  • This function will only work properly if the Maturity and Compliance questionnaire has been filled out for the experience.
  • For video capture types, there is an upload limit of 20 videos per day per user; when that limit is exceeded, the result is UploadCaptureResult.UploadQuotaReached, which lets you distinguish quota exhaustion from other failures.
  • This function can take up to several minutes to finish executing, and the user will need to remain in the experience.
NameTypeDefaultDescription
captureCaptureThe Capture to upload.
Returns

Events 4#

CaptureBeganFires immediately before a capture begins.
CaptureEndedFires after a capture finishes.
CaptureSavedFires when a screenshot capture is saved to the user's gallery.Deprecated
UserCaptureSavedFires when the user saves a capture.

CaptureBegan(captureType: CaptureType)#

This event fires right before a new capture is taken. It can be used to customize the capture experience, for example by hiding certain GUI elements.

NameTypeDefaultDescription
captureTypeCaptureTypeAn CaptureType indicating whether the capture is a screenshot or video.

CaptureEnded(captureType: CaptureType)#

This event fires after a new capture completes. It can be used to restore any changes made when the CaptureBegan event fired.

NameTypeDefaultDescription
captureTypeCaptureTypeAn CaptureType indicating whether the capture was a screenshot or video.

CaptureSaved(captureInfo: Dictionary)#

DeprecatedDeprecated

Deprecated. This event has been superseded by the UserCaptureSaved event.

Fires when a screenshot capture is saved to the user's gallery. Provides a captureInfo dictionary with contentId, filePath, and type. Fires only for screenshot captures, not video captures.

Deprecated; use UserCaptureSaved instead, which fires with the saved capture's contentId directly.

NameTypeDefaultDescription
captureInfoDictionaryA dictionary containing contentId, filePath, and type fields describing the saved capture.

UserCaptureSaved(captureContentId: ContentId)#

This event fires when the user saves a screenshot using the Roblox screenshot capture UI. It can be used for analytics or to prompt the user to share their capture.

NameTypeDefaultDescription
captureContentIdContentIdThe contentId identifying the screenshot that the user saved.

Inherited members#

Inherited from Instance 58
Inherited from Object 6
Properties (2)

ClassName, className

Events (1)

Changed