Skip to content

Instantly share code, notes, and snippets.

@lightyrs
Forked from Axenide/bulk-suno.md
Created November 27, 2025 05:15
Show Gist options
  • Select an option

  • Save lightyrs/a81338a426e075c0ba8e97f8df3bda33 to your computer and use it in GitHub Desktop.

Select an option

Save lightyrs/a81338a426e075c0ba8e97f8df3bda33 to your computer and use it in GitHub Desktop.
Bulk download your Suno songs and videos!

How to bulk download your Suno library

Today my dad asked me for a way to download all of his Suno songs. (He really loves writing songs, and now he can give them life easily. What a time to be alive!). Luckily, I found this gist and it works great, but my dad also wanted to get the videos generated, so I modified it a little.

copy(
    [...$('[role="grid"]')[Object.keys($('[role="grid"]')).filter(x => x.startsWith('__reactProps'))[0]].children[0].props.values[0][1].collection]
    .reduce((acc, x) => {
        if (x.value.audio_url) acc.push(x.value.audio_url);
        if (x.value.video_url) acc.push(x.value.video_url);
        return acc;
    }, [])
    .join('\n')
)

You just open your browser console and paste it.

What this does is copying the links of all the songs currently displayed in your library, you can save them wherever you want and use your download manager of choice. Personally I used wget, it is this simple:

wget -i urls.txt

If you want to just get your urls.txt, this version saves it automatically for you (but you will have your links in different files for each page of your library):

let links = 
    [...$('[role="grid"]')[Object.keys($('[role="grid"]')).filter(x => x.startsWith('__reactProps'))[0]].children[0].props.values[0][1].collection]
    .reduce((acc, x) => {
        if (x.value.audio_url) acc.push(x.value.audio_url);
        if (x.value.video_url) acc.push(x.value.video_url);
        return acc;
    }, [])
    .join('\n');

let blob = new Blob([links], { type: 'text/plain' });

let a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'urls.txt';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment