KerbalPose
KerbalPose is a comprehensive character customization and animation framework for Kerbal Space Program. Edit bones in real-time, create custom animations, attach cosmetics, and more. Fully compatible with FreeIVA and other popular mods.
Download KerbalPose
Changelog
v1.02 — March 13, 2026
- UI Improvements - Localization to multiple languages
German, English, Spanish, French, Italian, Japanese, Portuguese, Russian, Ukrainian, Chinese
v1.01 — March 11, 2026
- PluginData path fix for ModuleManager conflict
- F2 HUD toggle fix
v1.0
- Initial Release
Features
- Bone Editor — Edit any bone position, rotation, and scale in real-time
- Pose Clips — Create, save, and play custom animations with keyframes
- Key Bindings — Bind bone transforms to hotkeys with smooth interpolation
- Cosmetic System — Attach custom meshes with full skeleton support
- Texture Replacement — Swap body part textures per kerbal
- Light Attachments — Attach dynamic lights to kerbals
- Hot Reload — Changes persist through quickloads (F9)

Installation
- Download the latest release from the link below
- Extract to your KSP
GameData/folder - The folder structure should be:
GameData/KerbalPose/ - Launch KSP and press Ctrl + J to open the editor
Bone Editor
The Bone Editor is the core of KerbalPose. It allows you to modify any bone in the kerbal's skeleton in real-time.
Interface
Bone List (Left Panel)
Lists all bones in the kerbal's skeleton. Use the filter box to search.
- Click — Select a single bone
- Ctrl + Click — Multi-select bones
- Green — Selected bone(s)
- Yellow — Bone has active offsets
Edit Panel (Right Side)
Three edit modes available via tabs:
- Position — Offset bone location (local space)
- Rotation — Rotate bone (Euler angles)
- Scale — Scale bone (multiplier from baseline)
Multi-Bone Editing
Select multiple bones with Ctrl + Click to edit them simultaneously. Values are applied relatively to each bone's original transform.
Saving & Loading
- Save — Saves bone offsets to config (auto-applies on spawn)
- Reload — Discard changes and reload from file
- Presets — Save/load named presets for quick application
Pose Clips
Pose Clips let you create reusable animations by recording bone transforms over time.
Recording a Clip
- Switch to the Pose Clips tab
- Click New Clip and set duration
- Position scrubber at time 0
- Pose your kerbal in Bone Editor
- Click Add Keyframe
- Move scrubber forward, pose again, add keyframe
- Repeat until animation is complete
- Click Save Clip
Playback Controls
| Control | Description |
|---|---|
| Play | Start animation from beginning |
| Loop | Toggle continuous loop |
| Speed | Adjust playback speed multiplier |
| Blend Duration | Transition time into/out of clip |
Clip Properties
| Property | Description |
|---|---|
priority |
Higher number overrides lower priority clips |
weight |
0.0 to 1.0 — Influence of the clip |
layer |
Animation layer for additive blending |
interruptible |
If true, can be stopped by higher priority clips |
Key Bindings
Bind bone transformations to hotkeys for interactive poses and emotes.
Creating a Binding
- Select bone(s) in Bone Editor
- Switch to Key Bindings tab
- Click Add Binding
- Press a key to assign it
- Set mode and configure transform
- Set interpolation (recommended)
Binding Modes
| Mode | Description |
|---|---|
Toggle |
Press once to activate, again to deactivate |
Hold |
Active only while key is held |
Offset |
Adds to current animation (additive) |
Set |
One-shot immediate transform |
Cycle |
Press to cycle through multiple states |
Character Customization
Cosmetics System
The Customization tab lets you attach custom meshes to kerbals.
Cosmetic Types
- Standard — Static mesh attached to a bone
- Skinned — Mesh with its own skeleton
- Armature — Uses kerbal's existing bones
Light Attachments
Attach dynamic lights to any bone:
- Point Light — Omnidirectional
- Spot Light — Directional cone
- Flicker — Animated flickering (for fire/candles)
Blender Plugin
KerbalPose includes a Blender addon for exporting meshes.
Installation
- Download
kerbalPoseBlender.zip - In Blender: Edit → Preferences → Add-ons
- Click Install... and select the zip
- Enable the addon
Export Workflow
- Create mesh in Blender
- Weight paint to bones (for skinned meshes)
- Select mesh
- Set the name
- File → Export → KerbalPose Mesh (Multiple files will be generated for the models folder)
- Click Export
Manifest.cfg
The manifest.cfg defines cosmetic and texture mods.
Folder Structure
GameData/KerbalPose/Cosmetics/
└── YourModName/
├── manifest.cfg
├── Models/
│ └── your_cosmetic_exported_blender_files_go_here
└── Textures/
├── texture1.png
└── texture2.png
Cosmetic Configuration Reference
Simple Cosmetic (Single Mesh)
COSMETIC_MOD
{
name = My Cool Hats
author = YourName
version = 1.0
description = A collection of stylish hats
COSMETIC
{
// Required: Unique identifier
id = fancy_hat
// Required: Display name in UI
displayName = Fancy Hat
// Required: mesh name from the models folder inside your cosmetic folder (check existing models for example)
mesh = fancy_hat
// Optional: Default attachment bone
defaultBone = bn_upperJaw01
// Optional: Shader name (default: KSP/Bumped Specular)
shader = KSP/Bumped Specular
// Optional: Base color tint (RGBA 0-1)
color = 1.0, 1.0, 1.0, 1.0
// Optional: Multiple texture options user can switch between (no extension, just name)
TEXTURE_OPTION
{
name = Red
texturePath = Textures/hat_red
normalMapPath = Textures/hat_red_nrm
}
TEXTURE_OPTION
{
name = Blue
texturePath = Textures/hat_blue
}
}
}
Advanced Cosmetic (Multi-Mesh)
COSMETIC_MOD
{
name = Full Outfit Pack
author = YourName
version = 1.0
description = Complete outfit with multiple parts
COSMETIC
{
id = space_suit
displayName = Space Suit
defaultBone = bn_spine01
// Multi-mesh cosmetic - each part with its own offset
MESH_ENTRY
{
meshName = suit_body
positionOffset = 0, 0, 0
rotationOffset = 0, 0, 0
scale = 1.0
// Per-mesh materials
MATERIAL
{
name = Main
shader = KSP/Bumped Specular
diffuseColor = 1.0, 1.0, 1.0, 1.0
texturePath = Textures/suit_body
normalMapPath = Textures/suit_body_nrm
}
MATERIAL
{
name = Details
shader = KSP/Specular
texturePath = Textures/suit_details
}
}
MESH_ENTRY
{
meshName = suit_helmet
positionOffset = 0, 0.1, 0
rotationOffset = 0, 0, 0
scale = 1.0
}
// Texture options apply to all meshes
TEXTURE_OPTION
{
name = Standard
texturePath = Textures/suit_white
}
TEXTURE_OPTION
{
name = Orange
texturePath = Textures/suit_orange
}
}
}
Available COSMETIC Fields
| Field | Required | Description |
|---|---|---|
id |
Yes | Unique identifier (no spaces) |
displayName |
Yes | Name shown in the UI |
mesh |
For single mesh | Path to .mu mesh file |
defaultBone |
No | Default attachment bone name |
shader |
No | Unity shader name (default: KSP/Bumped Specular) |
color |
No | Base color tint "R, G, B, A" (0-1) |
TEXTURE_OPTION Fields
| Field | Required | Description |
|---|---|---|
name |
Yes | Name shown in texture selector |
texturePath |
Yes | Path to diffuse texture |
normalMapPath |
No | Path to normal/bump map |
MESH_ENTRY Fields (Multi-Mesh)
| Field | Required | Description |
|---|---|---|
meshName |
Yes | Name of mesh file (without extension) |
positionOffset |
No | Local position offset "X, Y, Z" |
rotationOffset |
No | Local rotation "X, Y, Z" (Euler degrees) |
scale |
No | Uniform scale multiplier |
Texture Mod Configuration
TEXTURE_MOD
{
name = Alternative Faces
author = YourName
version = 1.0
description = Custom face textures
TEXTURE_SET
{
id = zombie_face
displayName = Zombie Face
// Diffuse textures (color/albedo)
texHead = Textures/zombie_head
texBody = Textures/zombie_body
texArms = Textures/zombie_arms
texLegs = Textures/zombie_legs
texHelmet = Textures/zombie_helmet
texEyes = Textures/zombie_eyes
// Normal maps (bump/normal) - optional
texHeadNormal = Textures/zombie_head_nrm
texBodyNormal = Textures/zombie_body_nrm
texArmsNormal = Textures/zombie_arms_nrm
texLegsNormal = Textures/zombie_legs_nrm
texHelmetNormal = Textures/zombie_helmet_nrm
texEyesNormal = Textures/zombie_eyes_nrm
}
// Multiple texture sets in one mod
TEXTURE_SET
{
id = robot_face
displayName = Robot Face
texHead = Textures/robot_head
texBody = Textures/robot_body
// ... etc
}
}
TEXTURE_SET Fields
| Field | Required | Description |
|---|---|---|
id |
Yes | Unique identifier |
displayName |
Yes | Name shown in UI |
texHead |
No | Head diffuse texture path |
texBody |
No | Torso diffuse texture path |
texArms |
No | Arms diffuse texture path |
texLegs |
No | Legs diffuse texture path |
texHelmet |
No | Helmet/visor texture path |
texEyes |
No | Eye texture path |
texHeadNormal |
No | Head normal map path |
texBodyNormal |
No | Body normal map path |
texArmsNormal |
No | Arms normal map path |
texLegsNormal |
No | Legs normal map path |
texHelmetNormal |
No | Helmet normal map path |
texEyesNormal |
No | Eyes normal map path |