mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-10-05 09:35:31 -03:00
feat(update): track buzz prices and alert below a threshold
CivitAI's public API deliberately omits prices — paidAccess is trimmed to
{permanent, endsAt} because "pricing belongs to the purchase flow" — but the
public model page embeds the site's own model.getById result, including
paidAccess.terms, in its server-rendered payload. That is read anonymously
(no API key, no internal endpoint, no forged Origin), one request per gated
model, so only the ~2% of models that actually carry a gate pay for it.
- optional capture, off by default: price_tracking_enabled,
price_alert_threshold_buzz (0 = alert on "became free" only) and
price_check_ttl_hours; prices refresh on their own TTL and immediately when a
gate changes, and a failed fetch keeps the stored price instead of blanking it
- versions that stop carrying a gate are marked free (persisted gate_lapsed_at)
and gate transitions are reported as events on the refresh response, so a
version already in the library can announce that it became free
- price_alert_state plus a price_drop edge event; new
GET /api/lm/{type}/updates/price-alerts lists what is under the threshold
- versions tab shows the price (effective, with the list price struck through
and a Blue Buzz note) and a Free Now badge; an update check toasts the
transitions in one message
- the parser and the alerts query are unit-tested against a trimmed page
fixture, and every route definition is now asserted to resolve to a handler
Plan, verification notes and the deviations from it are in
docs/plans/paid-model-price-tracking.md.
This commit is contained in:
@@ -1163,6 +1163,22 @@ export class SettingsManager {
|
||||
hidePaidUpdatesCheckbox.checked = state.global.settings.hide_paid_updates || false;
|
||||
}
|
||||
|
||||
// Set buzz price tracking settings
|
||||
const priceTrackingEnabledCheckbox = document.getElementById('priceTrackingEnabled');
|
||||
if (priceTrackingEnabledCheckbox) {
|
||||
priceTrackingEnabledCheckbox.checked = state.global.settings.price_tracking_enabled || false;
|
||||
}
|
||||
|
||||
const priceAlertThresholdInput = document.getElementById('priceAlertThresholdBuzz');
|
||||
if (priceAlertThresholdInput) {
|
||||
priceAlertThresholdInput.value = state.global.settings.price_alert_threshold_buzz ?? 0;
|
||||
}
|
||||
|
||||
const priceCheckTtlInput = document.getElementById('priceCheckTtlHours');
|
||||
if (priceCheckTtlInput) {
|
||||
priceCheckTtlInput.value = state.global.settings.price_check_ttl_hours ?? 24;
|
||||
}
|
||||
|
||||
const skipPreviouslyDownloadedModelVersionsCheckbox = document.getElementById('skipPreviouslyDownloadedModelVersions');
|
||||
if (skipPreviouslyDownloadedModelVersionsCheckbox) {
|
||||
skipPreviouslyDownloadedModelVersionsCheckbox.checked =
|
||||
|
||||
Reference in New Issue
Block a user