Project Alumulemu - Yet another (Tinfoil-compatible) library manager

  • Thread starter Thread starter CappyIshihara
  • Start date Start date
  • Views Views 6,004
  • Replies Replies 16
  • Likes Likes 13

CappyIshihara

Member
Newcomer
Joined
Mar 12, 2025
Messages
13
Reaction score
25
Trophies
0
Age
21
Location
Bangkok, Thailand
XP
89
Country
Thailand
Me and my wife has been working on a Switch library manager because the current solutions I can find feel a bit sluggish to me, so I tried to make the fastest possible library manager -- in Rust.

This makes use of my previous library nx-archive to read title metadata, and generates a Tinfoil index with automatically-renamed files so Tinfoil (or any title manager that uses Tinfoil's index format, if another even exists right now) can simply just get proper title data.

Currently the features are:
  • Support for automatically reading XCI/XCZ, and NSP/NSZ files
  • Caching TitleDB, and efficient querying and indexing using SurrealDB
  • Full games overview
  • Querying TitleDB, and importing games via downloading through URLs and UltraNX's archive (Example implementation)
  • Extensible importer interface, so anyone can add their own title importers easily in a PR (Might add a WASM plugin thing later, but this is good enough for now)
  • RBAC access
  • Configuration through environment variables
  • Merging/proxying other Tinfoil indexes, allowing Alumulemu to essentially act as a proxy for that index

For anyone asking, checking for title updates is indeed planned. I'm just working on other things right now :P


More features will be considered, but right now this is what I can think of for my idea of an "ideal" title manager. I just wanted to announce it since I felt like it's functional enough at the moment.

1743105107059.png
1743105177088.png
1743105200467.png
1743105225694.png


The source code and documentation is here: https://github.com/RyouVC/alumulemu

P.S. Chinese Prefab woman is funny

P.S. P.S. I'm considering starting a Discord server or a Matrix channel for coordinating development for this, but I don't want it to be full of support questions, kinda need ideas
 
Last edited by CappyIshihara,
This renames files? What does it do when a game is not recognizable from any databases? For instance, custom games and hacks made into an .nsp... like a collection of Sega Saturn games I have that use ZebraEngine. Each game has its own .nsp, so it's not like a typical homebrew emulator with a "roms" folder.

Edit: or... the renaming is just how it's displayed on the list, and doesn't actually rename files?
 
This renames files? What does it do when a game is not recognizable from any databases? For instance, custom games and hacks made into an .nsp... like a collection of Sega Saturn games I have that use ZebraEngine. Each game has its own .nsp, so it's not like a typical homebrew emulator with a "roms" folder.

Edit: or... the renaming is just how it's displayed on the list, and doesn't actually rename files?

It doesn't actually rename files, just re-labels them.

Also custom metadata editing is planned for later, just not right now.
 
  • Like
Reactions: urherenow
Looks promising. But has a hell of a learning curve just to use it. Directions are pretty sparce for people who don't even know what "homebrew" is (I've used it... but at the moment don't even remember if I used it on Ubuntu or on MAC OS). Never even used docker. Is there a reason for being source-only?
 
I'm very interested in this project. I've been searching for something I can run in docker and install games through.
I'm looking forward to giving it a try.

I'm an intermediate docker user however one thing I'm confused on is if surrealdb is still required, as it's not mentioned the docker-compose.yml.example
 
Last edited by Thorhax,
I'm an intermediate docker user however one thing I'm confused on is if surrealdb is still required, as it's not mentioned the docker-compose.yml.example
Hosting a dedicated SurrealDB instance is optional but recommended. By default it uses the embedded SurrealKV backend.

So, no. But you should.
Post automatically merged:

Looks promising. But has a hell of a learning curve just to use it. Directions are pretty sparce for people who don't even know what "homebrew" is (I've used it... but at the moment don't even remember if I used it on Ubuntu or on MAC OS). Never even used docker. Is there a reason for being source-only?
It's not really source-only, The binaries are distrbuted on GHCR as Docker/OCI images. You're supposed to use them as Docker containers.

The intended workflow is
Install Linux > Install Docker > Run Docker container
 
  • Like
Reactions: Thorhax
Added a feature that lets alumulemu essentially act as a proxy for other Tinfoil indexes. That means you can use your current instance to mirror other Tinfoil shops' indexes.

Gonna make a new release sometime soon, but you can always pull from main
 
  • Like
Reactions: JonJaded
Funnily enough, might be a coincidence but I just added header authentication the other day and now today they're adding user agent checks. Do they know and they don't like Alumulemu Scrapers? I mean it doesn't hit the servers that hard so I'm kinda confused why they're actively restricting access to DBI and browser users
 
  • Like
Reactions: JonJaded
Hi,
thank you for your work! I was looking for a library manager, and your solution is really nice!
I deployed it in a Docker container and found a small issue: when the games folder contains more than one file for a specific title, with different extensions (e.g., NSP and XCI), an error occurs.

The main page shows multiple icons for the same title, but if I click on any of them, a page with the message "Failed to load game data" is displayed.

From doker logs:
ERROR ThreadId(03) title_meta: src/backend/api/metadata.rs:46: Database error when fetching title TITLEID: Tried to take only a single result from a query that contains multiple title_id_param="TITLEID"
 
Hi,
thank you for your work! I was looking for a library manager, and your solution is really nice!
I deployed it in a Docker container and found a small issue: when the games folder contains more than one file for a specific title, with different extensions (e.g., NSP and XCI), an error occurs.

The main page shows multiple icons for the same title, but if I click on any of them, a page with the message "Failed to load game data" is displayed.

From doker logs:
ERROR ThreadId(03) title_meta: src/backend/api/metadata.rs:46: Database error when fetching title TITLEID: Tried to take only a single result from a query that contains multiple title_id_param="TITLEID"
hi, this is something we didn't think to test for (and in hindsight we should've)
very interesting though, i'll take a look at it when i have some free time (been busy with stuff that isn't dev unfortunately)
 
This deserves more attention as there is really no good package repository manager available yet!
I hope the development continues and this can take over my ownfoil server for serving my personal tinfoil shop.
 
  • Like
Reactions: LudoTheGreat
I have compiled it for my raspberry pi4 and it's running right now. I want to setup a shop inside the manager, for example, UltraNX. How can I add it? I miss an admin panel to configure the manager (language, users, keys, shops, directories, etc), but it is a nice work my friend.
If you continue with this project it would be great that you could add a torrents manager too.
 
I have compiled it for my raspberry pi4 and it's running right now. I want to setup a shop inside the manager, for example, UltraNX. How can I add it? I miss an admin panel to configure the manager (language, users, keys, shops, directories, etc), but it is a nice work my friend.
alumulemu should support UltraNX by default, just look up a game and there should be a download option to just download the thing from there. for other shops I added support to track extra Tinfoil indexes (unencrypted) at least in the development branch, you might wanna test that and tell me how it goes https://github.com/RyouVC/alumulemu/blob/3b52bb895f2e09106e85cba1c5b2f686a6787ae8/src/main.rs#L53. IIRC This should merge that index into the output index.


I wonder if anyone's figured out the private key for Tinfoil though... Would be incredibly funny to spoof DRM-encrypted Tinfoil shops like Ghost eShop and just mirror part of their repositories locally with alumulemu.

I'm always looking for contributors if anyone wants to implement file renaming and compression btw, I can't really do all of this alone
Post automatically merged:

I kind of wonder if I should start a Discord server for coordinating development of this and some other funny stuff, but I don't want it to be full of people asking for support, just people who can help me develop and document this
 
Last edited by CappyIshihara,
I wonder if anyone's figured out the private key for Tinfoil though... Would be incredibly funny to spoof DRM-encrypted Tinfoil shops like Ghost eShop and just mirror part of their repositories locally with alumulemu.
If you notice, Tinfoil's NUT contains open source files that you can learn from and most times you can contribute to your own request for tools.

Out of respect for this community, I have edited this post to reflect the original post but in a more constructive way.
 
Last edited by RioStride,

Site & Scene News

Popular threads in this forum