Stvff's Image Splicer

Often, I want to or add an image to an image, crop an image to a very specific size in a specific way, or do something to an image that I consider trivial, but that most basic image editors don't provide in the way I would really like it to be.
MS Paint did a lot of things really well in my opinion, but it sometimes misses out on those few extra things, Krita is a nice fully-featured editor, but somewhat slow, and has a lot of options directly in your face, that aren't all very clear.

Why complain about vaguely defined things, when you have the power to try to make exactly the thing you want? In this case, I've never made a proper app/program with full graphical user interface, so maybe all these other developers are running into some fundamental UX/UI problem, that I just haven't realized.
So, for 2023's Wheel Reinvention Jam, I started making this image splicer/editor utility program.

Building

The only dependencies are Odin (and its core and vendor libraries) and git. To build SIS, first clone the repository:

$ git clone https://www.github.com/StevenClifford/sis

Then, in the directory that was created, run Odin like so:

$ odin build . -o:speed -no-bounds-check

This should have produced an executable called sis or sis.exe. If there is a problem, feel very free to open an issue here on Github.

Usage of the program, and current implemented features

The program only works on .qoi image files (I recommend ImageMagick for doing simple conversions), that you give to SIS via the command line:

$ sis image1.qoi image2.qoi image3.qoi #any amount of images

This opens those images, and puts the first image and the bottom, the second image above that, etc.
On the left, you'll see the layer bins. You can move layers by clicking the arrows on the bins. Clicking on the "position" button opens a position input window. This position is with respect to the topleft of the image on the first layer.
Clicking the "Save" button in the top left will create an image the size of the first layer, at the offset of the first layer. In other words, it uses the first layer as a sort of 'window', and draws all the images inside it in order. It writes the result to sis_result.qoi.

Currently, this is everything SIS does. It is still very limited (and unfinished) in many ways, but it is in the direction of where I want it to go.

Goals

  • images on top of images on top of an optional background
  • resize, rotate, translate(, maybe transform)
  • a good history for undo, and having good control over what 'edits' are done exactly
  • everything can be done fully with both mouse-only and keyboard-only
  • every setting must have the option of an editable value (as opposed to, for example, only a slider)
  • no million buttons overwhelming UI
  • support for at least png, jpg and qoi

After those, the following:

  • drawing functions
    • straight lines
    • curves (bezier, radius)
    • basic shapes (rectangle, circle, etc)
    • fill bucket
    • free-form selection
    • text
  • a port to android (this is not really a feature, but it is extremely desirable)

Everything might be incredibly rough around the corners, but I at least want something on the table for my own sake, and for others to look at.

I also hope to think of a better name at some point.

Recent Activity

Got the most minimal of minimal viable products, mostly a vague demo of a direction of an idea, but the final commit before the end of the jam has been done
You can move images around and save them 👍 &sis

Life happened for a little bit, but when I could, I've been chipping away at the method for inputting numbers I've been thinking about for a while (since before the jam)
It doesn't actually do anything with the inputted value yet, and it's quite rough around the edges, but I think it's pretty fun
Hoping I can get some stuff done on stuff like loading from and saving images to directories and stuff as well haha &sis

Some super basic layering of 'images', but more importantly, functional gui (immediate ui mode is surprisingly easy to program), which is a first for me &sis

Wanted to get this done yesterday (super simple text boxes), but luckily it was as easy as I imagined
Also hm the font is not epically great, but I'm gonna stick with it for at least the jam
&sis

&sis Got a simple bitmap font (I'm sorry) and a way to draw boxes
Window resizing still works well, but there's still some unwanted behaviour when the window goes below a certain size
This video is really low quality and frame/refreshrate because of the recording app I use, might have to look for something slightly better

Got my framebuffer set up to be dynamic, so that UI elements and such won't deform drastically on window resize &sis