Skip to main content
The Animation Editor (Debug Bounding State) is a specialized tool for editing character animations and adjusting animation offsets in Friday Night Funkin’. It provides both a spritesheet view and an offset editing view.

Opening the Animation Editor

1

From Main Menu

Press ~ (tilde) to open the debug menu, then select Animation Editor
2

Direct Launch

Navigate to the Animation Editor in the debug tools menu
The Animation Editor is only available in debug builds with the FEATURE_ANIMATION_EDITOR compiler flag enabled.

Interface Modes

The Animation Editor has two main views that you can switch between:

View Switching

KeyViewPurpose
1Spritesheet ViewView entire sprite atlas with frame outlines
2Animation ViewEdit individual animation offsets
You can also use the view dropdown in the editor dialog to switch views.

Spritesheet View

The spritesheet view displays the entire sprite atlas for a character:

Features

  • Full Atlas Display: Shows the complete spritesheet texture
  • Frame Outlines: Red outlines around each animation frame
  • Frame Information: Displays frame dimensions and count
  • File Information: Shows the XML/JSON file being used
  • Mouse Wheel: Zoom in/out on the spritesheet
  • Middle Mouse + Drag: Pan around the view
  • H: Toggle HUD visibility
  • F4: Return to main menu
The spritesheet view is useful for verifying that all frames are properly loaded and positioned in the atlas.

Animation Offset View

This is the primary mode for editing character animations:

Loading a Character

1

Open Character Dropdown

The editor dialog shows a “Character” dropdown menu
2

Select Character

Choose from the list of available characters:
  • bf (Boyfriend)
  • dad (Daddy Dearest)
  • gf (Girlfriend)
  • pico
  • mom
  • And all other registered characters
3

Character Loads

The character sprite appears in the center of the screen, ready for animation editing

Keyboard Controls

Animation Selection

KeyActionDescription
WSing UpPlay singUP animation
SSing DownPlay singDOWN animation
ASing LeftPlay singLEFT animation
DSing RightPlay singRIGHT animation
Shift+W/S/A/DMiss AnimationsPlay miss variants (singUPmiss, etc.)
SpaceIdlePlay idle animation
EnterReplayReplay current animation
E or ]Next AnimationCycle to next animation in list
Q or [Previous AnimationCycle to previous animation

Offset Adjustment

KeyActionAmountDescription
Move Left5 pixelsShift animation left
Move Right5 pixelsShift animation right
Move Up5 pixelsShift animation up
Move Down5 pixelsShift animation down
Ctrl+ArrowsFine Adjust1 pixelPrecise adjustment
Shift+ArrowsCoarse Adjust10 pixelsRapid adjustment

Additional Controls

KeyActionDescription
FToggle Onion SkinShow/hide reference overlay
GFlip CharacterFlip character horizontally
HToggle HUDShow/hide editor UI
F4ExitReturn to main menu

Saving Offsets

The Animation Editor provides two save formats:

Save Options

ShortcutFormatOutput
Ctrl+S (or Cmd+S on Mac)New FormatSaves full character JSON with all data
Ctrl+Shift+SLegacy FormatSaves offsets-only text file
1

Adjust All Animations

Go through each animation and adjust offsets as needed
2

Choose Save Format

  • Use Ctrl+S for modern JSON format (recommended)
  • Use Ctrl+Shift+S for legacy text format
3

File Saved

  • JSON: [characterId].json
  • Legacy: [characterId]Offsets.txt
Always save your work frequently! The editor doesn’t auto-save, and closing without saving will lose your changes.

Mouse Controls

You can also adjust offsets directly with the mouse:

Click and Drag Offset

1

Position Mouse

Move your mouse cursor to where you want the animation origin to be
2

Click on Character

Click on the character sprite (not the HaxeUI dialog)
3

Drag to Adjust

While holding the mouse button, drag to adjust the offset
  • The offset values update in real-time
  • Release to set the new offset
Mouse offset editing is disabled when the cursor is over HaxeUI components (dialog, dropdowns, etc.).

Onion Skin Feature

Onion skinning helps visualize animation differences:

What is Onion Skin?

A semi-transparent overlay showing a reference pose:
  • Displays at 60% opacity
  • Shows the “idle” animation by default (or danceLeft/danceRight)
  • Helps align different animations consistently

Using Onion Skin

1

Enable Onion Skin

Press F to toggle the onion skin on/off
2

Select Animation to Edit

Use WASD or animation dropdown to choose an animation
3

Compare and Adjust

The semi-transparent reference helps you align the active animation with the base pose
  • Aligning all sing animations to match idle position
  • Ensuring miss animations align with regular animations
  • Maintaining consistent character position across all frames
  • Fixing “jumpy” animations that don’t line up

Animation Dropdown

The Animation Dropdown in the editor dialog provides:
  • Complete list of all animations for the character
  • Alphabetically sorted for easy navigation
  • Current animation highlighted
  • Click to instantly switch to any animation

Character Flipping

Some characters are drawn facing the wrong direction:
1

Load Character

Select the character from the dropdown
2

Check Direction

Verify if the character is facing the correct way
3

Flip if Needed

Press G to flip the character horizontally
4

Adjust Offsets

Continue editing offsets with the character in the correct orientation
The flip setting also updates the onion skin to match, ensuring consistent reference.

Understanding Offsets

Animation offsets compensate for different frame sizes:

Why Offsets Matter

  • Different animations have different frame dimensions
  • Without offsets, characters “jump” between animations
  • Offsets ensure smooth position transitions
  • Proper offsets make animations feel polished

Offset Coordinate System

Positive X → Moves animation RIGHT
Negative X → Moves animation LEFT
Positive Y → Moves animation DOWN  
Negative Y → Moves animation UP

Common Offset Patterns

Usually has offset of [0, 0] as the reference point. All other animations are offset relative to idle.
Often needs negative Y offset (move up) since the character raises arms/head.
Often needs positive Y offset (move down) since the character lowers their stance.
May need X offset adjustments to account for character rotation or arm extension.
Should generally match the regular animation offsets, with minor adjustments for the “miss” pose.

Offset Display

The current offset is displayed at the bottom of the screen:
Offset: [x, y]
  • Updates in real-time as you adjust
  • Shows exact pixel values
  • Persists across animation switches (shows offset for current animation)

Camera Controls

Similar to other debug tools:
ActionControlsDescription
PanMiddle Mouse + DragMove the camera around
ZoomMouse Wheel (when not over UI)Zoom in/out
FocusAuto on character loadCenters on character
When switching to Animation View (pressing 2), the camera automatically focuses on the character and sets zoom to 0.95.

Output Formats

New JSON Format (Ctrl+S)

Saves complete character data:
{
  "id": "characterId",
  "name": "Character Name",
  "assetPath": "characters/CHARACTER",
  "offsets": {
    "idle": [0, 0],
    "singLEFT": [-10, 5],
    "singRIGHT": [12, 5],
    "singUP": [0, -15],
    "singDOWN": [0, 20]
  }
}

Legacy Text Format (Ctrl+Shift+S)

Simple text format:
idle 0 0
singLEFT -10 5
singRIGHT 12 5
singUP 0 -15
singDOWN 0 20
The new JSON format is recommended as it integrates better with the character data system.

Workflow Guide

1

Load Character

Select the character you want to edit from the Character dropdown
2

Start with Idle

Press Space to view the idle animation
  • This is usually the reference animation (offset 0,0)
3

Test Each Animation

Go through each animation:
  • Press W for singUP
  • Press S for singDOWN
  • Press A for singLEFT
  • Press D for singRIGHT
4

Identify Misalignments

Note where each animation appears misaligned compared to idle
5

Adjust Offsets

For each misaligned animation:
  • Use arrow keys to adjust position
  • Use Ctrl+Arrows for fine adjustments
  • Or click and drag with mouse
6

Use Onion Skin

Press F to enable onion skin for reference while adjusting
7

Test Miss Animations

Hold Shift while pressing WASD to check miss animations
8

Save Your Work

Press Ctrl+S to save the character JSON
9

Test In-Game

Exit editor and test the character in actual gameplay to verify

Tips for Perfect Offsets

Pick a body part (like the microphone, head, or feet) and keep it consistent across all animations.
Some animations cycle through multiple frames. Press Enter to replay and check each frame.
After editing, test the character in the Chart Editor with actual gameplay timing.
Check how base game characters (like BF, Dad) handle offsets for similar animation types.
Miss animations should generally have the same offsets as their regular counterparts, with slight adjustments.

Troubleshooting

  • Verify character ID exists in character registry
  • Check that sprite atlas file exists
  • Ensure animation data is properly formatted
  • Verify animation names match exactly (case-sensitive)
  • Check that sprite atlas includes the animation frames
  • Use Spritesheet View to verify frames are present
  • Ensure you’re pressing Ctrl+S (not just S)
  • Check file permissions in the character data directory
  • Verify the character JSON path is writable
  • Press F to toggle it on
  • Check if the character has an idle/danceLeft animation
  • Try selecting a different animation and toggling again

Build docs developers (and LLMs) love