OS Apps: JSPaint, Shiori, SnapOtter

fun stuff

Posted by Isaac on Tuesday, September 22, 2026

You know you secretly liked MS Paint. So did I and now there is a solid fast platform independent Open Source alternative called JSPaint. We’ll look into using it to make some diagrams and see if it can fit our needs.

I also wanted to check out, or rather circle back to, Shiori. It’s a bookmark tool but also it can download web pages and save them locally. It has a “create a book” feature I want to explore.

Lastly, I had on my list “SnapOtter”, which is one of the largest massive utility tools I’ve seen thus far. We’ll just scratch the surface on some of what that can do.

First, we’ll start with Paint

JSPaint

There is a Releases page with a debian package so I downloaded that and installed manually

$ sudo dpkg -i ~/Downloads/jspaint-1.1.0-Linux-x64.deb
[sudo: authenticate] Password:
Selecting previously unselected package jspaint.
(Reading database… 299539 files and directories currently installed.)
Preparing to unpack …/jspaint-1.1.0-Linux-x64.deb…
Unpacking jspaint (1.1.0)…
Setting up jspaint (1.1.0)…
Processing triggers for gnome-menus (3.38.1-1ubuntu1)…
Processing triggers for desktop-file-utils (0.28-1build1)…

I can now fire up JSPaint from the apps pane

/img/2026-09-jspaint-01.png

On my screen, it doesn’t scale quite right so it’s very tiny

/img/2026-09-jspaint-02.png

That said, there is a deployed instance at jspaint.app we can use

/img/2026-09-jspaint-03.png

It works just like the old MS Paint

And I can save it out as a PNG quite easily

/img/2026-09-jspaint-04.png

If you want to know why i like Paint, it’s because it has always been the most straightforward lowest-commmon-denominator tool for making diagrams.

It has been the poor man’s whiteboard in IT for many many years now.

Let’s see how easy I can just make a simple diagram using it

Shiori

A few years ago I looked at Shiori and a few other apps.

I came back across it doing some cluster maintenance when I realized it’s cert was bad and I had never fixed it

$ kubectl get ingress | grep -i shio
shiorigcpingress                    <none>   shiori.steeped.space                                            80, 443   2y20d
$ kubectl get cert -A | grep -i false | grep -i shi
default                 shiorigcp-tls                                  False   shiorigcp-tls                                  2y20d

Let’s fix the cert first. If you look at that blog article, you’ll not I just used an ingress object in K8s - no helm chart.

(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl get ingress shiorigcpingress -o yaml > shiorigcpingress.ingress.yaml
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl get ingress shiorigcpingress -o yaml > shiorigcpingress.ingress.yaml.bak
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ vi shiorigcpingress.ingress.yaml
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ diff shiorigcpingress.ingress.yaml.bak shiorigcpingress.ingress.yaml
5c5
<     cert-manager.io/cluster-issuer: gcpleprod2
---
>     cert-manager.io/cluster-issuer: gcp-freshbrewedprod
27c27
<   - host: shiori.steeped.space
---
>   - host: shiori.steeped.icu
39c39
<     - shiori.steeped.space
---
>     - shiori.steeped.icu

Now I’ll just rotate the ingress

(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl delete ingress shiorigcpingress
ingress.networking.k8s.io "shiorigcpingress" deleted from default namespace
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl delete cert shiorigcp-tls
Error from server (NotFound): certificates.cert-manager.io "shiorigcp-tls" not found
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl apply -f ./shiorigcpingress.ingress.yaml
Warning: annotation "kubernetes.io/ingress.class" is deprecated, please use 'spec.ingressClassName' instead
ingress.networking.k8s.io/shiorigcpingress created
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl get cert | grep shio
shiorigcp-tls                       False   shiorigcp-tls                       6s
(venv) isaac@isaac-G707:~/Workspaces/osn2026mcpdemo$ kubectl get cert | grep shio
shiorigcp-tls                       True    shiorigcp-tls                       86s

I see the ingress

$ kubectl get ingress | grep shio
shiorigcpingress                    <none>   shiori.steeped.icu                                              80, 443   3m23s

I can now login

/img/2026-09-shiori-01.png

I’ll try and make a bookmark from a LI post

/img/2026-09-shiori-02.png

I can now view the article as cached

/img/2026-09-shiori-03.png

I can download the ePub

/img/2026-09-shiori-04.png

I found the ePub, at least for this article didn’t work. On chrome it came down as a zip and the apps I found on F-droid didn’t seem to want to open them.

/img/2026-09-shiori-05.png

I could read it on the page just fine, albeit vertical scrolling

/img/2026-09-shiori-06.png

However, on my desktop it downloaded as an epub (or a zip with epub). I transferred that over and then the ereaders worked great.

Here it is with my phone unfolded:

/img/2026-09-shiori-07.png

(Credit to Joe Baker’s good article I found on the WS Engineering blog)

SnapOtter

A while back I bookmarked this Marius post on SnapOtter which covered an interesting photo manipulation tool, SnapOtter

Let’s start with the docker container to see what it can do.

$ docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest
2d808c5496a0997149f4ba4bfa76f33998766de57e110c489c8b54ac62ddf2e2

the default login/pass is admin/admin

/img/2026-09-snapotter-01.png

But you need to immediately change it

/img/2026-09-snapotter-02.png

We now have a whole lot of tools at our disposal in the app

/img/2026-09-snapotter-03.png

Such as a handy QR code generator

/img/2026-09-snapotter-04.png

My first use was actually to create a QR code for guests to use my wifi

/img/2026-09-snapotter-05.png

If you want to use any “AI” features, then a model has to come down.

/img/2026-09-snapotter-06.png

I tried the erase feature and removing an object in a screenshot

/img/2026-09-snapotter-07.png

I would argue it did an excellent job

I then tried a harder image and it did not work as well

I decided to try the HQ object eraser

/img/2026-09-snapotter-10.png

I erased the people blocking the view

/img/2026-09-snapotter-11.png

That did a much better job

There are a lot of video and audio tools as well

/img/2026-09-snapotter-13.png

I kept looking and there were more tools like PDF and file based utilities

/img/2026-09-snapotter-14.png

There is a CSV to Chart offering that seemed interesting.

I asked Agy to create a cost breakdown for serverless functions into a CSV file

/img/2026-09-snapotter-15.png

I got some results

/img/2026-09-snapotter-16.png

I had to pair them down, and then the result was rather basic

/img/2026-09-snapotter-17.png

I had another tool that seemed interesting and it was an epub converter.

My earliest eReaders were nooks and i used ePubs for all of them.

My first go didn’t work

/img/2026-09-snapotter-18.png

I had similar issues with another book.

I then tried DOCX, that seemed more promising

/img/2026-09-snapotter-19.png

I was about to then print to PDF from LibreOffice when I realized who that author was.. So i tried a different

While PDF failed, DOCX was fine

/img/2026-09-snapotter-20.png

There are so many fantastic tools here, this seems like a no-brainer app.

Summary

Today we looked at a few interesting apps: JSPaint, Shiori, and SnapOtter. I actually like all three, however I have found myself now daily driving JSPaint more than the others. It is just so handy to fire up and just create a quick diagram - I think it’s the speed of the tool that makes it so useful.

I had use some others before like Whiteboard which is still live.

I actually started to poke around and was amazed at all the stuff folks were using that for

/img/2026-09-snapotter-21.png

Lots of math stuff - which is great - glad it could help folks

/img/2026-09-snapotter-22.png

/img/2026-09-snapotter-23.png

But I digress - the tools like JSPaint and SnapOtter are great and I’ll have to keep trying Shiori to see if I like it.