Skip to content

Runtime

Interested in Development?

Project EAUploader is always looking for development members! Even if you just want to talk to us! Please visit our project’s Discord server. Join here



This page explains the EAUploader assembly in the Runtime folder.

This document is based on EAUploader v1.6.2.

Overview


The EAUploader assembly contains components that are added to avatars (prefabs). Because components are saved in scenes and prefabs, they are defined in an assembly for all platforms, separate from the editor-only EAUploader.Editor assembly.

FileClassContents
Runtime/Components/AvatarTagComponent.csEAUploader.Components.AvatarTagComponentBase class for components added to avatars
Runtime/Components/EAUploaderMeta.csEAUploader.Components.EAUploaderMetaInformation EAUploader uses to manage prefabs
Runtime/Components/EAUploaderOutfit.csEAUploader.Components.EAUploaderOutfitInformation about outfits put on with Dress Up (Compatible Outfits)

AvatarTagComponent


An abstract base class for components that EAUploader adds to avatars. It is based on AvatarTagComponent from Modular Avatar (MIT License).

  • When VRChat SDK - Avatars is installed (when VRC_SDK3A is defined), it implements VRC.SDKBase.IEditorOnly. This excludes the component from the VRChat SDK’s allowlist check, and it is removed from the avatar when building for upload.
  • It has [ExecuteAlways] and [DefaultExecutionOrder(-9990)].

EAUploaderMeta


A component that EAUploader adds to the root of a managed Prefab Variant. Because of [DisallowMultipleComponent], only one can be added to a prefab.

namespace EAUploader.Components
{
[DisallowMultipleComponent]
public class EAUploaderMeta : AvatarTagComponent
{
public enum PrefabStatus { Show , Hidden, Pinned }
public enum PrefabType { VRChat, VRM, Other }
public enum PrefabGenre { Avatar, Cloth, Accessory, Other }
public PrefabStatus status;
public PrefabType type;
public PrefabGenre genre;
public long lastModifiedTicks;
public bool genreConfirmed;
[TextArea(3, 10)]
public string memo;
public List<string> tags = new List<string>();
}
}
FieldContents
statusDisplay state in the list. Show, Hidden, Pinned
typeType of prefab, detected from components (VRC_AvatarDescriptor → VRChat, VRMMeta → VRM, otherwise Other)
genreUser-facing category. Avatar, Cloth, Accessory, Other
lastModifiedTicksTime EAUploader imported or refreshed the item (UTC ticks). 0 falls back to the file timestamp
genreConfirmedWhether the genre was decided at import
memoMemo
tagsTags attached to the item

EAUploaderMeta is added only to the root of managed Prefabs (under Assets/EAUploader/Prefabs/), and only the one on the root is read.

EAUploaderOutfit


A component added to the root of outfits put on an avatar with Dress Up (Compatible Outfits).

namespace EAUploader.Components
{
[DisallowMultipleComponent]
public class EAUploaderOutfit : AvatarTagComponent
{
public enum SetupMode { ModularAvatar, BoneMerge, AttachToBone }
public string sourcePrefabGuid;
public SetupMode mode;
}
}
FieldContents
sourcePrefabGuidGUID of the outfit (managed Prefab) that was put on
modeHow the outfit is set up. ModularAvatar (bones merged by Modular Avatar), BoneMerge (bones merged by EAUploader at upload time), AttachToBone (attached to a bone)

Outfits in BoneMerge mode are merged into the avatar’s bones only in the copy being uploaded, by the VRChat SDK build preprocessing (OutfitBuildHook, IVRCSDKPreprocessAvatarCallback, order −12000, before NDMF).

Coexistence with Other Tools


AAO: Avatar Optimizer

AvatarOptimizer optimizes avatars based on information about which properties each component references or modifies. In Editor/Scripts/Coexistence/, EAUploader registers information about EAUploaderMeta and EAUploaderOutfit using AvatarOptimizer’s API (ComponentInformation). This code is enabled only when HAS_AAO is defined.

When adding or changing runtime components, also check coexistence with non-destructive tools such as AvatarOptimizer.