Custom Avatar Editor
The Genies Avatar SDK has Avatar customization APIs that allow developers to modify Avatars and create custom Avatar Editors.

Example
Check out the Creating Custom Editor sample scene page to see an example of a custom Avatar Editor.
Avatar Editor API
Genies Sdk Avatar Library
using Genies.Sdk;
The Genies.Sdk library contains the APIs for creating a custom Avatar Editor.
Wearables
GetDefaultWearablesByCategoryAsync
AvatarSdk.GetDefaultWearablesByCategoryAsync(WearablesCategory, [System.Threading.CancellationToken]);
Gets default wearable assets (List<WearableAssetInfo>) for the given wearable categories (e.g. Hoodie, Shirt, Pants).
GetUserWearablesByCategoryAsync
AvatarSdk.GetUserWearablesByCategoryAsync(UserWearablesCategory, [System.Threading.CancellationToken]);
Gets user-owned wearable assets (List<WearableAssetInfo>) for the given wearable categories (e.g. Hoodie, Shirt, Pants).
EquipWearableAsync
AvatarSdk.EquipWearableAsync(ManagedAvatar, WearableAssetInfo, [System.Threading.CancellationToken]);
Equips a Wearable by wearable asset info on the specified avatar.
UnEquipWearableAsync
AvatarSdk.UnEquipWearableAsync(ManagedAvatar, WearableAssetInfo, [System.Threading.CancellationToken]);
Unequips a Wearable by wearable ID from the specified avatar.
EquipWearableByWearableIdAsync
AvatarSdk.EquipWearableByWearableIdAsync(ManagedAvatar, string, [System.Threading.CancellationToken]);
Equips a Wearable by wearable ID on the specified avatar.
UnEquipWearableByWearableIdAsync
AvatarSdk.UnEquipWearableByWearableIdAsync(ManagedAvatar, string, [System.Threading.CancellationToken])
Unequips a Wearable by wearable ID from the specified avatar.
Makeup
GetDefaultMakeupByCategoryAsync
AvatarSdk.GetDefaultMakeupByCategoryAsync(AvatarMakeupCategory, [System.Threading.CancellationToken]);
Gets the default makeup assets (List<AvatarMakeupInfo>) filtered by category from the default inventory service.
EquipMakeupAsync
AvatarSdk.EquipMakeupAsync(ManagedAvatar, AvatarMakeupInfo, [System.Threading.CancellationToken]);
Sets avatar makeup by equipping the asset (e.g. from GetDefaultMakeupByCategoryAsync). Uses the asset's AssetId.
UnEquipMakeupAsync
AvatarSdk.UnEquipMakeupAsync(ManagedAvatar, AvatarMakeupInfo, [System.Threading.CancellationToken]);
Unequips a makeup asset from the specified avatar using the given AvatarItemInfo's AssetId.
Hair
GetDefaultHairAssets
AvatarSdk.GetDefaultHairAssets(HairType, [System.Threading.CancellationToken]);
Gets default hair wearable assets (List<WearableAssetInfo>) for the given hair type.
EquipHairAsync
AvatarSdk.EquipHairAsync(ManagedAvatar, WearableAssetInfo, [System.Threading.CancellationToken]);
Equips a hair style on the specified avatar. Supports both regular hair and facial hair.
EquipHairByHairAssetIdAsync
AvatarSdk.EquipHairByHairAssetIdAsync(ManagedAvatar, string, [System.Threading.CancellationToken]);
Equips a hair style given the hair asset ID string on the specified avatar. Supports both regular hair and facial hair.
UnEquipHairAsync
AvatarSdk.UnEquipHairAsync(ManagedAvatar, HairType, [System.Threading.CancellationToken]);
Unequips a hair style from the specified avatar. Automatically finds the currently equipped hair asset and unequips it. Supports both regular hair and facial hair.
Tattoos
GetDefaultTattoosAsync
AvatarSdk.GetDefaultTattoosAsync([System.Threading.CancellationToken]);
Gets default tattoo assets (List<AvatarTattooInfo>)from the default inventory service (image library category "Tattoos").
EquipTattooAsync
AvatarSdk.EquipTattooAsync(ManagedAvatar, AvatarTattooInfo, MegaSkinTattooSlot, [System.Threading.CancellationToken]);
Equips a tattoo on the specified avatar at the given slot using AvatarItemInfo (e.g. from GetDefaultTattoosAsync).
UnEquipTattooAsync
AvatarSdk.UnEquipTattooAsync(ManagedAvatar, MegaSkinTattooSlot, [System.Threading.CancellationToken]);
Unequips a tattoo from the specified avatar at the given slot.
Colors
There are several "create" methods that are color factory helpers when setting a color for hair, skin, eyebrows, eyelashes, eyes, and makeup.
CreateHairColor
AvatarSdk.CreateHairColor(Color, Color, Color, Color);
A HairColor instance that can be passed to SetColorAsync. It requires a base color and color for R, G, B.
CreateFacialHairColor
FacialHairColor AvatarSdk.CreateFacialHairColor(Color, Color, Color, Color);
Creates a FacialHairColor instance for use with SetColorAsync. It requires a base color and color for R, G, B.
CreateEyeBrowsColor
EyeBrowsColor AvatarSdk.CreateEyeBrowsColor(Color, Color);
Creates an EyeBrowsColor instance for use with SetColorAsync. It requires a first and second base color.
CreateEyeLashColor
EyeLashColor AvatarSdk.CreateEyeLashColor(Color, Color);
Creates an EyeLashColor instance for use with SetColorAsync. It requires a first and second base color.
CreateSkinColor
SkinColor AvatarSdk.CreateSkinColor(Color);
Creates a SkinColor instance for use with SetColorAsync. It requires a base color.
CreateMakeupColor
AvatarSdk.CreateMakeupColor(AvatarMakeupCategory, Color, Color, Color, Color);
Creates a MakeupColor instance for use with SetColorAsync. It requires a makeup category, base color, and color for R, G, B.
GetColorAsync
AvatarSdk.GetColorAsync(ManagedAvatar, AvatarColorKind, [System.Threading.CancellationToken]);
Gets the current color (IAvatarColor) from the avatar for the specified color kind (Hair, FacialHair, EyeBrows, EyeLash, Skin, Eyes, Makeup categories).
For certain categories, this method will only work reliably after a SetColor call has been call on the avatar once.
GetDefaultColorsAsync
AvatarSdk.GetDefaultColorsAsync(ColorType, [System.Threading.CancellationToken]);
Gets default (curated) color presets (List<IAvatarColor>) for the specified color type.
GetUserColorsAsync
AvatarSdk.GetUserColorsAsync(UserColorType, [System.Threading.CancellationToken]);
Gets user (custom) color presets (List<IAvatarColor>) for the specified color type.
Only Hair and Skin support custom colors.
SetColorAsync
AvatarSdk.SetColorAsync(ManagedAvatar, IAvatarColor, [System.Threading.CancellationToken]);
Sets hair, eyebrow, eyelash, skin, or eye color on the avatar. Use CreateHairColor, CreateSkinColor, etc. to build the color.
Avatar Base and Facial Features
GetDefaultAvatarFeaturesByCategory
AvatarSdk.GetDefaultAvatarFeaturesByCategory(AvatarFeatureCategory, [System.Threading.CancellationToken]);
Gets default avatar feature data (List<AvatarFeaturesInfo>) filtered by category from the default inventory service.
SetAvatarFeatureAsync
AvatarSdk.SetAvatarFeatureAsync(ManagedAvatar, AvatarFeaturesInfo, [System.Threading.CancellationToken]);
Sets an avatar feature by equipping the specified asset. Provides a unified interface for modifying various facial features.
Avatar Feature Stats
GetAvatarFeatureStats
AvatarSdk.GetAvatarFeatureStats(ManagedAvatar, AvatarFeatureStatType);
Gets current values (Dictionary<AvatarFeatureStat, float>) for a given avatar feature stat type (e.g. all nose stats, all body stats).
ModifyAvatarFeatureStat
AvatarSdk.ModifyAvatarFeatureStat(ManagedAvatar, AvatarFeatureStat, float, [System.Threading.CancellationToken]);
Modifies a single avatar feature stat. Value is clamped to -1.0..1.0.
ModifyAvatarFeatureStats
bool AvatarSdk.ModifyAvatarFeatureStats(ManagedAvatar, Dictionary<AvatarFeatureStat, float>, [System.Threading.CancellationToken]);
Modifies multiple avatar feature stats at once. Values are clamped to -1.0..1.0.
Grant an Asset
GiveAssetToUserAsync
AvatarSdk.GiveAssetToUserAsync(string);
Grants an asset specified by the assetId to a user, adding it to their inventory. If the user already has the asset, the method will return true with a string noting that the user already has the asset.
This is used for custom wearables created by developers.
Check out the Reward Users with Custom Wearables tutorial for more information.
Set Body Type
SetAvatarBodyTypeAsync
AvatarSdk.SetAvatarBodyTypeAsync(ManagedAvatar, GenderType, BodySize, CancellationToken);
Sets the Avatar body type with specified gender and body size.
Save Avatar Definition
SaveAvatarDefinitionLocallyAsync
AvatarSdk.SaveAvatarDefinitionLocallyAsync(ManagedAvatar, string);
This function saves a given Avatar's definition to both a local JSON file for persistent data and a scriptable GameObject in the Assets > Genies > AvatarEditor > Profiles > Resources folder. It uses the given string as a profile ID.
SaveUserAvatarDefinitionAsync
AvatarSdk.SaveUserAvatarDefinitionAsync(ManagedAvatar);
Saves the current avatar definition to the user's avatar.