Pre-upload checks and fixes for VRChat avatars in Unity.
Scan your avatar, fix the usual SDK problems, shrink textures, then upload like normal.
Important
Please make sure to read the Important section before using Fix All / Auto Fix. Prefer Individual fixes.
Vtool is a Unity Editor window for VRChat avatar creators. Point it at your avatar root and it tells you what is wrong before you upload.
| Where | Unity Editor only |
| Install | VRChat Creator Companion (VCC) |
| Price | Free |
| Code | Open source on this repo |
| Languages | English, Arabic, Spanish, French (bilingual labels) |
Pick a language in the window header. Non-English UI shows bilingual labels like فحص (Check) or Vérifier (Check). VRChat terms such as PhysBones, PipelineManager, and Quest stay in English. Arabic window text is shaped for Unity IMGUI; Arabic pop-ups use dialog-safe shaping so letters stay connected and read right-to-left.
Hover buttons for tooltips. Major actions also show a short caption explaining what they do and what they will not delete.
|
Blockers, warnings, and a performance snapshot. Poly count, textures, VRChat setup, PhysBones, audio, Quest shaders, and more. |
Safe one-click fixes. No mesh or object removal. Scripts, materials, bounds, audio, lip sync, view position, PipelineManager. |
Lower import size or prep for Quest. Cap to 512 / 1024 / 2048, restore originals, convert mobile shaders. |
Requirements: Unity 2022.3+, VRChat Avatars SDK, VCC
Step 1. VCC → Settings → Packages → Add Repository
https://raw.githubusercontent.com/DARKSIDE957/Vtool/main/index.json
Step 2. Open your project in VCC → Manage Project → add Vtool Avatar Auto-Fixer Pro
Step 3. In Unity: Vtool → Avatar Auto-Fixer Pro
Tip
After updating in VCC, reopen the Unity project (or let Unity recompile) so the new version loads.
- Drop your avatar root into the tool (or Auto-Detect)
- Check tab: read what failed
- Backup Avatar or rely on auto rollback before fixes
- Fix tab: Fix All Safe Upload Errors
- If anything breaks: Rollback Avatar
- Textures tab: only if you need smaller textures or Quest shaders
- Upload through the VRChat SDK
Upload blockers
- Missing
VRCAvatarDescriptororPipelineManager - Missing humanoid Animator
- Missing scripts
- Null material slots
- Broken shaders (pink materials)
- Missing meshes
- Extreme polygon count
- Over 256 PhysBone components (VRChat hard limit)
Warnings
- View position / lip sync not set
- Chest bone not mapped
- Bad root or negative scale
- High poly count, materials, PhysBones, particles
- 4K / 2K+ textures, missing mipmaps
- Audio not 3D, too loud, play on awake
- Other avatars active in scene
- Non-Quest shaders
What Fix All changes
Fix All is conservative. It does not delete meshes, GameObjects, or material slots. It also never removes anything on the head, face, or hair.
- Fills null material slots using a nearby material on the same renderer (never invents placeholders on head/face)
- Adds
PipelineManagerif missing - Fixes audio (3D, volume, play on awake)
- Sets view position only if empty
- Sets lip sync only if empty
Skinned mesh bounds are not changed by Fix All — use the Individual Fix skinned mesh bounds action if you need that (it still skips head/face).
Missing scripts and excess PhysBones (scripts only — never GameObjects/meshes, and never on head/face/hair), mipmaps, scene avatars, and placeholder materials are under Individual fixes with a confirmation dialog.
Pink shaders still need manual reassignment.
Warning
Vtool saves a rollback copy before fixes. If something looks wrong, click Rollback Avatar in the Fix tab.
Vtool will not delete GameObjects, meshes, or the head/face/hair region. PhysBone reduction and missing-script cleanup skip that area on purpose.
You can also use Backup Avatar for a visible copy in the scene, or Unity Ctrl+Z for the last edit.
Test on a copy of your project if you are unsure.
Important
I am still trying my best to stop the head / face from disappearing after Fix — especially on Japanese Booth bases (Manuka, Powari, Lime/Chiffon-family, meshes like *_atama, face often named Body).
This is not because the avatar is short or tall. The usual cause is bad skinned mesh bounds (frustum cull): the mesh is still there, Unity just stops drawing it. Wrong materials on a missed face mesh can look the same.
v2.4.1 removes bounds from Fix All, expands JP/Booth head-face detection (rootBone Head, more romaji/base names), and hardens face material handling. Prefer Individual fixes. Do not always use Fix All / Auto Fix.
Arabic: dialogs should show connected RTL text (native popups no longer get IMGUI-reversed Arabic).
Suggested flow: Check → Backup Avatar → run one Individual fix at a time.
If the head disappears:
- Click Rollback Avatar immediately (or Unity Ctrl+Z)
- Note which Fix button you used (Fix All, Reduce PhysBones, Remove missing scripts, etc.)
- Use Check → Copy Error Codes and open an issue with that report + avatar setup notes
- Removed Apply Package Update / reload banner and menu (use VCC + Unity recompile instead)
- Fix language picker rejecting French (was capped at Spanish index)
- Full French language support (UI, dialogs, scan messages) with bilingual labels
- Support link switched from Buy Me a Coffee to Ko-fi
- Fix All no longer rewrites skinned mesh bounds (Individual only; still skips head/face)
- Stronger JP/Booth head-face protection (
rootBoneHead/Neck/Jaw/Eyes, more name tokens, MMD/viseme shapes) - Safer materials on protected face/head (no array expansion / placeholders)
- Arabic native dialogs: shape connected letters without IMGUI reverse (fixes upside-down / LTR popups)
- Docs: clarify head cull is bounds-related, not avatar height
- Quest/mobile PhysBone warnings (8 components / 64 transforms / colliders)
- Warn when a single PhysBone affects more than 256 transforms
- Package version shown in the window header
- Clearer Fix All confirmation (prefer Individual fixes)
- Docs refresh
- Manuka/Powari-style head cull fix (
*_atama, skip head bounds rewrite)
- Compact window layout (tabs stay visible; content scrolls)
- Releases
- Report a bug
- Ko-fi (optional)