Katana is a desktop-first Flask + WebUI app for managing 3D printing projects and preparing models in a browser-based workspace.
For version history and changes, see RELEASE_NOTES.md.
- Project-based workflow (create/open/save/delete projects)
- 3D workspace powered by Three.js
- STL + 3MF upload to local server storage
- Drag-and-drop model upload in Slice tab
- Multi-plate workspace controls
- Multi-plate save/load persistence
- Transform tools (move/rotate/scale/delete selected)
- Overhang preview coloring (red) on model surfaces
- Placement warning notification for collision/off-plate
- Autosave for project state
- Persistent project thumbnails
- Pin/unpin projects in Home view
- Printer profile setup + config import flow
- Built-in seeded demo project (
Demo Block)
Katana currently focuses on project/workspace management and model staging.
- The Slice workflow is implemented in the main workspace.
- Python
3.12+recommended - Linux/macOS/Windows with a GUI environment for splash + FlaskWebGUI mode
Python dependencies are in requirements.txt.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python main.pyIf you want to run without splash behavior, use:
python main.py --no-gui- Open Katana.
- Create a project (Home tab -> New Project modal) or open an existing one.
- Go to Slice tab.
- Upload STL/3MF from the workspace panel, or drag files into the Slice viewport.
- Arrange models and save (autosave also runs in background).
- main.py: app entrypoint + splash + FlaskWebGUI launch
- ui.py: Flask routes/API
- configmanager.py: config + project persistence
- templates/index.html: main UI
- static/placer.js: Three.js slicer workspace logic
projects/: saved project JSON filesstatic/uploads/: uploaded STL filesstatic/thumbnails/: generated project thumbnail images
GET /api/projectslist projectsPOST /api/projectssave projectGET /api/projects/<filename>load projectDELETE /api/projects/<filename>delete projectPOST /api/upload_modelupload STL/3MF (3MF extracts mesh models only)GET /api/configread current configGET /demo/block.stldemo model file route
Run tests:
./venv/bin/python -m unittest discover -s tests -vAGPL-3.0. See LICENSE.