Open Source 3D Printing Quote Engine
A production-ready web application for calculating accurate 3D printing quotes. Upload multiple STL files, configure print parameters, and get instant cost breakdowns with detailed pricing analysis. Perfect for 3D printing businesses, makerspaces, and service bureaus.
Created by Burst Neuron β’ Powered by PrusaSlicer
- π Multi-File Upload - Upload and process multiple STL files at once with batch quoting
- π¨ 3D Preview - Interactive Three.js viewer with multi-file support
- π° Accurate Quote Calculation - Real-time pricing with detailed cost breakdown
- β‘ Sequential Processing - Queue-based processing to prevent server overload
- π Detailed Breakdown - Material, electricity, depreciation, markup, and operational costs
- π¨ Multiple Materials - Support for PLA, ABS, PETG, TPU, and Nylon (fully customizable)
- π― Quality Presets - Draft (0.3mm), Standard (0.2mm), Fine (0.15mm), Ultra Fine (0.1mm)
- π§ Material Management - Add/remove materials with custom pricing and properties
- π΅ Printer-Specific Markup - Configure profit margins per printer (e.g., 30% markup for premium printers)
- π οΈ Post-Processing Options - Customizable services (sanding, painting, polishing, threading)
- π¨οΈ Multi-Printer Support - Manage multiple printers with individual bed sizes, speeds, and markup multipliers
- βοΈ Web-Based Admin Panel - Configure pricing, materials, printers, and post-processing via UI
- π Multi-Currency Support - Configure your preferred currency and tax rates
- π³ Docker Ready - One-command deployment with Docker Compose
- π Production Grade - Logging, error handling, input validation, and security best practices
- π± Responsive Design - Works seamlessly on desktop, tablet, and mobile devices
- π¨ Modern UI - Clean Tailwind CSS interface with intuitive navigation
- Python 3.11+ or Docker
- PrusaSlicer installed and accessible in PATH
# Clone the repository
git clone https://github.com/Machine-Shop-Suite/3D-Printing-Quote-Engine.git
cd 3D-Printing-Quote-Engine
# Start the application
docker-compose up -d
# Access the application
open http://localhost:5000# Clone the repository
git clone https://github.com/Machine-Shop-Suite/3D-Printing-Quote-Engine.git
cd 3D-Printing-Quote-Engine
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env and set PRUSA_SLICER_PATH
# Run the application
python app.py- Upload STL File - Click "Upload STL" and select your 3D model
- Configure Settings:
- Choose material (PLA, ABS, PETG, TPU, Nylon)
- Select print quality (Draft, Standard, Fine, Ultra Fine)
- Set infill percentage (5-100%)
- Enable supports if needed
- Set Quantity - Specify how many copies you need
- Get Quote - View detailed cost breakdown including:
- Material cost
- Electricity cost
- Machine depreciation
- Operational costs
- Tax calculation
- Total price
Access the admin panel at /settings to configure:
- Material Prices - Set price per kg for each material
- Material Properties - Configure density, temperatures, and speeds
- Pricing Parameters - Base costs, electricity rates, depreciation
- Tax Rates - GST/VAT configuration
- Printer Settings - Bed size, nozzle diameter, speeds
- Currency - Set your preferred currency symbol
Create a .env file from .env.example:
# PrusaSlicer Configuration
PRUSA_SLICER_PATH=prusa-slicer # or full path to executable
# Application Settings
FLASK_ENV=production
FLASK_DEBUG=False
SECRET_KEY=your-secret-key-hereThe application uses config.json for all pricing and material settings. On first run, default values are created. Modify via:
- Web interface at
/settings - Direct editing of
config.json - API at
/api/settings
Example config.json structure:
{
"materials": {
"pla": {
"name": "PLA (Polylactic Acid)",
"price_per_kg": 800,
"density_g_cm3": 1.24,
"bed_temp": 55,
"extruder_temp": 215,
"colors": ["White", "Black", "Red", "Blue"]
}
},
"pricing": {
"base_cost": 150,
"electricity_rate_per_kwh": 7,
"printer_power_watts": 1000,
"depreciation_per_hour": 50,
"gst_rate": 0.18
}
}machine shop-suite/
βββ app.py # Main Flask application
βββ config.py # Configuration management
βββ utils.py # STL processing utilities
βββ requirements.txt # Python dependencies
βββ Dockerfile # Docker container definition
βββ docker-compose.yml # Docker orchestration
βββ .env.example # Environment template
βββ config.json # Runtime configuration (auto-generated)
βββ templates/ # HTML templates
β βββ index.html # Quote engine UI
β βββ settings.html # Admin configuration UI
βββ static/ # CSS, JS, images
βββ logs/ # Application logs
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Main quote engine interface |
/settings |
GET | Admin configuration panel |
/api/config |
GET | Get current configuration |
/api/materials |
GET | List all available materials |
/api/slice |
POST | Analyze STL file (returns filament usage) |
/api/calculate-quote |
POST | Calculate quote with pricing breakdown |
/api/settings |
GET/POST | Get or update application settings |
# Build the image
docker build -t machineshop-suite .
# Run the container
docker run -d \
-p 5000:5000 \
-v $(pwd)/config.json:/app/config.json \
-v $(pwd)/logs:/app/logs \
--name machineshop \
machineshop-suite# Start services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
# Rebuild after changes
docker-compose up -d --build# Install development dependencies
pip install -r requirements.txt
# Run in debug mode
FLASK_DEBUG=True python app.py
# Access at http://localhost:5000- app.py - Main application, routes, and API endpoints
- config.py - Configuration management with JSON persistence
- utils.py - STL slicing and G-code parsing utilities
- templates/ - Jinja2 HTML templates
- static/ - Frontend assets (CSS, JS, images)
Edit config.json or use the /settings interface:
{
"materials": {
"new_material": {
"name": "New Material Name",
"description": "Material description",
"density_g_cm3": 1.25,
"price_per_kg": 1200,
"bed_temp": 60,
"extruder_temp": 220,
"perimeter_speed": 60,
"infill_speed": 100,
"solid_infill_speed": 80,
"colors": ["Color1", "Color2"]
}
}
}Error: PrusaSlicer not found at: prusa-slicer
Solution:
- Install PrusaSlicer from https://www.prusa3d.com/page/prusaslicer_424/
- Set
PRUSA_SLICER_PATHin.envto the correct path:- Linux/Mac:
/usr/bin/prusa-sliceror/usr/local/bin/prusa-slicer - Windows:
C:\Program Files\Prusa3D\PrusaSlicer\prusa-slicer-console.exe
- Linux/Mac:
- Verify installation:
prusa-slicer --version
Error: Container fails to start
Solution:
# Check logs
docker-compose logs web
# Rebuild image
docker-compose build --no-cache
# Restart services
docker-compose restartError: File too large or upload fails
Solution:
- Check file size (default limit: 100MB)
- Ensure STL file is valid
- Check disk space in upload directory
{
"pricing": {
"base_cost": 200,
"electricity_rate_per_kwh": 10,
"depreciation_per_hour": 75,
"gst_rate": 0.18
}
}{
"pricing": {
"base_cost": 50,
"electricity_rate_per_kwh": 5,
"depreciation_per_hour": 25,
"gst_rate": 0.0
}
}{
"pricing": {
"base_cost": 100,
"electricity_rate_per_kwh": 7,
"depreciation_per_hour": 30,
"gst_rate": 0.10
}
}Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PEP 8 for Python code
- Use meaningful variable names
- Add docstrings to functions
- Comment complex logic
This project is licensed under the MIT License - see the LICENSE file for details.
- Burst Neuron - Creator and maintainer of Machine Shop Suite
- PrusaSlicer - Excellent open-source slicing engine
- Flask - Lightweight web framework
- Three.js - 3D model visualization
- Tailwind CSS - Modern UI framework
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
Need help deploying or customizing Machine Shop Suite for your business?
Burst Neuron offers professional consultancy services for:
- π Production deployment and setup
- βοΈ Custom feature development
- π§ Integration with existing systems
- π Pricing strategy optimization
- π Training and onboarding
- π οΈ Ongoing maintenance and support
Contact: burstneuron1729@gmail.com
Website: https://burstneuron.com
- Multi-printer support
- Batch quote calculation
- Quote history and export (CSV/PDF)
- REST API authentication
- Multi-language support
- Mobile-responsive UI improvements
- Support for SLA printing
- Integration with online payment gateways
- Customer portal for quote requests
Made with β€οΈ for the maker community