Raise daily generation limit to 100 and fix limit UI coercion.

0 was misread as zero allowed on older servers; player no longer falls back to 10 when saving limits.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-07 16:28:19 +01:00
parent 5f90945b97
commit ec4ca4b7c0
3 changed files with 14 additions and 6 deletions
+9 -4
View File
@@ -590,7 +590,7 @@
Max new songs / day Max new songs / day
<span class="hint">Hard cap on Lyria generations</span> <span class="hint">Hard cap on Lyria generations</span>
</label> </label>
<input type="number" class="num-input" id="setMaxPerDay" min="1" max="100" value="10"> <input type="number" class="num-input" id="setMaxPerDay" min="0" max="200" value="100" title="0 = unlimited">
</div> </div>
<div class="settings-divider">Lyria 3 (from API)</div> <div class="settings-divider">Lyria 3 (from API)</div>
<div class="lyria-status ok" id="lyriaApiStatus">Checking Gemini / Lyria…</div> <div class="lyria-status ok" id="lyriaApiStatus">Checking Gemini / Lyria…</div>
@@ -1052,7 +1052,8 @@
new_song_chance: data.playback?.new_song_chance, new_song_chance: data.playback?.new_song_chance,
}); });
if (data.budget) { if (data.budget) {
setMaxPerDay.value = data.budget.max_per_day || 10; const cap = data.limits?.max_new_songs_per_day ?? data.budget?.max_per_day;
setMaxPerDay.value = cap === undefined || cap === null ? 100 : cap;
} }
if (data.lyria) syncLyriaUI(data.lyria); if (data.lyria) syncLyriaUI(data.lyria);
updateModeBadge(); updateModeBadge();
@@ -1074,7 +1075,10 @@
new_song_chance: setChance.value / 100, new_song_chance: setChance.value / 100,
}, },
limits: { limits: {
max_new_songs_per_day: parseInt(setMaxPerDay.value, 10) || 10, max_new_songs_per_day: (() => {
const n = parseInt(setMaxPerDay.value, 10);
return Number.isFinite(n) && n >= 0 ? n : 100;
})(),
}, },
lyria: { lyria: {
model: setLyriaModel.value, model: setLyriaModel.value,
@@ -1098,7 +1102,8 @@
statRemaining.textContent = `${data.budget.remaining ?? 0} remaining`; statRemaining.textContent = `${data.budget.remaining ?? 0} remaining`;
} }
const perTrack = data.costs?.per_track_estimate_usd || 0.082; const perTrack = data.costs?.per_track_estimate_usd || 0.082;
statMaxBudget.textContent = fmtUsd(perTrack * (data.limits?.max_new_songs_per_day || 10)); const cap = data.limits?.max_new_songs_per_day ?? 100;
statMaxBudget.textContent = cap <= 0 ? '∞' : fmtUsd(perTrack * cap);
} catch (_) {} } catch (_) {}
savingSettings = false; savingSettings = false;
} }
Before
After
+1 -1
View File
@@ -69,7 +69,7 @@
"new_song_chance": 0.35 "new_song_chance": 0.35
}, },
"limits": { "limits": {
"max_new_songs_per_day": 0 "max_new_songs_per_day": 100
}, },
"costs": { "costs": {
"lyria_pro_usd": 0.08, "lyria_pro_usd": 0.08,
+4 -1
View File
@@ -87,7 +87,10 @@ def _dashboard_stats(cfg: Config) -> dict:
"today": budget, "today": budget,
"costs": rs.costs.__dict__ | {"per_track_estimate_usd": per_track}, "costs": rs.costs.__dict__ | {"per_track_estimate_usd": per_track},
"playback": rs.playback.__dict__, "playback": rs.playback.__dict__,
"projected_daily_max_usd": round(per_track * rs.limits.max_new_songs_per_day, 2), "projected_daily_max_usd": (
0 if rs.limits.max_new_songs_per_day <= 0
else round(per_track * rs.limits.max_new_songs_per_day, 2)
),
"generation": dict(_generation_state), "generation": dict(_generation_state),
} }