dsh-aseprite
Unofficial Aseprite-compatible pixel editor and sprite animation plugin for DeepSeek Harness.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 19, 2026
- Updated
- Aug 19, 2026
Introduction
dsh-aseprite
A pixel-art and sprite-animation editor plugin for DeepSeek Harness. It is compatible with Aseprite project files and requires no Aseprite installation.
- 🎨 Adds a 🎨 button to the conversation header; click it to open or close the editor dock above the message input.
- ✏️ Tools: pencil, eraser, bucket fill, picker, line, and rectangle, with undo, redo, wheel zoom, grid, onion skinning, adjustable brush/eraser size, and draggable panel splitters.
- 🧅 Layers: create, delete, reorder, and toggle visibility.
- 🎞️ Animation frames: add, duplicate, delete, set frame duration (ms), and preview playback.
- 🎨 Palettes: built-in DB16 and PICO-8-style 16-color palettes, custom colors, extra palettes, and color picking.
- 💾 Reads and writes .aseprite project files in pure JavaScript, with no Aseprite installation required; supports RGBA, grayscale, indexed-color reading, compressed cel decoding, current-frame PNG export, and sprite-sheet PNG export.
Demo

Canvas close-up:

The transparent canvas uses a standard square checkerboard:

How it works
- Host (
lib/index.js): a minimal loader entry that exposes thedsh.clientdeclaration; the editor runs entirely in the browser. - Client (
client/client.js): follows thewindow.__ModuleLoader__.load({ id, factory })contract and registers the header button and dock throughctx.slotsatconversation.session.header.actionsandconversation.input.dock. - Codec (
src/ase-codec.js): implements the Aseprite file format specification, writing 32bpp RGBA, raw cels, and modern palette chunks that Aseprite can open directly.
Project structure
dsh-aseprite/
├── package.json # dsh.bundle.patch + dsh.client declarations
├── README.md # English documentation
├── README.zh-CN.md # Chinese documentation
├── LICENSE
├── assets/ # GitHub demo images
├── cordis.patch.yml # loader row: - id: aseprite, name: 'dsh-aseprite'
├── lib/index.js # minimal host entry
├── client/client.js # browser bundle (generated)
├── src/ase-codec.js # ASE binary codec
├── src/editor.js # document model, drawing, layers, frames, and export
├── src/client.js # React UI + apply()
└── scripts/build.mjs # zero-dependency build script
Development / build
node scripts/build.mjs # regenerate client/client.js
Install locally
Install with dsh plugin --profile web add. To reinstall manually:
# Replace these placeholders with your local paths; omit --store-dir if it is not needed
dsh plugin --profile web add --store-dir "<your-pnpm-store>" "file:<path-to-dsh-aseprite>"
Restart DeepSeek Harness after installation, then refresh the page. The 🎨 button in the conversation header confirms that the plugin is loaded.
Uninstall
dsh plugin --profile web remove dsh-aseprite
If present, also remove the handwritten aseprite entry from the profile cordis.patch.yml, then restart the application.