Layered Accessories and HumanoidDescription BLOB

Q1: Any Layered Accessory added into the player should be in the AccessoryBlob property of HumanoidDescription?

According to this AccessoryTypes table:
Q2: Hats, Hair and all the Accessories that I thought were rigid, may be a layered accessory too?
Q3: Whats the meaning of that Value number and how should be used? which seems its not related with the AssetType
image


Q4: So its possible that a Layered Hair exist? so when adding it to the player and when modifying their HumanoidDescription I should add that Layered Hair into AccessoryBlob instead of HairAccessory property?


Q5: I found this post that suggest that by AddingAccessories into the Character the HumanoidDescription.AccessoryBlob would update, thats is not correct, right? Cause when I add an accessory I see that HumanoidDescription never updates, so I’m editing the HumanoidDescription based on the accessory that the player is choosing to wear by script.


Q6: All the LayeredAccessories has a WrapLayer inside the Handle? Then a straight-forward way to identify if an accessory its a Layered one or not, could be checking if it has a WrapLayer in it or not?

1 Like
  1. Yes, as long as you are retrieving the latest version of that character’s humanoid description.
  2. Hats, no, But hairs yes. (As far as I’m aware, only clothing and hair can be layered.)
  3. All Enums have a numerical representation of their value. EnumItem
  4. No, you should use the HairAccessory property for all hairs.
  5. You should use these functions specified in the documentation:

It’s important to note that the humanoid description parented under humanoid isn’t automatically updated. Use, GetAppliedDescription.

I’ve found from personally experience that it’s easier to just modify the description first, then use ApplyDescription accordingly.

You may find these pages helpful:
Character Appearance | Documentation - Roblox Creator Hub
HumanoidDescription | Documentation - Roblox Creator Hub

2 Likes

Thank you so much for your reply!

I still have some doubts about this.
These two answers are contradictory:
Does all Layered Accessories goes under AccessoryBlob?
1 - Yes, as long as you are retrieving the latest version of that character’s humanoid description.
And
If a Hair is a LayeredAccessory goes under Blob?
4 - No, you should use the HairAccessory property for all hairs.
Because if a Hair is a Layered Accessory, then it should be placed in AccessoryBlob I guess. I don’t know if Layered Hairs exist… But if any exist it contains a WrapLayer, so ALL LayeredAccessories should be in the AccessoryBlob except for LayeredHairs?


Does GetAppliedDescription() reads any Accessory that I added by Humanoid:AddAccessory() ?


I think that is faster to AddAccessory() first then modify the HumanoidDescription property adding the new ID. In that way the whole character appearance is not reloading again. I could be wrong, cause maybe the accessories are in somekind of cache when using ApplyDescription and compares which one is new in order to add it. Honestly idk.

2 Likes

From what I understand hairs, layered or not, are still treated like normal hairs when it comes to humanoid descriptions. Now, they might be present in accessory blob as well, however that I do not know. You could try importing someone with layered hair into your game and checking it out for yourself.

Yes, it should.

I suppose it just really depends on whichever method you prefer using. Apply description would only be slower for accessories that haven’t been loaded previously. (But it’s usually not very noticable.)

3 Likes

This becomes a complicated task… cause now I don’t know if I should add the hair on both properties or only one… Plus all other accessory categories as Shoulders and well… all of them. If those are Layered should be added on Blob and in its proper property too?

That was my first thought, but how do I find a Layered Hair? :sweat_smile:

2 Likes

The add accessories function changes the blob for you, so you don’t need to change it yourself. This should apply to hairs as well.

Here is one: Straight Bangs - Black - Roblox

2 Likes

Then… Im doing something wrong, cause when I use AddAccessory() I can see that HumanoidDescription.AccessoryBlob is not changing at all.

Should I show you a snippet that is not changing the Blob? Or could you show me one that is actually doing it?

1 Like

Are the accessories getting applied correctly? Because if they are then you shouldn’t worry about what that property includes.

2 Likes

Thank you so much!! Yes indeed has a WrapLayer. But I still dont know if having a WrapLayer means that the asset is a LayeredAccessories, I guess it does.
Could you tell me how you find it so I can find and test all other accessory types?

2 Likes

For hairs, I just searched the market place with the max and minimum price as 0, there is a lot of them there.

And for clothing, you can go to the jackets category etc.

All other accessories cannot be layered as far as I know.

2 Likes

The accessories are applied correctly into the character model of the player, BUT, I need that the HumanoidDescription reflects exactly what is being added cause Im saving it onto the main roblox avatar of the player by using PromptSaveAvatar(), which requires a HumanoidDescription. Then this is a shop, you bought an item, you wear it inside game, and you choose to save your current character as the default one for your roblox account.

So I need that the HumanoidDescription be exactly as it should be in order to save it.

Everytime I AddAccessory() into the Humanoid charactermodel. The humanoidDesc is not updating, so Im updating it manually

1 Like

Instead of updating manually, you should use Humanoid | Documentation - Roblox Creator Hub after you make a change.

1 Like

You suggested it a few posts ago, and I tried it, just to check if it actually reflects what the characterModel.Humanoid is wearing and its not. It only reflects what the HumanoidDescription has, if I add any accessory by using AddAccessory(), that item is not considered inside the Description, so, GetAppliedDescription() doesnt contains what I added by AddAccessory. Or maybe Im doing something wrong… but I dont think so, test it:

I insist that I could be doing something wrong. This is just a quick snippet to test what I’m saying that AppliedDescription is only the original desc that player has upon join, the desc is not updated when using AddAccessory()

local InS = game:GetService("InsertService")

game.Players.PlayerAdded:Connect(function(PLY)
	local CHAR = PLY.Character or PLY.CharacterAdded:Wait()
	local HUM = CHAR:WaitForChild("Humanoid")
	
	task.wait(8) -- a dumb wait just to avoid any possible issue

	local accss = InS:LoadAsset(14618893506):FindFirstChildOfClass("Accessory") -- load the LayeredHair accessory
	
	HUM:AddAccessory(accss) -- add accessory
	
	task.wait()
	
	local DESC = HUM:GetAppliedDescription() -- get applied desc
	DESC.Name = "AppliedOne"
	DESC.Parent = workspace -- parent to workspace to read it
	
	warn("the desc got from GetAppliedDescription:", DESC)
	print("the desc in hum:", HUM:FindFirstChildOfClass("HumanoidDescription"))
end)


1 Like

If that’s the case then I think you’re best bet is to only modify the humanoid description, including using the related methods for humanoid descriptions that I mentioned earlier. And then using apply description.

If after all that, and accessory blob is still not updating, then I would ignore the property all together. It’s completely possible that prompt to save the avatar doesn’t even use the property.

2 Likes

Nope, sorry my problem is not that the Blob is not updating, cause Im updating manually by using all the methods you suggested, thats already covered.

My main issue is that Im doing it manually so I have to decide if any Layered Accessory should be inside the Blob or not. As we already talked about this about hairs, which “probably” should be in Blob or not, probably in HairAccessory or not. Along with all other Rigids that seems that could be Layereds… pff…

Sadly, not. The Blob is the only property that holds all Layered Accessories, then if I dont edit the HumanoidDesc properly theres a chance that the stuff that the player’s avatar is wearing is not getting updated into their main roblox account, which totally breaks the goal of the system.


Btw, thank you so much for your help and patience. I hope not being a pain in the peach :3

2 Likes

Ohhhh.

9-19 are the types that would be in the blob. (All other types have their own humanoid description property)

2 Likes

Thats actually promising, you did infer it from that table which states that the “rigids” could rigids or layereds, and the other ones are indeed layereds?

I think that too, the first approach I did was that, until reading that rigids could be layered’s…

So do you think I could be fine if I dont add any of the “rigids” into blob?

2 Likes

Layered clothing is treated differently then other “layered” accessories which is why they belong in the blob and the others don’t .

2 Likes

Well after some tests I found that nope, any LayeredAccessory including Hair actually goes inside the Blob. If you add any LayeredHair into the HairAccessory property of HumanoidDescription and then ApplyDescription() it will be deleted from HairAccessory and the Blob JSON table will be updated with that Hair as
[{"AssetId":9244111257,"Order":1,"AccessoryType":"Hair"}]

So all LayeredAccessories no matter which category are, goes inside the Blob. But, the most easy way to add a “pseudo-rigid/layered” as a Hair into the Blob, is by setting it into the normal CategoryAccessory in the HumanoidDescription and ApplyDescription(), which will wipe out the Accessory field and will be added automatically into the Blob JSON table.

So, 2 possible approaches to handle any pseudo-rigid/layered, adding it into the right category and letting the engine to solve the JSON format, or directly add a new table into the Blob table. All other real-layered accessories should be in the Blob

2 Likes