# WorkFlow Tools

Workflow Tools (WFT) are a set of tools for VRChat avatar creation that will help you speed up your workflow. They're free to use and download, and they are intended for users who have some previous knowledge of avatar creation. These tools are not meant to replace the workflow, but to enhance it and make it more efficient.


# Parameter Editor

#### Setup

* **Avatar** accepts an avatar descriptor. The script will automatically try to find an avatar in your scene
  * If more than one active avatar is found they'll be presented as a list to select the one you want
* The **Parameter Toolbar** shows the avatar's Expression Parameters and the different controller parameters that can be edited (FX, Gesture, Base, Action and Additive), corresponding to the avatar's Expression Layers
  * The avatar's Expression Parameters or Layers can be changed by dropping a parameters asset or an animator controller to the fields found below the toolbar

#### Parameters List

* Click at the left of a parameter to drag it up or down. This will change its location in the list.
* **Name, type, default, saved, synced and delete** work the same as always
* **Clone** makes a copy of the parameter and adds it at the end of the list

#### Editing Bar

* **Create New** adds a parameter at the end of the currently selected list (Expressions, FX, Gesture, etc)
* **Create Global** opens the global editing fold
  * You can set the details of a new parameter, then add it to one or more parameters list by clicking Add To Selected
* **Search** mode opens the search fold
  * Type in the **Find** field to highlight the parameters that match your search
  * The button at the right of the Find field is to toggle **Case Sensitivity**
  * If you hit the **Replace** button, what's found from the **Find** field \*\*\*\*will be replaced with what's in the **Replace** field.
* **Setting** opens the settings fold
  * When the **Show Delete** toggle is disabled, the delete button will not appear in the parameters list

<figure><img src="/files/iXDKQ5XAVdkeWNDpzf9B" alt=""><figcaption></figcaption></figure>


# Menu Editor

#### Setup

* **Avatar** accepts an avatar descriptor. The script will automatically try to find an avatar in your scene
  * If more than one active avatar is found they'll be presented as a list to select the one you want
* **Current Menu** shows the currently selected menu displayed in the Menus List
  * This is not meant to be changed, it's there in case you want to ping the menu asset
  * Instead, use the **Back** button, in combination with clicking other submenus, to navigate

#### Menus List

* Click at the left of a parameter to drag it up or down. This will change its location in the list.
* The **Control** button will display the control’s name and icon
  * Open the **Rich Text** fold to add or remove commonly used rich text settings (color, bold, italics)
  * If the control is a submenu, you can click it to view it like you would in VRChat. This is the way to navigate the menus with this tool
  * You can drop an image on top of this button to quickly change a control’s icon
* **Edit** will open the **Control Editor** window with the selected control
  * In the control editor you can change a controls properties like you would normally (change the name, parameters, type, etc)
  * There are also a couple extra QoL features, like a value slider for float values and invalid control types being filtered out of their respective selection lists
  * Close the window to save the changes
* **Copy** will make a copy that you can **Paste** on a new control, or on an existing one to override it
* **Delete** will remove it from the menu

<figure><img src="/files/fpTizgFdMGr4dRhQrnEN" alt=""><figcaption></figcaption></figure>


# Toggle Creator

#### Setup

* **Avatar** accepts an avatar descriptor. The script will automatically try to find an avatar in your scene
  * If more than one active avatar is found they'll be presented as a list to select the one you want
* **Object to Toggle** accepts an object parented to the avatar. The animation created will enable/disable this object
  * There’s a **+** button at the left of Object to Toggle. When it’s hit a **new Object to Toggle** slot will be added
    * There can be as many Objects To Toggle as you want
* **Menu** accepts a VRChat menu asset. A new toggle control will be added to this menu that points to the parameter created
* **Toggle Name** is the name the menu control and FX layer will receive
  * If **More Settings** isn’t open, it will also be used as the **Parameter Name**
* The **Saved** and **Default** toggles refer to the properties of the expression parameter created

#### More Settings

* **Proxy Animation** is the default animation in the FX layer before it goes into the current state. It should be an animation pointing to an invalid object (one is provided by default)
* **Menu Icon** is the icon that will be used in the menu control
* If **Use Existing Animation** is active, the animation provided will be used in the FX Layer instead of creating a new one
* If **Slow Transition** is active, the transition from the active state will last what’s inputted as the **Transition Duration** instead of being instant
  * This should only be used if **Use Existing Animation** is active or if you’re planning on changing the animations created afterwards
* If **Use Write Defaults** is active, all the created animations states will have the Write Defaults option set to on
* **Animation Name** is the name of the Animation Clip created in the selected asset folder
* **Parameter Name** is the name of the parameter that will be added to the Expressions Parameters and FX Layer
* The **Selected Folder** is where the Animation Clip created will be saved as a file

<figure><img src="/files/MeD6CaleEnWDQOcP4Oyi" alt=""><figcaption></figcaption></figure>


# Image Creator

Quickly make icons, thumbnails or screenshots directly from the editor

#### Screenshot Settings

* **Name** is the name of the image file that will be created. You can leave it blank for an auto generated name.
* The **preset buttons** set the resolution, transparency and the save as icon toggle
* **Save as icon** will change the texture type to "Sprite (2D and UI)" and the max size to 256

#### **View Settings**

* **Use scene view** will use the view direction in the scene window for the camera's direction
  * When toggled off, you can select a your own camera to have a fixed position insead

* **Capture selected only** will make it so only the selected game objects appear in the final image. Multiple selections are allowed
  * When no objects are selected, the preview won't work

* Show preview will show a render of how the final image will look. Turn this option off when you're not using it, as it keeps using your pc's resources while it's on.

<figure><img src="/files/znj51itzJZiZ7w3zvd2G" alt=""><figcaption></figcaption></figure>


# Material Editor

* **Avatar** accepts a game object
* If any materials are found in any object parented to the avatar, they will be displayed as a list
  * If the material in a material slot is changed, it will be changed in the avatar
* The **Highlight modes** make the scripts look for characteristics before displaying the list
  * **Off** will get rid of the highlights
  * **Active** will dim down the materials present in objects not visible
  * **Quest** will dim down the materials that contain a shader that doesn’t start with “VRChat/Mobile”
  * **VRM** will dim down the materials that contain a shader that doesn’t start with “VRM”

#### Material Conversion

The material conversion toggle will show the material conversion options

* Use the toolbar and dropdown to select a shader. It can be for VRChat mobile (Standard Lite, Toon) or VRM (MToon, MToon10)
* The **Selected Folder** is where the materials created will be saved
* When the button **Create Materials** is hit, the following will happen
  1. A copy of the avatar is instantiated, 1 meter to the left of the original
  2. A copy of the materials that weren’t already using the selected shader are created in the selected folder
  3. The copied material’s shaders are changed to the selected one
  4. The copied materials are set as the copied avatar’s materials

Notice that when converting materials the original avatar in unaffected

<figure><img src="/files/L0mis02jnklgeoXuoaFx" alt=""><figcaption></figcaption></figure>


# Anchor Override Editor

Similar to the material editor

* **Avatar** accepts a game object
* If any skinned mesh is found in any object parented to the avatar, it will be displayed as a list
* Use “**Set all to**” to change all the Anchor Overrides at once

Tip: I recommend setting all your meshes to a single anchor override transform, usually your chest bone. This will prevent certain meshes from being lit differently from the rest of your avatar in-game.

<figure><img src="/files/7FGTLO0i2ShVYSqVG2ER" alt=""><figcaption></figcaption></figure>


# Bounds Editor

Very similar to the [Anchor Override Editor](/tools/anchor-override-editor)

* **Avatar** accepts a game object
* If any skinned mesh is found in any object parented to the avatar, it will be displayed as a list
* Use “**Set all to**” to change the bounds of all the skinned meshes at once

Tip: I recommend setting all the meshes to have the same bounds. Having your canters at 0 and your extents at 1.2 will usually work. This will prevent certain objects from disappearing when looked at from an angle. Going above an extent of 1.24 can change your [performance rank](https://creators.vrchat.com/avatars/avatar-performance-ranking-system#pc-limits).

<figure><img src="/files/itAksxZ06UFxuGuCSsRM" alt=""><figcaption></figcaption></figure>


# Bone Selector

This is a simple tool to ping the selected bone in the hierarchy. You can open it quickly using Ctrl + Shift  + Alt + B

* **Avatar** accepts an animator. The script will automatically try to find an avatar in your scene
  * If more than one active avatar is found they'll be presented as a list to select the one you want
* Unfold selected makes it so the pinged bone is also unfolded in the hierarchy. This setting is persistent so that you can open and close the tool anytime

<figure><img src="/files/1MO8fQZO8EL6JHYjaNWn" alt=""><figcaption></figcaption></figure>


# Asset Creator Shortcuts

Shortcuts for right-clicking in the project tab -> create -> asset, for commonly created assets. It can be quickly opened with Ctrl + Shift + Alt + S

* The assets created can be Material, Animation Clip, Animation Controller, and VRChat Expression Menu
* For the materials, a shader can be selected from a list of commonly used ones (by me at least). This option is persistent&#x20;


# Blendshape Animation Creator

#### Setup

* **Parent Game Object** accepts a game object
  * This will usually be your avatar
  * You can ignore this and just set the **Mesh** slot instead. The Parent Game Object will be set automatically

#### Blendshapes

* **Mesh** is where you’ll put your object containing a skinned mesh with your blendshapes
  * There’s a **+** button at the left of **Mesh**. When it’s hit a **new Mesh** slot will be added
    * There can be as many **Mesh** slots as you want
* If blendshapes are found in the Mesh provided, a **list** with all the blendshapes will be created
  * Set them as active with the **toggle** on the left
  * The animation created will have a keyframe for each active blendshape, and the value set on this list
  * **Toggle All** will enable/disable all of the blendshapes
  * **Reset** will disable all the blendshapes and set their value to 0

#### Animation

* **Add To Existing Animation** makes it so the keyframes are added to the provided animation clip, instead of creating a new one
  * Note that if you already have the animation open in an animation window, you’ll have to select a different animation and then select it back for it to refresh
* **Animation Name** is the name of the Animation Clip created in the selected asset folder
* The **Selected Folder** is where the Animation Clip created will be saved as a file

<figure><img src="/files/UxQkjBxYiEJfdPV1Q4Pq" alt=""><figcaption></figcaption></figure>


# Hue Shift Creator

This is a niche tool that functions similar to the Toggle Creator, but for creating hue shifts. It’s intended to be used with the Poiyomi shader. All the options are the same as the Toggle Creator, except it there’s no Proxy Animation or Slow Transition option (since there are no transitions at all)

**The materials have to be set up manually**. For poiyomi, this means **enabling hue shift** (Color & Normals → Color Adjust → Hue Shift) and setting the parameter to be able to be **animated when the material is locked** (right click on top of Hue Shift, and make sure **Animated (when locked)** is toggled **on**)

<figure><img src="/files/pwOYhMbFIDvNcnGligKZ" alt=""><figcaption></figcaption></figure>


# Avatar Setup

This tool helps speed up the initial process of getting a model prepared to start working on it

* **Avatar** can accept a model directly from the assets folder, or find one in the scene

#### Checklist

The scripts checks (and give an option to autofix) the following:

* Rig type is set to humanoid
  * If **Set model rig as human** is hit, the animation type of the model’s rig will be set to Humanoid
* Avatar is part of the scene (model is instantiated)
  * If **Instantiate avatar** is hit, the avatar will be instantiated in the scene (same as dragging and dropping the model from the assets folder to the hierarchy)
* Avatar contains avatar descriptor
  * If **Add avatar descriptor component** is hit, an avatar descriptor will be added to the model instance
* Avatar has an FX Layer
  * If **Create FX Layer** is hit, an animator controller with the inputted name will be created at the selected folder
* Avatar has an Expression Menu
  * If **Create Expression Menu** is hit, an expressions menu asset with the inputted name will be created at the selected folder
* Avatar has Expression Parameters
  * If **Create Expression Parameters** is hit, an expressions parameters asset with the inputted name will be created at the selected folder
* Model doesn’t have Read/Write enabled
  * If **Enable Read/Write** is hit, the model’s Read/Write Enabled will be turned on.
* Blendshape Normals are set to Calculate and Legacy Blendshape Normals are off. This is the same behavior that’s done in the VRChat SDK control panel
  * If **Use Legacy Blendshape Normals** is hit, the model’s Legacy Blendshape Normals will be turned on. This is the same behavior that’s done in the VRChat SDK control panel

<figure><img src="/files/IprBcCAO00kdITVG8J9Y" alt=""><figcaption></figcaption></figure>


# WFT Editor (Settings)

These are settings for the other tools

* **Use header** will toggle headers in the tools. This is useful for tools with long lists such as Blendshape Animation Creator and Parameter Editor
* **Customization** is used to change the colors of UI repeated elements. These options are persistent and can be reset.
* **Folders** is used to change the default folder and global folder.
  * The **default folder** is used if no folder has been set
  * The **global folder** is used if the **Use Global** option is selected in any asset-generating tool
* **Delete All Saved Settings** deletes the global settings (saved in the project) and resets them to the default


# VRM Blendshape Editor (addon)

This tool is special. It’s not for making a VRChat avatar, but a VRM one, and should only be imported if the UniVRM package is also imported (currently, it only works with older versions. 1.0 changes some stuff in the code. This is the version you should use: <https://github.com/vrm-c/UniVRM/releases/tag/v0.99.4>)

#### Setup

* **Avatar** accepts a game object
  * This will usually be your avatar
  * You can ignore this and just set the **Face Mesh** slot instead. The avatar will be set automatically
* **Face Mesh** is where the mesh containing all your blendshapes should go

#### ARKit

* The script will try to find all ARKit blendshapes in the Face Mesh. It’ll tell you how many are missing
* The **Details** fold show the index of the ones found, and which ones are missing
* This is extremely useful when making the blendshapes from scratch, to make sure none of them were accidentally skipped or mistyped

#### VRM Clip Creation

When the **VRM Clip Creation** toggle is active, it’s options will be displayed

* **Find Visemes** will try to find the names of VRM visemes inside the Face Mesh (eg, A, E, I). If they’re not found, it’ll try to find VRChat visemes to use instead (eg, vrc.v\_aa → A, vrc.v\_ou → U)
  * You can use Visemes Mapping to change them to the name in your model (eg, A → ah)
* **Find Expression Blendshapes** will try to find the names of VRM expressions inside the Face Mesh (eg, Joy, Angry, Sorrow)
  * You can use Expression Mapping to change them to the name in your model (eg, Sorrow → Sad)
* Blendshapes don’t have to be found! The **Blendshape not found** text just means it’ll be skipped
* When **Create Blendshape Assets** is hit, a Blend Shape Avatar asset with all the found Blendshapes Clips set up will be created
  * To use it, just add the component **VRM Blend Shape Proxy** to your avatar and drag the created asset onto the Blend Shape Avatar slot

This tool, in combination with the Material Editor, can be used to create an ARKit compatible VRM file from a model in seconds

<figure><img src="/files/CC4cOKOW1syHy7QsldfE" alt=""><figcaption></figcaption></figure>


