Aporia

Aporia is stress analysis for crowds running on neural networks. Under 25 megabytes,
trained on 1,500 simulated bends, and a density map in 13 milliseconds.
Free, open-weight, runs locally in your browser.

The Aporia dashboard: bend controls on the left, the density maps of the current bend and of a wider variant on the right, graded on Fruin's scale.
A single comprehensive dashboard: choose a preset, or manually customize the bend, and see the density map being updated live

How CFD-U is made. Three steps from crowd simulations to a model that runs in your browser.

One frame of a JuPedSim run: pedestrians and their recent paths turning through a 90° bend.
1. Simulate. 1,500 corridor bends, two seeds each, in JuPedSim. 22 s of compute per run.
The model disagreement map: where the three trained seeds differ on the density map.
2. Train. A U-Net of 1.9 M parameters, learns the density map from the geometry. Three seeds, averaged.
cfdu-ensemble.onnx 22 MB θ 90° w 2.2 m c 0 m q 0.68 CFD-U 13 ms
3. Ship. Exported to ONNX: four inputs in, one map out. 22 MB, run on your own GPU, in the browser.

Read the map, compare the fix. Every pixel is people per square metre, graded on Fruin's levels of service. Change one thing and the variant sits beside the current bend, at the same total flow.

A density map read at one point before the inner corner: 0.84 people per square metre, level D. A ring marks the peak, just past the corner.
Density map. People per m², the p99 peak, and its Fruin level from A to F.
The current 2.2 m bend beside a 3 m variant carrying the same flow: the peak drops from 0.92 to 0.65 people per square metre, 29 % lower, from level D to C.
Before and after. A variant beside the current bend, at the same total flow. Export both as PNG.

Cutting the corner feels like the easy fix. It barely helps. In simulation, it lowers the peak density by 3 % at most, and in sharp bends it raises it. The angle and the width set the load: same crowd, wider corridor, less crowding.
Click here to try it

Measured, not promised. Held-out bends, scored against the simulator's own noise and two shortcuts. Means of three seeds.

How to read the numbers

CFD-U
Aporia's model.
Noise
The simulator against itself, run twice. No model can beat it.
Nearest
Copy the map of the most similar bend seen in training.
Formula
The hand calculation: density = flow ÷ walking speed.
  1. RMSE Average error per point of the map. Lower is better.
  2. Speed Time to draw one map. No GPU: a phone browser without WebGPU.
  3. Peak Error on the busiest spot (p99). Lower is better.
  4. Fruin level How often the peak gets the right A–F grade. Higher is better.

All on bends kept out of training.

0.008 ped/m² RMSE. Close to the simulator's own noise floor.

CFD-U
0.008
Noise
0.002
Nearest
0.158
Formula
0.200

13 ms per map. Warm, in the browser. A JuPedSim run takes 22 s.

Laptop
13 ms
Phone
31 ms
No GPU
129 ms

1.2 % off the peak. The p99 load, on bends from 30 to 120°.

CFD-U
1.2 %
Nearest
10 %
Formula
39 %

99 % right Fruin level. Same bends; 83 % on angles it never saw.

CFD-U
99 %
Nearest
84 %
Formula
23 %

Validation report · Detailed measurements

Questions? Answers.

What does Aporia do?

It shows where people get squeezed when a crowd walks around a corner, as a colour map of how crowded each spot is. You describe a corridor bend (its angle, its width, how much of the inner corner is cut off, and how many people walk through per minute) and the map appears at once. Then you change one thing and see whether it helps. The name is Greek for “no way through”.

Who is it for?

Anyone who shapes how people move through a space: architects, station and venue planners, event organisers, students, or the simply curious. No crowd science needed: the map and its levels are made to be read at a glance.

How do I use it?

Open the demo and pick a scenario, such as a metro transfer or a stadium exit. Each one is a pair: the current situation, A, and a proposed change, B. Move the sliders to adjust either; both maps update as you go, and B's header says how much its peak differs from A's. Hover a map to read the same spot on both.

Do I need to install anything?

No. It runs in your web browser, on a laptop or a phone. The first visit downloads about 25 MB, mostly the model; your browser keeps it, so later visits start in a moment. Browsers with WebGPU run it on your graphics card, the others on the processor: a little slower, the same maps.

What do the colours mean?

Each pixel is a density: how many people share one square metre, on average, once the flow has settled. Darker is more crowded. The colours follow Fruin's levels of service, a scale planners have used since 1971, from A, free flow (under 0.31 people per m²), to F, jammed (above 2.15). The number on each map is its peak: the density that only the most crowded 1 % of the corridor goes beyond, so one odd pixel cannot set it.

Why compare at the same total flow?

Because the crowd does not shrink when you redesign the corridor. Aporia keeps the number of people per minute fixed, so a wider corridor spreads the same people over more floor. The difference between A and B then comes from the design, not from fewer people.

How does it work?

In three steps. A research crowd simulator, JuPedSim, tuned on published experiments with real pedestrians, walked virtual crowds through 1,500 different bends. A neural network, CFD-U, then learned to draw the resulting density map directly from the shape of the bend. That network runs in your browser: a simulation takes about 22 seconds, the network about 13 milliseconds, so you can try ideas as fast as you think of them. The network's weights and the 1,500 simulated bends it learned from are public on Hugging Face.

How accurate is it?

On test bends it never saw during training, from 30 to 120°, its peak is within about 1 % of the simulator's, and it picks the right level of service 99 % of the time. The simulator itself was calibrated and checked against real experiments. The figures are in the numbers above, and the reports below go into detail.

When shouldn't I trust it?

It knows one shape: a single bend in a corridor, everyone walking the same way at an everyday pace. It is validated for angles up to 120°, widths from 1.5 to 3 m and moderate flows; outside that range, the app shows a warning and the error grows. The Disagreement view shows where its three networks disagree: read those areas with care. It models no pushing, panic, counter-flow or evacuation, so it cannot certify a safety plan: use it to compare ideas, then have a real study done.

Is it free? What happens to my data?

Free, open-weight (model and dataset on Hugging Face), and no account. Everything is computed on your device: the bends you try are never sent anywhere, and there is no server behind the demo to send them to.

Something looks wrong, or I have an idea.

Please get in touch and paste the demo's link: every setting lives in it, so it reproduces your bend exactly.

Aporia is free, in any recent browser, on a laptop or a phone.
Under 25 megabytes, a map in milliseconds, and nothing to install.