Answers “Where to build” in Satisfactory (v1.2). Paste raw resource rates or product targets and get capacity-aware factory sites on the map — under your extractor settings and map seed.
Not a full production calculator or collectible map. Bring ratios from Satisfactory Calculator (or any planner), or pick products and alternates here for a quick site estimate.
- Hosted: satisfactory-heatmap.com
- Self-host (Docker): paste-and-go compose below — no Node install required
# Save as docker-compose.yml (or copy docker-compose.example.yml from this repo)
# Then:
docker compose up -d
# → http://localhost:18547services:
satisfactory-heatmap:
image: ghcr.io/tylerr909/satisfactory-heat-map:latest
ports:
- "18547:80"
restart: unless-stoppedImage: ghcr.io/tylerr909/satisfactory-heat-map.
| You bring… | You get… |
|---|---|
| Raw demand (e.g. 1200 iron / 600 copper /min) | A live heatmap of where that demand is easiest to feed |
| Product targets (e.g. HMF 10/min, multi-product stacks) | Recipe expand (defaults + alternates / quick selects) → same heat engine; off-site intermediate prune; Send to raw to hand-tune |
| Extractor settings (Mk + clock, oil/water/wells modeled correctly) | Capacity that matches your extractors |
Paste your world Map Seed plus Resource Node Randomization and Resource Node Purity via the Seed control (chips row). Node types/purities use Konsl’s MIT randomization compiled to WASM (crates/vendored/konsl_randomization — see third_party/konsl-satisfactory-world-generator.md). The seed is only the PRNG key; Default randomization + a fixed purity ignores it. Saved plans are scoped per named saved world (the full triple).
OSS notices for redistributed or ported material live under third_party/ (Konsl seed algorithm). Node slots are our own FModel extract. In-app: planner Attributions. Not affiliated with Coffee Stain Studios.
Capacity is not optional. Sitting next to one impure node at 600/min is a bad site even if the pin is close. Pins get tags from local extract capacity:
- OK — solid fit
- Limited — meets demand but little room to grow
- Abundant — lots of spare nearby (consider leaving these nodes for a larger factory)
- Shortfall — can’t fully feed the plan here
Centered vs Weighted (under Clustering) changes what “best” means:
- Centered — centers the factory at the midpoint between sufficient nodes
- Weighted — tugs the midpoint toward the heaviest supply nodes (1200/min iron + 100/min copper shifts closer to the iron)
Water: Open-water extractors aren’t discrete game nodes, but the heatmap models them from basemap open-water pockets (plus optional Tier 8 resource wells). In Products mode, mark Water off-site under Intermediates if you pipe it from elsewhere.
Share and save plans. Copy the plan hash from the Products/Raw header, paste to import, or use the plan chips to save/switch builds. The URL hash is a compact #v1.… computation payload (display settings stay local). Wire format and Open in Heatmap notes for other tools: docs/SHARE_HASH.md, docs/SHARE_HASH_VENDORING.md.
Not affiliated with Coffee Stain Studios. Node positions from our FModel world extract; recipes are a compact extract from official Docs — see in-app Attributions.
- Needs only Docker Compose + pull access to GHCR (public image: no login).
- Reverse-proxy
18547(or remap the host port) behind your TLS terminator if you expose it. - Static SPA: no database, no accounts. Plans live in the browser (
localStorage) unless you share hashes. - Build from source: see CONTRIBUTING.md.