kylemc1413 / songcore Goto Github PK
View Code? Open in Web Editor NEWA plugin for handling custom song additions in Beat Saber.
License: MIT License
A plugin for handling custom song additions in Beat Saber.
License: MIT License
Hey there. I'm playing Beat Saber on Linux, which works great thanks to Valve's Proton. Also mods are working great, and I've been playing and even streaming Beat Saber in mixed reality VR now for about 3/4yr on Linux and with mods.
From time to time I have to do a clean install of Beat Saber, especially after a big update, to get mods working again, which causes on Linux that the wine prefix is also deleted and re-created. Since the update to Beat Saber 1.1.0 and the updated mods, I wasn't able to play custom songs any more. They were successfully converted, but the panel to right, where the informations about the song and the play button should occur didn't show up. After tinkering around and having a look into the log files, I realized that a directory couldn't be found, and doesn't seem to be created:
[ERROR @ 20:20:35 | IPA] SongCore: System.IO.DirectoryNotFoundException: Could not find a part of the path "C:\users\steamuser\Local Settings\LocalLow\Hyperbolic Magnetism\Beat Saber\SongCoreExtraData.dat".
After I created the LocalLow\Hyperbolic Magnetism\Beat Saber
directory, the needed files of songcore could be created and custom songs where working again.
Looks like Beat Saber itself isn't creating that directory any more, and thus the directory LocalLow
isn't even created for me. As in the wine prefix no other programs are installed, which might create the LocalLow
folder, I guess it will never be created after a clean install of Beat Saber, at least on Linux.
Would it be an idea to have the SongCoreExtraData.dat
file be stored below Beat Saber\UserData
folder (the games's install folder, where the other mods store they files/configs) instead of being stored below Local Low
? Or could you create the necessary folders, to make sure they exist?
Thanks in advance!
When you play a map that has "customSongColors" the custom colors won't change. I made sure no other mod was conflicting and only used the bare minimum for mods to work and it still worked on 1.16.4 but did not on 1.17.
As said in the title, any song in "solo" mode will do nothing when you press on play.
SongCore is active and loads songs when launching, songs are present in "custom songs".
Upon removing the mod, everything works as it should
V 1.11.0
457c107#diff-cbb88464e61276928be0bf0df4cb563b12d7aa35bf11cde6e6675898b5d27234R55
In this commit, SongCore.Collections.AddSong
was obsoleted and made an empty stub. And it looks like SongCore.Collections.AddExtraSongData
now has the functionality that AddSongData had, but was changed from public to internal. So I SHOULDN'T use this method for adding songs... right?
Edit: I'm trying to fix/understand MultiplayerExtensions and it seems it relied on AddSong to add songs after downloading them
so i think its song core because when i go to download a new song in game it just, doesnt load any new pages and says its because i have "multi select activated" and there is no way to disable it. under that it says no new pages will be loaded and no songs can be downloaded
Hi, with the latest version of Beat Saber, and SongCore, I am unable to play any song. The play button is there, and simply does not allow me to press it. Both in VR mode and testing through Desktopmode. If I remove SongCore it allows me to play songs.
Here's Twitter thread where I first talked about this: https://twitter.com/mawntee/status/1689892916989140992?s=20
TL;DR
Have a basic one or two line text box above the difficulty/playstyle selection (above standard/360/lawless selection, same box style) where the mapper can write some information about the chart.
Each difficulty can have it's own description, and depending on which dif is selected, the text will change.
Example: On an Expert plus the mapper can write something like "RT 500 - Resets - Bursts - Pauls" on the Ex, then on the Expert dif they could put something like "RT 550 - Wrist Rolls - Sliders - Poodles" to indicate the difference in downmapping.
This can get rid of a lot of confusion when jumping into a map for the first time, or just act as simple reminders when people are trying to figure out which dif has what.
Reading through the documentation it looks like _information
was literally added for this reason as the description for it is "Any general information you would like the player to be aware of before playing the song", but it's tucked away behind a small button and usually a scroll.
Obviously a bit cleaner than my photoshop job, but having some kind of display similar to this, but per difficulty would be sick.
SongCore v3.13.0, title. Any maps that are contained in extra folders in folders.xml fail to load with an "Error loading data" error. Map was tested in editor, by moving to the standard CustomWIPLevels folder, and on 1.34.2 and the map works and loads fine in all scenarios. Tested with the following folder directory:
<Name>Beat Saber New Editor</Name>
<Path>F:\BSNewEditor</Path>
<Pack>1</Pack>
<WIP>True</WIP>
<ImagePath>Example</ImagePath>
</folder>
the browser no longer shows up
I had to reinstall my Beatsaber (V.1.13) and now Songcore isn´t working anymore. I see the Mod in the startscreen and can "click" on it, but if i want to search for a song there is nothing.
what is wrong?
For some reason out of nowhere all of my blocks for every song are reversed. Meaning, locks that are normally designated for the right hand are now for the left hand and vice versa. I uninstalled all of my mods and reinstalled them one at a time to find the culprit, and it only began to do this when I installed SongCore. It then stopped doing that immediately after uninstalling SongCore. This is very strange and I've never seen anything like it before. I also don't quite understand how SongCore can do something like that for even the OST songs. This just happened today, though in the middle of a playing session. Everything was fine for the first hour of game play and then all of a sudden everything went reversed and the score board text showed only ampersats (@) and ampersands (&). Beat Saber/mod reinstallation didn't fix it. I also have both the Oculus and Steam versions of Beat Saber installed at the same time (with the same mods) and both experience the same issue. I'm hoping someone else is also experiencing this and/or knows what is happening. I could not find any setting that corresponds to this.
Thanks!
Hello,
First thing first, I run Beat Saber on Linux and I installed the mod with QBeat.
The issue is that when I have a lot of custom songs, it seems there is a cap at ~100 (was 103 the first time, after reinstall 100).
After my first installation of Beat Saber, I used QBeat and added the mod and everything was working well even after downloading songs with the BeatSaverDownloader mod. (I had like ~20 custom songs)
Then I downloaded a lot of maps manually and added them and that's when I saw this issue.
After that, I did clean reinstall of the game and put the custom songs back in the folder. All the custom songs where present when unmodded. Then I installed BSIPA and used the custom Proton from QBeat, everything was still working. And when I added SongCore, there appeared the limitation.
Also, the songs loaded are the same each time (I didn't find the difference between both installation even though there were 3 songs of difference), I don't know what is the logic behind but it's neither by song name nor folder name.
If I delete a folder of a custom song that is loading in game, it doesn't load another song to replace it (so it loads 99 custom songs). And if I readd it, it loads it again.
And to finish, the songs I downloaded before and even the base custom songs (Beat Saber
and One More Time
) are not appearing in the list of loaded songs.
If you need me to test something to have more info, don't hesitate.
in all example files i downloaded _customEnvironment and _customEnvironmentHash was used, so i assume it was a typo in the readme
1 - Maps in the Cached WIP Levels folder are playable with the "play" button. In the past only "Practice" was clickable but now so is "play". This allows people who are playtesting to accidentally submit to score saber. The regular WIP Levels folder still has the "play" button disabled and works as intended.
2 - Mods like chroma are not being applied to maps in the Cached WIP Levels folder. The "?" on the top right is not present and so no mods are being applied to the map when they are played. The only way for chroma to work in that folder is to unzip the map manually in a folder in the WIP Levels folder. Then the "?" will finally appear in the Cashed WIP Levels folder and the mod will apply to the map when played. If you then delete the folder of the map in WIP Levels, the maps in the Cashed stays the same and you can play it with chroma and the "?" will still be there.
All maps and mods work as intended in the WIP Levels folder. It's the Cached WIP Levels folder that is having those issues.
if you disable a map's own colour scheme, you are not using your own colour overrides, and the map uses boost colours, then any boost colour lights don't show up - probably because they're using a completely transparent colour.
in the base game if you use boost colours on a colour scheme that doesn't have boost colours set it will default to the non-boost colours, so the lights aren't invisible.
if this is intentional let me know.
I have been using modded Beat Saber on PC/Steam for years and have ~450 custom songs loaded. Usually when starting up I see a notification floating over the top of the menu "XXX songs loaded" but for the last two days I've seen instead "SongCore Cleaner / XXX songs deleted". It doesn't appear that any songs are actually being removed from my playlists or directories. So, what is this message indicating? BeatSaber 1.34.2 and SongCore 3.12.2.
Hi, I've noticed that Beat Saber saves the Party Mode scores for custom levels in LocalLeaderboards.dat using the folder name but once you install the SongCore mod this changes to a hash. This makes all your previous scores dissapear and any new high score be stored in parallel. There should be an easy way to convert and integrate all local scores or make SongCore not change the highscore format for local highscores so that the people (like me) that use Beat Saber mostly to compete among household members don't get lost if playing with or without SongCore installed. Please let me know how I can solve this or help implement this in SongCore.
Thanks for agreat mod!!
https://beatsaver.com/beatmap/cae2 is a good example. What happens is that if you select a map and then select this one, what looks like a character list is displayed beneath the name of the last song selected.
It's just a visual bug though. You can play the song with no problem.
I get an infinite spinner icon every other BeatSaber launch. Sometimes Custom Levels shows up fine, sometimes it fails to load. I've tried reinstalling all plugins, removing all levels and deleting UserData. Maybe a concurrency issue?
It seems to stem from
[CRITICAL @ 23:01:41 | UnityEngine] CustomPreviewBeatmapLevel+d__57.MoveNext () (at <26ec787945bf43e5aae4af5dd3394845>:0)
Full log files:
https://gist.github.com/romanalexander/a41401ab3992a8777c97da6d1efe8bf6
https://gist.github.com/romanalexander/629df5d4d37ee0edaf2f852d601460f2
Also put the same issue in here. Wasn't sure which plugin this could come from.
The game doesn't start with this mod (I get a black screen).
Works fine without it.
The error from the logs:
[DEBUG @ 00:56:26 | BS_Utils] [BS-Utils] Applying Harmony Patches
[ERROR @ 00:56:26 | IPA] SongCore OnEnable: System.NullReferenceException: Object reference not set to an instance of an object
[ERROR @ 00:56:26 | IPA] at SongCore.Plugin.OnApplicationStart () [0x001a9] in <d95db87fa000430188f67a0ac5bb6e76>:0
[ERROR @ 00:56:26 | IPA] at (wrapper dynamic-method) System.Object.lambda_method(System.Runtime.CompilerServices.Closure,object)
[ERROR @ 00:56:26 | IPA] at IPA.Loader.PluginExecutor.Enable () [0x0000c] in <85e5e5773585418d89fcc2712ee48bcc>:0
[ERROR @ 00:56:26 | IPA] at IPA.Loader.Composite.CompositeBSPlugin+<>c.<OnEnable>b__4_0 (IPA.Loader.PluginExecutor plugin) [0x00000] in <85e5e5773585418d89fcc2712ee48bcc>:0
[ERROR @ 00:56:26 | IPA] at IPA.Loader.Composite.CompositeBSPlugin.Invoke (IPA.Loader.Composite.CompositeBSPlugin+CompositeCall callback, System.String method) [0x00018] in <85e5e5773585418d89fcc2712ee48bcc>:0
I guess this is related to #105 and #106 and just needs a release, doesn't it?
When I click "more songs" it loads forever and I can't download songs. This has been going on for a while and I haven't found a solution for it online. Any idea how to fix this?
When installing SongCore all (Group) Scores of Custom Maps are empty.
I´ve read online that once LocalScoreFixer could fix that. But that dosnt work anymore and its not maintained anymore.
How can i keep my score which was build up for over a year now?
I was trying to look into why Beatmapper maps fail to load, and since the error mentioned the file's CRC32, I thought I'd start there. I don't think this discovery is the whole issue, but it is something I noticed is wrong in your implementation compared to all the other implementations I could find:
Here, your table lookup value is buffer ^ crc & 0xFF
, which, because of operator precedence, does the & first, then the ^. However, if you look at the javascript implementation or wikipedia, they use (buffer ^ crc) & 0xFF
. Passing some random numbers through these is showing me different results between the two cases, with Beatmapper, MMA2, and winrar producing the same values, different from what my SongCore logs are showing.
That said, I'm still not sure why these different values only pop up if it's exported from Beatmapper, exporting from MMA2 or manually zipping them causes SongCore to load the song just fine.
Having certain NTFS illegal characters in the directory name breaks file loading in different ways.
An example error:
[INFO @ 15:15:03 | SongCore] Starting full song refresh
[ERROR @ 15:15:03 | SongCore] RetrieveAllSongs failed:
[ERROR @ 15:15:03 | SongCore] System.ArgumentException: Illegal characters in path.
[ERROR @ 15:15:03 | SongCore] at System.IO.Path.CheckInvalidPathChars (System.String path, System.Boolean checkAdditional) [0x00021] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.Path.InternalCombine (System.String path1, System.String path2) [0x00022] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.FileSystemEnumerableIterator`1[TSource].CreateSearchResult (System.IO.Directory+SearchData localSearchData, Microsoft.Win32.Win32Native+WIN32_FIND_DATA findData) [0x00000] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.FileSystemEnumerableIterator`1[TSource].MoveNext () [0x001aa] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.Collections.Generic.List`1[T]..ctor (System.Collections.Generic.IEnumerable`1[T] collection) [0x00077] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.Directory.InternalGetFileDirectoryNames (System.String path, System.String userPathOriginal, System.String searchPattern, System.Boolean includeFiles, System.Boolean includeDirs, System.IO.SearchOption searchOption, System.Boolean checkHost) [0x0000f] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.Directory.InternalGetDirectories (System.String path, System.String searchPattern, System.IO.SearchOption searchOption) [0x00000] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at System.IO.Directory.GetDirectories (System.String path) [0x0000e] in <437ba245d8404784b9fbab9b439ac908>:0
[ERROR @ 15:15:03 | SongCore] at SongCore.Loader+<>c__DisplayClass85_0.<RetrieveAllSongs>b__0 () [0x003da] in <7380ced676a54277b17b1c1848025549>:0
[INFO @ 15:15:03 | SongCore] Loaded 0 new songs (0 in CustomLevels | 0 in seperate folders) in 0.0068461 seconds
[INFO @ 15:15:03 | SongCore] Updating cached hashes for 0 songs!
System.IO.IOException: Error 123 with ?
and *
System.ArgumentException: Illegal characters in path. with <
>
|
and "
System.ArgumentException: Second path fragment must not be a drive or UNC name. with \
No error (all songs load normally) with /
and :
And of course removing the illegal character also allows all songs to load normally.
Log compilation of errors from each illegal character
The Linux filesystem ext4 allows characters that NTFS doesn't, so a niche bug but worth documenting.
Add a toggle to the mod settings for SongCore that forces all song previews to be played until the end of the song, regardless of what the mapper has set for the "Song Preview Duration" field.
I jankily implemented this myself by just altering Loader.LoadSong(), but an official solution with a toggle would be really nice.
It's annoying when mappers forget to change the default preview duration, and then the song preview ends right before the best part of a song when listening in the menu. This is just my requested solution to that problem.
Not Supported second-level directory for CustomLevels, Original version OK
Normally i sort my custom songs "by newest". Now i had to reinstall BS completely, so i created an archive with winrar from the entire "Beat Saber_Data/CustomLevels" Folder to prevent the creation dates. After reinstalling BS and SongCore, i extracted the archive. All the Songs are loaded and there, but sorting "by newest" is completely different. Is it not possible what i try to achieve or do i have to do something else?
I still want to allow maps to change the lighting colors, while forcing colors only on the blocks. The only way I have of forcing block colors is to turn off the "Allow Custom Song Colors" setting, but that also forces the lighting color to my own defined scheme. Can we get this setting split in two?
Pretty simple. Provide a way to rename the map folders to a standard naming convention, since you are already altering their contents.
Currently, if no lighting events are placed in a map, the player is simply dropped into a never-ending black void if the player doesn't enable static lights. Forcing the lights on for those who have static lights off will make it just a bit more comfortable, especially if they don't know where to find the setting.
Since the last version (released for v1.28) on custom maps which don't define light colors (only note/block), the game/mod falls back to the default colors. I've noticed this on timeweaver's TheFatRat maps.
I think the issue is there since commit d92ec06 in CustomSongColorsPatch.cs
.
That map looks like this in the current version:
BeatSaver link for the map:
[TheFatRat Pack] TheFatRat - Monody (ft. Laura Brehm)
Song author disappeared from the level selection menu
My game is stuck on the "Converting Existing Song Library" on the main menu, and I see this error in the log.
[INFO @ 09:42:53 | SongCore] Attempting to Convert Existing Library
[CRITICAL @ 09:42:56 | UnityEngine] DirectoryNotFoundException: Could not find a part of the path 'D:\Programs\Steam\steamapps\common\Beat Saber\CustomSongs\14372-15540\Battle Sirens\Battle Sirens'.
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.__Error.WinIOError (System.Int32 errorCode, System.String maybeFullPath) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.FileSystemEnumerableIterator`1[TSource].HandleError (System.Int32 hr, System.String path) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.FileSystemEnumerableIterator`1[TSource].CommonInit () (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.FileSystemEnumerableIterator`1[TSource]..ctor (System.String path, System.String originalUserPath, System.String searchPattern, System.IO.SearchOption searchOption, System.IO.SearchResultHandler`1[TSource] resultHandler, System.Boolean checkHost) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.FileSystemEnumerableFactory.CreateFileNameIterator (System.String path, System.String originalUserPath, System.String searchPattern, System.Boolean includeFiles, System.Boolean includeDirs, System.IO.SearchOption searchOption, System.Boolean checkHost) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.Directory.InternalGetFileDirectoryNames (System.String path, System.String userPathOriginal, System.String searchPattern, System.Boolean includeFiles, System.Boolean includeDirs, System.IO.SearchOption searchOption, System.Boolean checkHost) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.Directory.InternalGetFiles (System.String path, System.String searchPattern, System.IO.SearchOption searchOption) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] System.IO.Directory.GetFiles (System.String path, System.String searchPattern) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
[CRITICAL @ 09:42:56 | UnityEngine] SongCore.Converter.PrepareExistingLibrary () (at <49b18f7f5eaf47bcb56689b77857cbce>:0)
[CRITICAL @ 09:42:56 | UnityEngine] SongCore.Loader.Awake () (at <49b18f7f5eaf47bcb56689b77857cbce>:0)
[CRITICAL @ 09:42:56 | UnityEngine] UnityEngine.GameObject:AddComponent()
[CRITICAL @ 09:42:56 | UnityEngine] SongCore.Loader:OnLoad()
[CRITICAL @ 09:42:56 | UnityEngine] SongCore.Plugin:BSEvents_menuSceneLoadedFresh()
[CRITICAL @ 09:42:56 | UnityEngine] System.Delegate:DynamicInvoke(Object[])
[CRITICAL @ 09:42:56 | UnityEngine] CustomUI.Utilities.BSEvents:InvokeAll(Action, Object[])
[CRITICAL @ 09:42:56 | UnityEngine] CustomUI.Utilities.BSEvents:OnMenuSceneWasLoadedFresh()
[CRITICAL @ 09:42:56 | UnityEngine] <>c__DisplayClass19_0:<ReplaceScenes>b__1()
[CRITICAL @ 09:42:56 | UnityEngine] <ScenesTransitionCoroutine>d__23:MoveNext()
[CRITICAL @ 09:42:56 | UnityEngine] UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
[INFO @ 09:42:56 | Custom Platforms] Loaded: CarboardBox by Meglaon
Note the path
D:\Programs\Steam\steamapps\common\Beat Saber\CustomSongs\14372-15540\Battle Sirens\Battle Sirens
This path does not exist, the correct path is
D:\Programs\Steam\steamapps\common\Beat Saber\CustomSongs\14372-15737\Battle Sirens\Battle Sirens
Note the version numbers
I am trying to create a song pack, but exclude it from the main pack.
main custom levels pack
custom pack
In my custom pack folder, duplicates of original songs are made + new gamemode. The problem is that the main custom levels pack is spammed by duplicates that are in the other pack.
Is there any possibility to hide the custom pack's songs from the main pack?
Maybe add a property like <ExcludeFromMain>True</ExcludeFromMain>
to the folders.xml
file?
Or is this unintended behaviour?
Map colors no longer work properly if a player has a custom color scheme set in the player settings. I can't tell if this is a bug due to adding separate toggles for notes, lights, and obstacles or if this is intended behavior, but it renders these toggles completely useless if the player has a custom color scheme (which like 95% of people do). If this is a feature (please god i hope it isn't) there should be a setting to revert back to the old behavior of map set colors always taking priority
I understand that the "more songs" function is part of BeatSaverDownloader but the github for this doesn't have a place to submit issues and I am DESPERATE.
When I click "more songs" it loads forever and I can't download songs. This has been going on for a while and I haven't found a solution for it online. Any idea how to fix this?
I can't search the beatmaps in-game by title if they have native language title (e.g. japanese) because in-game input method support only english (even if IM support other language, I wouldn't able to use it).
Also other language users may not be able to read the native title because they don't know the language well.
osu! has TitleUnicode
property, separate from Title
, that is intended for this problem. So I suggest applying similar approach to this issue.
While it's frustrating that beat saber doesn't support it on its own, waiting for the game to support it will only encourage more problematic maps to be created in the future.
I know it's not easy, but I want it to be considered.
The current icon for CustomWIPLevels is the MMA2/EditSaber/whatever else icon, and I feel that it should be changed to ChroMapper or have an option to change it to any other icon for preference or to match it up with other editors.
cc: @Caeden117
Apparently, there are beatmaps that exist on Beat Saver that are broken, possibly during the conversion process a long time ago (such as the info.dat listing the wrong file extension for the audio file). SongCore discards these songs during the loading process. It would be useful to have a Dictionary<string hash, string path>
of these songs for mods like PlaylistManager that rely on SongCore to check if a song already exists before downloading them (the broken beatmaps are downloaded over and over).
Since the last update of Beat Saber I'm unable to play some of the songs that I previously could play.
When I select the song and infinite loop start as is trying to load the song but never ends.
Some examples are:
To explain this issue a bit further, when a custom song uses it own custom colours like https://bsaber.com/songs/9a34/, it will set the notes, lights and saber colours to whatever the song has asked to set it to, but the trail colours are set to whatever the in-game overrides are set to and not the colours of the sabers the song has appointed it. This is only an issue with custom songs. I have attached a screenshot that shows what I'm going on about. As you can see, the nots are purple and orange, but the trails are blue and red respectively.
Songs downloaded in the key-id format get skipped when converting. The path looks like:
CustomSongs\995-670\[song name]\info.json
where [song name]
is the song name but the converter is trying to find it at
CustomSongs\995-670\info.json
.
Basically, the -a
flag only looks one subdirectory deep. This can be fixed by using -g
and a glob pattern. The unix-like style would be:
./songe-converter.exe -k -g '**/info.json' ./CustomSongs/
I'm not sure what it is for command prompt but it's probably similar.
hello,I follow the direction and fail to add an additional Song Folders
how to make it work?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.