This work started with a number we could no longer ignore.

One of our older benchmarks recorded 3,902 songs taking 791.658415 seconds to load. That is more than thirteen minutes.

Our current test library is slightly smaller at 3,722 songs, but early measurements were still showing a startup time of 677.246704 seconds.

Clearly, this was not a case of shaving a little time off the loading screen.

OutFox has to support libraries built up over many years. That can include several chart formats, converted packs, edits, autogen content, courses, keysounds, banners, jackets, videos and folders that do not always follow the structure the engine expects.

The loader has gradually learned how to deal with all of that.

When it finds a song folder, it may need to identify the format, choose a parser, check existing cache data, locate media, rebuild missing information and apply compatibility rules carried forward from older versions of StepMania.

A lot of that work is necessary.

Some of it was also being repeated.

StillRiver allowed us to separate the different parts of startup and see where the time was actually going. Storage speed was only part of the picture. Parsing, cache handling, media checks, file probing and repeated data conversion were all contributing to the delay.

That gave us something more useful than a single startup time.

We could see which parts of the loader were doing real compatibility work, which were acting as old safety checks, and which were repeating work that had already been completed elsewhere.

We are not replacing the entire loader in one sweep.

There is too much unusual and historical content depending on it, and a faster loader is not useful if songs disappear, charts change or theme-visible information comes back differently.

Instead, we are measuring each stage and removing unnecessary work while checking that the same library still produces the same usable result.

The goal is straightforward: large collections should not take several minutes to become playable simply because the engine is checking the same information more than once.

This is still ongoing work, but we now have a clear baseline and a much better view of where that startup time is being spent.

That gives us somewhere useful to begin.