#galaxy #python #extensible #python-bindings #node #multimedia

galaxy-rs

Rust bindings for Galaxy, the extensible, node-based multimedia database written in Python

3 releases

0.1.2 Jul 19, 2023
0.1.1 Jul 19, 2023
0.1.0 Jul 19, 2023

#1587 in Database interfaces

50 downloads per month

LGPL-2.0-or-later

23KB
273 lines

Galaxy

Galaxy is a node-based, extensible, multimedia database system written in Python. This crate contains bindings for it to Rust, a highly performant and expressive language. See the main repo here.

Why?

Galaxy provides a way to store data that is unhindered by existing limitations, like folders. As a library, Galaxy aims to provide a method of data storage that is analogous to the human brain, and automatically search for and find connections between nodes that contain similar data or discuss similar topics, enabling fast and easy file management, and providing easy and accurate searches later on. The greatest selling point of Galaxy, however, is its extensibility. To add support for another data type in Galaxy is as simple as writing a subclass of the NodeInterface and IngestManagerInterfaces provided by Galaxy, and then putting your code inside of a modules folder.

Hey, this sounds kinda like Obsidian!

If you see parallels between the data storage paradigm of Galaxy and Obsidian, you would be correct. However, Galaxy aims to be more extensible than Obsidian is, as well as more well-adapted to maintaining realtime databases managed by code instead of a person. Ultimately, the goals of Galaxy and Obsidian are similar: to assist people with a second mind to store data. However, unlike Obsidian, Galaxy lets you put whatever human interface in front of it that you like.

Why does this crate use Python? Isn't Rust supposed to be fast? Doesn't that defeat the point?

This is a good point. However, modules are written in Python to preserve the easy extensibility of the database so that it can support as many different filetypes as possible.

If performance eventually proves to be an object, I will rewrite much of this library as an external Rust library invoked by Python, to improve performance. However, at the moment, I find the current state to be acceptable.

Dependencies

~2.2–7.5MB
~50K SLoC