| name | pricing-refresh |
| description | Re-measure every model's live credit cost and rewrite the cost matrix. MANDATORY at the start of every new film project, before quoting or planning. Trigger - /pricing-refresh, or automatically as the first step of film-setup. |
Pricing Refresh
Run this before every new project. No exceptions.
Provider pricing moves. A stale matrix is worse than no matrix, because people trust it — and a quote built on last quarter's numbers is a quote you cannot honour.
Run it
node tools/refresh-cost-matrix.js --dry-run
node tools/refresh-cost-matrix.js
Costs nothing — higgsfield generate cost is a preflight, not a generation. Takes about a minute for ~28 configurations.
What it does
- Probes every known video and image configuration via the CLI
- Computes credits per second — the only number that compares models fairly, since clip lengths differ (an 8s model at a higher clip price is often cheaper per second)
- Sorts ascending by cost
- Flags anything whose price changed since last run, and anything that could no longer be priced (retired model)
- Derives and prints the two defaults that matter:
- cheapest model with full identity control → identity-critical shots
- cheapest model overall → everything else
- Rewrites
assets/MODEL_COST_MATRIX.json with a fresh measured_on date
Read the diff, don't just accept it
The report marks changed prices as was N. Investigate before planning:
- A price dropped — the cheaper tier may now beat your usual default. Re-plan.
- A price rose — a budget assumed on the old number no longer holds. Re-quote.
- A model could not be priced — it may be retired. Remove it from the plan; do not discover this mid-batch.
- A new model appeared — add it to the probe list in
tools/refresh-cost-matrix.js.
Prerequisites
higgsfield account status
The tool exits with a clear message if either is missing. The CLI errors on every command until a workspace is set.
Then quote
Feed the refreshed matrix into model-select and cost-estimate. Never quote a client from remembered numbers or from this file without having re-run it for that project.
Output
{
"measured_on": "2026-08-07",
"configurations_priced": 28,
"changed_since_last": [],
"retired": [],
"default_identity_model": "seedance_2_0_mini 720p (2.5 cr/s)",
"default_general_model": "veo3_1_lite 8s (1.0 cr/s)"
}