# This file is automatically generated. Please don't edit it manually. # To submit a bug report on the content, see # https://devforum.roblox.com/c/bug-reports/documentation-issues/72 name: CaptureService type: class memory_category: Instances summary: | A service which provides control over screenshot and video capture features. description: | `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. code_samples: [] inherits: - Instance descendants: [] tags: - NotCreatable - Service deprecation_message: '' properties: [] methods: - name: CaptureService:CaptureScreenshot summary: | Takes a screenshot and provides a temporary `contentId` to identify it. description: | 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 `Class.CaptureService:ReadCapturesFromGalleryAsync()|ReadCapturesFromGalleryAsync()` or be uploadable via `Class.CaptureService:UploadCaptureAsync()|UploadCaptureAsync()`. The `onCaptureReady` callback can be used to prompt the user to save or share the screenshot: ```lua local CaptureService = game:GetService("CaptureService") -- Reference to an ImageLabel parent of the script containing this code local imageLabel = script.Parent local function onCaptureReady(contentId) imageLabel.Image = contentId end CaptureService:CaptureScreenshot(onCaptureReady) ``` code_samples: [] parameters: - name: onCaptureReady type: Function default: summary: | A callback function that is called with the `contentId` of the new capture once it is ready. returns: - type: () summary: '' tags: [] deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:PromptCaptureGalleryPermissionAsync summary: '' description: | 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. code_samples: - PromptCaptureGalleryPermissionAsync-example parameters: - name: captureGalleryPermission type: CaptureGalleryPermission default: summary: | An `Enum.CaptureGalleryPermission` representing the type of access for which the user will be prompted. returns: - type: boolean summary: | A boolean representing whether or not the user has allowed access to their captures. tags: - Yields deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:PromptSaveCapturesToGallery summary: | Prompts the user to save specified captures to their gallery. description: | This method prompts the user to save the captures identified by the provided `contentIds` or `Class.Capture` objects to their **Captures** gallery within the experience's main menu. code_samples: [] parameters: - name: captures type: Array default: summary: | An array of content IDs and/or `Class.Capture` objects. - name: resultCallback type: Function default: summary: | A callback function that will be invoked with a dictionary mapping each `contentId` and/or `Class.Capture` object to a boolean indicating if the user accepted saving that capture. returns: - type: () summary: '' tags: [] deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:PromptShareCapture summary: | Prompts the user to share a specified capture. description: | This method prompts the user to share the capture identified by the provided `contentId` or `Class.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. ```lua local CaptureService = game:GetService("CaptureService") local function onShareAccepted() print("Capture share was accepted!") end local function onShareDenied() print("Capture share was denied!") end local onCaptureReady = function(result, videoCapture) if videoCapture then local captureContent = Content.fromObject(videoCapture) CaptureService:PromptShareCapture(captureContent, "launchData" , onShareAccepted, onShareDenied) end end CaptureService:StartVideoCaptureAsync(onCaptureReady, {}) ``` code_samples: [] parameters: - name: captureContent type: Content default: summary: | A `Datatype.Content` containing a `contentId` or `Class.Capture` object. - name: launchData type: string default: summary: | An optional string to include as launch data in the invite link. - name: onAcceptedCallback type: Function default: summary: | An optional callback function invoked if the user accepts sharing. - name: onDeniedCallback type: Function default: summary: | An optional callback function invoked if the user denies sharing. returns: - type: () summary: '' tags: [] deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:ReadCapturesFromGalleryAsync summary: '' description: | This client-side function returns a paginated list of captures from the user's gallery as a `Class.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. Currently, this method will only return captures taken in the experience where it is called. Additionally, captures taken with `Class.CaptureService:CaptureScreenshot()|CaptureScreenshot()` and subsequently saved with `Class.CaptureService:PromptSaveCapturesToGallery()|PromptSaveCapturesToGallery()` will not be returned by this method. code_samples: - ReadCapturesFromGalleryAsync-example parameters: - name: captureTypeFilters type: Array default: '{}' summary: | An array of `Enum.CaptureType`. returns: - type: Tuple summary: | Tuple of (result: `Enum.ReadCapturesFromGalleryResult`, capturesPages: `Class.CapturesPages`) tags: - Yields deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:StartVideoCaptureAsync summary: | Initiates a video capture recording. description: | This method initiates a video capture recording. The recording will continue until the `Class.CaptureService:StopVideoCapture()|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. ```lua local CaptureService = game:GetService("CaptureService") local parent = script.Parent local onCaptureReady = function(result, videoCapture) if result ~= Enum.VideoCaptureResult.Success and result ~= Enum.VideoCaptureResult.TimeLimitReached or not videoCapture then print("Video recording failed to complete for reason:", result) else -- Prompt the user to save the video capture to their gallery CaptureService:PromptSaveCapturesToGallery({ videoCapture }, function() print("Capture saved") end) end end parent.Activated:Connect(function() local videoRecordingAllowedResult: Enum.VideoCaptureStartedResult = CaptureService:StartVideoCaptureAsync(onCaptureReady, {}) if videoRecordingAllowedResult ~= Enum.VideoCaptureStartedResult.Success then print("Video recording failed to start for reason:", videoRecordingAllowedResult) end end) ``` code_samples: [] parameters: - name: onCaptureReady type: Function default: summary: | A callback function that is called on video capture completion with a `Enum.VideoCaptureResult` and, if successful, a `Class.VideoCapture`. - name: captureParams type: Dictionary default: nil summary: '' returns: - type: VideoCaptureStartedResult summary: '' tags: - Yields deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:StopVideoCapture summary: | Ends a video capture initiated by `Class.CaptureService:StartVideoCaptureAsync()|StartVideoCaptureAsync()`. description: | This method ends a video capture that was started by the `Class.CaptureService:StartVideoCaptureAsync()|StartVideoCaptureAsync()` method. code_samples: [] parameters: [] returns: - type: () summary: '' tags: [] deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:TakeScreenshotCaptureAsync summary: | Initiates a screenshot capture. description: | 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 `Enum.UICaptureMode` parameter in `captureParams` to specify whether UI elements should be in the screenshot. By default, this is set to `Enum.UICaptureMode.None`. ```lua local CaptureService = game:GetService("CaptureService") local parent = script.Parent local onCaptureReady = function(result, screenshotCapture) if result ~= Enum.ScreenshotCaptureResult.Success or not screenshotCapture then print("Screenshot failed to complete for reason:", result) else -- Prompt the user to save the screenshot capture to their gallery CaptureService:PromptSaveCapturesToGallery({ screenshotCapture }, function(results) for capture, result in pairs(results) do if result then print("Capture saved") end end end) end end parent.Activated:Connect(function() CaptureService:TakeScreenshotCaptureAsync(onCaptureReady, { UICaptureMode = Enum.UICaptureMode.All }) end) ``` code_samples: [] parameters: - name: onCaptureReady type: Function default: summary: | A callback function that is called on screenshot capture completion with a `Enum.ScreenshotCaptureResult` and, if successful, a `Class.ScreenshotCapture`. - name: captureParams type: Dictionary default: nil summary: | A dictionary that modifies capture behavior. returns: - type: () summary: '' tags: [] deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture - name: CaptureService:UploadCaptureAsync summary: '' description: | 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. - This function can take up to several minutes to finish executing, and the user will need to remain in the experience. code_samples: - UploadCaptureAsync-example parameters: - name: capture type: Capture default: summary: | a capture object of type `Class.Capture` returns: - type: Tuple summary: | Tuple of (result: `Enum.UploadCaptureResult`, assetId: `number`) tags: - Yields deprecation_message: '' security: None thread_safety: Unsafe capabilities: - Capture events: - name: CaptureService.CaptureBegan summary: | Fires immediately before a capture begins. description: | 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. code_samples: [] parameters: - name: captureType type: CaptureType default: summary: '' tags: [] deprecation_message: '' security: None capabilities: - Capture - name: CaptureService.CaptureEnded summary: | Fires after a capture finishes. description: | This event fires after a new capture completes. It can be used to restore any changes made when the `Class.CaptureService.CaptureBegan|CaptureBegan` event fired. code_samples: [] parameters: - name: captureType type: CaptureType default: summary: '' tags: [] deprecation_message: '' security: None capabilities: - Capture - name: CaptureService.CaptureSaved summary: '' description: '' code_samples: [] parameters: - name: captureInfo type: Dictionary default: summary: '' tags: - Deprecated deprecation_message: | This event has been superseded by the `Class.CaptureService.UserCaptureSaved|UserCaptureSaved` event. security: None capabilities: - Capture - name: CaptureService.UserCaptureSaved summary: | Fires when the user saves a capture. description: | 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. code_samples: [] parameters: - name: captureContentId type: ContentId default: summary: | The `contentId` identifying the screenshot that the user saved. tags: [] deprecation_message: '' security: None capabilities: - Capture callbacks: []