I’ve actually achieved this earlier in the night, If you are interested in how I accomplished it feel free to reach out!
Thanks for taking the time to report this. This issue should be fixed in the latest version of studio.
Basic swipe transition
Trying to make a square panel grow transition but the 1024 pixel read/write limit
at least it makes for a cool frame effect.
I really love the new API, however, I am concerned about its potential for misuse in collecting data without user consent or awareness.
Whilst playing around with the API I have noticed the absence of a prompt triggered by the :CaptureScreenshot()
method, making it possible for developers to take screenshots of a user’s ROBLOX session without detection. This lack of notification could enable undectable data collection on all users on roblox.
Delving further, I approached the API from a more malicious standpoint and discovered a method to seamlessly export taken screenshots from ROBLOX to my web server in real-time. Subsequently, I could recreate the image or even generate a video of the ROBLOX session without the user’s knowledge. This recording process operates without any prompts or noticeable screen lag, leaving the targeted user unaware of their session being surveilled.
The scary thing is that it’s not that hard to pull off.
- Capture the screenshot with the
:CaptureScreenshot()
-method of theCaptureService
. - Use the id to create an
EditableImage
-Instance using the:CreateEditableImageAsync()
-method of theAssetService
. - Send the
EditableImage
-Instance to aServerScript
viaRemoteEvent
. - Partition the screenshot into chunks using the
:ReadPixels()
-method of the createdEditableImage
-Instance. - Remove unnecessary image-data. There is no need to keep the alpha-values for the pixels given by the
:ReadPixels()
-method as for the screenshot they are always 0. (this makes the end-size of the image 25% smaller). - Send the chunk to your web server using the
HTTP Service
. - On the webserver, read the data and convert it to any image or video format.
It should be mentioned that this only works for sessions created in ROBLOX Studio as the EditableImage
is not yet realeased for the ROBLOX Client.
A simple way to counter this misuse is by adding a prompt to the :CaptureScreenshot()
-method when invoked. I do understand that without the prompt developers could use the Service for exploit-protection systems but the possiblity that other malicious developers could gather data of minors without their (parent’s) concent or knowledge is more serious.
Thank you for considering my concerns.
You could compress it/pixelate it/blur it to hide the fact that it’s not full size
Update: we have now released the captures feature to desktop.
Is it possible to capture a screenshot and then edit that screenshot with scripts? (something that goes along the line of making screen distortion effects such as glitching)
Is there some sort of way to hide the UI when capturing? This could work really well with an in-game camera system.
I’m aware of HideCoreGuiForCaptures
and HidePlayerGuiForCaptures
, but they don’t seem to work as intended for captures created by scripts. CaptureBegan
and CaptureEnded
doesn’t fire properly for me as well.
I’m upset that capture replaced the old screenshot button because the new one is even more limited.
- Can’t press the capture button when in first person experience.
- Can’t get a screenshot of the in game UI because it is automatically hidden without option.
- Images are watermarked with no option to disable.
At this point I prefer using windows snipping tool rather than the inbuilt capture.
Is there a way to delete the unwanted temporary captureID?, i was doing some tests until it just stopped working, i assume its because there is a limit of temp captureIDs you can have, i had to use another place to make it work again.
Hi, great question. We’re aware of the inability to remove captures requested by the experience from memory and we’re looking into the best way to solve this issue long-term. We’re balancing this with a few different priorities, but we should at least have an update for you in a few weeks. Thank you for your patience while we get this figured out.
When using the captures API, hiding the UI is left up to the experience. There’s no way to hide core components like the escape menu button through the CaptureService. We’re interested ways to get around this limitation so that we can offer something like a UI-free capture, but we’re a bit constrained by the technology on this front. We’ll keep devs posted if this changes.
Good question. These are all for when the user uses the in-experience captures feature, not when the developer takes a capture. User support docs found here: https://en.help.roblox.com/hc/en-us/articles/20564017568276-How-Do-I-Take-a-Screenshot-in-an-Experience
Is there any reason this wasn’t present in the engine release notes? The only reason I saw this is because I randomly remembered this feature got released today and was curious if desktop got it yet. Things like this are really hard to track.
Hey great callout, let me check with my teammates if that makes sense for future updates to captures. The desktop feature update didn’t get added to the engine release notes because a feature release like that doesn’t map 1:1 with an engine release, but I’ll see if it makes sense to include updates there to keep devs better informed.
Yeah, some work needs to be done to better inform developers about updates like this. Often, features are released with an announcement on the DevForum (fine) but if they are in beta, or incomplete, Roblox staff will follow up with a comment, or they’ll edit the announcement. This is near-impossible to track.
CaptureService:CaptureScreenshot(...)
used to work in studio when the game wasn’t running but now just yields forever. Was this an intentional change? If not, can we have that old functionality back? I was hoping to use it for a plugin.
Will it ever be possible for us to capture screenshots from other CameraInstances? @TheGamer101 @merlin_codes
Not intentional, we will fix this.
Bumpy bump, I’m still waiting on an answer please. Thanks!
Hi there! I’m interested to know!