Table of contents
WearSurfacesDatasets
WearSurfacesDatasets publishes the surface textures captured during controlled wear tests, organised by material, abrasive grit, load and sliding distance. It is the public dataset of the ÉTS master’s research on wear in texture space, where it serves to compare simulated wear patterns with measured microgeometry, and it is published under ETSim for graphics and tribology researchers who need real wear progressions.
1. Overview
Each measured state is one Parquet leaf:
data/parquet/<material>/<shape>/<direction>/S<grit>/<load>g/<distance>mm/data.parquet
For example data/parquet/Cartboard/Raw/Normal/S60/200g/800mm/data.parquet. Each row stores one map as JPEG bytes in image_data, labelled by map_type; metadata.json lists ambient occlusion, bump, displacement, height, hillshade and normal maps. The same records are also packed as WebDataset archives data/shards/shard-0000.tar to shard-0839.tar.
data/parquet/sequences.json lists 20 wear timelines: cardboard at five loads (10 to 200 g, grit S60), foam, MDF (circle and line paths), PLA at several grits in linear and non-linear directions, soft wood, and unworn sandpaper references from S40 to S240.
On top of the data, the repository has three layers of tooling:
generate_datasets.py,read_datasets.pyandgenerate_metadata.py(Typer CLIs) build Parquet and shards from awear/folder of PNG maps, extract them back, and write per-leaf and index metadata.alignment/registers each sequence with a two-pass SIFT/ECC method (align.py), crops the common valid region, adds temporal Catmull-Rom midpoints (interpolate.py) and extrapolates future normal maps with an FFT plus SLERP model (extrapolate.py).bake.pyruns it per sequence or for all of them and can repack the results.docs/index.htmlis a WebGPU material viewer that reads Parquet in the browser with parquet-wasm.docs/serve_local.pyis a FastAPI server that serves the viewer and the data and exposes/api/datasets,/api/sequencesand/api/align/sequence.
2. Use cases
Measured wear-surface map sequences (material, grit, load, distance) with Python tools and a WebGPU viewer.
- Download the map sequences
- Graphics researcherGit LFS storage
Parquet leaves and WebDataset shards are Git LFS objects, so git lfs pull replaces the pointers under data/parquet and data/shards.
- Scrub a wear timeline
- Graphics researcherWebGPU browser
docs/serve_local.py serves docs/index.html, which reads Parquet with parquet-wasm and renders the maps with WebGPU while the user scrubs distance or presses Play.
- Align a sequence
- Graphics researcherWebGPU browser
POST /api/align/sequence runs a two-pass SIFT/ECC registration of the normal maps to frame 0, crops the common region and caches PNGs in data/aligned.
- Interpolate and extrapolate
- Graphics researcher
python -m alignment.bake adds Catmull-Rom midpoints and FFT plus SLERP extrapolated normal maps after the last measured step.
- Pack Parquet and shards
- Graphics researcher
generate_datasets.py parquet and webdataset turn a wear/ tree of PNG maps into nested Parquet leaves and shard-*.tar files.
- Extract maps as PNG
- Graphics researcher
read_datasets.py decompress and generate_datasets.py extract write the JPEG bytes stored per map_type back to image files.
2.1. Scenario: Inspect cardboard wear under 200 g
- Clone the repository, run git lfs pull and pip install -r requirements.txt.
- Start python docs/serve_local.py and open http://127.0.0.1:8080/docs/index.html.
- Pick Cartboard / Raw / Normal · S60 · 200 g and click Load sequence.
- Click Align sequence, then scrub the distance from 0 mm to 2400 mm or press Play.
- Run python -m alignment.bake --sequence-id cartboard-raw-normal-s60-200g --pack to add interpolated and extrapolated steps.
Files readREADME.md.gitattributesrequirements.txtmetadata.jsondata/parquet/README.mddata/parquet/sequences.jsondocs/README.mddocs/index.htmldocs/serve_local.pyalignment/align.pyalignment/pipeline.pyalignment/bake.pyalignment/interpolate.pyalignment/extrapolate.pygenerate_datasets.pyread_datasets.py
3. Getting started
From the README:
git clone https://github.com/ETSim/WearSurfacesDatasets
cd WearSurfacesDatasets
git lfs pull
pip install -r requirements.txt
python docs/serve_local.py
# open http://127.0.0.1:8080/docs/index.html
In the viewer, pick a sequence, click Load sequence, optionally Align sequence, then scrub the distance or press Play. To bake interpolated and extrapolated steps:
python -m alignment.bake --sequence-id cartboard-raw-normal-s60-200g --pack
python -m alignment.bake --all --pack
To rebuild the dataset from PNG maps or extract images:
python generate_datasets.py parquet --input-dir wear --output-dir data/parquet
python generate_datasets.py webdataset --input-dir wear --output-dir data/shards
python read_datasets.py decompress --shards-dir data/shards --output-dir data/images --workers 4
4. Repository guide
data/parquet/holds the Parquet leaves,sequences.jsonandmetadata.parquet.data/shards/holds the WebDataset.tarshards.metadata.jsondescribes the materials, grits, loads, distances, capture setup and map types.alignment/contains registration, warping, interpolation, extrapolation, baking and packing.docs/index.html,docs/serve_local.pyanddocs/serve_app.pyare the viewer and its local servers.docs/prepare_viewer_parquets.pyrebuildssequences.json.docs/package/vendors the parquet-wasm build used by the viewer.examples/Wear/powerpoint/holds one PowerPoint deck per test series (cardboard, foam, MDF, PLA, sandpaper, soft wood).
5. Features
- Wear sequences indexed by material, path shape, direction, grit, load and sliding distance.
- Two storage formats: nested Parquet for browsing and WebDataset shards for streaming.
- In-browser viewer with distance scrubbing, playback and prefetching of adjacent steps.
- Server-side SIFT/ECC alignment with cached results and a flat atlas download.
- Catmull-Rom interpolation and FFT plus SLERP extrapolation of normal maps.
- CLI tools to rebuild, extract and describe the dataset.
6. Limits
- Parquet and shard files are Git LFS objects: a plain clone only contains pointers until
git lfs pullruns. - The
wear/PNG source tree used bygenerate_datasets.pyis not in the repository, anddata/aligned/anddata/wear_extrapolated/are gitignored. - The README and
metadata.jsonname Alu and Resin, but the committedsequences.jsonhas no Alu or Resin sequence. - Extrapolated frames are model output, not measurements.
- Several sequences are short (two steps for some PLA and MDF series), and one foam folder is named
4000000mm. docs/README.mdandmetadata.jsongive different capture figures (resolution, number of LEDs, temperature), so treat them as descriptive.- On a static host the viewer still loads frames, but alignment is disabled because it needs the Python server.
- There are no automated tests.
7. Sources
- GitHub repository
- README
data/parquet/sequences.jsonalignment/align.pyalignment/extrapolate.pydocs/serve_local.py
8. CI/CD pipeline
No CI/CD pipeline in the repository. The code is built and run by hand, as described above.
Generated from the source at commit 6841dff.
9. Deployment diagram
Mermaid Deployment diagram
flowchart LR
repo[("GitHub repository")]
local["Local machine<br/>Python"]
repo -->|"clone and run"| local
The repository has no Dockerfile, Compose file or hosting configuration, so the code runs on the machine that clones it.
10. External dependencies
10 declared packages (10 runtime, 0 development) in requirements.txt.
Package table 10
| Package | Version | Scope | Purpose | Registry |
|---|---|---|---|---|
pandas | — | runtime | Data analysis | pypi.org |
pyarrow | — | runtime | Data analysis | pypi.org |
numpy | — | runtime | Data analysis | pypi.org |
pillow | — | runtime | Graphics, imaging and 3D | pypi.org |
matplotlib | — | runtime | Charts | pypi.org |
rich | — | runtime | Command line | pypi.org |
typer | — | runtime | Command line | pypi.org |
fastapi | — | runtime | Web framework | pypi.org |
uvicorn | — | runtime | Application server | pypi.org |
opencv-python-headless | — | runtime | Graphics, imaging and 3D | pypi.org |
11. Glossary
Repository
The versioned source files, configuration, and history of a project.
README
The repository’s entry document, usually covering its purpose and initial setup.
Dependency
A library, tool, or service that another component needs to build or run.
API
An interface through which software components exchange requests and results. An API does not have to use HTTP.
HTTP
A request-and-response protocol used by browsers and web services. A method, path, headers, and optional body describe a request.
Volume and bind mount
A volume is storage managed by the container platform; a bind mount exposes a chosen host path inside a container.
CLI
A text interface in which commands and arguments select operations. Exit codes let scripts detect success or failure.
Build
The steps that turn source files and dependencies into a runnable program or distributable artifact.
GPU
A processor designed for parallel workloads, including graphics rendering and many numerical operations.
Mesh
A surface represented by vertices and connected elements, often triangles. Its geometry is distinct from its material or texture.
Video decoder
A component that reconstructs video frames from a compressed stream. Decoding and displaying a frame are separate stages.
Backend
An implementation behind a shared interface. Depending on context, it can mean a server-side service or a graphics, input, or storage implementation.
12. References
- ETSim. (2026, November 5). [Web page] github.com.
- ETSim. (2026, November 5). WearSurfacesDatasets. [Software repository] github.com.
- ETSim. (2026, November 5). README. [Source file or documentation] github.com.
- ETSim. (2026, November 5). data/parquet/sequences.json. [Source file or documentation] github.com.
- ETSim. (2026, November 5). alignment/align.py. [Source file or documentation] github.com.
- ETSim. (2026, November 5). alignment/extrapolate.py. [Source file or documentation] github.com.
- ETSim. (2026, November 5). docs/serve_local.py. [Source file or documentation] github.com.
Sources without a publication date show the date they were last checked, November 5, 2026. File links retain the inspected revision where available.