Documentation
The full spec for
docs/SPEC.md. Below is the canonical summary plus the fastest route to a successful submission.1. Task
Predict aerodynamic coefficients (Cl, Cd, Cm) for a 2D airfoil at a single operating point (Re, α, M). Operating envelope:
- Reynolds number
Re ∈ [1e5, 1e7] - Angle of attack
α ∈ [-10°, 20°](1° resolution) - Mach number
M ∈ [0.1, 0.8]
2. Datasets
Public training set
UIUC airfoil database (~1,600 airfoils) labelled by XFOIL across the operating envelope. Distributed as a single train.parquet from R2:
curl -O https://r2.comparotor.com/rotorbench-aero/v0.1/train.parquet curl -O https://r2.comparotor.com/rotorbench-aero/v0.1/airfoils.tar.gz
Private test set
200 held-out airfoils (100 perturbed UIUC parents, 50 supercritical for OOD, 50 modern eVTOL/wind-blade sections). Labelled with SU2 RANS. Geometry and labels remain private. 50-airfoil rotation each quarter.
3. Submission formats
Two accepted formats. Both are archived in R2 for 24 months.
ONNX + wrapper
Upload model.onnx plus a wrapper.json declaring input/output shapes. Inputs: geometry: float32[200, 2], operating_point: float32[3]. Output: coefficients: float32[3].
Docker image
Container exposing GET /healthz and POST /predict. Resources: 16 GB RAM, 1× NVIDIA T4, 60s wall-clock per request.
4. Scoring
Five metrics. The leaderboard's default sort is the composite below; users can re-sort by any individual metric.
composite = MAE_Cl + 10·MAE_Cd + 0.5·MAE_Cm
+ 0.2·(1 - rho_LD)
+ 0.1·OOD_score
+ 0.001·latency_p50_ms- MAE on Cl, Cd, Cm — pointwise mean absolute error
- ρ L/D — Spearman rank correlation of L/D across airfoils per operating point
- OOD score — error on the supercritical-airfoil subset
- Latency p50 / p99 — wall-clock on the reference T4 container
5. Submission API (fastest path)
# 1. Register the submission (returns upload_url for ONNX)
curl -X POST $API/submissions \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model_name": "my-rotor-net",
"model_version": "1.0.0",
"format": "onnx",
"visibility": "public",
"benchmark": "rotorbench-aero-v0.1"
}'
# 2. Upload the ONNX artefact
curl -X PUT "$UPLOAD_URL" \
-H "Authorization: Bearer $TOKEN" \
--data-binary @model.onnx
# 3. Finalize and queue evaluation
curl -X POST "$FINALIZE_URL" \
-H "Authorization: Bearer $TOKEN"
# 4. Poll the run
curl "$API/runs/$RUN_ID"6. Anti-gaming
- Plan-tier rate limits (Free: 1/week, Pro: 50/month)
- 50-airfoil quarterly rotation of the private test set
- All submission artefacts archived in R2 for 24 months — replay against fresh sets if contamination is suspected
- Sub-percent Gaussian geometry obfuscation breaks exact-match memorisation
- Optional manual review for SOTA-claim submissions (composite better than current best by >2σ)
- Two-run reproducibility check; flag if results disagree above numerical tolerance
Want the full spec?
The complete SPEC.md in the repo is the source of truth — including the SU2 RANS generation pipeline, full D1 schema, and the OpenAPI contract at apps/api/openapi.yaml.
Questions? Email hello@comparotor.com — solo founder, replies same-day.