Add custom songs to Let's Sing! (2022) from UltraStar

First of all massive credit to @Dh4rry, check out their original post on replacing a DLC song with your own here: https://gbatemp.net/threads/add-your-own-songs-to-lets-sing-2019.538379/
In this tutorial we will be making use of a customized version of their script to convert an UltraStar (PC karaoke game) TXT file to Let's Sing's VXLA format. Their research was also used by me as the jumping off point. Importantly however this tutorial will delve into how to ADD, NOT REPLACE songs!

NOTICE:
This tutorial is no longer actively supported, and is provided as-is. I the author will not be providing any help in regards to this tutorial. Please feel free to ask questions in the thread, in the hopes someone can help you, do not expect me to reply.
Secondly it has come to my attention that nxdumptool does not work on the latest firmwares (17.0+), this is not a required part of this tutorial. Any other method of dumping romfs will work just fine. (DBI is a good example)


Demo:

(I imported more than one song though!)

Step 0: Prerequisites
- Homebrew capable Nintendo Switch
- AtmosphereNX installed
- A Let's Sing game (Only tested on 2022, should work on all games)
- A DLC for the Let's Sing game
- Basic knowledge of directories
- Linux/Windows PC (MacOS might work?)
- FFMPEG (Linux: "sudo apt install ffmpeg" or your package managers equivalent", Windows: Download the binaries here or something: https://ffmpeg.org/download.html)
- Python3

Step 1: Dumping the required assets
1. Get "nxdumptool" if you don't have it installed already (https://github.com/DarkMatterCore/nxdumptool/releases/tag/v1.1.14)
2. Launch "nxdumptool"
3. Choose "Dump installed SD card / eMMC content"
4. Choose "Let's Sing 2022" (or your version, it should not actually matter, but I only tested 2022)
5. Choose "RomFS options"
6. Navigate to "Use update/DLC" and use the right/left arrows to select the update (v131072/0.0.2.0 for LS2022 as of writing)
7. Choose "RomFS section data dump" (You might want to take note of this as the "Core titleid")
8. Navigate back to the "RomFS options" after dumping has finished
9. Navigate to "Use update/DLC" and use the right/left arrows to select the first DLC you see (Does not matter which DLC you have)
10. Choose "RomFS section data dump" (You might want to take not of this as the "DLC titleid")
11. Done!

Step 2: Getting the files you need
0. Create a folder somewhere where you can modify files, and create your "mod". We'll be calling this folder the "Working folder" from now on.
1. Access your Switch's SD card contents from your PC either directly or through FTP
2. Find the following file: sd:/atmosphere/contents/[CORE TITLEID]/romfs/Data/StreamingAssets/SongsDLC.tsv and copy it to your working folder
3. Find the following file: sd:/atmosphere/contents/[DLC TITLEID]/romfs/name.txt and copy it to your working folder
4. Find the following file: sd:/atmosphere/contents/[DLC TITLEID]/romfs/SomeSongName_meta.xml and copy it to your working folder (SomeSongName is not the actual name, but the song name is dependand on the specific DLC, just copy a *_meta.xml file)
5. Download the following file: https://raw.githubusercontent.com/MrJPGames/ultrastar2singIt-Converter/master/ultrastar2singit.py and place it in your working folder
(Again huge thanks to @Dh4rry for making the orignal version of this script!)


Step 3: Getting your song files
Sadly I cannot link you to the actually useful resources for UltraStar song files. There exist piracy free sites, but finding the exact right music/video for these can be difficult. Instead try to search around the internet for a certain spanish UltraStar site. This will provide torrents to many files (including many non-spanish ones!)

For the next steps I'll be assuming you have gathered the following files:
- A UltraStar TXT
- A music video (most likely AVI but format is not important, video should not contain audio!)
- The music (most likely mp3, but format is not important)
- A 1:1 (square) image (most likely jpg, but format is not important) of the cover art


Step 4: Getting the song files ready for Let's Sing!
0. Before we get started we have to decide on a unique name for our song. The songs title without spaces or non letters is the normal choice (but not necissary). Eg. "The Man Who Sold The World" becomes "TheManWhoSoldTheWorld". This name has to be the same EVERYWHERE, and spelled exactly the same (CASE SENSITIVE!). In the rest of the tutorial this will be referred to as SONGNAME. So replace any SONGNAME with your song id. (eg. SONGNAME.mp4 would become TheManWhoSoldTheWorld.mp4)
1. The music video should be in mp4 format. To do this you can use ffmpeg:
Code:
ffmpeg -i input_video.avi SONGNAME.mp4
2. The music should be in ogg format. To do this you can use ffmpeg:
Code:
ffmpeg -i input_song.mp3 SONGNAME.ogg
2 1/2. Optionally open the music file in Audacity and cut a part 30 seconds to a minute long. Save this as SONGNAME_preview.ogg. Alternativly you can create a copy of the full song and give it the name SONGNAME_preview.ogg, and this should also work, though has not been stress tested with many songs doing this!
3. The cover art should be in png format. Open up any other formats in an image editor (gimp, photoshop, paint.net, mspaint etc.). Make sure the image width and height are the same (thus a square image) and save this as "SONGNAME.png". (Only tested with "low resolution" images, if crashes occur maybe lower the image resolution.)
4. Copy your _meta.xml file and name it SONGNAME_meta.xml
5. Open the _meta.xml file with a text editor and replace the values so they match your song. "Id" should be SONGNAME (case sensitive!). Difficulty ranges from 0-4 (with 0 being 1 star, and 4 being 5 star).


Step 5: UltraStar TXT to VXLA
1. Place the ultrastar TXT in your working folder
2. Open a terminal (bash/cmd) in your working folder
3. Run the command "python3 ultrastar2singit.py input.txt -S SONGNAME"
4. This should result in SONGNAME.vxla being created in your working folder


Step 6: Adding your song!
1. Create a folder called "Patch' (This is a clear name, but you can choose your own)
2. Create the following folder structure inside of that folder: (Of course replace COREID/DLCID with the ids you noted down during the game assets dump step)
oKL5eCY.png

3. Next place your song files in the correct places as shown below (with the SONGID in this case being "TheManWhoSoldTheWorld")
d2pxbGp.png

(Note the backgrounds are optional, hence being left out of this tutorial, look at the offical files for guidance. They are the background in the menu, pause menu and after completing a song (_Result), Not including them will result in a white background instead.)
4. Open up name.txt ("DLCID/romfs/name.txt) and add a new line to the end of the file and put your SONGID there
5. Open up SongsDLC.tsv with LibreOffice Calc or Excel. Copy an existing row. Insert a row and paste the existing row there (so you now have that song in the table twice). Change the UID (a small number, second column) to be unique.
Change the ID to be your SONGNAME. The artist, title and year columns can also be updated (I did not test not updating them), all other collums can be left alone, but you might change them if you so choose (difficulty and some other data is taken from _meta.xml file instead of this table). This is the entry for TheManWhoSoldTheWorld:
jywweka.png


Step 7: The moment of truth!
0. (Optional, but saves space) remove COREID, and DLCID forlders from sd:/atmosphere/contents
1. Copy your COREID and DLCID folders to sd:/atmosphere/contents
2. Boot Let's Sing (2022)! And enjoy your newly added custom song!

Step 8 (not really): Feedback!
Hey, I was wondering if there was interest in the community for a (GUI) tool to easily import songs into Let's Sing. As shown in this tutorial most of the steps can be easily automated. And especially for importing larger libraries doing it by hand can get annoying. But I feel I need to at least know some people will actually want to use such software before I invest the time to make it (or maybe I do it anyways if i get bored who knows).

Other than that please let me know how it went if you followed this tutorial, and please let me know if I made a mistake somewhere so I can fix it!
 
Last edited by MRJPGames,
Hey everyone, if anyone is still keeping up with this thread, we have a couple more improvements in the scripts from github.

I'm planning on creating a new thread later to perhaps make this more visible instead of buried in 4 pages, but I have a couple things still on my to-do, including a few improvements, perhaps a compiled version and also a separate "deluxe version" mod with tools to bring and consolidate songs from all Let's Sing versions into one.
 
Hey everyone, if anyone is still keeping up with this thread, we have a couple more improvements in the scripts from github.

I'm planning on creating a new thread later to perhaps make this more visible instead of buried in 4 pages, but I have a couple things still on my to-do, including a few improvements, perhaps a compiled version and also a separate "deluxe version" mod with tools to bring and consolidate songs from all Let's Sing versions into one.

That's great thank you!
 
Hey everyone, if anyone is still keeping up with this thread, we have a couple more improvements in the scripts from github.

I'm planning on creating a new thread later to perhaps make this more visible instead of buried in 4 pages, but I have a couple things still on my to-do, including a few improvements, perhaps a compiled version and also a separate "deluxe version" mod with tools to bring and consolidate songs from all Let's Sing versions into one.
Awesome. Is there preconfigured pack we can download?
 
It's been a while, but the GUI is finally out! I've compiled it into an executable so Python is no longer required to run the converter. Check out my github to see the updated instructions and download the shiny new converter on the right under 'Releases'. I will make a new post here on GBA to give it a proper send-off later this week (I hope), but you can get it right now.
 
Which version of the game and dlc are you using?
When is it crashing, the moment you run it? On song selection screen or after selecting a song?
Lets sing 2022. I can see all the intros on the game, but when we get to the point were one should select Classic mode etc, I just get black screen and then "the game closed due to an error".

Selected 80's Vol 1 when "Converting" with your app. I have installed 80's Vol 1, 2 and 3 on the Switch.

1777800796912.png

Post automatically merged:

Version 1.31 of Lets sing 2022
 
Last edited by Conan85,
OK, I've found what the issue is. It seems that for version 2022 you will have to enable the "Conversion tweaks" and use the option "Include the songs from the DLC". Just provide the converter with the files from your installation.

Not sure what the optimal approach for dumping these files is, but you can use DBI to first browse the installed games and manually copy the files to the root of the sd card, then connect to pc with MTP and move them from the sd to your PC.
The name.txt file belongs to the DLC and is found in [DLC TITLEID]/romfs/name.txt
SongsDLC.tsv is located in the core installation in [CORE TITLEID]/romfs/Data/StreamingAssets/SongsDLC.tsv

1777811412640.png


I'll try looking for a solution which doesn't require this step in a future release.
 
OK, I've found what the issue is. It seems that for version 2022 you will have to enable the "Conversion tweaks" and use the option "Include the songs from the DLC". Just provide the converter with the files from your installation.

Not sure what the optimal approach for dumping these files is, but you can use DBI to first browse the installed games and manually copy the files to the root of the sd card, then connect to pc with MTP and move them from the sd to your PC.
The name.txt file belongs to the DLC and is found in [DLC TITLEID]/romfs/name.txt
SongsDLC.tsv is located in the core installation in [CORE TITLEID]/romfs/Data/StreamingAssets/SongsDLC.tsv

View attachment 571102

I'll try looking for a solution which doesn't require this step in a future release.
Thank you. Is there a version that is more straight forward? I can get any version of Lets sing. Currently I have 2022, 2024 and 2025.
 
I would recommend you use 2025 or 2026 because they have a much better song selection screen with filters. Instead of going through all songs in order like in 2022, you can input the artist or song name and find the song you want much faster.

You won't have to dump any files from your game either, but you'll have to install rad video tools on your pc to convert the video files since newer versions of the game use the bink2 video format instead of mp4.
 
  • Like
Reactions: lusomods
Thank you. I'm trying again on 2025. Takes a very long time to convert the videos with rad though. Computer has been working for 12 hours straight, and I dont know how much is left.

However, I just noticed that i have a red X on the audio on several of the files. Hence, I have a feeling I need to start over and remove the files with the red X on audio? Is there away to remove the ones without adio, after the process has ended?

1778787478294.png

Also, do you know why I get all the red X'es? I do not think I had this many earlier. I think they showed up just before I was going to try again, but not sure. I was unable to get rid of them though.

And is it possible to add songs after? For example I add five songs now and copy to the switch, then add 5 more songs and copy to the switch?
 
Last edited by Conan85,
Computer has been working for 12 hours straight, and I dont know how much is left
Yeah, rad takes a while on my pc as well. You can kind of keep track how many songs are left by the blue icons next to the ticks/crosses as they fill in once the files are converted. But a timer would be more practical, I agree. I will try adding it for the next release.

However, I just noticed that i have a red X on the audio on several of the files. Hence, I have a feeling I need to start over and remove the files with the red X on audio? Is there away to remove the ones without adio, after the process has ended?
This is strange, do the names of the X-ed files match the names of the folders they're in? They won't be found if they are different.

The converter renames files to remove accents and characters that won't be readable by the game, but it seems it's doing it inconsistently... All the files in your picture have already been converted so the Xs shouldn't matter, you should be able to just run the converter again and the converter should skip converting these files again and only copy the already converted files to _Patch.

If you want to convert them from scratch, you'll have to tick them and click "clear cache". Then manually rename the affected folders and files inside them before running the converter again.

And is it possible to add songs after? For example I add five songs now and copy to the switch, then add 5 more songs and copy to the switch?
Yes. After you've already converted and copied over the first 5 songs, you can give the converter the previously generated songs_xx.json file to add the new 5 songs to it. Then just copy the newly generated files and json and overwrite the previously copied json on the switch.
 
Thanks, it works perfectly. I only error when selecting "duette, but I think I read somewhere that was not supported on custom files.

Now I just got to figure out how to add more songs to the existing patch. Not sure if I understood the instructions over.
 
  • Like
Reactions: ratnapatka
Now I just got to figure out how to add more songs to the existing patch. Not sure if I understood the instructions over.
If you take a look at the files in the generated _Patch folder you will see the songs_XX.json file, this file is basically the list of all the songs included in the dlc. The converter does its thing with all the files and then lists all the songs by name in this file.

If you want to add more songs to this list file, you can enable the "conversion tweaks" option and select the "Include the songs from the DLC". Then point the converter to you existing songs_XX.json file so it can append the new songs to it. When it's done, just copy the whole thing to the switch and overwrite the old songs_XX file.
 
If you take a look at the files in the generated _Patch folder you will see the songs_XX.json file, this file is basically the list of all the songs included in the dlc. The converter does its thing with all the files and then lists all the songs by name in this file.

If you want to add more songs to this list file, you can enable the "conversion tweaks" option and select the "Include the songs from the DLC". Then point the converter to you existing songs_XX.json file so it can append the new songs to it. When it's done, just copy the whole thing to the switch and overwrite the old songs_XX file.
Hvala majstor. Exellent work on the program :) Send me a PM if you know how to unlock the feat option on some of the Ultrastar songs too :) And if you know about any good ultrastar song sites. I have the spanish one.
 
Last edited by Conan85,
Hvala majstor. Exellent work on the program :)
Thanks :) I've got some improvements coming soon as well.

Send me a PM if you know how to unlock the feat option on some of the Ultrastar songs too
I'm not sure what you mean by feat, do you mean the support for duet files?

And if you know about any good ultrastar song sites. I have the spanish one.
This site hosts many more txt files than the Spanish one, but it's a bit more faff getting and organizing the other files manually from the included yt links. Omnia and I have been discussing adding support for this through our app, but we haven't started working on it yet.

https://usdb.animux.de/
 
how to unlock the feat option on some of the Ultrastar songs too
In the 2025 version you should still be able to play the feat mode without issues, it just wouldn't consider the ultrastar p1/p2 division as atm the script is ignoring it as mentioned

You can pair the website above with usdb_syncer (search on github) to get everything needed
 
In the 2025 version you should still be able to play the feat mode without issues, it just wouldn't consider the ultrastar p1/p2 division as atm the script is ignoring it as mentioned
Game crashes when selecting feat/duette on my 2025. I have only tried with Ultrastar songs. Do you mean they should work if the source is different than Ultrastar? I see the source many songs has singstar as source on the website above. Should these work in feat mode if I run them through your converter program? Is there a way to see wich songs that will work in feat/duette, before I open the song, so I can avoid the crashes?

(Using usdb syncer and the website above)
Post automatically merged:

Looks like the party stopped when adding several new songs from the website with usdb_syncer.

After scrolling through songs ns Lets Sing 2025, a black screen with message "Panic occured while running Atmosphere. TItle ID: 010041544D530000 Error: std::abort (0xFFE)"

Luckily I had a backup of the old Patch folder before adding the new songs. Deleted the new folder on the switch and put back the patch backup and it works again.

Do you know why it crashed when adding even more new songs?
Post automatically merged:

20260523_114251.jpg
 
Last edited by Conan85,

Site & Scene News

Popular threads in this forum