From b5df3a8e978e743f41e3e5edcc78cc898ac07150 Mon Sep 17 00:00:00 2001 From: unfunny Date: Sat, 14 Feb 2026 19:53:13 -0500 Subject: [PATCH] add readme.md n stuff --- README.md | 22 ++++++++++++++++++++++ pwa-512x512.png | Bin 0 -> 27220 bytes 2 files changed, 22 insertions(+) create mode 100644 README.md create mode 100644 pwa-512x512.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ca1957 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# svg2nametag-Ren + +

+ Logo +

+ +## Overview +**svg2nametag-Ren** is a specialized toolset designed to convert 2D SVG designs into 3D printable nametag models (STL). It specifically handles multi-material or multi-color 3D prints by automatically separating SVG layers into distinct STL files optimized for Bambu Studio, OrcaSlicer, or PrusaSlicer. + +The project offers two primary ways to work: +- **Python CLI**: A robust command-line interface for bulk-processing entire directories of SVGs on your local machine. +- **Web App (WASM)**: A high-performance, client-side web application powered by Manifold 3D. It runs entirely in the browser, supports batch folder uploads, and works offline as a PWA. + +## Technical Specifications +Every model produced by the converter follows a precise set of dimensions to ensure consistency and professional-grade print results: + +- **Automatic Scaling**: All nametags are normalized to a standard width of **87.80mm**. +- **Background Layer**: The base layer is extruded to a thickness of **3.0mm**. +- **Text/Graphic Layers**: Primary and accent layers are extruded to a height of **2.0mm**. +- **Optimized Offsets**: Text layers are offset by **3.0mm** along the Z-axis, ensuring they sit perfectly on top of the background. +- **Hole Handling**: Implements a robust **Even-Odd** fill rule to correctly render internal contours in complex typography (e.g., the centers of 'B', 'O', or 'R'). +- **Layer Classification**: Recognizes SVG classes (`st1`, `st2`) to split designs into separate STL components for easy filament assignment. diff --git a/pwa-512x512.png b/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..2bab5bb138941470413a09be88bd124990854df6 GIT binary patch literal 27220 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