Performance score
One grade per variant, from a fixed rubric over the stats the optimizer already measures.
Every ready variant gets a score from 0 to 100 and a grade from A to F. The rubric is deterministic: the same stats always give the same score, so a change in grade means the model changed. The dashboard shows the grade next to each variant and the headline grade (the gpu variant when it is ready, else the default preset) in the asset header; the API returns it as score on GET /api/v1/assets/{id}/variants.
Rubric v1
| Check | Points | Full points | Partial points |
|---|---|---|---|
| Download size | 25 | ≤ 1 MB | ≤ 3 MB 20 · ≤ 8 MB 12 · ≤ 20 MB 5 · more 0 |
| Triangles | 20 | ≤ 50,000 | ≤ 150k 15 · ≤ 500k 8 · ≤ 1M 3 · more 0 |
| Draw calls | 15 | ≤ 10 | ≤ 30 11 · ≤ 100 6 · ≤ 300 2 · more 0 |
| GPU texture memory | 20 | ≤ 16 MB | ≤ 64 MB 14 · ≤ 128 MB 7 · ≤ 256 MB 2 · more 0 |
| Texture formats | 10 | KTX2, or no textures | all WebP/AVIF 7 · JPEG/PNG 4 · minus 4 when a side exceeds 2048 px (floor 0) |
| Geometry compression | 10 | meshopt or Draco | quantized 6 · raw 2 |
A- 90 points or more
B- 75 to 89
C- 55 to 74
D- 35 to 54
F- below 35
Sizes are decimal (1 MB = 1,000,000 bytes), the same unit as the plan limits. GPU texture memory counts decoded RGBA8 bytes, with KTX2 at a sixth of that. Each check that loses points names the URL parameter or preset that would win them back; the dashboard shows that advice in the badge tooltip.
Badge
Public assets serve a shields-style badge of the headline grade and the variant's size, cached for five minutes. It answers 404 for private assets, whatever the URL carries, so a badge never reveals that a private model exists.

<img src="https://cdn.glboost.com/{assetId}/badge.svg" alt="GLBoost score">Validation
Next to the score, every version carries a Khronos glTF-Validator report of the uploaded file: error, warning, info, and hint counts with the messages grouped by issue code (the first 200 are kept). Validation never blocks an upload; a file the validator cannot read is reported as skipped.
Versioning
The rubric carries a version (score.version, currently 1). Budgets and points only change with a new version, announced in the changelog, so scores stay comparable over time.