Brasa — synthetic wildfire
thermal imagery.
Real labeled wildfire thermal data is scarce — fires are dangerous to instrument, aerial campaigns are expensive, and “ground truth” is usually a threshold drawn on the very pixels a model trains on. Brasa is the synthetic alternative, shipped with the evidence that its physics is real. Every frame is a fully simulated wildfire on a real mountainside — SRTM terrain, Rothermel fire spread, a 3-D conifer forest — imaged through a physically-modeled thermal camera. Labels are projections of the simulated ground truth: pixel-exact, never thresholded from the image.
full-scale bundles generated on request — how to get more
- release
- 01 · brasa
- engine
- 1ffde59 · 2026-07-10
- license
- CC BY-NC 4.0 · free
- cite as
- Brasa — ay4la.com/brasa
Trained on synthetic only. Detects real fire.
A YOLO detector trained on nothing but Brasa frames — it never saw a real thermal image — evaluated on 738 real FLAME 3 wildfire frames (Sycan Marsh prescribed burns, aerial radiometric thermal):
The detector never saw a real thermal image before evaluation. And if a perfect score makes you suspicious — good instinct. That benchmark is saturated, so don't take the metric's word for it: the next panel shows the measurement being built, one validated effect at a time, so you can check the mechanism instead.
No black box.
The “measurement” is not a filter over a picture — it's a chain of named, individually-validated effects. Watch one fire frame lose exactly one thing at a time: optical blur (Airy PSF), detector sampling, 40 mK temporal noise, fixed-pattern noise, then the 14-bit ADC. The final panel is bit-identical to the delivered frame.


Validated against independent references.
No physics stage is trusted until it reproduces an independent reference. Each figure carries its own method box — reference, metric, threshold — printed by the same code the validation gates run on.
| ✓ | Clear-sky LWIR radiance vs libRadtran RT | max |dTb| 0.001 K · < 0.5 K |
| ✓ | Fire Tb distribution vs real FLAME | within 8-11 K |
| ✓ | Fire micro-texture: fill fraction | 0.039 · 0.03-0.08 |
| ✓ | Fire micro-texture: within-fire Tb CV | 0.144 · 0.12-0.18 |
| ✓ | Fire micro-texture: Tb p10-p90 spread (K) | 196 · 130-200 |
| ✓ | Background metre-scale clutter hp-sigma (K) | 0.97 · <= 2x |
| ✓ | Rothermel spread vs hand-traced + published grass ROS | reproduces |
| ✓ | Flaming residence time | exact |
The sample dataset.
The free download is a deliberate evaluation slice — 48 frames = one ignition→growth fire × three sensor profiles × day and night — sized for inspecting the labels, verifying the radiometric format, and smoke-testing a training pipeline before you commit to more. It is not the training corpus; see the full-release block below for that.
Each frame is 16-bit radiometric PGM (deci-kelvin — pixel/10 = Tb K, so fire cores are represented, not clipped), with COCO detection labels carrying the physical ground truth: FRP, fire area, plume height, peak Tb, contrast. Frames with no visible fire ship as labeled negatives.





license: CC BY-NC 4.0 — free for research & noncommercial use, with attribution.
commercial use — including deploying models trained on this data — requires a license.
The full release is generated, not stored.
Brasa is a deterministic generator — every frame regenerates bit-identically from (engine version, seed), so “the dataset” is whatever size your problem needs. Standard bundles run 300+ frames across seeded scenarios (terrain, weather, ignition cause, time of day) and every bundle ships with its live-run validation certificate. While I sort long-term hosting, bundles are delivered by request:
- ›Research / noncommercial bundles — free, CC BY-NC 4.0, sized to your ask
- ›Your sensor: custom profile (band, GSD, NETD, ADC) baked into the render
- ›Commercial use & model deployment — licensed, priced per ask
bundles typically ship within days — generation is deterministic and fast.
Three reference sensors.
Every number below is computed from the sensor model — none typed by hand. The profiles span GSD 0.82→13.6 m/px and pixel-limited→diffraction-limited optics: one resolves the fire, one sees it sub-pixel. Your sensor spec is a profile away.
| spec | tower-LWIR | airborne-LWIR | longrange-LWIR |
|---|---|---|---|
| role | fixed early-detection tower | airborne nadir mapper | long-range wide-area scanner |
| band | 8–12 µm | 8–12 µm | 8–12 µm |
| range | 1000 m | 2000 m | 20000 m |
| fov | 24° | 35° | 40° |
| detector | 512 px | 1024 px | 1024 px |
| gsd | 0.818 m/px | 1.193 m/px | 13.635 m/px |
| f/# | 1 | 1.2 | 2 |
| regime | pixel-limited | diffraction-limited | diffraction-limited |
| netd | 50 mK | 40 mK | 60 mK |
| adc | 14-bit | 14-bit | 14-bit |
| frame rate | 30 Hz | 60 Hz | 10 Hz |
The honest part.
A number without its caveats is marketing. These ship with every bundle, alongside the validation certificate:
- ›The radiometric max-Tb threshold baseline also scores 1.000 on FLAME 3 — its Fire labels are temperature-defined on radiometric data, so that benchmark cannot show ML advantage, only transfer.
- ›The AGC number is single-frame; deployed systems integrate over video, which multiplies per-frame TPR toward operational rates.
- ›FLAME 3 measures one world (forested prescribed understory burns); open grass/brush transfer cannot be scored against it.
deterministic provenance: every frame regenerates bit-identically from (engine version, seed). the numbers on this page are imported from the engine's machine-derived results files — never re-typed.