pixelvim
is a pixel editor inspired by the vim
text editor, with an
emphasis on keyboard interaction. It also aims to be feature-rich,
customizable, and extendable via user scripts.
Note. The editor is very much usable already, and there are data recovery à
la vim
in case of crashes. However, the project is still in alpha, and you
are encouraged to back up your works.
-
vi
-style remappable keyboard interaction and a command system5j
to move the selection 5 pixels down:map C-z :undo
mapsCtrl-z
to undo- Commands can be chained: you can map a single key to
:select/all THEN cut THEN :layer/new/above THEN paste
- Customizable via configuration file: put a
pixelvim.conf
in your.config/
directory, or load on-the-fly using:source new.conf
- Tab-completion and command history
- Insert mode to draw purely with keyboard (actually more useful than it sounds)
-
Advanced (and undo/redoable) pixel selection in
visual
mode, similar toaseprite
- Create custom brush shape from selection using
:set brush/shape=%
- Create custom brush shape from selection using
-
Useful tools for creating animations. Draw while the animation is playing!
- Either in "edit all" mode, so the changes apply to all frames;
- Or in "live" mode, where each frame tracks its own change. This is particularly useful for quickly creating particle effects (fire, sparks, snowfall, ...)
-
Rudimentary support for extensions via user scripts in lua
- Run lua scripts that perform shader-like transformations on your image. Some example scripts are available, including "wave function collapse".
:run script.lua
is a command so it can be mapped (or even chained) to a key
-
Misc
- Data recovery from swap file in case of crashes
- Read / write png, gif, and aseprite images
- Native Wayland support on Linux
x86_64
binaries for Linux, MacOS, and Windows are available on the releases
page.
To build it from source, first clone the repo
git clone https://github.com/bolphen/pixelvim
cd pixelvim
Then retrieve the submodules
git submodule update --init
Build and install to .cargo/bin
cargo install --path .
It's possible to disable lua extensions by using the --no-default-features
flag.
I built this mainly for personal use, and I still have several ideas that I
wish to implement. Some design are not finalized. Also, the code is quite messy
and at places held up with glue. So do note that future updates may break your
configuration file. For this reason, I recommend putting source config/pixelvim.conf
in your configuration file and add your custom ones after
it, instead of copying the whole file.
pixelvim
is built with the outstanding
miniquad
. The lua extension is
made possible via mlua
. Many inspirations
are taken from aseprite
and
rx
(this is not a fork of rx
).