Overview
Sidekick Studio adds a Sidekick main tab to the Godot editor, next to 2D, 3D and Script. Everything happens there: the left side holds six pages, the right side shows the character live.
Import without Unity
Reads Synty .unitypackage files directly, or a pack folder from a Unity project.
Build
38 part slots, Synty presets, random characters, part size / move / turn, body shapes.
Paint
The 16 × 16 colour regions, click-to-pick on the character, glow, palettes, toon shading.
Animate
Mixamo, Synty / Unreal-mannequin and Godot humanoid clips, retargeted automatically.
Export
A .tscn with one baked mesh (one draw call) or separate parts, your choice of bone names.
Runtime
SidekickCharacter + SidekickRecipe for in-game character creators.
Install
- Download
SidekickStudio_v0.1.2.zipand unzip it into your Godot project folder. You getaddons/sidekick_studio/. - Open Project › Project Settings › Plugins and enable Sidekick Studio.
- A Sidekick tab appears at the top of the editor. Open it.
| Requirement | Details |
|---|---|
| Godot | 4.4 or newer (uses Godot's built-in FBX loader). Tested on 4.7. |
| Renderer | Forward+ or Compatibility. |
| Sidekick packs | Your own Synty Sidekick packs (the Unity .unitypackage downloads, or their folder in a Unity project). |
| Disk | Roughly 10–15 MB per imported pack. |
addons/sidekick_studio folder with the new one and restart the editor. Your library and recipes are kept.Quick start
- Library: press Import .unitypackage… and pick one or more Sidekick packs. Import the Starter Pack first: it has the base bodies.
- Parts: choose a Synty preset in Start from, or press Random. Click a slot, then a part to swap it.
- Body and Colours: shape and paint. Click the character to pick the colour under the mouse.
- Animation (optional): add a Mixamo or Synty animation file to check the character in motion.
- Export: set a name and folder, press Export character. Drag the
.tscninto any scene.
Interface
| Area | What it holds |
|---|---|
| Toolbar | New (blank or random character), Open…, Save, Save as…, Undo, Redo, the current recipe's file name (• = unsaved changes). |
| Left pages | Library · Parts · Body · Colours · Animation · Export. |
| Preview | The character, live. View buttons (Front, Side, Back, Face), Turntable, lighting preset (Studio, Daylight, Night, Flat). |
| Status line | What just happened, warnings in orange, and the import progress bar with Cancel. |
Preview controls
| Action | Mouse / keys |
|---|---|
| Orbit | Left-drag |
| Move the view up / down | Right-drag or middle-drag |
| Zoom | Mouse wheel |
| Pick a colour (and the part's slot) | Left-click on the character |
| Identify a part | Hover: the part lights up and shows its slot and name |
| Undo / Redo | Ctrl+Z / Ctrl+Shift+Z |
| Save recipe | Ctrl+S while the Sidekick tab is open |
Library
The library is where your imported Sidekick parts live. The first time you open the Studio it shows an empty page with two buttons.
Importing
| Button | Use it for |
|---|---|
| Import .unitypackage… | The Sidekick downloads as they are (for example SIDEKICK_Fantasy_Skeletons_Unity_2021_3_v1_0_4.unitypackage). Pick several at once. The file is streamed, never unpacked to disk. |
| Import folder… | An unpacked pack, or the pack's folder inside a Unity project (Assets/Synty/…). Subfolders are searched. |
What gets imported:
| From the pack | Becomes |
|---|---|
SK_<THEME>_<SET>_<NN>_<SLOT>_<SPECIES>.fbx | One part in the library (mesh, its 4 body shapes, skin bound by bone name). |
*.sk presets | Synty's ready-made characters: parts + body shape. Listed under Parts › Start from. |
T_*ColorMap*.png | Colour palettes (Colours page) and the presets' colours. |
| Everything else | Ignored (Unity prefabs, materials, database, demo scenes). |
A pack takes a few seconds. The status line counts the parts; Cancel import stops it (what was imported so far is kept). Pack names are cleaned up automatically: SIDEKICK_SciFi_Robots_Unity_2021_3_v1_0_0 becomes SciFi Robots.
Your packs
The table lists each pack with its part and preset counts (hover for the source file and import date). Remove deletes the selected pack's parts from the library; you can import it again any time. Importing a pack again updates it.
Library location
Default: res://sidekick_library/. Change… points the Studio at another folder (for example a library shared by several projects on your machine). It is saved in Project Settings › sidekick_studio/library_path.
.gitignore if your repository is public (the demo project's .gitignore already does). Exported characters work without it; a SidekickCharacter node that builds characters in-game needs it in your export.Parts
Start from
Start from lists Synty's presets grouped by pack. Choosing one replaces the character (parts, body shape and colours). Presets whose parts come from a pack you haven't imported load with the parts you have, and the status line says how many are missing. Random builds a full character of one species; when the pack filter below is set, it uses that pack where it can.
Slots
The slot list shows every slot with the part it holds (— = empty). Click a slot to list its parts underneath.
| Group | Slots |
|---|---|
| Head | Head, Hair, Eyebrow L/R, Eye L/R, Ear L/R, Nose, Teeth, Tongue, Facial hair |
| Upper body | Torso, Upper arm L/R, Forearm L/R, Hand L/R |
| Lower body | Hips, Leg L/R, Foot L/R, Wrap |
| Attachments | Head gear, Face gear, Back, Shoulder L/R, Elbow L/R, Hips front / back / L / R, Knee L/R |
Choosing a part
- Search parts… filters by name (for example
robo,05). - The two drop-downs filter by pack and species (human, zombie, robot, skeleton, elf, goblin…).
- — None — empties the slot (useful for attachments).
- Keep left and right matched (on by default): picking a left hand, arm, leg, foot, ear or attachment puts the matching right one on too.
Tweak the selected part
Size, Move X / Y / Z (metres) and Turn X / Y / Z (degrees) change the selected slot's part around the bone it hangs from, so wings, hats or shoulder pads keep following the animation. Reset part puts it back as made. Tweaks are saved in the recipe and baked into the export.
Body
| Slider | Range |
|---|---|
| Build | Skinny (−1) … Heavy (+1) |
| Body type | Masculine (0) … Feminine (1) |
| Muscles | Soft (0) … Strong (1) |
Quick buttons: Default, Slim, Heavy, Athletic. The sliders drive the four blend shapes every Sidekick part has, so clothes and armour follow the body.
A part with its own body shape
Select a part (Parts page, or click it on the character), then tick Give this part its own body shape. The part gets its own three sliders: a bulky coat on a slim body, heavy armour pieces, oversized boots.
Colours
Every Sidekick part is painted from one 32 × 32 colour map made of 256 colour regions (16 × 16). Several parts can share a region: skin, for example, is one region for the head, arms and legs.
| Control | What it does |
|---|---|
| Colour regions grid | Bright squares are used by the current character; dim ones aren't. The selected part's regions are outlined; glowing ones have a dot. Click a square to select it. |
| Click on the character | Selects the colour under the mouse and that part's slot. |
| Show only the colours in use | Hides the unused squares. |
| Colour picker | Repaints the selected region live (no rebuild). |
| Glow + colour | Makes the region emissive (eyes, visors, runes, lights). |
| Glow strength | For the whole character (0–8). |
| Apply a palette… | Repaints everything with a colour map from your packs (palettes and presets). |
| Make this colour unique to the selected part | When parts share a region, gives the selected slot's part a free region of its own, so you can colour it separately. |
| Toon shading | Smooth (0) … Cel (1) lighting on the Sidekick shader. |
Animation
Preview your character with real animations. Add animations… takes .glb, .gltf, .fbx, .tscn, .scn or an AnimationLibrary resource, from inside or outside the project. Each file's clips are listed (a single clip is named after its file).
Supported rigs
| Source | Example bone | Notes |
|---|---|---|
| Mixamo | mixamorig:LeftArm | Any prefix (mixamorig1_…) works. |
| Synty / Unreal mannequin | upperarm_l | Synty animation packs, UE4/UE5 mannequin clips. |
| Godot humanoid profile | LeftUpperArm | Clips imported with a BoneMap / SkeletonProfileHumanoid. |
Bones are matched by what they are, and each rotation is carried over relative to both rigs' rest poses (different up / facing conventions are handled). Only the hips move, scaled to the character's leg length; every other bone keeps the character's proportions. Bones with no match (capes, hair, twist bones) follow their parent.
| Control | What it does |
|---|---|
| Play / Pause | Toggles playback. |
| Rest pose | Stops and shows the bind pose. |
| Loop | Loops the clip. |
| Timeline | Drag to scrub (pauses). |
| Speed | 0.1× … 2×. |
| Remove | Removes the selected clip's file from the list. |
AnimationLibrary resource) is matched by bone names only, without rest-pose correction. Prefer the original .fbx / .glb when you have it.Export
Saves the character as a scene you can drop into any level.
| Option | Choices |
|---|---|
| Name | The scene's root name; the file is the name in snake_case (Captain Rex → captain_rex.tscn). |
| Folder | Default res://characters/. |
| Mesh | One baked mesh (1 draw call): every part merged with the body shapes and tweaks applied; best for games. Separate part meshes: one MeshInstance3D per part. |
| Bone names | Sidekick (Unreal style), Mixamo (mixamorig_) or Godot humanoid profile: pick what your animations use. See Bone names. |
| Material | Sidekick shader (colour map, glow, toon) or StandardMaterial3D (for pipelines that need a standard material). |
| Include the previewed animations | Adds an AnimationPlayer with every clip from the Animation page, retargeted onto the exported skeleton. |
| Save the recipe next to it | <name>_recipe.tres, to open and edit the character later. |
| Save a portrait | <name>_portrait.png, 256 × 256, from the current view (use Face first for a head shot). |
The exported scene: Root (Node3D) › Armature › Skeleton3D › Body (+ AnimationPlayer). The baked mesh keeps each attachment slot's triangles together and lists them in the mesh's slots metadata, so a game can hide one attachment later.
Recipes & undo
A recipe is the editable description of a character: its parts, colour and glow maps, body shapes, part body shapes, colour remaps and part tweaks.
- Save / Save as…:
.tres(aSidekickReciperesource) or.json. - Open…:
.tresor.json. Parts missing from your library are reported. - New: a blank base character, or a random one.
- Undo / Redo: 60 steps; slider changes count once, when you let go.
Runtime characters
To build characters in your game (an in-game character creator, random NPCs), add a SidekickCharacter node and give it a SidekickRecipe. It rebuilds whenever the recipe changes, in the editor and in game.
| SidekickCharacter | Description |
|---|---|
recipe: SidekickRecipe | The character to build. |
baked: bool = true | One mesh (fast to draw, a moment to rebuild) or one mesh per part. |
model: Node3D | The built character. |
set_part(slot, part) | Puts a part on (replacing the slot's part); "" empties the slot. |
part_in(slot) → String | The part a slot holds. |
parts_for(slot) → Array (static) | Every part in the library for a slot. |
set_body(size, feminine, muscles) | Size −1…1, feminine 0…1, muscles 0…1. |
set_region_color(region: Vector2i, color) | Repaints one colour region without a rebuild. |
skeleton() → Skeleton3D | The built skeleton. |
rebuilt(model) (signal) | After every rebuild. |
@onready var hero: SidekickCharacter = $Hero
func _on_next_helmet_pressed() -> void:
var helmets := SidekickCharacter.parts_for("att_head")
var i := (helmets.find(hero.part_in("att_head")) + 1) % helmets.size()
hero.set_part("att_head", helmets[i])
func _on_size_changed(v: float) -> void:
hero.set_body(v, 0.0, 0.3)
sidekick_library/ is included by your export preset. Pre-exported .tscn characters don't need it.Library format
| Path | Contents |
|---|---|
<library>/catalog.json | packs (source file, import date, counts), parts (slot, theme, set, species, pack, triangle count), presets (pack, parts, body, colour map), palettes. |
<library>/parts/<PART>.scn | A Node3D (meta bones = the part's bone table with rests) and one MeshInstance3D: mesh with the blend shapes defaultHeavy, defaultSkinny, masculineFeminine, defaultBuff, skin bound by bone name. Saved compressed. |
Part names follow Synty's scheme: SK_APOC_OUTL_01_10TORS_HU01 = Apocalypse Outlaws, set 01, torso (10TORS), human (HU).
Bone names
Main bones under each export naming (fingers follow the same pattern):
| Sidekick (Unreal style) | Mixamo | Godot humanoid |
|---|---|---|
pelvis | mixamorig_Hips | Hips |
spine_01 / 02 / 03 | Spine / Spine1 / Spine2 | Spine / Chest / UpperChest |
neck_01, head | Neck, Head | Neck, Head |
clavicle_l | LeftShoulder | LeftShoulder |
upperarm_l / lowerarm_l / hand_l | LeftArm / LeftForeArm / LeftHand | LeftUpperArm / LeftLowerArm / LeftHand |
thigh_l / calf_l / foot_l / ball_l | LeftUpLeg / LeftLeg / LeftFoot / LeftToeBase | LeftUpperLeg / LeftLowerLeg / LeftFoot / LeftToes |
index_01_l … | LeftHandIndex1 … | LeftIndexProximal … |
Dynamic bones (hair, capes, attachment bones) keep their Sidekick names under every naming. The Mixamo naming uses the mixamorig_ prefix Godot gives Mixamo files on import.
Troubleshooting
| Problem | Fix |
|---|---|
| "Unable to load addon script … plugin.gd" on first open | Fixed in 0.1.1. Update, then re-enable the plugin in Project Settings › Plugins. |
| Importing adds nothing | Fixed in 0.1.2. Update, restart the editor, remove any pack listed with 0 parts and import it again. |
| "No Sidekick parts (SK_*.fbx) in this package" | The file isn't a Sidekick pack (or is a Synty non-Sidekick pack). Sidekick parts are named SK_…_10TORS_HU01 etc. |
| A preset loads with missing pieces | Its parts come from another pack (often the Starter Pack). Import that pack. |
| Texture warnings in Output during import | Harmless (see Library). |
| An animation looks twisted | Make sure the file has its skeleton (use the original .fbx / .glb). Report the rig so it can be supported. |
| Exported character doesn't animate with my clips | Export with the bone names your clips use (Mixamo for Mixamo clips), or include the previewed animations in the export. |
| Colours look washed out | Switch the preview light to Flat or Studio; the Daylight preset is brighter. |
FAQ & licensing
Is it free?
Yes, and open source under the MIT license: use it in personal and commercial projects, modify it, share it.
Does it include Synty assets?
No. You need your own Sidekick packs and Synty licence. Characters you build follow Synty's licence: use them in your games; don't share the parts, the library or exported characters as assets.
Is it official?
No. Sidekick Studio is made by ZEXP and is not affiliated with or endorsed by Synty Studios. Synty, POLYGON and Sidekick are trademarks of Synty Studios.
Do I need Unity?
No. The .unitypackage files are read directly.
Where do I report a bug?
Through the ZEXP contact page, with your Godot version, the pack's file name and the status line text.
Changelog
0.1.2 (2026-11-04)
- Fixed: importing packs inside the editor added nothing.
- Pack names are cleaned up (
SIDEKICK_Fantasy_Skeletons_Unity_2021_3_v1_0_4→ Fantasy Skeletons). - With only non-human packs, the Studio starts on a complete preset instead of an empty character.
0.1.1
- Fixed: the plugin failed to load on a brand-new project.
- Undo / Redo start disabled.
0.1.0
- First release: Library, Parts, Body, Colours, Animation and Export pages; SidekickCharacter and SidekickRecipe.