Non-sequential Asset ID Generation Coming Soon

Hi Creators,

We will be changing the logic for Asset ID creation. Currently, when new assets are created, the Asset IDs are generated in an increasing sequence. In 2 weeks, the logic for newly created assets will change to be non-sequential.

This change will help with the scalability of our system. It may also safeguard against asset leaks along with other asset privacy changes we’re making.

We plan to start making the switch 2 weeks from now on August 5. The complete rollout might take a few additional days as we monitor system performance and quality. We will follow up when the change is launched, but we wanted to give you a heads up earlier on.

If you have any scripts/plugins that depend on Asset IDs strictly increasing or are using asset ids for a specific sort order, please update your code and workflows.

TLDR

  1. Non-sequential IDs apply only to newly created assets.
  2. Universe IDs won’t be impacted, as it is not considered an asset.
  3. There will be no collisions between existing and new Asset IDs.
  4. The number of digits in the Asset ID will expand from 11 to 14 or more.

Known Affected Workflows

With this change, a small set of workflows are affected, as we share below. We will take steps to mitigate the affected flows in the coming months and keep you updated.

Sort Order

After this Asset ID generation logic change, if you create a new place within an experience that has more than one place, the new places will not be sorted based on the recency. The start place will come first, and the new places created after this change will be listed based on their Asset IDs. These asset IDs may not be in the same order as they were created.

Existing places (outside of the start place) will be listed after newly created places, keeping the same sequential order that currently exists.

Some UI will also be impacted, including:

  • Place configuration page in Creator Dashboard

  • Studio start page, list view only (Grid view is not impacted)

Public API endpoint

There is one public API endpoint that will be affected.

On develop.roblox.com, v1/universes/{universeId}/places currently is ordered by place ID. This will continue to be the case after this change, but a higher place ID will no longer indicate that a place was created more recently.

Develop.roblox.com also provides a v2/universes/{universeId}/places endpoint, but that returns places ordered alphabetically, not by creation time.

Please let us know if you have any questions or concerns. Thank you.

133 Likes

This topic was automatically opened after 10 minutes.

If this change is applying to assets like decals, can we have a function to get an image ID from decal ID? A lot of games use a “custom image” for icons or graffiti and such. The only way to currently get the image ID is just by reducing the decal ID by 1 until an image asset is found. (Which is already a hacky way to do it) This change would make that impossible.

This has been suggested before: It's Impossible to Get an Image ID From a Decal ID

119 Likes

I’m slightly worried about how long the numbers will be, as that is what’s currently happening with badges. Will there be a future change to the number system used (e.g. base 16)?

22 Likes

while i agree that this change is good for privacy and such, i think this fundamentally breaks the classic method that people use to get image ids from decal ids.

Roblox provides no API to do so natively as far as i can tell, and the alternatives i’m aware of have significant downsides (can’t use InsertService for assets not owned by the game creator, and rbxthumb:// only goes up to 420x420, which is a DRASTIC downgrade compared to having the actual image ID)

in scenarios where the developer wants the player to be able to customize how they like, this could really hurt the player’s experience. not everyone will know what an image ID is, and they’ll be confused when they paste in a decal ID and nothing happens.
to even be able to get an Image ID yourself, you either have to open an entire Studio instance just to paste it into a Decal and copy it from there, or have third party extensions installed that can figure it out for you, increasing the friction and barrier to entry.

PLEASE consider implementing some sort of Decal:GetImageID() API before making this change, or perhaps raise the resolution of rbxthumb. i’m sure most developers would appreciate it.

56 Likes

Base 16/64 will not happen. Changing from numbers to strings would be a very breaking change, and probably would be a massive change internally for Roblox’s database schemas. Luau is the only place we would have to worry about due to not having an integer type, but Luau guarantees integer values with no loss up to 2 ^ 53 (which is a huge number).

9 Likes

Second this. While I’d appreciate the side effect of preventing asset leaks, the workarounds to get an image id from a decal id will get much more complicated.

NobleReign pretty much summarized the pain of the lack of an official method, the only known method working after the change would be to use a proxy and call to https://assetdelivery.roblox.com/v1/asset?id={id}, parse XML and extract the asset ID from the Content.url property.

Using an external proxy alone adds a certain level of unreliability, and who knows if this XML format will ever change?

EDIT: I created a resource to deploy your own image → decal proxy, check it out here:

22 Likes

Kind of iffy about this update, is there a way to get the image id?

12 Likes

If it is just for visual displaying in a higher base would be ok. I am pretty sure that is what they meant at least.

EDIT: Although, it wouldn’t be too hard to check what base a number is in. For example, 0x before base16. Allowing this to be put as the asset id might be good. For processing it would just do a base conversion back to a standard integer.

Also just realized 0x could be a collision with the actual id. A better option would be to have a different url option that accepts hex.

13 Likes

And to think this whole problem would have been fixed if they just deprecated decals being created on the website… still don’t understand why you can’t just upload images themselves

20 Likes

Not sure why would this affect too many people, but it’s nice to know when roblox is planning to do some changes. The only issue i could see, is having to get an image id from a decal or clothing item through script, but I’m not sure why would someone need to do that?
For games that require players to input an id, just show the player how to use IMAGEID not DECALID, and same for clothing. There’s no reason, under any circumstance, a developer would need to get imageid from a clothing/ugc asset/decal that they don’t own unless they’re planning to steal it. If the asset is used with the uploader’s consent, it should be only inserted by the uploader (eg a custom texture/livery for a car, or custom shop in-game which allows the player to use a custom image, etc). All of these should be done by the player, with the consent of the player. This seems like a nice change to me, and would be nice to see this preventing leaks, assets stealing etc. Hopefully in the future we can also have an option to block our assets from being downloaded at all, from the website (extensions) or exported from studio.

11 Likes

Adding on to this, the transition would be fairly easy. For legacy created decals, just display the Content.url prop on the page.

12 Likes

This was very much needed and huge problem when it comes to upcoming brands or Roblox events.

14 Likes

Does this apply to catalog items?

15 Likes

Why is there a need to update IDs? First accounts IDs and now assets.

13 Likes

how does one of these asset ids look like?

10 Likes

Many reasons, including leak accounts abusing it to leak events and partnerships

11 Likes

I’m surprised this took this long given this was a massive security risk beforehand.

While I support this change,

can we PLEASE have an API to get an image from a texture-based asset

because otherwise every hack we’ve come up with will break with this update.

22 Likes

Most players don’t know the difference between the image and decal IDs. Not everyone is a developer. Having to explain the instructions of getting the image id should not be the way this is done.

10 Likes

Are there any plans to stop creating decal assets, especially since the decal instance expects an image id, not a decal id, making the decal web asset rather redundant.

It seems rather wasteful to take up two asset ids for every image uploaded to the site, with one asset being completely useless — even if the maximum asset id limit is never reached.

18 Likes