Non-sequential Asset ID Generation Coming Soon

This is enjoyable, mainly because this will probably kill the DebugStoleYourModels stuff I had to clear up a few times on this site due to a skid I knew thought it’d be funny to make an absolutely terribly made bot that “leaked” assets and used them for AI training, which was all a lie for attention.

Thank ya’ll for adding this as I genuinely hated having to clear up a skid’s intentions.

2 Likes

leaking assets is still gonna happen lmao

this is so god damn stupid removing the sequential asset ids bro

1 Like

ok cope? who cares if their assets gets leaked, removing this iconic system is such a dumb move

1 Like

It will certainly give more room for complaints from users unable to see images. Forcing roblox to release some solutions that benefit the update(such as unlocking :LoadAsset so we can use it like they do in studio

3 Likes

Hi Creators,

When developing this feature we knew about some historical usage of sequential IDs to translate decal ids into image IDs, but underestimated how many creators were still relying on that approach. Thank you for your feedback on this.

The sequential ID trick is an unfortunate solution thanks to eating up a large amount of http request budget. Instead of continuing to support the sequential ID trick, we’ve enabled a more convenient solution.

Decal assets are technically Models containing a Decal Instance. You can extract the image ID easily after loading the Decal with InsertService:LoadAsset, but previously this only worked on Decals you owned, failing with public Decals.

Today, we updated the InsertService. It can now insert any publicly available Decal. That means you can now use InsertService to reliably translate the ID in a single request. Here’s a production-ready reference implementation:

local InsertService = game:GetService("InsertService")

-- Takes in a user input containing the assetId of either a decal
-- or image and returns an image assetId string ready for use or an
-- empty string if no assetId could be found.
function getImageFromUserInputAsync(decalOrImageAssetUri: string): string
	local a, b = decalOrImageAssetUri:find("%d+")
	if not a then
		-- Return an empty assetId in the case of no id in input.
		return ""
	end
	
	local assetId = tonumber(decalOrImageAssetUri:sub(a, b))
	local st, result = pcall(InsertService.LoadAsset, InsertService, assetId)
	if st then
		local decal = result:FindFirstChildWhichIsA("Decal", true)
		if decal then
			-- Note: Do not directly parent the found Decal to avoid
			-- security issues if untrusted Instances somehow ended up
			-- underneath it. Instead, extract the id.
			return decal.Texture
		end
	end
	
	return `rbxassetid://{assetId}`	
end

We’re also delaying the non-sequential ID launch by a week to allow creators additional migration time.

Thank you for your patience.

FAQs

What if I don’t migrate?

  • Your code will continue to work on existing Decals but will start failing on new ones as we complete the move to non-sequential ids.

Can I load non-Decal assets in the same way?

  • The insert permission change applies to Decal assets only, not to other assets like Models.

What are the “Untrusted Instances” mentioned in the reference?

  • Some Decals from very early in Roblox history may have non-Decal Instances smuggled inside of them. In the unlikely event malicious Decals exist, the reference implementation shows how to handle things safely by extracting the id rather than inserting the Decal directly.
38 Likes

Great now open InsertService further just like how the toolbox works.

2 Likes

There’s a granular script permissions system coming down the pipe soon which will give us more room to mitigate security / safety concerns and potentially open things up. Check back after that comes out.

3 Likes

@BackspaceRGB @NobleReign @xChris_vC @metatablecatmaid @mohas191 @completelyhazel @Rocky28447 @Stratiz @xyrafrost

Just doing a quick @ of the creators who expressed concern over the decal id translation trick no longer being possible to let you know that we’ve provided a solution above.

7 Likes

Thank you very much for listening to our concerns and delivering a reliable solution! I really appreciate it :heart:

1 Like

Huge change. Thank you guys for listening to feedback :heart:

2 Likes

YEAHHH thank you!! that satisfies my only concern with this update
thank you for listening to feedback and delivering an alternative so quickly, this made my day :blue_heart:

1 Like

Again please don’t launch this, this is such a stupid update damn.

Makes leaks harder and image imports much faster
I see no reason not to.
Last time it took my plugin around 5 to 10 seconds to convert a decal to an image id. Now it takes only like 150ms, including the extra third party code

3 Likes

It’s starting to roll out. I already have it

I don’t understand why you are so worried about it, but to get ID images you need to download decal instance and open it with editor. And here we go, id of the image. U can also use toolbox to add it in game

Or yeh, u can use extensions on your browser to get it

Problem of DecalIds was with games which allow users to put images on pictures and etc with scripts. Grabbing decalId with Studio wasn’t problem.

I mean, it’s not the problem, u can make API to do that, it’s easy

We are really looking forward to this change. Are there any updates for when this will be deployed?