Add a phyiscal texture to your 3D Print.
See the codeLive: https://bumpmesh.com
GitHub: https://github.com/CNCKitchen/stlTexturizer
Author: Stefan Hermann
A browser-based tool for applying surface displacement textures to 3D meshes — no installation required.
Load an STL, OBJ, 3MF, or STEP file, pick a texture, tune the parameters, and export a new displaced STL ready for slicing.
.step / .stp) via meshStep.bumpmesh)See the full changelog for every update since April 2026.
.texture file; uploads are kept under "Your textures" in the gallery (this browser only, and the browser may clear them at any time) where you can star, re-download or delete them.bumpmesh projects; Bake Textures flattens them into the mesh when neededindex.html in a modern browser (Chrome, Edge, Firefox, Safari).Note: All processing runs entirely in the browser — no data is uploaded to any server.
index.html # Main entry point
style.css # Styles (light / dark theme)
logo.png # Favicon & header logo
CNAME # Custom domain (bumpmesh.com)
textures/ # Built-in JPG/PNG displacement map images (101 textures) + thumbs/
js/
main.js # App bootstrap & UI wiring
viewer.js # Three.js scene / camera / controls
stlLoader.js # Binary & ASCII STL parser
presetTextures.js # Built-in texture presets (categories, credits, default favorites) + custom upload
textureGallery.js # Favorites grid + Texture Gallery side panel
customTextures.js # "Your textures": uploaded maps kept in this browser (IndexedDB)
sidebarToggle.js # Collapse / expand tab for the right-hand sidebar (settings or gallery)
previewMaterial.js # Three.js material for live & displacement preview
previewPipeline.js # 3D-preview mesh build (runs in previewWorker.js)
mapping.js # UV projection logic (7 modes)
displacement.js # Vertex displacement baking
subdivision.js # Adaptive mesh subdivision
decimation.js # QEM mesh decimation
meshIndex.js # Shared vertex welding + integer-pair hash maps
exclusion.js # Face exclusion / inclusion painting
exporter.js # Binary STL export
i18n.js # Translations (EN / DE)
All processing runs entirely in the browser — no backend or build step is needed. You just need a local HTTP server because browsers block ES module imports and texture loading from file:// URLs.
# Clone the repository
git clone https://github.com/CNCKitchen/stlTexturizer.git
cd stlTexturizer
Then start any static file server from the project root. Pick whichever you have installed:
Python (3.x)
python -m http.server 8000
Python (2.x)
python -m SimpleHTTPServer 8000
Node.js (npx, no install needed)
npx serve .
PHP
php -S localhost:8000
Open http://localhost:8000 in your browser and you're ready to go.
Tip: Any static server will work — the app has no server-side dependencies. After updating a local copy, hard-reload once (Ctrl+F5 / Cmd+Shift+R): most simple servers don't send cache headers, so the browser may otherwise mix new and old files.
Docker / Podman
docker compose up -d # or: podman-compose -f podman-compose.yaml up -d
Serves the app on http://localhost:8080. To change the port or container name, copy .env.example to .env and edit it.
Loaded via CDN (jsDelivr) — no build step or npm install needed:
| Library | Version | License | Usage |
|---|---|---|---|
| Three.js | 0.170.0 | MIT | 3D rendering, scene management, materials |
| — OrbitControls | 0.170.0 | MIT | Camera orbit / pan / zoom |
| — STLLoader | 0.170.0 | MIT | Binary & ASCII STL import |
| — OBJLoader | 0.170.0 | MIT | OBJ mesh import |
| — LineSegments2 / LineSegmentsGeometry / LineMaterial | 0.170.0 | MIT | Wide-line wireframe overlay |
| fflate | 0.8.2 | MIT | ZIP compression & decompression for 3MF import/export |
All dependencies are MIT-licensed.
GNU AGPL v3.0 — see LICENSE.
4,397 followers · starred Jul 2026
3,416 followers · starred Apr 2026
1,125 followers · starred Jul 2026
179 followers · starred Jun 2026
Add a phyiscal texture to your 3D Print.
See the codeLive: https://bumpmesh.com
GitHub: https://github.com/CNCKitchen/stlTexturizer
Author: Stefan Hermann
A browser-based tool for applying surface displacement textures to 3D meshes — no installation required.
Load an STL, OBJ, 3MF, or STEP file, pick a texture, tune the parameters, and export a new displaced STL ready for slicing.
.step / .stp) via meshStep.bumpmesh)See the full changelog for every update since April 2026.
.texture file; uploads are kept under "Your textures" in the gallery (this browser only, and the browser may clear them at any time) where you can star, re-download or delete them.bumpmesh projects; Bake Textures flattens them into the mesh when neededindex.html in a modern browser (Chrome, Edge, Firefox, Safari).Note: All processing runs entirely in the browser — no data is uploaded to any server.
index.html # Main entry point
style.css # Styles (light / dark theme)
logo.png # Favicon & header logo
CNAME # Custom domain (bumpmesh.com)
textures/ # Built-in JPG/PNG displacement map images (101 textures) + thumbs/
js/
main.js # App bootstrap & UI wiring
viewer.js # Three.js scene / camera / controls
stlLoader.js # Binary & ASCII STL parser
presetTextures.js # Built-in texture presets (categories, credits, default favorites) + custom upload
textureGallery.js # Favorites grid + Texture Gallery side panel
customTextures.js # "Your textures": uploaded maps kept in this browser (IndexedDB)
sidebarToggle.js # Collapse / expand tab for the right-hand sidebar (settings or gallery)
previewMaterial.js # Three.js material for live & displacement preview
previewPipeline.js # 3D-preview mesh build (runs in previewWorker.js)
mapping.js # UV projection logic (7 modes)
displacement.js # Vertex displacement baking
subdivision.js # Adaptive mesh subdivision
decimation.js # QEM mesh decimation
meshIndex.js # Shared vertex welding + integer-pair hash maps
exclusion.js # Face exclusion / inclusion painting
exporter.js # Binary STL export
i18n.js # Translations (EN / DE)
All processing runs entirely in the browser — no backend or build step is needed. You just need a local HTTP server because browsers block ES module imports and texture loading from file:// URLs.
# Clone the repository
git clone https://github.com/CNCKitchen/stlTexturizer.git
cd stlTexturizer
Then start any static file server from the project root. Pick whichever you have installed:
Python (3.x)
python -m http.server 8000
Python (2.x)
python -m SimpleHTTPServer 8000
Node.js (npx, no install needed)
npx serve .
PHP
php -S localhost:8000
Open http://localhost:8000 in your browser and you're ready to go.
Tip: Any static server will work — the app has no server-side dependencies. After updating a local copy, hard-reload once (Ctrl+F5 / Cmd+Shift+R): most simple servers don't send cache headers, so the browser may otherwise mix new and old files.
Docker / Podman
docker compose up -d # or: podman-compose -f podman-compose.yaml up -d
Serves the app on http://localhost:8080. To change the port or container name, copy .env.example to .env and edit it.
Loaded via CDN (jsDelivr) — no build step or npm install needed:
| Library | Version | License | Usage |
|---|---|---|---|
| Three.js | 0.170.0 | MIT | 3D rendering, scene management, materials |
| — OrbitControls | 0.170.0 | MIT | Camera orbit / pan / zoom |
| — STLLoader | 0.170.0 | MIT | Binary & ASCII STL import |
| — OBJLoader | 0.170.0 | MIT | OBJ mesh import |
| — LineSegments2 / LineSegmentsGeometry / LineMaterial | 0.170.0 | MIT | Wide-line wireframe overlay |
| fflate | 0.8.2 | MIT | ZIP compression & decompression for 3MF import/export |
All dependencies are MIT-licensed.
GNU AGPL v3.0 — see LICENSE.
4,397 followers · starred Jul 2026
3,416 followers · starred Apr 2026
1,125 followers · starred Jul 2026
179 followers · starred Jun 2026