AY4LA
simulation R&D
#work#lab#commission#founder#contact
← ay4la · the lab
release 01LWIR 8–12µm · labeled · free · CC BY-NC 4.0

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.

$download the sample48 frames · 16-bit radiometric PGM · COCO labels · 0.3 MB
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
[01]//transfer_results.json

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):

1.000
AUC · radiometric — every real fire frame outscored every no-fire frame at zero false positives. saturated: a plain temperature threshold also scores 1.000 here — this proves transfer, not ML advantage
0.774
AUC · deployed-camera AGC video — the honest frontier: 0.384 TPR at ≤5% FPR, from 0.079 one engine milestone earlier

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.

[02]//sensor_model.log

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.

Brasa sensor cascade — one fire frame at every sensor stage: truth radiance, optics PSF, detector sampling, NETD temporal noise, fixed-pattern noise, 14-bit ADC
The same synthetic world seen through a deployed camera's plateau-histogram-equalization AGC pipeline
and the same world through a real camera's AGC pipeline — we model the camera, not just the fire.
[03]//validation.log

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 brightness temperature vs the libRadtran radiative-transfer oracle, per zenith angle
the radiometry matches the reference code exactly — max |ΔTb| 0.001 K vs libRadtran 2.0.6.
Emergent plume centreline velocity vs source buoyancy flux, compared to the Briggs F^(1/3) law
the Briggs F^(1/3) plume law emerges from the sim — first principles, not a fit.
Sub-pixel fire brightness-temperature signal, MWIR vs LWIR, over pixel fill fraction
why fire detection uses the mid-wave band — the Dozier bispectral signature, reproduced.
Smoke mass-extinction across the spectrum
why an IR sensor sees a hotspot the eye can't — Ångström aerosol extinction, ≈43× visible:LWIR.
reference gates — engine vs independent data
Clear-sky LWIR radiance vs libRadtran RTmax |dTb| 0.001 K · < 0.5 K
Fire Tb distribution vs real FLAMEwithin 8-11 K
Fire micro-texture: fill fraction0.039 · 0.03-0.08
Fire micro-texture: within-fire Tb CV0.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 ROSreproduces
Flaming residence timeexact
[04]//dataset.card

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.

understory fire fragmenting through a conifer stand — truth boxes from the sim, not a labeler.
understory fire fragmenting through a conifer stand — truth boxes from the sim, not a labeler.
burn scar with ember speckle and an active head.
burn scar with ember speckle and an active head.
the hard case — an incipient night fire down in the sensor noise.
the hard case — an incipient night fire down in the sensor noise.
night lightning-ignition fire.
night lightning-ignition fire.
Watermarked contact sheet of the Brasa sample dataset — one ignition-to-growth fire through three sensor profiles, day and night
tap to view full size
$download the sample

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.

need more than the sample?

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
$request a bundle

bundles typically ship within days — generation is deterministic and fast.

[05]//spec_sheet.json

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.

spectower-LWIRairborne-LWIRlongrange-LWIR
rolefixed early-detection towerairborne nadir mapperlong-range wide-area scanner
band8–12 µm8–12 µm8–12 µm
range1000 m2000 m20000 m
fov24°35°40°
detector512 px1024 px1024 px
gsd0.818 m/px1.193 m/px13.635 m/px
f/#11.22
regimepixel-limiteddiffraction-limiteddiffraction-limited
netd50 mK40 mK60 mK
adc14-bit14-bit14-bit
frame rate30 Hz60 Hz10 Hz
[06]//caveats.md

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.