render-stl-png
Render an STL to a PNG from a nice, consistent 3D angle ("Blender-ish" default perspective) with a solid color.
This is a deterministic software renderer:
- No OpenGL
- No Blender dependency
- Uses a simple camera + z-buffer + Lambert shading
Inputs
- STL file path (ASCII or binary)
- Output PNG path
Parameters
--size <px>: image width/height (square), default 1024
--bg "#rrggbb": background color, default #0b0f14
--color "#rrggbb": mesh base color, default #4cc9f0
--azim-deg <deg>: camera azimuth around Z, default -35
--elev-deg <deg>: camera elevation, default 25
--fov-deg <deg>: perspective field of view, default 35
--margin <0..0.4>: framing margin as fraction of view, default 0.08
--light-dir "x,y,z": directional light vector, default -0.4,-0.3,1.0
Usage
One-shot
python3 scripts/render_stl_png.py \
--stl /path/to/model.stl \
--out /tmp/model.png \
--color "#ffb703" \
--bg "#0b0f14" \
--size 1200
Wrapper (recommended)
The wrapper creates a cached venv (so pillow is available) and runs the renderer.
bash scripts/render_stl_png.sh /path/to/model.stl /tmp/model.png --color "#ffb703"
Notes
- This is meant for marketing/preview images, not photorealism.
- If you need studio lighting / materials, use Blender — but this gets you 80% quickly and reproducibly.
1---2name: render-stl-png-23description: render-stl-png4---5# render-stl-png67Render an STL to a PNG from a nice, consistent 3D angle ("Blender-ish" default perspective) with a solid color.89This is a **deterministic software renderer**:10- No OpenGL11- No Blender dependency12- Uses a simple camera + z-buffer + Lambert shading1314## Inputs1516- STL file path (ASCII or binary)17- Output PNG path1819## Parameters2021- `--size <px>`: image width/height (square), default `1024`22- `--bg "#rrggbb"`: background color, default `#0b0f14`23- `--color "#rrggbb"`: mesh base color, default `#4cc9f0`24- `--azim-deg <deg>`: camera azimuth around Z, default `-35`25- `--elev-deg <deg>`: camera elevation, default `25`26- `--fov-deg <deg>`: perspective field of view, default `35`27- `--margin <0..0.4>`: framing margin as fraction of view, default `0.08`28- `--light-dir "x,y,z"`: directional light vector, default `-0.4,-0.3,1.0`2930## Usage3132### One-shot3334```bash35python3 scripts/render_stl_png.py \36 --stl /path/to/model.stl \37 --out /tmp/model.png \38 --color "#ffb703" \39 --bg "#0b0f14" \40 --size 120041```4243### Wrapper (recommended)4445The wrapper creates a cached venv (so `pillow` is available) and runs the renderer.4647```bash48bash scripts/render_stl_png.sh /path/to/model.stl /tmp/model.png --color "#ffb703"49```5051## Notes5253- This is meant for **marketing/preview images**, not photorealism.54- If you need studio lighting / materials, use Blender — but this gets you 80% quickly and reproducibly.