Spaces:
Sleeping
Sleeping
| title: STL to TIFF Slicer | |
| sdk: gradio | |
| sdk_version: 6.10.0 | |
| python_version: "3.12" | |
| app_file: app.py | |
| fullWidth: true | |
| short_description: Upload an STL and export a TIFF slice. | |
| # STL to TIFF Gradio App | |
| This project provides a Gradio app that takes up to three uploaded STL files, shows interactive 3D viewers, slices each model along the Z axis, saves slices as TIFF images, and lets you browse each stack inside the UI. | |
| ## Run | |
| ```powershell | |
| uv sync --all-groups | |
| uv run python app.py | |
| ``` | |
| For reload mode during development, run: | |
| ```powershell | |
| uv run gradio app.py | |
| ``` | |
| When `app.py` changes, Gradio will automatically rerun the file and refresh the demo. | |
| Then open the local Gradio URL in your browser, upload an STL file, and generate the TIFF stack. | |
| ## What the app does | |
| - Uploads up to three `.stl` files | |
| - Shows interactive 3D viewers for rotating each model | |
| - Lets you choose layer height and XY pixel size | |
| - Produces one `.tif` image per slice | |
| - Encodes material as black (`0`) and empty space as white (`255`) in each TIFF slice | |
| - Lets you step through the slice stack in the browser | |
| - Exports a ZIP containing the generated TIFF images | |
| ## Behavior and Implementation Notes | |
| ### Reference TIFF Stack Alignment | |
| When you click **Generate Reference TIFF Stack**, the app combines available TIFF stacks layer-by-layer. | |
| - If source TIFFs have different dimensions, each layer is placed on a canvas using the largest width and height. | |
| - Layers are centered in X and Y before merging. | |
| - Pixel merge uses a black-wins rule: a pixel is black in the reference if any source has black at that pixel. | |
| - Alignment is centered image placement, not bottom-left anchoring. | |
| - If image-size differences are odd, centering may produce a one-pixel shift due to integer rounding. | |
| ### G-code XY Step Size | |
| - G-code generation uses the slicer's `Pixel Size/Fill Width` for XY step distance by passing `fil_width=pixel_size` into `generate_snake_path_gcode()`. | |
| ## Test | |
| ```powershell | |
| uv run pytest | |
| ``` | |
| ## Hugging Face Deployment | |
| This repository tracks `.stl` files with Git LFS (see `.gitattributes`). | |
| Before your first push on a machine: | |
| ```powershell | |
| git lfs install | |
| git lfs pull | |
| ``` | |
| Recommended push flow: | |
| ```powershell | |
| git push origin main | |
| git push hf-space main | |
| ``` | |
| If Hugging Face rejects a push for binary files, verify LFS setup first: | |
| ```powershell | |
| git lfs version | |
| git lfs ls-files | |
| ``` | |
| Warning: `git lfs migrate` rewrites commit history. Use it only when you intentionally want history rewritten and all collaborators are aligned. | |