If you are anything like me you will also have a download folder filled with hundreds of cat pictures, memes, gifs, and other images.
GDImageDB is meant to offer an easy way to collect, tag, and find your cat- (and other) pictures. It is completely offline and meant to be used with synchronization tools like syncthing, onedrive, dropbox, etc.
Big update: Full video support has finally arrived!
Thanks to the EIRTeam.FFmpeg extension I can now support most common video formats.
Video controls have been added to the media viewer.
Also, the sidebar for the grid views has also been reworked to be more user friendly. It now features mouse controls and displays the global tag list for easier selection.
This one is probably more interesting for my fellow godot devs than it is for the average user.
GDImageDB has a bit of a performance struggle to deal with, in the form of far too many control nodes. With my reference database (>7k pieces of media, >500 tags) loaded, I am surpassing 20000 control nodes at this point.
While this still handles fine in the code, it does impose some unfortunate loading times on the user.
To solve this I first went to move every major part of the ui into a seperate thread - easily done with the GD4 WorkerThreadPool. This drastically reduced the initial load time of the program.
Then I went to split shared ui scenes into their own seperate scenes to simply remove unnecessary (normally hidden) controls, which brought about a 30% reduction in control count.
However, there was still one more thing I wanted to change. My ui uses a lot of buttons. Buttons are really not great for performance, which is most likely owed to them rendering text.
I donāt really need text rendering though, just the symbols ā+ā and ā-ā.
Using panels instead of buttons and building shaders to draw those two symbols brought another 40% performance improvement for the button-having elements.
Panels really have the functionality you need to implement a simple button. Mouse enter/leave, as well as gui_input signals are already there. All you need to add are some graphics.
Time for a big one since I kinda forgot to update this thread^^
With the latest version there have been a lot of changes. Especially since my last update here.
The program now supports multiple databases in arbitrary locations, has better ffmpeg support and got massive performance improvements.
For my fellow godot devs:
I have pushed the control node system to its limits in the past, forcing more than 10k nodes to play nicely within a container and having as many as 20k control nodes active at once.
This was of course not a great solution to building a UI, but it worked for long enough to let me set up everything else.
With v11 I finally rewrote the entire UI handling. Now nodes are limited to the actually visible ones, with background data swaps and some offset magic math making it look like there are still 10k+ nodes around.
While working on a multi db implementation, I also discovered GDE GoZen. This is a better solution to implementing ffmpeg than my previous pick.
I have also started adding extra functionality with my own utility extension, written with the godot rust bindings. Despite Rusts rather complex nature, these bindings are easy to use and I managed to build something functional pretty quickly.
Good eveningā¦
It looks good, and worked immediately with no fuss or bother on my Windows11 PC. Imported a few hundred āPngā and āGifā files in no time flat, and displays them perfectly. Iāve thousands of images of all sorts to catalogue in one way or another; this looks to be a boon, so thanks for that. Iāll play around with it a bit more, and see how I get on with ātaggingā.
A couple of features come to mind immediately that would be very useful to me (and maybe others..?), such as being able to multi-select images to give them all a common ātagā, or having a short text field for a description, like the āIDā field, but allowing, say, 32 characters or similar..? I might be greedy and ask if a āDateā field could come in handy, too, but wouldnāt want to abuse..!
Iāll give it a bit of a work-out in the coming daze; meanwhile, many thanks for posting, andā¦