Open Source · Python · PyQt6

Image editing,
built for game devs

Non-destructive layers, 9 blend modes, full undo history, and a plugin API that lets you drop .py files to extend everything — tools, filters, actions. Export per-layer PNGs with a manifest.json ready for your engine.

$ pip install -r requirements.txt && python main.py
0 Bundled plugins
0 Blend modes
3.9+ Python required
background.png
shadows Multiply
highlights Screen
LAYERS
highlights
shadows
background
OPACITY
80%
BLEND MODE
Screen ▾
PyQt6 Pillow NumPy Non-destructive 9 Blend Modes Plugin API manifest.json Sandboxed MIT License Open Source
PyQt6 Pillow NumPy Non-destructive 9 Blend Modes Plugin API manifest.json Sandboxed MIT License Open Source

// Core Features

Everything you need.
Nothing you don't.

Designed for game asset pipelines from the ground up — Layered gives you the tools pros expect without the bloat.

🗂

Non-Destructive Layers

Per-layer opacity, visibility toggles, and reordering. Original pixel data is never destroyed — every operation is fully reversible. Reorder, rename, duplicate, and group with ease.

Full Undo History

Every brush stroke, filter, and layer operation is tracked and browsable in the side panel. Jump to any prior state instantly — not just one step back.

📦

Game-Ready Export

Export a flattened composite or every layer as its own PNG with a manifest.json carrying offsets, blend modes, and visibility — drop straight into any engine.

🔌

Plugin API

Drop a .py file into Plugins/ to add tools, filters, or menu actions. Plugins run sandboxed — crashes get logged and isolated, the editor stays alive.

🎨

Drawing Toolkit

Brush, eraser, fill bucket, line, rectangle, ellipse, color picker, and text — paint assets from scratch or retouch imports with a full suite of familiar tools.

🖥

Multi-Project Tabs

Work on several files simultaneously in tabbed projects. Each project carries its full layer stack, history, and settings independently.

9 blend modes.
Powered by NumPy.

All blend modes operate on premultiplied RGBA arrays via NumPy in app/blending.py — fast, composable, and inspectable.

Normal Standard alpha
Multiply Shadows
Screen Glows
Overlay Contrast boost
Darken Keep darker
Lighten Keep lighter
Add Linear dodge
Subtract Dark subtraction
Difference Highlight diffs

17 plugins,
drop-in ready.

Layered ships with a full library of production-ready filters and actions. Use them as-is or read the source as a template.

  • 🌑 Grayscale / Invert / Posterize Filter
  • Glow, Drop Shadow, Outline Filter
  • 🗺 Normal Map Generator Filter
  • 🪄 Background Remove / Tile Fix Filter
  • 🖼 Pixel Art Resize (nearest-neighbor) Filter
  • ✂️ Crop Tool / Flip Horizontal & Vertical Action
  • Grid Overlay Toggle Action

Extend everything
with a single file.

Drop a .py file in Plugins/ and subclass Plugin. Declare typed settings and the host auto-builds a dialog. Plugins run in isolation — one crash can't take down the editor.

🔧

Tools

Add a new toolbox button via ctx.register_tool()

🎛

Filters

Appear in the Filters menu via ctx.register_filter()

Actions

Live in the Plugins menu via ctx.register_action()

Plugins/grayscale.py Plugin API docs ↗

Shipping fast.

Latest changes pulled live from GitHub.

Up and running
in 60 seconds.

No config files, no account — just clone, install, and run.

01

Clone the repo

git clone https://github.com/NightHawkHSI/Layered.git
or grab the prebuilt Windows EXE from Releases.

02

Install dependencies

Requires Python 3.9+ and pip install -r requirements.txt.
Needs PyQt6, Pillow & NumPy.

03

Launch & create

Run python main.py and start building. Drop plugins into Plugins/ anytime.

Requires Python 3.9+ · PyQt6 ≥ 6.6 · Pillow ≥ 10.0 · NumPy ≥ 1.26

L
New version available Click to view