Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UZKHJ Sprite Studio

UZKHJ Sprite Studio

A cross-platform desktop studio for preparing, splitting, cleaning, animating, and exporting 2D sprite assets.

Current Version: 2.0.0

Built with Python, PySide6 (Qt), Pillow, and Python-Markdown.

UZKHJ Sprite Studio is designed for game developers, artists, and anyone working with sprites, sprite sheets, sprite atlases, transparent images, or AI-generated game assets who wants a visual desktop workflow for common sprite-production tasks.

The Studio currently combines three coordinated production tools:

  1. Sprite Splitter
  2. Background Remover
  3. Sprite Animator

The tools share the same working image so a sprite can be cleaned, detected, precisely cropped, animated, previewed, and exported without leaving the application.


Screenshots

The screenshots below show the current UZKHJ Sprite Studio workflow, beginning with Sprite Splitter, followed by Background Remover and Sprite Animator.

Sprite Splitter

Automatic sprite detection, visual selection, false/nested-detection cleanup, precise crop adjustment, naming, and export.

UZKHJ Sprite Studio - Sprite Splitter overview

UZKHJ Sprite Studio - Sprite Splitter detection and crop adjustment

UZKHJ Sprite Studio - Sprite Splitter precision workflow

Background Remover

Edge-connected background removal with configurable target color, tolerance, edge softness, zoom, reset, and full-resolution export.

UZKHJ Sprite Studio - Background Remover

UZKHJ Sprite Studio - Background Remover result

Sprite Animator

Procedural sprite animation with presets, parameter controls, live preview, full-resolution generation, playback, PNG-frame export, sprite-sheet export, and animation metadata.

UZKHJ Sprite Studio - Sprite Animator controls

UZKHJ Sprite Studio - Sprite Animator generated preview


Features

Sprite Splitter

  • Load PNG, JPG, JPEG, BMP, and WebP images
  • Detect individual non-transparent sprite regions automatically
  • Organize detected sprites into visual rows
  • Generate automatic row/sprite filenames
  • Display a live detected-sprite count
  • Select sprites from the preview or sprite list
  • Delete incorrect or nested detections
  • Automatically recalculate sprite order and names after deletion
  • Drag crop rectangles to reposition them
  • Drag crop edges/corners to resize them
  • Fine-tune Left, Right, Top, and Bottom crop edges by exactly 1 pixel
  • Enter exact X, Y, Width, and Height values
  • Optionally auto-apply exact geometry as values change
  • Rename selected sprites
  • Keep or remove dimension suffixes from filenames
  • Add transparent export padding
  • Zoom at fixed percentages
  • Fit the preview to the viewport
  • Use Ctrl + mouse wheel, precision touchpad input, and supported native pinch gestures for preview zoom
  • Export detected sprites as lossless RGBA PNG files inside a ZIP archive
  • Send a selected full-resolution crop directly to Sprite Animator

Automatic Sprite Naming

Detected sprites are named according to their visual row and position.

Example:

row1sprite1_152x140.png
row1sprite2_256x256.png
row2sprite1_180x180.png
row2sprite2_128x128.png

If a sprite is renamed to:

player_idle

with Keep dimensions enabled:

player_idle_152x140.png

With dimensions disabled:

player_idle.png

Crop dimensions are recalculated after manual geometry changes.


Manual Crop Adjustment

Automatic detection provides the starting crop regions.

You can then:

  • Select a crop directly in the preview
  • Drag the entire crop rectangle
  • Drag an edge or corner
  • Fine-tune one edge at a time by 1 pixel
  • Enter exact crop geometry
  • Delete false or nested detections

Fine Tune Crop

Each side has and + controls.

Edge +
Left Moves left edge outward 1 px Moves left edge inward 1 px
Right Moves right edge outward 1 px Moves right edge inward 1 px
Top Moves top edge outward 1 px Moves top edge inward 1 px
Bottom Moves bottom edge outward 1 px Moves bottom edge inward 1 px

Exact Geometry

The selected crop exposes:

X
Y
Width
Height

With Auto crop on value change enabled, edits apply immediately.

With it disabled, edit the values and press Apply Crop.

Important: Running Detect Sprites again performs a new automatic-detection pass and replaces current manual detection/crop adjustments.


Detected Sprite Count

The Sprite Splitter displays a live count such as:

Detected Sprites: 36

The value updates as detections are created, removed, or recalculated.


Background Remover

The Background Remover uses an edge-connected flood-fill workflow. It begins at the outer image border and removes matching background-like pixels connected to the exterior instead of globally deleting every similar-colored pixel.

Background Target

Available target modes:

  • Auto Corner Color
  • White
  • Black
  • Custom

Auto Corner Color samples the four corners and estimates the exterior background color.

Custom opens the system color picker.

Color Tolerance

Controls how different a pixel may be from the target color while still being treated as background-like.

Lower values are more conservative.

Higher values allow a wider range of similar colors.

Edge Softness

Controls the alpha transition near the removal threshold.

Lower values produce harder edges.

Higher values create softer transitions.

Reset Settings

Restores:

Color tolerance: 30
Edge softness:   20

Reset Background

The original loaded image is kept separately from the editable working image.

Reset Background restores:

working_image = original_image

Background Remover Zoom

The preview supports:

  • 25%
  • 50%
  • 100%
  • 200%
  • 400%
  • Fit
  • Ctrl + mouse wheel
  • Precision touchpad zoom
  • Native pinch gestures when exposed by Qt/OS

Zoom affects only the display proxy. The actual working image remains full-resolution.

Background Remover Export

The processed image can be exported directly.

Save PNG

Exports the current full-resolution working image as RGBA PNG and preserves transparency.

Save As...

Supports:

  • PNG
  • WebP
  • JPEG
  • BMP

PNG and WebP can preserve transparency.

JPEG does not support transparency, so Sprite Studio warns before flattening transparent pixels onto white.

BMP is also flattened onto white for predictable compatibility.

The original source image is never overwritten automatically.


Sprite Animator

Sprite Animator creates procedural frame animation from either:

  • the complete current Working Image, or
  • the exact currently selected Sprite Splitter crop

The Animator owns a full-resolution source copy for production generation.

Reduced preview frames are kept separate from the production timeline.

Animation Presets

Current presets:

  1. Idle Float
  2. Pulse
  3. Bounce
  4. Wobble
  5. Shake
  6. Spin
  7. Rock
  8. Pop In
  9. Pop Out
  10. Fade In
  11. Fade Out
  12. Squash & Stretch
  13. Damage Hit
  14. Spawn
  15. Despawn
  16. Selection
  17. Success
  18. Charge
  19. Jump
  20. Drop
  21. Jelly

Each preset exposes relevant controls such as travel distance, rotation, squash/stretch strength, scale, cycles, recoil, vibration, jump height, landing squash, and other motion parameters.

Animator Core Settings

Frames

Sets the exact number of full-resolution production frames.

Current range:

2–120 frames

Duration

Sets total animation playback duration.

Playback FPS

Calculated automatically:

FPS = Frames ÷ Duration

Examples:

Frames Duration FPS
12 0.5 sec 24 FPS
24 1.0 sec 24 FPS
60 1.0 sec 60 FPS

Easing

Available easing modes:

  • Linear
  • Ease In
  • Ease Out
  • Ease In Out

Loop Playback

Controls whether Preview Generated loops after the final production frame.

Automatic Frame Canvas

Adds transparent canvas space around transformations to reduce clipping during motion such as spins, jumps, bounce, wobble, and jelly deformation.


Live Animation Preview

With Live Regenerate Preview enabled, parameter changes can generate a lightweight preview automatically.

For responsiveness, live preview may:

  • downscale a temporary source copy
  • generate no more than 6 temporary preview frames

These temporary frames are not the production animation and are never exported.


Full-Resolution Animation Generation

Press Generate Animation to create the requested production sequence.

Production rendering:

  • uses the Animator's full-resolution source image
  • runs with Qt background workers
  • reports frame-by-frame progress
  • keeps expensive Pillow rendering off the Qt UI thread
  • supports cooperative cancellation
  • preserves the previous completed timeline when a later generation is cancelled

Generation progress is displayed as completed frames, total frames, percentage, and a progress bar.

Example:

Generating 8 / 12 frames (67%)

Preview Generated Animation

After production generation completes:

  • Preview Generated plays the completed full-resolution sequence
  • Stop Preview stops playback
  • the current frame number is displayed
  • Loop Playback controls whether playback repeats

Animation Export

Animation export always uses the completed full-resolution production frames.

Reduced Live Preview frames are never exported.

Export PNG Frames

Exports every production frame as an individual lossless RGBA PNG.

Example:

robot_jump_001.png
robot_jump_002.png
robot_jump_003.png

Frame numbering automatically uses enough digits for the generated sequence.

Export Sprite Sheet

Packs all production frames into one transparent PNG.

Available layouts:

  • Horizontal
  • Vertical
  • Grid

All generated frames use a consistent frame canvas, making the resulting sheet suitable for standard sprite-sheet workflows.

Animation Metadata

When Export Animation Metadata (.json) is enabled, Sprite Studio writes a companion JSON file.

Metadata includes:

  • source name
  • preset key and name
  • frame count
  • duration
  • calculated FPS
  • loop setting
  • frame width
  • frame height
  • easing
  • preset parameters

Sprite-sheet metadata additionally includes:

  • sheet layout
  • columns
  • rows
  • sheet width
  • sheet height
  • Godot hframes
  • Godot vframes
  • animation FPS

Shared Image Architecture

UZKHJ Sprite Studio deliberately keeps two main Pillow images:

original_image

The untouched source loaded from disk.

working_image

The editable image shared by the Studio tools.

Load Image
    ↓
original_image
    ↓ copy
working_image
    ↓
Background Remover
    ↓
Sprite Splitter
    ↓
Sprite Animator

Background removal modifies only the working image.

Reset Background restores the working image from the original.

Sprite detection and crops operate on the working image.

The Animator can use the entire working image or one selected crop.


Resolution Behavior

The following use full-resolution image data:

  • background processing
  • sprite detection
  • crop coordinates
  • Sprite Splitter exports
  • selected-sprite Animator handoff
  • full animation generation
  • PNG-frame animation export
  • sprite-sheet animation export

On-screen previews may use reduced display proxies for responsiveness.

Preview scaling does not reduce production export quality.


Working Image Location

The loaded file path is displayed near the top of the application and is selectable in the interface.


Appearance

UZKHJ Sprite Studio supports:

  • Normal Appearance
  • Dark Appearance

The selected appearance and application window size are persisted using Qt QSettings.


Built-In How To Guides

The How To menu contains integrated Markdown-based documentation for:

  • Studio Overview
  • Sprite Splitter
  • Background Remover
  • Sprite Animator
  • Naming & Export
  • Keyboard Shortcuts

The guide viewer supports Normal and Dark appearance.


Keyboard Shortcuts

Shortcut Action
Ctrl+O Load Image
Ctrl+D Detect Sprites
Delete Delete Selected Sprite Region
Ctrl+Shift+A Animate Selected Sprite
Platform standard Quit shortcut Exit UZKHJ Sprite Studio

Typical Workflows

Sprite Atlas Workflow

Load Image
    ↓
Background Remover (optional)
    ↓
Remove Background
    ↓
Sprite Splitter
    ↓
Detect Sprites
    ↓
Review / Delete False Detections
    ↓
Fine Tune / Exact Geometry
    ↓
Rename if desired
    ↓
Export ZIP

Sprite Animation Workflow

Load Image
    ↓
Background Remover (optional)
    ↓
Sprite Splitter (optional)
    ↓
Select Sprite
    ↓
Animate Selected
    ↓
Choose Preset
    ↓
Configure Frames / Duration / Parameters
    ↓
Generate Animation
    ↓
Preview Generated
    ↓
Export PNG Frames or Sprite Sheet

A standalone sprite can also be animated directly using Use Working Image without running Sprite Splitter first.


Supported Platforms

UZKHJ Sprite Studio is intended for:

  • Windows
  • macOS
  • Linux

Prebuilt packages are distributed through the repository's Releases section.

Users of packaged versions do not need to install Python, PySide6, Pillow, Python-Markdown, PyInstaller, VS Code, or another development environment.


Windows

Download the Windows package from Releases, extract it, and launch:

UZKHJ Sprite Studio.exe

Windows may display a security warning for unsigned applications downloaded from the internet.


macOS

Download the macOS package from Releases, extract it, and open:

UZKHJ Sprite Studio.app

If the application is not code-signed/notarized, macOS may display a Gatekeeper warning.


Linux

Download the Linux package from Releases and extract it.

If required:

chmod +x "UZKHJ Sprite Studio"

Then:

./"UZKHJ Sprite Studio"

Linux behavior may vary by distribution and desktop environment.


Public Distribution

UZKHJ Sprite Studio is distributed publicly as compiled application releases.

The application source code is maintained privately and is not distributed through the public repository.

The public repository is intended for:

  • product documentation
  • LICENSE.md
  • screenshots and branding
  • issue reporting and feedback
  • official Windows, macOS, and Linux releases

Users of official packaged releases do not need Python or the development dependencies installed.

License notice: UZKHJ Sprite Studio is proprietary, closed-source software. Access to an official compiled release does not grant permission to modify, redistribute, repackage, resell, host, or create derivative versions of the Software. See LICENSE.md.

Development and Builds

Development source code, build configuration, and internal development files are maintained privately.

Official Windows, macOS, and Linux packages are built by UZKHJ and published through the public repository's Releases section.

The public repository does not contain the application's Python source code or private build configuration.

Public Repository Structure

UZKHJ-Sprite-Studio/
│
├── README.md
├── LICENSE.md
│
├── logo/
│   └── UZKHJ_Sprite_Studio_Logo.png
│
└── Screenshots/
    ├── spritesplitter1.jpg
    ├── spritesplitter2.jpg
    ├── spritesplitter3.jpg
    ├── bgremover1.jpg
    ├── bgremover2.jpg
    ├── animator1.jpg
    └── animator2.jpg

Compiled applications are distributed through GitHub Releases rather than committed to the public repository.

Technologies

UZKHJ Sprite Studio is built using technologies including:

  • Python
  • PySide6 / Qt
  • Pillow
  • Python-Markdown
  • PyInstaller
  • GitHub Actions

The current image-processing and animation workflows operate locally and do not require an external processing server.

Performance Guidance

Animation frame count is a major generation-cost multiplier.

For typical sprites, a useful starting point is around 12--24 FPS.

If production generation is too expensive:

  1. Cancel generation.
  2. Reduce Frames.
  3. Keep Duration unchanged if you want the same animation length.
  4. Generate again.

Live Preview is intentionally lighter than full production generation.


Releases

Compiled releases are available from the project's GitHub Releases page.

Repository:

https://github.com/UZKHJ/UZKHJ-Sprite-Studio

Developer GitHub:

https://github.com/UZKHJ


Issues and Feedback

If you encounter a bug or unexpected behavior, open an issue in the GitHub repository.

Useful information to include can vary by tool.

Sprite Splitter

  • source image dimensions
  • expected sprite count
  • alpha/background characteristics
  • detection settings
  • crop behavior

Background Remover

  • image dimensions
  • background type/color
  • tolerance
  • edge softness
  • selected target mode

Sprite Animator

  • source dimensions
  • preset
  • frame count
  • duration
  • easing
  • preset parameters
  • whether Automatic Frame Canvas was enabled
  • export layout if the issue is export-related

License

UZKHJ Sprite Studio uses a Custom Proprietary License.

The Software is proprietary, closed-source software. The public repository does not contain the application's private development source code.

Solo Developers and organizations with five (5) or fewer employees may commercially use eligible User Output subject to the complete license terms.

Attribution Requirement

If User Output produced with UZKHJ Sprite Studio is used in an application, game, website, asset pack, media project, or any other published or distributed work, attribution to the official repository is required.

The credit must identify UZKHJ Sprite Studio and include the full repository URL:

Created/processed with UZKHJ Sprite Studio
https://github.com/UZKHJ/UZKHJ-Sprite-Studio

Equivalent wording is permitted as long as UZKHJ Sprite Studio is named and the full repository URL is included.

The credit may be placed in a reasonable location such as an About screen, Credits screen, README, documentation, store listing, acknowledgements section, asset-pack description, or another location reasonably accessible to users or recipients.

See LICENSE.md for the complete terms.


Warranty

See LICENSE.md for the complete warranty disclaimer and limitation of liability.


© 2026 UZKHJ
https://github.com/UZKHJ