Pixly is an image editor built in Compose Multiplatform and Rust that works on Windows, Linux and Android devices
- Compose makes the GUI
- Rust via zune-image deals with image manipulation operations.
I've written on how the two apps work in my blog https://etemesi254.github.io/posts/Pixly-Image/
I wanted a simple lightroom alternative that works on Linux.
Watch the video of demo (Youtube)
output_c.mp4
Screen_recording_20240112_125918.mp4
- Load images in various formats - png, jpeg, ppm, jxl, bmp, qoi, pfm.
- Save images in various formats- jpeg, png, webp, bmp, ico, gif.
- Choose quality of saved output.
- Tabbed-layout : Open multiple images at once.
- Multiple image editing options, rotate, transpose, change brightness, blur add sepia to image, level adjustment etc
- Undo history.
- Responsive layout - Choose what widgets you want to use, rearrange them at will
- Infinite zoom in and zoom out.
- Double paned editing that shows you original vs edited picture side by side
- Thumbnail generation.
- Directory navigator (Desktop)
- Light and dark theme options
- Retrieves image information including exif data and shows image histogram
- Pre-configured filters such as
sepia
andvivid
If you just want to install the apk in your device, there is a release containing an .apk
in the
release page which you can install to test
If you want to run on Android, you need to set up your environment, see instructions on how to do that.
After setting up, load this project into your IDE and choose to run on a mobile device or an emulator
!!!{TODO}
For compiling the Rust dynamic library, see instructions on README on how to do that.
You need to have an IDE capable of android Development, recommended and tested IDEs are Android-Studio and Intellij-Idea Ultimate.
You also need to have Android-SDK configured and Android-NDK configured if you are going to build the Rust binaries(see README on Rust on what to change)
-
Clone this repo
git clone https://github.com/etemesi254/Pixly
-
Load it in the IDE
-
Choose the device
-
Run
composeApp
on Android -
Wait
-
Profit
The main hurdle is getting the jvm/system loader to load the native library that contains the zune-image library bindings
We provide a compiled binding in the root directory, called libzune_jni_bindings
, here are the options
to load it
Here we move the compiled library to one of the directory the system loader looks into
cd
into the composeApp directory
cd ./composeApp
- copy the directory to a system directory
sudo cp ./libzune_jni_bindings.so /usr/lib/
- Then run
../gradlew desktopRun -DmainClass=MainKt --quiet
- We assume you are in the Pixly directory,
cd into the composeApp
directory
cd ./composeApp
Add the current directory into the LD_LIBRARY_PATH, the $PWD
shell will expand to the current directory
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
Then inside composeApp
directory, run
../gradlew desktopRun -DmainClass=MainKt --quiet
Assuming you are in the Pixly directory
- cd into
composeApp
directory
cd ./composeApp
- Run gradle desktop
../gradlew desktopRun -DmainClass=MainKt --quiet