AvatarEditorService Public Release

Are there any plans to add a UserId parameter to the GetOutfits function so we can get the outfits of other users instead of just the LocalPlayer? Currently, the only way to do this is by using a proxy to make HTTP requests to the avatar web API.

3 Likes

+1 to this.

As someone who has an avatar that directly uses multiple accessory types, these limitations are frustrating!

Limiting to 1 of each accessory type is problematic for many reasons:

  • First and foremost, it “sunsets” many avatars that people use on a daily basis, my own included! This isn’t exactly in alignment with Roblox’s “identity in the metaverse” path! I want to be a dragon wearing a cape, crown, armor, belt & sword. This shouldn’t be disallowed! Furthermore, Roblox avatars from 2010 had multiple of a single accessory type:
    image

  • Secondly, this severely limits the creative possibilities for players. Roblox’s avatar teams put a heavy emphasis on making everything into accessories, to strengthen the “mix and match” aspects of the avatar creation process & to allow players to be creative with their digital identity. Because nearly everything is accessories, limiting to ONE of each accessory type effectively counteracts the entire purpose of having everything as accessories. For example, if I want to wear a cape and wings, or if I want to wear a belt and a sword, I can’t now!

  • Thirdly, this has a huge negative impact on UGC. Players will be less likely to buy UGC items since they already have one worn, and it also prevents things like pauldrons, and multi-colored pigtails! Here’s some real-world examples of UGC that is not possible with these changes:

Overall, avatars should be allowed to wear multiple of a given accessory type, on mobile, xbox, PC, and in-game. The solution here lies not in limiting accessory type, but in limiting max total accessories or max triangles.

Doing this unlocks player creativity, and doesn’t sunset my dragon:
image

23 Likes

cc @tnavarts and @TheGamer101, a lot of folks are impacted by this design change!

1 Like

Same here. My avatar relies on many shoulder (3+ paldurons to make a nicer robot “arm prosthetic”) and torso accesories (jacket + swordpack + belt)

Limiting accessories in this way is limiting expression which is against what roblox is promiting itself towards; creativity and self-expression.

How in the heck im supossed to express myself using only 1 accessory per 1 slot?

2 Likes

To be clear it’s not really a “change”, the website still works the way it did, but this new API is enforcing dumb old limits that do not make any sense. This is worrying looking towards the future; these limits are harmful and not necessary in their current form. It’s important that Roblox understands this and works towards changing them.

11 Likes

Back in the day these limits were dumb and still are dumb to this day. My avatar is doing fine with 10+ accesories. Let me wear whatever i want to on my avatar wihout some out-of touch decisions that nobody was told about untill now.

1 Like

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