Plot parametric inline metrology as wafermaps, in your browser. No install, no upload, no backend.
▶ Open the live demo — click Load demo data and you have a wafer on screen in two seconds.
Every fab has a script that plots wafermaps. It lives on someone's desktop, it reads one CSV layout, and it stops working when that person changes team.
The tools that do it properly are yield management platforms: they need a server, an IT project, and your data in someone else's database. That is a reasonable trade at volume. It is absurd when you just want to look at a thickness map.
This is a single HTML file. Open it, drop a CSV, get a wafermap. Your measurements never leave the machine — there is nothing to send them to.
With the demo data: open the live demo and click Load demo data. Six wafers with known signatures — edge roll-up, centre dip, tilt, ring, hotspot — so you can see what the plot does before feeding it anything.
With your own data: drop two CSV files anywhere on the page. Order does not matter; files are routed by their header row.
Offline: download index.html and open it. It works with no network at all.
Measurements — one row per measurement:
wafer_id,site_id,value
LOT1-W01,1,99.96
LOT1-W01,2,100.65
LOT1-W02,1,100.21Site mapping — Cartesian coordinates in mm from wafer centre:
site_id,x_mm,y_mm
1,0.0,0.0
2,29.4,0.0
3,14.7,25.461A few things the parser handles so you do not have to:
- Columns are found by name, not position. Any order works.
site,wafer,val,measurementandresultare accepted as aliases. - European Excel exports work. Semicolon separators and comma decimals are detected automatically.
1234,56and1,234.56both read correctly. wafer_idis optional. Without it, everything is treated as one wafer.- No lot hierarchy.
wafer_idis a plain grouping key — wafers from different lots can sit in the same file.
Mappings are remembered in your browser and matched automatically against the site IDs in your measurement file. You add a mapping once, then only ever drop measurements. If a saved mapping covers only part of the site IDs, the tool says so rather than plotting a partial map silently.
- Diverging colour scale centred on the wafer mean. A healthy wafer reads as almost blank, so a signature arrives as colour before you read any number. The half-range is the 95th percentile of the deviation, not the maximum — one outlier cannot flatten the rest of the map.
- Viridis option for reading absolute level rather than deviation, and for printing in black and white.
- Interpolated field (IDW) with two safeguards: measured sites stay marked on top, and a dashed ring shows the outermost measured radius. Past that ring the surface is extrapolated, not measured.
- Per-wafer statistics — mean, standard deviation, range, uniformity as 1σ/x̄ and range/2x̄.
- PNG export at 3× for reports and 8Ds.
- Mapping library with JSON import/export, so a mapping can be handed to a colleague or committed next to a dataset.
This list is a choice, not a gap:
- No bin maps, no yield. This is for parametric inline metrology — thickness, uniformity, resistivity.
- No STDF, KLARF or prober formats. CSV only.
- No database, no history, no lot genealogy, no trend charts.
- No accounts, no cloud, no backend. There is no server component at all.
Multi-wafer comparison on a shared colour scale is the next milestone, not a current feature.
gen_wafer_data.py generates synthetic measurements with realistic signatures. Python 3, standard library only, no dependencies:
python gen_wafer_data.py --wafers 12 --sites 49 --seed 42It writes three files: the measurements, a matching site mapping, and truth.csv listing which signature was injected into each wafer — so you can check that the plot shows what was actually put in.
Available signatures: flat, edge_high, edge_low, center_dip, bowl, tilt, ring, hotspot. The seed makes every run reproducible.
There is no backend, no analytics and no network request of any kind. Files are read with the browser's FileReader; nothing is uploaded because there is nowhere to upload it to. Saved mappings live in your browser's local storage and can be exported as a file.
- v0.2 — several wafers side by side on a shared colour scale, wafer-to-wafer sigma
- Fixed scale bounds in % of target or spec limits
- Keyboard navigation across wafers
Issues are welcome, especially "it would not read my CSV" — paste your header row and a couple of data rows and it will get handled. Format coverage is the part that benefits most from real files.
MIT.
