{"id":37557120,"url":"https://github.com/mrflashstudio/osuparsers","last_synced_at":"2026-01-16T09:01:02.139Z","repository":{"id":45011283,"uuid":"134453436","full_name":"mrflashstudio/OsuParsers","owner":"mrflashstudio","description":"Library for parsing/writing files associated with osu!","archived":false,"fork":false,"pushed_at":"2025-01-11T12:06:40.000Z","size":388,"stargazers_count":81,"open_issues_count":9,"forks_count":19,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-11-27T14:29:42.887Z","etag":null,"topics":["beatmap","database","osu","osugame","parser","replay","storyboard"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrflashstudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-05-22T17:46:26.000Z","updated_at":"2025-11-24T12:51:05.000Z","dependencies_parsed_at":"2024-04-08T03:18:32.350Z","dependency_job_id":"69481817-4870-47db-bdca-3cdf9486b093","html_url":"https://github.com/mrflashstudio/OsuParsers","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/mrflashstudio/OsuParsers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrflashstudio%2FOsuParsers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrflashstudio%2FOsuParsers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrflashstudio%2FOsuParsers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrflashstudio%2FOsuParsers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrflashstudio","download_url":"https://codeload.github.com/mrflashstudio/OsuParsers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrflashstudio%2FOsuParsers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beatmap","database","osu","osugame","parser","replay","storyboard"],"created_at":"2026-01-16T09:00:52.070Z","updated_at":"2026-01-16T09:01:02.057Z","avatar_url":"https://github.com/mrflashstudio.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OsuParsers [![CodeFactor](https://www.codefactor.io/repository/github/mrflashstudio/osuparsers/badge)](https://www.codefactor.io/repository/github/mrflashstudio/osuparsers) [![nuget](https://img.shields.io/nuget/v/OsuParsers.svg)](https://www.nuget.org/packages/OsuParsers)\n\nLibrary for parsing files associated with osu! written in C#\n\nFeel free to use it and report any issues you might run into.  \nCuz, you know, i might have broke something in the last few commits ;)  \n\n# Navigation\n- [Installation](#installation)  \n- [Building and Requirements](#building-and-requirements)  \n- [Usage](#usage)  \n    - [Beatmap parser](#beatmap-parser)\n    - [Storyboard parser](#storyboard-parser)\n    - [Replay parser](#replay-parser)\n    - [Database parser](#database-parser)\n    - [Beatmap writer](#beatmap-writer)\n    - [Storyboard writer](#storyboard-writer)\n    - [Replay writer](#replay-writer)\n    - [Database writer](#database-writer)\n- [Documentation](#documentation)  \n    - [Decoders documentation](docs/DecodersDocumentation.md)\n    - [Beatmap documentation](docs/BeatmapDocumentation.md)\n    - [Storyboard documentation](docs/StoryboardDocumentation.md)\n    - [Replay documentation](docs/ReplayDocumentation.md)\n    - [Database documentation](docs/DatabaseDocumentation.md)\n\n# Installation\nDownload latest version of parser from [releases](https://github.com/mrflashstudio/OsuParsers/releases), then add the dll into your project references/dependencies.  \nOr you can just install [NuGet package](https://www.nuget.org/packages/OsuParsers).  \n\n**Package Manager**\n``` powershell\nPM\u003e Install-Package OsuParsers\n```\n**.NET CLI**\n``` bash\n\u003e dotnet add package OsuParsers\n```\n\n# Building and Requirements\n- You need a desktop platform that can compile .NET 4.6.1 or higher.\n- Clone the repository `git clone https://github.com/mrflashstudio/OsuParsers`\n- And then you can build the project in your IDE.\n\n# Usage\n### Beatmap parser\n```cs\nusing OsuParsers.Beatmaps;\nusing OsuParsers.Decoders;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            Beatmap beatmap = BeatmapDecoder.Decode(@\"beatmapPath.osu\");\n            \n            //printing beatmap's title\n            System.Console.WriteLine(beatmap.MetadataSection.TitleUnicode);\n        }\n    }\n}\n```\n\n### Storyboard parser\n```cs\nusing OsuParsers.Decoders;\nusing OsuParsers.Storyboards;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            Storyboard storyboard = StoryboardDecoder.Decode(@\"storyboardPath.osb\");\n            \n            //getting first object of foreground layer\n            IStoryboardObject object = storyboard.ForegroundLayer[0];\n        }\n    }\n}\n```\n\n### Replay parser\n```cs\nusing OsuParsers.Decoders;\nusing OsuParsers.Replays;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            Replay replay = ReplayDecoder.Decode(@\"replayPath.osr\");\n            \n            //printing player's nickname\n            System.Console.WriteLine(replay.PlayerName);\n        }\n    }\n}\n```\n\n### Database parser\n```cs\nusing OsuParsers.Decoders;\nusing OsuParsers.Database;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            //parsing all available databases\n            OsuDatabase osuDb = DatabaseDecoder.DecodeOsu(@\"osuDbPath.db\");\n            CollectionDatabase collectionDb = DatabaseDecoder.DecodeCollection(@\"collectionDbPath.db\");\n            ScoresDatabase scoresDb = DatabaseDecoder.DecodeScores(@\"scoresDbPath.db\");\n            PresenceDatabase presenceDb = DatabaseDecoder.DecodePresence(@\"presenceDbPath.db\");\n            \n            //printing player's nickname\n            System.Console.WriteLine(osuDb.PlayerName);\n            //printing collection count\n            System.Console.WriteLine(collectionDb.CollectionCount);\n            //printing beatmap's md5 hash of first score\n            System.Console.WriteLine(scoresDb.Scores[0].Item1);\n            //printing first player's nickname\n            System.Console.WriteLine(presenceDb.Players[0].Username);\n        }\n    }\n}\n```\n\n### Beatmap writer\n```cs\nusing OsuParsers.Beatmaps;\nusing OsuParsers.Decoders;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            //getting console output text as the song's new title\n            string newTitle = System.Console.ReadLine();\n            //parsing beatmap\n            Beatmap beatmap = BeatmapDecoder.Decode(@\"pathToBeatmap.osu\")\n            \n            //changing song title\n            beatmap.MetadataSection.Title = newTitle;\n            //writing beatmap to file\n            beatmap.Save(@\"pathToNewBeatmap.osu\");\n        }\n    }\n}\n```\n\n### Storyboard writer\n```cs\nusing OsuParsers.Decoders;\nusing OsuParsers.Storyboards;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            //getting console output text as the object's new filepath\n            string newFilePath = System.Console.ReadLine();\n            //parsing storyboard\n            Storyboard storyboard = StoryboardDecoder.Decode(@\"pathToStoryboard.osb\")\n            \n            //changing filepath of the first storyboard object in background layer\n            storyboard.BackgroundLayer[0].FilePath = newFilePath;\n            //writing storyboard to file\n            beatmap.Save(@\"pathToNewStoryboard.osb\");\n        }\n    }\n}\n```\n\n### Replay writer\n```cs\nusing OsuParsers.Decoders;\nusing OsuParsers.Replays;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            //getting console output text as the new player's name\n            string newPlayerName = System.Console.ReadLine();\n            //parsing replay\n            Replay replay = ReplayDecoder.Decode(@\"pathToReplay.osr\")\n            \n            //changing player name\n            replay.PlayerName = newPlayerName;\n            //writing replay to file\n            replay.Save(@\"pathToNewReplay.osr\");\n        }\n    }\n}\n```\n\n### Database writer\n```cs\nusing OsuParsers.Database;\nusing OsuParsers.Decoders;\nusing OsuParsers.Enums;\n\nnamespace SomeNamespace\n{\n    class Program\n    {\n        public static void Main(string[] args)\n        {\n            //parsing osu database\n            OsuDatabase db = DatabaseDecoder.DecodeOsu(@\"pathToOsuDb.db\")\n            \n            //changing permissions\n            db.Permissions = Permissions.Supporter;\n            //writing database to file\n            db.Save(@\"pathToNewOsuDb.db\");\n        }\n    }\n}\n```\n\n# Documentation\nFor detailed description of available methods and fields, see [documentation](docs).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrflashstudio%2Fosuparsers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrflashstudio%2Fosuparsers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrflashstudio%2Fosuparsers/lists"}