Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/InventiveRhythm/fluXis/llms.txt

Use this file to discover all available pages before exploring further.

fluXis ships with three first-party map importers that let you bring your existing libraries from other rhythm games directly into fluXis without losing timing data or metadata. Each importer converts the source format’s notes, timing points, and metadata into the native .fsc + .ffx format and registers the result in the local map database. Imported maps are marked with a game-specific status code so the editor knows they originated externally and blocks saving or uploading to the fluXis online service.

How to Import

There are two ways to trigger an import regardless of which format you are using:
  1. Drag and drop — Drag the map archive or file onto the fluXis window from your file manager. fluXis detects the file extension and routes it to the correct importer automatically.
  2. File picker — Use the import dialog accessible from the main menu. Browse to the file and confirm.
A progress notification appears in the corner of the screen while the import runs. On completion it shows “Done! Click to view.” — clicking it navigates directly to the imported mapset in song select. If any individual difficulties fail to parse, the notification reports the count of failures alongside the number of successes.

Format Details

osu! Import

File extension: .osz
Source game: osu!mania
Importer class: OsuImport

What gets converted

Each .osu file inside the archive that belongs to the mania game mode is converted to a .fsc chart file. The importer extracts the following data:
osu! fieldfluXis equivalent
Title / TitleUnicodeMetadata.Title / Metadata.TitleRomanized
Artist / ArtistUnicodeMetadata.Artist / Metadata.ArtistRomanized
CreatorMetadata.Mapper
Version (difficulty name)RealmMap.Difficulty
SourceMetadata.Source
TagsMetadata.Tags
AudioFilenameMetadata.Audio
AudioLeadIn preview timeMetadata.PreviewTime
CircleSizeKeyCount
HPDrainRateHealthDifficulty
OverallDifficultyAccuracyDifficulty
TimingPoints (BPM/offset)TimingPoints
HitObjects (notes, holds)HitObjects
Background imageMetadata.Background
Storyboard data from the .osb file bundled in the archive is parsed by OsuStoryboardParser and written as a .fsb storyboard file alongside the charts.All non-.osu files in the archive (audio, images, videos) are copied verbatim into the converted mapset folder.

How it works internally

The .osz file is a standard ZIP archive. The importer opens it with ZipFile.OpenRead, iterates every entry, copies media files to a temporary directory, and queues each .osu entry for parsing. ParseOsuMap splits the file into sections ([General], [Metadata], [Difficulty], [Events], [TimingPoints], [HitObjects]) and delegates each section to OsuParser. The parsed OsuMap is converted to a MapInfo via ToMapInfo().

Auto-import from an osu! installation

If you have a local osu! installation, you can configure the osu! plugin with the path to your osu! folder. fluXis reads osu!.db directly using OsuDb.Read and lists all mania beatmaps for in-place playback without re-importing. Background images are fetched by parsing each .osu file individually (configurable via the “Skip Backgrounds” toggle to speed up library loading).

Limitations

  • Only osu!mania difficulties are converted. Standard, Taiko, and Catch difficulties are skipped.
  • osu! scroll velocity (SV) changes embedded in timing points are approximated but may not perfectly match osu!mania’s SV system.
  • Custom skin elements and storyboard sprites have no fluXis equivalent and are silently ignored.
  • Imported maps cannot be saved or uploaded; the editor opens them in read-only mode.

Conversion Pipeline

All three importers follow the same base pipeline defined in MapImporter:
1

Validate source file

The importer checks that the file exists. If not, the import is aborted silently.
2

Create notification

A task notification (e.g., “Importing osu!mania map…”) is added to the notification overlay so you can track progress.
3

Create a temporary working folder

A temp/{filename} directory is created in the fluXis storage root. If it already exists it is deleted first to prevent stale files from a previous failed import.
4

Parse and convert chart files

Each format-specific parser converts the source data into MapInfo objects and writes them as .fsc JSON files into the temp folder. Media files are copied as-is.
5

Package as .fms

The temp folder is zipped into a .fms file (fluXis Map Set), which is the standard distribution format for fluXis mapsets.
6

Finalize conversion

FinalizeConversion hands the .fms file off to FluXisImport, which unpacks it, registers all maps and assets in the Realm database, and triggers a song-select refresh.
7

Clean up

The temporary working folder is deleted.

Notes on Imported Maps

Read-only in the editor

All imported maps have a StatusInt equal to the importer’s internal ID, which is always ≥ 100. The editor’s canSave check rejects saves for any map with StatusInt ≥ 100, keeping your converted library safe from accidental modification.

Playable immediately

After a successful import, maps appear in song select under the original song title and can be played with all standard fluXis gameplay features — mods, score tracking, and replays.

No online ID

Imported maps are local-only. They cannot be submitted to the fluXis online ranking queue or uploaded to the map hosting service.

Re-import to update

If you update a map in the source game, re-drag the file onto fluXis to re-import it. The previous import is replaced in the database.

Build docs developers (and LLMs) love