- Fase A: license templates, search history, cost estimator - Fase B: import URL, bulk ZIP, batch download - Fase C: comparison mode, mesh validation, measurement tool - Fase D: cross-section clipping, overhang heatmap, layer animation - Refactor Pydantic/SQLAlchemy warnings - 24 tests pytest - README actualizado - WebP thumbnails, lazy loading, cache headers
140 lines
5.2 KiB
Markdown
140 lines
5.2 KiB
Markdown
# STL Repository
|
|
|
|
Aplicacion web completa para gestionar, organizar, visualizar y compartir modelos 3D en formato STL y 3MF.
|
|
|
|
## Caracteristicas principales
|
|
|
|
### Gestion de modelos
|
|
- **Subida multi-archivo**: STL, 3MF e imagenes de referencia (JPG/PNG)
|
|
- **Importacion desde URL**: Descarga directa de archivos .stl/.3mf desde cualquier URL
|
|
- **Subida masiva ZIP**: Procesa automaticamente todos los STL/3MF dentro de un ZIP
|
|
- **Deteccion de duplicados**: Por hash SHA256
|
|
- **Metadatos enriquecidos**: Titulo, autor, descripcion, categoria, tags (autocompletado)
|
|
- **Templates de licencia**: CC0, CC-BY, CC-BY-SA, CC-BY-NC, GPL-3.0, MIT
|
|
|
|
### Galeria y busqueda
|
|
- **Galeria responsive** con grid animado y glassmorphism
|
|
- **Busqueda avanzada**: Por texto, categoria, tag, rango de caras, dimensiones
|
|
- **Ordenamiento**: Mas nuevos, mas descargados, mas grandes, mejor valorados
|
|
- **Historial de busqueda**: Persistido en localStorage
|
|
- **Nube de tags** con conteo
|
|
- **Paginacion** con "cargar mas"
|
|
|
|
### Visualizacion 3D (Three.js)
|
|
- **Viewer interactivo** multi-parte con controles orbitales
|
|
- **Modos de vista**: Solido, wireframe, ejes, bounding box
|
|
- **Vistas rapidas**: Frontal, superior, lateral, isometrica
|
|
- **Herramienta de medicion**: Click en dos puntos para distancia en mm
|
|
- **Corte transversal**: Plano de clipping con slider interactivo
|
|
- **Mapa de voladizos**: Heatmap de angulos de impresion (verde/amarillo/rojo)
|
|
- **Animacion de capas**: Simulacion de construccion capa por capa
|
|
- **Modo comparacion**: Abrir dos modelos lado a lado
|
|
|
|
### Social y organizacion
|
|
- **Valoraciones**: 1-5 estrellas con promedio calculado
|
|
- **Comentarios**: Con nombre de autor y fecha
|
|
- **Colecciones**: Crear listas y agregar/quitar modelos
|
|
- **QR Code**: Compartir modelo escaneando codigo
|
|
- **Descarga batch**: Seleccionar multiples modelos y descargar ZIP
|
|
|
|
### Analisis y validacion
|
|
- **Validacion de malla** (trimesh): Watertight, volumen, area, Euler, agujeros
|
|
- **Estimador de impresion**: Volumen, peso en gramos, costo y tiempo estimado
|
|
- **Thumbnails automaticos** generados server-side
|
|
|
|
### Infraestructura
|
|
- **Backup completo**: Endpoint que exporta DB + archivos + metadatos JSON como ZIP
|
|
- **Docker**: Dockerfile + docker-compose.yml listos
|
|
- **Tests automatizados**: 24 tests pytest (API + parsers)
|
|
|
|
## Stack tecnologico
|
|
|
|
- **Backend**: Python 3.12 + FastAPI + SQLAlchemy + SQLite + trimesh
|
|
- **Frontend**: HTML5 + Vanilla JS + Tailwind CSS (CDN) + Three.js r128
|
|
- **Procesamiento**: numpy + Pillow
|
|
- **Empaquetado**: uv (gestor de dependencias)
|
|
|
|
## Instalacion y uso
|
|
|
|
### Requisitos
|
|
- Python 3.12+
|
|
- `uv` instalado (`pip install uv` o ver https://docs.astral.sh/uv/)
|
|
|
|
### Iniciar servidor
|
|
```bash
|
|
cd /root/stl-repo
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
|
|
```
|
|
|
|
Abrir en navegador: `http://localhost:8000`
|
|
|
|
### Docker
|
|
```bash
|
|
docker-compose up --build
|
|
```
|
|
|
|
### Tests
|
|
```bash
|
|
uv run pytest tests/ -v
|
|
```
|
|
|
|
## Estructura del proyecto
|
|
|
|
```
|
|
app/
|
|
main.py # Punto de entrada FastAPI
|
|
models.py # Modelos SQLAlchemy (ORM)
|
|
schemas.py # Esquemas Pydantic
|
|
database.py # Conexion SQLite
|
|
parsers.py # Parser STL/3MF + generacion de thumbnails
|
|
routers/
|
|
models.py # Endpoints principales (CRUD, busqueda, descargas, etc.)
|
|
migrate.py # Migraciones de DB
|
|
static/
|
|
index.html # Galeria
|
|
upload.html # Formulario de subida (archivos/URL/ZIP)
|
|
detail.html # Vista detalle con viewer 3D
|
|
css/style.css
|
|
js/
|
|
app.js # Logica de galeria
|
|
upload.js # Logica de subida
|
|
detail.js # Viewer 3D + herramientas avanzadas
|
|
api.js # Cliente HTTP
|
|
theme.js # Tema oscuro/claro
|
|
uploads/ # Archivos 3D subidos
|
|
thumbnails/ # Thumbnails PNG generados
|
|
images/ # Imagenes de referencia subidas
|
|
tests/
|
|
test_api.py # Tests de API (24 tests)
|
|
test_parsers.py # Tests de parsing y thumbnails
|
|
```
|
|
|
|
## API Endpoints principales
|
|
|
|
| Metodo | Endpoint | Descripcion |
|
|
|--------|----------|-------------|
|
|
| GET | `/api/models/` | Listar modelos (con filtros y paginacion) |
|
|
| POST | `/api/models/` | Subir modelo nuevo |
|
|
| POST | `/api/models/import-url` | Importar desde URL |
|
|
| POST | `/api/models/bulk-zip` | Subir ZIP con multiples modelos |
|
|
| POST | `/api/models/batch-download` | Descargar seleccionados como ZIP |
|
|
| GET | `/api/models/{id}` | Detalle completo de modelo |
|
|
| PUT | `/api/models/{id}` | Actualizar metadatos |
|
|
| DELETE | `/api/models/{id}` | Eliminar modelo |
|
|
| GET | `/api/models/{id}/validate` | Validar malla (trimesh) |
|
|
| GET | `/api/models/{id}/estimate` | Estimar costo/tiempo de impresion |
|
|
| GET | `/api/models/{id}/download` | Descargar archivo principal |
|
|
| GET | `/api/models/{id}/download-all` | Descargar todas las partes en ZIP |
|
|
| GET | `/api/models/{id}/thumbnail` | Thumbnail PNG |
|
|
| GET | `/api/models/{id}/qr` | Codigo QR para compartir |
|
|
| POST | `/api/models/{id}/ratings` | Valorar modelo |
|
|
| POST | `/api/models/{id}/comments` | Comentar |
|
|
| GET | `/api/models/tags` | Listar tags con conteo |
|
|
| GET/POST | `/api/models/collections/...` | CRUD de colecciones |
|
|
| GET | `/api/models/system/backup` | Backup completo ZIP |
|
|
|
|
## Version
|
|
|
|
v2.2.0 — Abril 2026
|