Banner image by @pikumin_jr

I recently switched off Manjaro to NixOS and at my biggest sadness, my usual Booru software imgbrd-grabber was not available. It's a cool software but I never really understood how it works and the interface wasn't that great to me.

That's why five weeks ago I decided to create my own Booru client. Firstly to challenge myself and secondly for fun. Far from perfection, it progresses peacefully in a good way. Let's get a tour!

What is a Booru?

Almost every time I spoke about my Booru client people were asking me what is a Booru, so there it is:

A Danbooru-style board is more commonly called a Booru. It's mostly dedicated to image posting and nothing else, generally not a discussion place.

To navigate through all the images and find what you want, you will use tags or similar mechanisms.

You can read the short Wikipedia section about Boorus.

What is Booboob?

It's an interface for Boorus. Well actually to say it's just an interface would not be fair, it's more like a tool that interfaces with Boorus.

I like to collect things and anime/Japanese pop-culture content is one of these. So far all tools I used have one to many of the following issues:

  • doesn't have a friendly interface;
  • too complex to understand or use;
  • tries to do too many things at once;
  • "just" downloads images.

There may be other issues but these are the most important to me and try to prevent these with Booboob.

I'm neither an UX/UI designer, a developer nor a specialist, I just craft things during my spare time for fun and have a few friends to crash test my experiments (big thanks to them for their patience with me).

About the technical stack I went easy. As a big Elixir fan I use the Phoenix framework (Web framework) with Bulma (CSS framework). Which means I didn't do a native application but a Web application.

Is it a problem? Absolutely not to my eyes. Actually it can run on a phone (a friend and I have tested that) with the same codebase (it takes ages (~5min) to compile but that's another topic).

Software responsibility and complexity

It's a topic that is often ignored or not understand. A software can do complex tasks but should not be complex. To quote Wikipedia:

  • Write programs that do one thing and do it well.
  • Write programs to work together.

I remembered about these two points when I was writing an internal engine to filter and view hoarded images and stopped almost immediately (you can see the branch in the git history). I was creating a complex software with more than one responsibility and it's must be: Preview and download images from Boorus.

After a little break to think I remembered about digiKam, an amazing tool to manage image/photo collections. A few tests later I find a way to import in digiKam metadata about an image (not only image, it also works for videos): an XMP sidecar file. Great news! It keeps complexity low and don't extend responsibility.

XMP sidecar files have many great pros, it's a broad standard (at least digiKam and Darktable use it), there are tools to manipulate that… XML format and most importantly, if you lose/corrupt your database you can import all the metadata easily.

Hoard but at what cost?

Did I already said that I like digital hoarding? Well actually it's more a curse but it's not that bad in itself.

The Booru usual workflow when you browse one with its web interface is to search for tags, either open each interesting images in a new tab or navigate with "prev/next" buttons. That workflow has two big flaws:

  1. constantly have to switch between mouse and keyboard
  2. multiple actions have to be done for a simple task (ex: download)
  3. no metadata is saved when an image is downloaded

You can try different methods to register, to name things or so but once you start to have a certain amount of hoarded things it just becomes a digital hell to manage… trust hoarders painful experiences.

That's why the "Hoard" button were quickly added to perform two tasks at once: download and save metadata. We covered metadata saving in previous chapter :-)

With a few other helpers (ex: "Already Hoarded" button) I try to smooth and prevent hoarding disasters, an untraceable file is a useless file and waste storage.

A friendly interface

To have a powerful tool but to not understand how it works because of its interface is something frustrating.

I took inspiration from the classic Booru view (all metadata in a single column at left, image at center) and made something that looks more modern from the UI and the UX.

Booboob in desktop view, with the dark theme and 2 posts visible

Bulma is a nice library made only with CSS, it's a bit like Bootstrap but lighter and based on CSS Flexbox (no JavaScript provided). It's really easy and fast to create a nice looking web page.

I also took advantage of Phoenix LiveView, a powerful library to create real time updated web pages without doing any JavaScript but only Elixir. When a live component is updated, only the updated component is sent rather than the whole web page. It saves bandwidth (not that important here because Booboob is run locally) and provides a responsive behavior.

No longer blinking page at each interaction and faster/instantaneous response. These are a few components to what I call a "friendly interface".

So what's next?

There are still many things to do! My TODO list is full of various tasks from bug fix (more like weird behavior) to new feature and enhancement.

It took me about five weeks to achieve the 0.2.0 release but it has all the core feature I wanted: to browse and download (with metadata support).

See you to next milestone!

Booboob sources can be found in the Git repository