Skip to content

Releases: ProfRino/crowd-count

v2.1.1 — Grayscale for Google 3D tiles

Choose a tag to compare

@ProfRino ProfRino released this 17 Jul 02:26

The Grayscale toggle now also desaturates Google Photorealistic 3D Tiles in the 3D site view. Every streamed tile switches instantly when you toggle, and switches back just as fast - no re-download. The crowd and zone colours stay untouched, so a grey basemap makes the people and density read even more clearly.

This completes grayscale coverage across the app: 2D basemaps (OSM, Esri, Google), the 3D tile floor, and Google 3D tiles.

Includes everything from v2.1.0 (multi-point density gradients) and the v2.0.x fixes.

Download crowd-count.html below for the offline single-file app - save it anywhere and double-click it. Map tiles, place search, Google features, and the animated density references need an internet connection; everything else works offline.

v2.1.0 — Multi-point density gradients

Choose a tag to compare

@ProfRino ProfRino released this 16 Jul 23:00

New in this release:

  • Multi-point density gradients: a gradient zone is no longer limited to two distance/density points. Add any number of points along the direction axis for a piecewise-linear density profile — for example dense near a stage, easing through the middle, then dropping at the back. Use + Add density point in the zone panel; adding a point never changes the count until you edit it. Duplicate distances create step profiles.
  • Crowd totals still use exact integration of the profile over the real zone geometry (minus obstructions), validated against analytic cases.
  • Share links and project files persist every point. Existing links keep working; older builds reading a new multi-stop link fall back to a simple two-point gradient.

Also includes the v2.0.1-v2.0.2 fixes: working Grayscale toggle on the 2D map and crisp native cursors on scaled high-DPI screens.

Download crowd-count.html below for the offline single-file app — save it anywhere and double-click it. Map tiles, place search, Google features, and the animated density references need an internet connection; everything else works offline.

v2.0.2 — Grayscale fix + crisp native cursors

Choose a tag to compare

@ProfRino ProfRino released this 16 Jul 21:38

Fixes since v2.0.0:

  • Grayscale toggle (2D map): the Grayscale button now actually desaturates the basemap tiles. Zones, people and handles keep their colours. Works on OSM, Esri satellite and Google basemaps. (v2.0.1)
  • Cursors: the grab-hand cursor rendered black and pixelated on scaled high-DPI screens (Chrome on Windows has no native grab cursor and substitutes a low-res bitmap). The app now uses native OS cursors everywhere: arrow over the map, four-arrow move while panning and on drag handles. (v2.0.2)

Download crowd-count.html below for the offline single-file app — save it anywhere and double-click it. Map tiles, place search, Google features, and the animated density references need an internet connection; everything else works offline.

v2.0.0 — Full 3D site view, Google 3D Tiles, density gradients

Choose a tag to compare

@ProfRino ProfRino released this 16 Jul 00:18

The largest release since Crowd Count launched. Version 2.0 takes the estimator into full 3D — a complete 3D site view with instanced crowds, optional Google Photorealistic 3D Tiles, animated density references — and adds density gradients, crowd appearance controls, and a 2D renderer that now handles up to 200,000 people per zone.

Try it online at profrino.github.io/crowd-count, or download crowd-count.html below and double-click it.

Downloads in this release

  • crowd-count.html — the entire app in a single ~2.5 MB file. No install, no server: save it and double-click. Map tiles, place search, Google features, and the animated density references need an internet connection; everything else works offline.
  • dynamic_crowd_export_loop_1000_3x3x1.glb3x3x6.glb — the six animated crowd reference models (24–117 MB each). You do not need to download these: the app streams them from the Crowd Count website on demand. They are attached here as the canonical copies (the website deployment stages them from this release) and for self-hosting — place them in a crowd-models/ folder next to a self-hosted build and the app will use the local copies instead.

Full 3D site view

  • A complete 3D view of your site alongside the existing 2D map, with synchronized switching between the two.
  • Instanced crowd rendering designed for very large crowds, plus 3D zones and obstructions.
  • Orbit, pan and zoom mouse controls; keyboard navigation with WASD, Q/E, R/F and +/-.
  • Grayscale and colour display modes, and a collapsible controls panel.
  • Looping cinematic camera modes: Orbit, Flyover, Sweep, Push, Drone and Skim.
  • Press H for a crowd wave; Natural mix mode adds subtle idle crowd movement.

Google Maps and Photorealistic 3D Tiles

  • Google roadmap and satellite basemaps, and Google Photorealistic 3D Tiles in the 3D site view.
  • Bring your own Google Maps API key. It is stored only in your browser's localStorage and is never written into project files or share links.
  • Terrain-height sampling and raycasting place the crowd on the real ground, with tile-aware occlusion and a manual Reset height action after tiles finish loading.
  • Camera-clearance handling keeps cinematic flights above Google terrain.
  • Direct links and guidance for Google Cloud billing reports, API traffic, quotas and pricing.

Density gradients

  • Each zone can now be Uniform or a Gradient: a linear ramp between two densities along a draggable map direction.
  • Draggable start and end handles with configurable distances and densities, and an Enter-to-apply workflow so the direction can be adjusted before pedestrians are rendered.
  • Totals use exact gradient integration over the real zone geometry — accounting for changing polygon width and excluded obstructions — while safety warnings assess the peak gradient density against the selected standard.

Crowd appearance and orientation

  • Three people-colour modes: Neutral, By zone and Natural mix, with separate head, upper-body and lower-body colouring and more natural skin, hair and clothing palettes.
  • Random pedestrian orientation by default, or Aim crowd to face everyone in a zone towards a draggable point.
  • Shared human-scale definitions keep dimensions consistent across the 2D and 3D views, and the 2D symbols gained distinct head and shoulder geometry.

3D density reference

  • The original procedural Simple mode is joined by an Animated mode with six animated crowd presets, one for each density from 1 to 6 people/m².
  • Single and Compare examples are standardized to a 3 m × 3 m reference area, with the number of people matched exactly to the selected density.
  • Varied and Forward orientation options, deterministic randomized placement instead of obvious rows, and improved camera framing.

Sampling and count accuracy

  • The 2D visible-agent ceiling increased from roughly 15,000 to 200,000 agents per zone.
  • Improved sampling for circles, concave polygons and polygons containing holes, with reservoir and top-up sampling to eliminate missing areas in large or irregular zones.
  • Weighted rejection sampling matches the rendered distribution to gradient densities, and zone capacity keeps the exact area-minus-obstruction calculation.

Governing standards

  • Standard-specific threshold markers on the density sliders.
  • Corrected Green Guide threshold presentation (4.70, replacing the former 4.75 marker) and clearer warning wording that distinguishes the selected standard from its numeric limit.

Drawing, editing and ruler improvements

  • Better circle and rectangle completion (Enter or second click), restored draggable zone geometry handles, and cleaner cancellation when leaving drawing modes.
  • The ruler now shows the confirmed distance, a live preview to the next point, and a projected total — with explicit Done and Clear actions, correct point/segment counting, and a measurement that stays visible after leaving ruler mode.
  • Improved keyboard handling throughout for Enter, Escape and Ctrl/Cmd+Z.

Saving and sharing

  • Share links and project files now preserve gradient settings, people-colour mode, crowd aim points, and the new view settings.
  • Full backward compatibility: project files and share links from earlier versions keep working.
  • The Google API key remains excluded from saved projects and shared URLs.

Help, privacy and attribution

  • A much more complete About panel: feature inventory, density/area/gradient calculation explanations, 2D and 3D navigation instructions, and Google Maps Platform setup, usage and billing guidance.
  • Clear statements of which features make network requests and which data stays local.
  • Expanded attribution for map tiles, satellite imagery, 3D Tiles and human models, with map attribution controls repositioned out of the working area.

Compatibility

Everything from v1.5.0 is still here: polygon, circle and rectangle zones; obstructions; governing standards; indoor calibrated plans; Save/Open; share links; and the original Simple 3D density reference.


Disclaimer: all results are Fermi-style order-of-magnitude estimates and must be independently verified by a qualified safety professional before use in any design, planning, or regulatory context.

v1.5.0 — Save / Open project files + footer disclaimer

Choose a tag to compare

@ProfRino ProfRino released this 27 Jun 07:11

Two new features in v1.5.0.

Save / Open project files

Two new header buttons — Save and Open — sit between 3D density and About. They round-trip the full state to a plain JSON file:

  • Save → downloads `crowd-count-.json` with all zones (including shape, params, vertices, obstructions, density), the current view, basemap, and governing standard. The format is human-readable (2-space indented JSON) so files can be emailed, version-controlled, or hand-edited.
  • Open → file picker → parses the JSON → replaces the in-memory state. Any stale permalink hash in the URL is cleared so the file takes precedence.
  • Bad files surface an inline error banner: `Not valid JSON`, `Not a Crowd Count project file`, `Project file uses format version N — this build understands up to M`, or `missing required fields`.

This complements (but doesn't replace) the existing Copy share link — that one still encodes state into the URL fragment for instant sharing. Project files are the better option when you want a portable artefact you can keep, archive, or send by email.

Footer disclaimer

A persistent line below the bottom result bar reads:

Estimate only — verify with a qualified safety professional. Not for life-safety, design, or regulatory use. (more)

Clicking (more) expands the full text — explicit list of factors the tool does not model (flow direction, exits, surface conditions, group behaviour, weather, etc.) plus the MIT "as is" clause. Always visible, no longer buried inside the About panel.

Bundle

`crowd-count.html` single-file: 1.79 MB (gzip 484 kB).

v1.4.2 — Tutorial video in About

Choose a tag to compare

@ProfRino ProfRino released this 26 Jun 05:46

About panel now embeds a tutorial walk-through.

What's new

  • Tutorial section — added under About, between References and the developer info. Embeds the YouTube walk-through (privacy-enhanced `youtube-nocookie` domain — no cookies set until the user hits play) with a fallback link.
  • "For developers" grouping — Tech and Source code are now nested under a single `For developers` heading separated by a divider rule, so non-technical readers can skim past it.

Single-file bundle: 1.79 MB (gzip 482 kB). No new dependencies.

📺 Tutorial: https://youtu.be/TPXZ6oP3dDE

v1.4.1 — UI polish + indoor cursor fix

Choose a tag to compare

@ProfRino ProfRino released this 26 Jun 04:50

Polish release on top of v1.4.0.

Fixes

  • Slider tick alignment — the labels under the density slider now line up with the thumb exactly. The thumb has a fixed pixel width and the runnable track is inset by half that on each side; ticks are now offset by `(0.5 - pct) × 16 px` so they sit directly under the thumb at every value.
  • Indoor cursor now flips to crosshair while drawing. Root cause was a Vue scheduler interaction: `MapCanvas`'s six watchers stayed alive past unmount and dereferenced a null map, throwing inside `flushJobs()`. That aborted the rest of the scheduler queue — including `IndoorCanvas`'s re-render — so its template never reflected the new `state.drawing`. All six watchers now null-guard the map.
  • 3D density modal: removed the Reset (↺) button. Drag-to-orbit already restores the framing intuitively; the extra button was clutter.
  • Bottom-right map controls reordered to (i) → Satellite. The OSM attribution group is shifted left via CSS so Satellite can sit in the corner without the expanded © text overlapping it.
  • Default density at zone creation bumped from 1.5 → 2 ppl/m² to match the Purple Guide planning ceiling (which is the default standard).

No new features, no breaking changes. `crowd-count.html` is byte-stable around 1.79 MB (gzip 481 kB).

v1.4.0 — 3D crowd density reference

Choose a tag to compare

@ProfRino ProfRino released this 25 Jun 23:00

What's new

A new 3D density button in the header opens a Three.js modal that shows what a chosen crowd density actually looks like — a 2×2 m sample plot populated with little person figures at 1, 2, 3, 4, 5, or 6 people per square metre.

  • Single mode — one tile at the chosen density (defaults to the selected zone's density, rounded to the nearest integer 1–6).
  • Compare mode — all six densities side-by-side, colour-coded blue (1) → dark red (6).
  • Reset view (↺) restores camera defaults; drag orbits, scroll zooms.
  • Honest header: "zone is at 1.50 ppl/m² — showing nearest preset" so you know it's a reference, not an exact rendering.

Why

The slider gives you a number (e.g. 2.5 ppl/m²) and a colour, but most people don't have an intuition for what 2.5 ppl/m² actually feels like vs 5 ppl/m². The 3D scene grounds the abstract number in something you can look at — useful in event-planning conversations and in teaching.

Technical

  • Three.js scene with PBR materials, shadow-mapped directional light, and a hemisphere fill.
  • Reference layouts at 1–6 ppl/m² are authored by hand for natural spacing.
  • Lazy-loaded via dynamic `import()` — opening the modal triggers the Three.js download; if you never open it, the initial app load is unchanged.
  • Single-file bundle grows from ~1.0 MB to 1.79 MB (gzip 481 kB) when Three.js is inlined.

Downloads

`crowd-count.html` is a self-contained offline copy of the whole app — open it in any modern browser.

v1.3.0 — UX polish, traffic-light slider, simpler ruler

Choose a tag to compare

@ProfRino ProfRino released this 25 Jun 08:37

What's new since v1.2.0

  • Toolbar reorganised — Draw zone, Draw obstruction, and Ruler sit on the top row. The shape pill (Polygon / Circle / Rect) appears below only while drawing a zone, and switching it mid-draft mutates the current shape live.
  • Enter to commit a polygon, obstruction, or ruler polyline.
  • People and result-bar count freeze while drawing so dragging a circle / rectangle / obstruction no longer makes the numbers jitter. The result lands when you commit the shape.
  • Crash fix — drawing an obstruction no longer crashes the symbol layer (used to re-sample with degenerate inner rings).
  • Ruler simplified — single on/off button, polyline-only.
  • Obstruction help banner — "Click inside the selected zone…" appears the moment you press Draw obstruction.
  • Traffic-light density slider — black thumb up to 4 ppl/m², amber 4–6, red above 6. The unfilled track stays light grey on all three (was turning dark on amber/red in Chrome).
  • Satellite toggle aligned with the OSM attribution circle in the bottom-right corner.
  • About panel — added Source code, MIT License section, Citation block, and © 2026 Rino Lovreglio · Massey University footer. Removed the dramatic "crush regime" warnings from About and the per-zone banner.

How to use it

Citation

Lovreglio, R. Crowd Count. Massey University. https://github.com/ProfRino/crowd-count

v1.2.0 — shapes, obstructions, and ruler

Choose a tag to compare

@ProfRino ProfRino released this 25 Jun 06:38

What's new

  • Circle and rectangle shape primitives alongside free-form polygons. Pick the shape on the map toolbar before clicking Draw zone.
  • Obstructions (polygon holes) cut stages, water, vendor tents, columns out of a zone before the area × density math. People symbols never render inside an obstruction.
  • Distance / radius ruler — measure landmark distances and "how many people fit within X metres of point Y". Polyline and radius tools, with metric/imperial-aware HUD readout.

How to use it

Citation

Lovreglio, R. Crowd Count. Massey University. https://github.com/ProfRino/crowd-count