AvatarEditorService Public Release

Heck, the reason why i wear my jacket and other “pseudo layered accessories” is simple; layered clothing sucks on blocky avatars as it was tailored especially for rtho avatars. All of this could be solved with an optional original blocky base cage.

1 Like

I agree with the general sentiment in this thread about the new APIs limiting accessories per category, limits should definitely be based on triangles/memory.

In regards to the API limits, and assuming these limits will be applied to the website’s avatar editor eventually; consumers want options. It is rare that a consumer ever wants to be limited, and in this case the APIs are limiting. Players want the ability to express themselves, to get creative, they can’t do that when they are being arbitrarily limited.

Take 5 minutes of your time, join any game that allows for avatar customization, or any game centered around fashion (such as Royal High.) You will be able to find plenty of avatars that are wearing multiple accessories under the same category.

13 Likes

This is going to be very useful! Roblox creators can finally make more granular avatar editors in-game and provide users with much more intuitive and efficient customizability. Very happy to see this!

Any chance the beta will open up again for accessing catalog-related functionality? That’s the primary resource I need for my game at the moment.

While you are correct, the release of this API did not directly change the ability to use the advanced options for accessories in the avatar editor on the web, there are broader changes happening which may suggest these limitations are the unfortunate future. Specifically, the ability to equip multiple hair UGC items was removed from the web form leading up to this with the release of layered clothing.

The non dynamic hair that is currently available in the avatar shop, which total over 10,000 UGC hair items, can no longer be combined using the desktop, mobile, or web clients. If you try it will error or replace your current hair. I am fairly certain this limit was implemented to impose limits on new dynamic hair and upcoming dynamic eyelashes and eyebrows since these dynamic UGC items use a cage mesh and can’t occupy the same space. I believe this is all part of a larger effort to push players away from the classic R6 and R15 avatars to “modernize” the platform and attract a broader player base.

Our players do find it frustrating that the in game “Save to Roblox” can’t do multiple of anything UGC with the exception of hats. So any player looking to wear multiple UGC items must use the web, which by default is blocked for mobile users. Players wanting multiple hair UGC items must now resort to using sketchy third party mobile browsers and/or browser extensions to do it. As you can imagine this poses a greater security concern because third party software and extensions are not all trustworthy.

As for the API itself, we have had the beta up and running for a few months in our experience, Envy Avatar Studio, and with the exception of these limitations, everyone has loved what this API has allowed us to implement. A big round of applause is in order for the dev team on this API!

2 Likes

I used AvatarEditorService to modify layered clothing properties

1 Like

Is there a way to make a Catalog frame with its items for the Avatar Editor in Game No Shop?

Surprisingly, i was able to customize it myself to replace the “void” with something else.

4 Likes

Wow nice good work keep it up!

It’s finally here! The 2 year wait was definitely worth it. However I don’t know if this is intentional, but the player’s DisplayName appears at the center of a game whenever the AvatarEditorService:PromptCreateOutfit() or AvatarEditorService:PromptSaveAvatar() methods are used. In the screenshot below, I’m using the AvatarEditorService:PromptSaveAvatar() method.

image

With all of that said, nice addition as always Roblox! This will help many developers make functional avatar editors!

1 Like

Thanks for your report, we will fix this issue.

1 Like

Hello - great update! Really looking forward to all of the possibilities this will lead to.

I have been experimenting with the AvatarEditorService:GetInventory() method, and found it to produce unreliable results about 5-10% of the time. Using the following code in a LocalScript, I have received different results:

local AvatarEditorService = game:GetService("AvatarEditorService")

local assetTypes = {
	Enum.AvatarAssetType.BackAccessory,
	Enum.AvatarAssetType.ShoulderAccessory,
	Enum.AvatarAssetType.WaistAccessory,
	Enum.AvatarAssetType.Hat,
	Enum.AvatarAssetType.HairAccessory,
	Enum.AvatarAssetType.FaceAccessory,
	Enum.AvatarAssetType.NeckAccessory,
	Enum.AvatarAssetType.FrontAccessory,
}

AvatarEditorService:PromptAllowInventoryReadAccess() -- get access to inventory

local promptResult = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()

if promptResult == Enum.AvatarPromptResult.Success then
	local startTime = os.clock()
	
	local pages = AvatarEditorService:GetInventory(assetTypes) -- get pages object
	local inventory = {} -- table of all AssetIds

	local function iterate(page) -- recursive func to iterate through pages object
		for _, asset in pairs(page) do
			table.insert(inventory, asset.AssetId)
		end
		
		if not pages.IsFinished then
			pages:AdvanceToNextPageAsync()
			
			iterate(pages:GetCurrentPage()) -- recurse with next page
		end
	end
	
	iterate(pages:GetCurrentPage())
	
	print(#inventory.. " accessories in your inventory; found in ".. (math.round((os.clock() - startTime) * 100) / 100).. " seconds")
end

Result #1: The expected result

image
This is the result that prints majority of the time, and is the correct result.

Result #2: The random result

image
Sometimes, this result prints randomly, with the accessories number ranging from 100-300. This is the incorrect result, and I’m not sure why its printing this.

Result #3: The error

image
Lastly, this will error randomly when I call the pages:AdvanceToNextPageAsync() method. I am also not sure why this is occurring.


Is this a bug (if so, I can move this reply to a bug report), or an issue with my code? Any help would be appreciated, thank you!

Edit: I have moved this to a bug report as others have also been experiencing this, and there appears to be an issue with the page cursors.

1 Like

Found a small bug: if you call PromptSaveAvatar() or PromptCreateOutfit() and then quickly close the prompt window before the character preview loads, there’ll be an error about AnimationClipProvider.

1 Like

I am pretty sure some developers like them have already had early access to the feature during the beta testing, which seems a little unfair to all the new developers trying to come up.

2 Likes

Thanks for the report, I will fix this issue.

2 Likes

Is there any timeline you can give on this?

My thoughts exactly. Mobile players sometimes have a hard time getting IDs.

1 Like

This is actually really cool! Glad to see new innovative features being added to the Roblox engine.

This feature making me excited!:smile: Can’t wait to see games like Plz Donate be benefited.

We are hoping to release that by the end of the year.

5 Likes