Thanks for catching this! It's capping at 50 because Sonauto's API only returns the first page for projects and we weren't grabbing the rest. I don’t have a 50+ song library to test it on, but you do. This snippet tells us exactly how their API pages its data so we get the fix right instead of guessing.
It only reads your song list. Changes nothing, sends nothing.
Ctrl+Shift+J (Windows) / Cmd+Option+J (Mac) or Right Click → Inspect.(async () => {
const base = location.origin + '/api';
const out = {};
const def = await (await fetch(base + '/projects', { credentials: 'include' })).json();
out.projects_default_count = (def.data || []).length;
out.projects_response_keys = Object.keys(def);
out.pagination_tests = {};
for (const q of ['?limit=200', '?limit=200&offset=50', '?offset=50', '?page=2']) {
try {
const r = await (await fetch(base + '/projects' + q, { credentials: 'include' })).json();
out.pagination_tests[q] = { count: (r.data || []).length, firstId: (r.data || [])[0] && (r.data || [])[0].id };
} catch (e) { out.pagination_tests[q] = 'ERROR: ' + e.message; }
}
let total = 0, maxInOne = 0;
for (const p of (def.data || [])) {
try {
const t = await (await fetch(base + '/editor-tracks?projectId=' + encodeURIComponent(p.id), { credentials: 'include' })).json();
total += (t.data || []).length;
maxInOne = Math.max(maxInOne, (t.data || []).length);
} catch (e) {}
}
out.total_tracks_across_projects = total;
out.max_tracks_in_one_project = maxInOne;
console.log(JSON.stringify(out, null, 2));
})();
{ ... } it prints (or any red error) and add it in a comment to this page (if you have a Notion account) or email it to me at sunoexplorer@gmail.com.