reverse3d 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- reverse3d/__init__.py +39 -0
- reverse3d/__main__.py +4 -0
- reverse3d/_about.py +15 -0
- reverse3d/_version.py +1 -0
- reverse3d/agent/__init__.py +5 -0
- reverse3d/agent/compact.py +110 -0
- reverse3d/agent/mcp_server.py +171 -0
- reverse3d/agent/prompts.py +173 -0
- reverse3d/agent/skill/SKILL.md +53 -0
- reverse3d/agent/tools.py +811 -0
- reverse3d/autopilot.py +355 -0
- reverse3d/cli.py +1054 -0
- reverse3d/config.py +167 -0
- reverse3d/doctor.py +113 -0
- reverse3d/errors.py +83 -0
- reverse3d/hardware.py +115 -0
- reverse3d/imaging.py +79 -0
- reverse3d/logging_utils.py +41 -0
- reverse3d/mesh_io.py +152 -0
- reverse3d/offline.py +313 -0
- reverse3d/profiles.py +33 -0
- reverse3d/py.typed +0 -0
- reverse3d/recipes.py +394 -0
- reverse3d/reconstruction/__init__.py +22 -0
- reverse3d/reconstruction/depth_estimation.py +263 -0
- reverse3d/reconstruction/photogrammetry.py +460 -0
- reverse3d/reconstruction/pointcloud.py +120 -0
- reverse3d/rendering/__init__.py +10 -0
- reverse3d/rendering/_blender_job.py +284 -0
- reverse3d/rendering/blender_render.py +215 -0
- reverse3d/rendering/preview.py +80 -0
- reverse3d/reverse_eng/__init__.py +33 -0
- reverse3d/reverse_eng/geometry_fit.py +478 -0
- reverse3d/reverse_eng/measure.py +87 -0
- reverse3d/reverse_eng/mesh_cleaner.py +304 -0
- reverse3d/reverse_eng/parametric.py +154 -0
- reverse3d/security.py +294 -0
- reverse3d/setup_agents.py +517 -0
- reverse3d/userconfig.py +156 -0
- reverse3d/vision/__init__.py +12 -0
- reverse3d/vision/feature_matcher.py +272 -0
- reverse3d/vision/mask_extractor.py +352 -0
- reverse3d/watch.py +238 -0
- reverse3d-0.4.0.dist-info/METADATA +650 -0
- reverse3d-0.4.0.dist-info/RECORD +50 -0
- reverse3d-0.4.0.dist-info/WHEEL +5 -0
- reverse3d-0.4.0.dist-info/entry_points.txt +2 -0
- reverse3d-0.4.0.dist-info/licenses/LICENSE +202 -0
- reverse3d-0.4.0.dist-info/licenses/NOTICE +27 -0
- reverse3d-0.4.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: reverse3d
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: AI-agent-ready toolkit for 3D reverse engineering: image analysis, photogrammetry, mesh repair, primitive fitting and headless rendering.
|
|
5
|
+
Author-email: Voxel Enterprise <info@voxel.lat>
|
|
6
|
+
Maintainer-email: Voxel Enterprise <info@voxel.lat>
|
|
7
|
+
License-Expression: Apache-2.0
|
|
8
|
+
Project-URL: Homepage, https://voxel.lat
|
|
9
|
+
Project-URL: Documentation, https://github.com/rellytechgame/Reverse3D-tool/tree/main/docs
|
|
10
|
+
Project-URL: Repository, https://github.com/rellytechgame/Reverse3D-tool
|
|
11
|
+
Project-URL: Issues, https://github.com/rellytechgame/Reverse3D-tool/issues
|
|
12
|
+
Project-URL: Security, https://github.com/rellytechgame/Reverse3D-tool/security/policy
|
|
13
|
+
Keywords: 3d,photogrammetry,reverse-engineering,computer-vision,mesh,colmap,blender,open3d,trimesh,mcp,ai-agents,function-calling
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: Manufacturing
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Image Recognition
|
|
27
|
+
Classifier: Typing :: Typed
|
|
28
|
+
Requires-Python: >=3.10
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
License-File: NOTICE
|
|
32
|
+
Requires-Dist: numpy>=1.26
|
|
33
|
+
Requires-Dist: scipy>=1.11
|
|
34
|
+
Requires-Dist: opencv-python-headless>=4.9
|
|
35
|
+
Requires-Dist: pillow>=10.3
|
|
36
|
+
Requires-Dist: trimesh>=4.4
|
|
37
|
+
Requires-Dist: shapely>=2.0
|
|
38
|
+
Requires-Dist: mapbox-earcut>=1.0
|
|
39
|
+
Requires-Dist: networkx>=3.2
|
|
40
|
+
Requires-Dist: fast-simplification>=0.1.7
|
|
41
|
+
Requires-Dist: pydantic>=2.6
|
|
42
|
+
Requires-Dist: typer>=0.12
|
|
43
|
+
Requires-Dist: rich>=13.7
|
|
44
|
+
Provides-Extra: recon
|
|
45
|
+
Requires-Dist: open3d>=0.18; extra == "recon"
|
|
46
|
+
Provides-Extra: depth
|
|
47
|
+
Requires-Dist: torch>=2.2; extra == "depth"
|
|
48
|
+
Requires-Dist: transformers>=4.44; extra == "depth"
|
|
49
|
+
Provides-Extra: render
|
|
50
|
+
Requires-Dist: pyvista>=0.43; extra == "render"
|
|
51
|
+
Provides-Extra: mcp
|
|
52
|
+
Requires-Dist: mcp>=1.2; extra == "mcp"
|
|
53
|
+
Requires-Dist: anyio>=4.3; extra == "mcp"
|
|
54
|
+
Provides-Extra: agents
|
|
55
|
+
Requires-Dist: anthropic>=0.40; extra == "agents"
|
|
56
|
+
Provides-Extra: all
|
|
57
|
+
Requires-Dist: reverse3d[agents,depth,mcp,recon,render]; extra == "all"
|
|
58
|
+
Provides-Extra: dev
|
|
59
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
60
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
61
|
+
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
62
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
63
|
+
Requires-Dist: bandit[toml]>=1.7.9; extra == "dev"
|
|
64
|
+
Requires-Dist: pip-audit>=2.7; extra == "dev"
|
|
65
|
+
Dynamic: license-file
|
|
66
|
+
|
|
67
|
+
<div align="center">
|
|
68
|
+
|
|
69
|
+
# reverse3d
|
|
70
|
+
|
|
71
|
+
**Modelado 3D e ingeniería inversa con tu agente de IA, en local**
|
|
72
|
+
|
|
73
|
+
Fotos → modelo 3D medido · Plano o careta → pieza · Escaneo → CAD paramétrico · Render automático.
|
|
74
|
+
Se instala pasándole la URL del repo a tu agente y funciona con Claude, Cursor, VS Code/Copilot, Gemini, Codex, OpenCode, Windsurf y cualquier cliente MCP. En GPU o en CPU.
|
|
75
|
+
|
|
76
|
+
[](https://github.com/rellytechgame/Reverse3D-tool/actions/workflows/ci.yml)
|
|
77
|
+
[](https://www.python.org/)
|
|
78
|
+
[](LICENSE)
|
|
79
|
+
[](docs/mcp.md)
|
|
80
|
+
[](#-gpu-o-cpu)
|
|
81
|
+
[](SECURITY.md)
|
|
82
|
+
|
|
83
|
+
Desarrollado por **[Voxel Enterprise](https://voxel.lat)**
|
|
84
|
+
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Tabla de contenidos
|
|
90
|
+
|
|
91
|
+
- [⚡ Instalación en 1 minuto](#-instalación-en-1-minuto)
|
|
92
|
+
- [🗣️ Úsalo con tu agente](#️-úsalo-con-tu-agente)
|
|
93
|
+
- [🚀 GPU o CPU](#-gpu-o-cpu)
|
|
94
|
+
- [💰 Ahorro de tokens](#-ahorro-de-tokens)
|
|
95
|
+
- [🔌 Sin internet (modo offline)](#-sin-internet-modo-offline)
|
|
96
|
+
- [🤖 Piloto automático](#-piloto-automático)
|
|
97
|
+
- [Capacidades](#capacidades)
|
|
98
|
+
- [Herramientas externas opcionales](#herramientas-externas-opcionales)
|
|
99
|
+
- [Referencia de la CLI](#referencia-de-la-cli)
|
|
100
|
+
- [Configuración](#configuración)
|
|
101
|
+
- [Integración avanzada](#integración-avanzada)
|
|
102
|
+
- [Stack tecnológico](#stack-tecnológico)
|
|
103
|
+
- [Arquitectura](#arquitectura)
|
|
104
|
+
- [Seguridad](#seguridad)
|
|
105
|
+
- [🔏 Autenticidad y autoría](#-autenticidad-y-autoría)
|
|
106
|
+
- [Solución de problemas](#solución-de-problemas)
|
|
107
|
+
- [Estructura del repositorio](#estructura-del-repositorio)
|
|
108
|
+
- [Desarrollo](#desarrollo)
|
|
109
|
+
- [Hoja de ruta](#hoja-de-ruta)
|
|
110
|
+
- [Sobre Voxel Enterprise](#sobre-voxel-enterprise)
|
|
111
|
+
- [Licencia](#licencia)
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## ⚡ Instalación en 1 minuto
|
|
116
|
+
|
|
117
|
+
**No necesitas instalar nada antes**: ni Python, ni Git, ni permisos de administrador. Solo conexión a internet y unos 4 GB libres.
|
|
118
|
+
|
|
119
|
+
### Opción 1 — Pídeselo a tu agente (recomendado)
|
|
120
|
+
|
|
121
|
+
Copia y pega **esta frase** en tu agente de IA (Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Copilot, Windsurf…):
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
Instala reverse3d desde https://github.com/rellytechgame/Reverse3D-tool siguiendo su AGENTS.md. Tienes mi permiso para ejecutar el instalador; no me hagas preguntas.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Eso es todo. Tu agente te pedirá permiso **una sola vez**, para ejecutar el instalador; acéptalo, por ejemplo con *"Sí"* o *"Permitir siempre"*. A partir de ahí no te preguntará nada más:
|
|
128
|
+
|
|
129
|
+
- instala Python, todos los módulos, **Blender** (renders fotorrealistas) y **COLMAP** (fotos → 3D);
|
|
130
|
+
- detecta tu tarjeta gráfica (GPU) y la usa si existe;
|
|
131
|
+
- conecta reverse3d con **todos** tus agentes de IA y deja sus herramientas **aprobadas**, para que no te pidan permiso en cada uso;
|
|
132
|
+
- comprueba que todo funciona.
|
|
133
|
+
|
|
134
|
+
Tarda entre 10 y 20 minutos según tu conexión. Al terminar, **cierra y vuelve a abrir tu agente**.
|
|
135
|
+
|
|
136
|
+
¿Quieres algo concreto? Dilo en la misma frase:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
Instala reverse3d desde https://github.com/rellytechgame/Reverse3D-tool siguiendo su AGENTS.md, en modo ligero y usando solo CPU. Tienes mi permiso; no me hagas preguntas.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Opción 2 — Un comando en la terminal
|
|
143
|
+
|
|
144
|
+
**Linux / macOS**
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
curl -fsSL https://raw.githubusercontent.com/rellytechgame/Reverse3D-tool/main/scripts/install.sh | bash
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Windows (PowerShell)**
|
|
151
|
+
|
|
152
|
+
```powershell
|
|
153
|
+
irm https://raw.githubusercontent.com/rellytechgame/Reverse3D-tool/main/scripts/install.ps1 | iex
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Con opciones:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Linux/macOS: GPU + calidad máxima
|
|
160
|
+
curl -fsSL https://raw.githubusercontent.com/rellytechgame/Reverse3D-tool/main/scripts/install.sh | bash -s -- --device gpu --profile quality
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```powershell
|
|
164
|
+
# Windows: GPU + calidad máxima
|
|
165
|
+
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/rellytechgame/Reverse3D-tool/main/scripts/install.ps1))) -Device gpu -Performance quality
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
> ¿Prefieres revisar el script antes de ejecutarlo? Descárgalo, léelo y ejecútalo: `curl -fsSLO …/install.sh && less install.sh && bash install.sh`.
|
|
169
|
+
|
|
170
|
+
### Qué hace el instalador
|
|
171
|
+
|
|
172
|
+
**Nunca hace preguntas** y **no necesita administrador**. Si se interrumpe, por ejemplo porque el agente lo corta por tiempo, basta con volver a ejecutarlo: **continúa donde se quedó**.
|
|
173
|
+
|
|
174
|
+
1. **Python:** descarga [uv](https://docs.astral.sh/uv/) y con él un Python 3.12 privado en `~/.reverse3d`. No toca el Python de tu sistema; si uv no está disponible, usa un Python ≥ 3.10 que ya tengas.
|
|
175
|
+
2. **Entorno aislado** en `~/.reverse3d/venv`.
|
|
176
|
+
3. **reverse3d con todos los módulos:**
|
|
177
|
+
- mallado (Open3D);
|
|
178
|
+
- render (PyVista);
|
|
179
|
+
- IA de profundidad (PyTorch): con CUDA si hay GPU NVIDIA y, si no, la versión CPU, mucho más ligera.
|
|
180
|
+
|
|
181
|
+
Si un módulo opcional falla, la instalación **sigue** y lo indica al final.
|
|
182
|
+
4. **Blender 5.2 y COLMAP 4.2 portables** en `~/.reverse3d/tools`. Las versiones están fijadas y cada descarga se verifica con su huella **SHA-256** oficial.
|
|
183
|
+
- En Linux no existe un COLMAP portable: se instala con `apt` o `brew` solo si no hace falta contraseña. Si no se puede, el instalador lo indica y todo lo demás funciona.
|
|
184
|
+
5. Deja el comando `reverse3d` disponible: `~/.local/bin` en Linux/macOS, PATH de usuario en Windows.
|
|
185
|
+
6. Ejecuta **`reverse3d setup`**, que registra el servidor MCP en **todos los agentes que encuentre**:
|
|
186
|
+
|
|
187
|
+
| Agente | Dónde se registra |
|
|
188
|
+
|--------|-------------------|
|
|
189
|
+
| Claude Code | `claude mcp add --scope user` + Skill en `~/.claude/skills/reverse3d` |
|
|
190
|
+
| Claude Desktop | `claude_desktop_config.json` |
|
|
191
|
+
| Cursor | `~/.cursor/mcp.json` |
|
|
192
|
+
| Windsurf | `~/.codeium/windsurf/mcp_config.json` |
|
|
193
|
+
| VS Code (Copilot) | `<user>/Code/User/mcp.json` |
|
|
194
|
+
| Gemini CLI | `~/.gemini/settings.json` |
|
|
195
|
+
| OpenCode | `~/.config/opencode/opencode.json` |
|
|
196
|
+
| Codex CLI | `~/.codex/config.toml` |
|
|
197
|
+
|
|
198
|
+
Cada archivo modificado se **respalda antes** (`*.reverse3d-backup-<fecha>`). Solo se toca la entrada `reverse3d` y, si un archivo no se puede leer con seguridad (por ejemplo, JSON con comentarios), **no se modifica** y se muestra el bloque para pegarlo a mano.
|
|
199
|
+
|
|
200
|
+
**Herramientas aprobadas de antemano**, para que el agente no te pregunte en cada uso:
|
|
201
|
+
|
|
202
|
+
| Agente | Aprobación automática |
|
|
203
|
+
|--------|-----------------------|
|
|
204
|
+
| Claude Code | `mcp__reverse3d` en `permissions.allow` de `~/.claude/settings.json` |
|
|
205
|
+
| Gemini CLI | `"trust": true` en la entrada `reverse3d` |
|
|
206
|
+
| Resto | No tienen ese ajuste: la primera vez elige **"Permitir siempre"** |
|
|
207
|
+
|
|
208
|
+
Solo se aprueban las herramientas de reverse3d, que trabajan **únicamente dentro del workspace** (ver [Seguridad](#seguridad)). Para desactivarlo usa `--no-auto-approve`.
|
|
209
|
+
|
|
210
|
+
7. Verifica todo con `reverse3d doctor` y guarda el resultado en `~/.reverse3d/install-status.json`. El registro completo queda en `~/.reverse3d/install.log`. **Reinicia tu agente** y listo.
|
|
211
|
+
|
|
212
|
+
#### Opciones del instalador
|
|
213
|
+
|
|
214
|
+
| bash (`install.sh`) | PowerShell (`install.ps1`) | Efecto |
|
|
215
|
+
|---------------------|----------------------------|--------|
|
|
216
|
+
| *(sin opciones)* | *(sin opciones)* | **Todo**: núcleo, MCP, render, mallado, IA de profundidad, Blender y COLMAP |
|
|
217
|
+
| `--lite` | `-Lite` | Todo menos la IA de profundidad (PyTorch); ahorra hasta ~2.5 GB |
|
|
218
|
+
| `--minimal` | `-Minimal` | Solo núcleo + MCP, sin herramientas externas |
|
|
219
|
+
| `--no-tools` | `-NoTools` | No instalar Blender ni COLMAP |
|
|
220
|
+
| `--no-auto-approve` | `-NoAutoApprove` | Que los agentes pregunten antes de cada herramienta |
|
|
221
|
+
| `--with recon,depth` | `-With recon,depth` | Extras a elección |
|
|
222
|
+
| `--device auto\|cpu\|gpu` | `-Device …` | Dispositivo por defecto |
|
|
223
|
+
| `--profile fast\|balanced\|quality` | `-Performance …` | Perfil de rendimiento |
|
|
224
|
+
| `--toolset lean` | `-Toolset lean` | Expone 5 herramientas en lugar de 14 (menos tokens) |
|
|
225
|
+
| `--agents auto\|all\|claude-code,cursor` | `-Agents …` | Qué agentes registrar |
|
|
226
|
+
| `--workspace DIR` | `-Workspace DIR` | Carpeta que pueden usar los agentes (por defecto `~/reverse3d-workspace`) |
|
|
227
|
+
| `--ref v0.2.0` | `-Ref v0.2.0` | Instalar una versión o etiqueta concreta |
|
|
228
|
+
| `--source .` | `-Source .` | Instalar desde un clon local |
|
|
229
|
+
| `--no-setup` | `-NoSetup` | No registrar agentes |
|
|
230
|
+
| `--uninstall` | `-Uninstall` | Desinstalar (conserva el workspace y la configuración) |
|
|
231
|
+
|
|
232
|
+
### Opción 3 — Sin instalar nada (con `uv`)
|
|
233
|
+
|
|
234
|
+
Si tienes [uv](https://docs.astral.sh/uv/), cualquier cliente MCP puede ejecutar reverse3d directamente desde GitHub:
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"mcpServers": {
|
|
239
|
+
"reverse3d": {
|
|
240
|
+
"command": "uvx",
|
|
241
|
+
"args": ["--from", "reverse3d[mcp,render] @ git+https://github.com/rellytechgame/Reverse3D-tool",
|
|
242
|
+
"reverse3d", "agent", "mcp"],
|
|
243
|
+
"env": { "REVERSE3D_WORKSPACE": "/ruta/a/mi-workspace" }
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Opción 4 — Manual (desarrolladores)
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
git clone https://github.com/rellytechgame/Reverse3D-tool.git && cd Reverse3D-tool
|
|
253
|
+
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
|
|
254
|
+
pip install -e ".[mcp,render]" # o ".[all]" / ".[dev]"
|
|
255
|
+
reverse3d setup # registra en tus agentes
|
|
256
|
+
reverse3d doctor
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 🗣️ Úsalo con tu agente
|
|
262
|
+
|
|
263
|
+
Coloca tus archivos en el workspace (`~/reverse3d-workspace`) y **habla normal**:
|
|
264
|
+
|
|
265
|
+
> *"Convierte las fotos de `taza/` en un modelo 3D y dime sus medidas."*
|
|
266
|
+
> *"Este plano `soporte.png` mide 120 mm de ancho; sácame la pieza con 4 mm de espesor."*
|
|
267
|
+
> *"Repara `escaneo.stl`, alinéalo y genérame el código OpenSCAD."*
|
|
268
|
+
> *"Hazme un render de `pieza.glb` en azul metálico."*
|
|
269
|
+
> *"Usa la GPU de ahora en adelante."* · *"Cambia a modo rápido."*
|
|
270
|
+
|
|
271
|
+
### Comandos `/` (prompts MCP)
|
|
272
|
+
|
|
273
|
+
En los clientes que muestran prompts MCP como comandos (Claude Code: `/mcp__reverse3d__<nombre>`; Claude Desktop: menú **+ → reverse3d**; también VS Code y otros):
|
|
274
|
+
|
|
275
|
+
| Comando | Qué hace |
|
|
276
|
+
|---------|----------|
|
|
277
|
+
| `procesar <entrada>` | Lo que sea → detecta qué es y lo procesa solo |
|
|
278
|
+
| `fotos-a-3d <carpeta>` | Fotos → modelo 3D medido + render |
|
|
279
|
+
| `plano-a-pieza <imagen> [espesor] [mm_por_pixel]` | Plano o careta → pieza extruida |
|
|
280
|
+
| `escaneo-a-cad <malla>` | Malla → limpieza + cotas + primitivas + OpenSCAD/CadQuery |
|
|
281
|
+
| `foto-a-relieve <imagen>` | Una foto → relieve 2.5D con IA |
|
|
282
|
+
| `medir <malla>` | Cotas, volumen y render |
|
|
283
|
+
| `usar-gpu` · `usar-cpu` | Cambiar el dispositivo |
|
|
284
|
+
| `rendimiento <fast\|balanced\|quality>` | Cambiar el perfil |
|
|
285
|
+
| `estado` | Qué está instalado, GPU detectada y configuración |
|
|
286
|
+
|
|
287
|
+
### Recetas: un flujo completo en una sola llamada
|
|
288
|
+
|
|
289
|
+
| Receta | Entrada | Resultado en `output_dir/` |
|
|
290
|
+
|--------|---------|----------------------------|
|
|
291
|
+
| `auto` | **Lo que sea** | Detecta el tipo, elige la receta y reintenta si sirve; añade `RESUMEN.md` |
|
|
292
|
+
| `photos_to_model` | Carpeta de fotos | `model.stl`, `render.png`, `report.json`, nube de puntos |
|
|
293
|
+
| `plan_to_part` | Plano, careta o silueta | `model.stl`, `render.png`, contornos SVG |
|
|
294
|
+
| `scan_to_cad` | STL/OBJ/PLY/GLB | `model.stl`, `cad.scad`, `cad.py` (CadQuery), `render.png` |
|
|
295
|
+
| `photo_to_relief` | Una foto | `model.stl` (relieve 2.5D), `render.png` |
|
|
296
|
+
| `mesh_report` | Una malla | Cotas + `render.png` |
|
|
297
|
+
|
|
298
|
+
Desde la terminal: `reverse3d run plan_to_part plano.png salida/ --thickness 4 --units-per-pixel 0.5`.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 🚀 GPU o CPU
|
|
303
|
+
|
|
304
|
+
reverse3d **detecta tu GPU automáticamente**: NVIDIA CUDA mediante `nvidia-smi` y Apple Silicon (MPS). Si pides GPU y no está disponible, **pasa a CPU solo, sin fallar**: por ejemplo, con un COLMAP compilado sin CUDA.
|
|
305
|
+
|
|
306
|
+
| Cómo cambiarlo | GPU | CPU | Automático |
|
|
307
|
+
|----------------|-----|-----|------------|
|
|
308
|
+
| Hablando con tu agente | *"usa la GPU"* | *"usa la CPU"* | *"modo automático"* |
|
|
309
|
+
| Comando `/` | `usar-gpu` | `usar-cpu` | — |
|
|
310
|
+
| Herramienta | `reverse3d_configure {"device":"gpu"}` | `{"device":"cpu"}` | `{"device":"auto"}` |
|
|
311
|
+
| CLI persistente | `reverse3d config set device gpu` | `… device cpu` | `… device auto` |
|
|
312
|
+
| CLI solo esta vez | `reverse3d --device gpu run …` | `--device cpu` | — |
|
|
313
|
+
| Variable de entorno | `REVERSE3D_DEVICE=gpu` | `=cpu` | `=auto` |
|
|
314
|
+
|
|
315
|
+
Los cambios desde el agente **se aplican al instante**, sin reiniciar: el servidor relee la configuración en cada llamada.
|
|
316
|
+
|
|
317
|
+
| Componente | Usa la GPU para |
|
|
318
|
+
|------------|-----------------|
|
|
319
|
+
| COLMAP (build CUDA) | Extracción y matching SIFT + reconstrucción densa MVS |
|
|
320
|
+
| Blender Cycles | Render con OptiX, CUDA, HIP, Metal u oneAPI (el que haya disponible) |
|
|
321
|
+
| Depth Anything (PyTorch) | Inferencia en CUDA o Apple MPS |
|
|
322
|
+
|
|
323
|
+
### Perfiles de rendimiento
|
|
324
|
+
|
|
325
|
+
| Perfil | Fotogrametría | Muestras de render | Resolución de render | Detalle de relieve | Muestras para primitivas |
|
|
326
|
+
|--------|---------------|--------------------|----------------------|--------------------|--------------------------|
|
|
327
|
+
| `fast` | low | 16 | 960×720 | 1/4 | 8 000 |
|
|
328
|
+
| `balanced` *(defecto)* | medium | 64 | 1600×1200 | 1/2 | 20 000 |
|
|
329
|
+
| `quality` | high | 256 | 2400×1800 | completo | 50 000 |
|
|
330
|
+
|
|
331
|
+
Cambia el perfil con *"modo rápido"*, `rendimiento quality`, `reverse3d config set profile fast` o `--profile`. Los argumentos explícitos de una herramienta siempre tienen prioridad sobre el perfil. Hilos de CPU: `reverse3d config set threads 8`.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 💰 Ahorro de tokens
|
|
336
|
+
|
|
337
|
+
reverse3d está diseñado para gastar poco contexto del modelo:
|
|
338
|
+
|
|
339
|
+
| Técnica | Cómo | Ahorro medido* |
|
|
340
|
+
|---------|------|----------------|
|
|
341
|
+
| **Recetas** | 1 llamada en lugar de 5–6; el detalle completo va a `report.json` en disco | **−82 %** de tokens de resultados y 5 → 1 idas y vueltas |
|
|
342
|
+
| **Salida compacta** (por defecto) | Rutas relativas, números redondeados, sin nulos, listas recortadas, solo lo relevante | −44 % por llamada |
|
|
343
|
+
| **Toolset `lean`** | Expone 5 herramientas (las recetas cubren el resto) | Esquemas: 4 147 → 1 466 tokens (−65 %) |
|
|
344
|
+
| **Skill de Claude Code** | Guía que el agente carga solo cuando hace falta | 0 tokens fijos |
|
|
345
|
+
| **Errores con `hint`** | El agente se corrige a la primera, sin bucles | — |
|
|
346
|
+
|
|
347
|
+
<sub>*Flujo plano → pieza con 5 pasos medido en la v0.2.0, a ~4 caracteres por token. Cada ida y vuelta evitada ahorra además reenviar todo el historial de la conversación.</sub>
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
reverse3d config set toolset lean # menos herramientas = menos tokens (reinicia el agente)
|
|
351
|
+
reverse3d config set verbosity full # si alguna vez necesitas el detalle completo
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 🔌 Sin internet (modo offline)
|
|
357
|
+
|
|
358
|
+
reverse3d **funciona sin conexión**. Todo el cálculo es local (OpenCV, COLMAP, Open3D, trimesh, Blender). Lo único que se descarga es el modelo de IA de profundidad, y **el instalador lo deja descargado**.
|
|
359
|
+
|
|
360
|
+
- **Cambio automático:** si el equipo no detecta internet, reverse3d pasa solo a modo offline. No tienes que hacer nada.
|
|
361
|
+
- **Comprobar:** `reverse3d offline status` dice si hay conexión y qué funciona sin ella. `reverse3d doctor` lo incluye en su informe.
|
|
362
|
+
- **Preparar a mano:** `reverse3d offline prepare` descarga los modelos (solo `safetensors`, en una revisión fijada y revisada) en `~/.reverse3d/models`. Usa `--all` para incluir también los modelos grandes CC-BY-NC.
|
|
363
|
+
- **Forzarlo:** `reverse3d config set offline on`, para no usar nunca la red. Con `off` reverse3d asume que hay conexión y no la comprueba; el valor por defecto es `auto`.
|
|
364
|
+
|
|
365
|
+
| Sin internet funciona | Necesita |
|
|
366
|
+
|-----------------------|----------|
|
|
367
|
+
| Medir, reparar, primitivas, CAD (OpenSCAD/CadQuery), plano → pieza | nada |
|
|
368
|
+
| Fotogrametría (fotos → 3D) y render | COLMAP / Blender instalados (el instalador lo hace) |
|
|
369
|
+
| Foto → relieve con IA | el modelo descargado una vez (el instalador lo hace) |
|
|
370
|
+
|
|
371
|
+
> Tu agente de IA (Claude, Cursor, Copilot…) sí necesita internet. Sin agente, usa el **piloto automático** o la CLI.
|
|
372
|
+
|
|
373
|
+
## 🤖 Piloto automático
|
|
374
|
+
|
|
375
|
+
**No hace falta elegir receta ni tener un agente.** reverse3d detecta qué le das y lo procesa:
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
reverse3d auto bandeja/taza # carpeta de fotos → modelo 3D medido
|
|
379
|
+
reverse3d auto plano.png # plano o silueta → pieza extruida
|
|
380
|
+
reverse3d auto pieza.stl # malla → reparación + cotas + CAD
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
O déjalo trabajando solo con la **carpeta vigilada**:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
reverse3d watch
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
1. Suelta en `~/reverse3d-workspace/bandeja` una carpeta de fotos, un plano, una foto o un STL/OBJ/PLY/GLB.
|
|
390
|
+
2. Cuando termina de copiarse, se procesa solo. El resultado aparece en `resultados/<nombre>/`, con un **`RESUMEN.md`** que explica qué detectó, las medidas, los archivos y el siguiente paso.
|
|
391
|
+
3. El original se mueve a `bandeja/_procesado/`. Si algo falla, va a `bandeja/_revisar/` con un `LEEME.txt` que dice qué corregir.
|
|
392
|
+
|
|
393
|
+
**Qué decide solo:**
|
|
394
|
+
|
|
395
|
+
| Detecta | Hace | Si falla, reintenta con |
|
|
396
|
+
|---------|------|-------------------------|
|
|
397
|
+
| Carpeta con 3 o más fotos | `photos_to_model` | calidad `high` |
|
|
398
|
+
| Imagen de alto contraste o con fondo transparente | `plan_to_part` | otros métodos de máscara (adaptativo, bordes) |
|
|
399
|
+
| Foto normal | `photo_to_relief` | — |
|
|
400
|
+
| Malla (STL/OBJ/GLB/PLY con caras) | `scan_to_cad` | reparación fuerte si no queda cerrada |
|
|
401
|
+
| Nube de puntos (XYZ/PCD/PLY sin caras) | mallado Poisson + `scan_to_cad` | — |
|
|
402
|
+
|
|
403
|
+
Si las fotos están borrosas o falta una herramienta, **no reintenta en vano**: te explica qué cambiar. Funciona sin internet y sin modelo de IA, porque son reglas, no adivinanzas.
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Capacidades
|
|
408
|
+
|
|
409
|
+
| Área | Qué hace | Tecnología |
|
|
410
|
+
|------|----------|------------|
|
|
411
|
+
| 🖼️ **Análisis de capturas** | Nitidez, exposición, textura y solape entre vistas, con recomendaciones | OpenCV (SIFT/ORB + RANSAC) |
|
|
412
|
+
| ✂️ **Máscaras y planos** | Siluetas y contornos vectoriales (con agujeros) desde fotos, planos, caretas o PNG con alfa | OpenCV |
|
|
413
|
+
| 🧱 **Plano → pieza** | Extrusión de contornos a sólido 3D con escala real | Shapely + trimesh |
|
|
414
|
+
| 📷 **Fotogrametría** | Fotos → SfM → MVS denso → nube → malla | COLMAP + Open3D |
|
|
415
|
+
| 🌊 **Profundidad con IA** | Una foto → mapa de profundidad → relieve 2.5D | Depth Anything V2 |
|
|
416
|
+
| 🛠️ **Reparación de mallas** | Limpieza, restos sueltos, agujeros, normales, Taubin, decimación, alineación OBB/PCA, escala | trimesh |
|
|
417
|
+
| 📏 **Metrología** | Cotas AABB/OBB, área, volumen, centro de masa, estanqueidad | trimesh |
|
|
418
|
+
| 📐 **Primitivas** | Planos, cilindros y esferas con RANSAC (radios, ejes, normales) | NumPy |
|
|
419
|
+
| 🧩 **CAD paramétrico** | Código **OpenSCAD** y **CadQuery** editable | — |
|
|
420
|
+
| 🎬 **Render** | Blender headless (Cycles/Eevee, turntable) o PyVista | Blender `bpy` / PyVista |
|
|
421
|
+
| 🤖 **Agentes** | 14 herramientas, 10 comandos `/`, recetas, autoconfiguración en 8 agentes | MCP + JSON Schema |
|
|
422
|
+
| 🛰️ **Piloto automático** | Detección de la entrada, reintentos inteligentes, carpeta vigilada, `RESUMEN.md` | Reglas deterministas, sin IA |
|
|
423
|
+
| 🔌 **Offline** | Detección de conexión, cambio automático, modelos fijados por revisión | `~/.reverse3d/models` |
|
|
424
|
+
|
|
425
|
+
**Formatos:** imágenes `png jpg jpeg tif tiff bmp webp` · mallas `stl obj ply glb gltf off` · nubes `ply xyz pcd`.
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Herramientas externas opcionales
|
|
430
|
+
|
|
431
|
+
**El instalador las instala solo** (salvo `--no-tools`/`--minimal`). reverse3d funciona sin ellas, pero desbloquean más potencia. Comprueba en cualquier momento con `reverse3d doctor` o con el comando `estado`.
|
|
432
|
+
|
|
433
|
+
| Herramienta | Para qué | Windows | macOS | Linux |
|
|
434
|
+
|-------------|----------|---------|-------|-------|
|
|
435
|
+
| **Blender 5.2** (vale 3.6+) | Render fotorrealista | ✅ automático (portable) | ✅ automático en Apple Silicon; Intel: `brew` si existe | ✅ automático en x86-64 (portable) |
|
|
436
|
+
| **COLMAP 4.2** | Fotogrametría (fotos → 3D) | ✅ automático; build **CUDA** si hay NVIDIA | ✅ automático en Apple Silicon; Intel: `brew` si existe | Solo con `apt`/`dnf`/`brew` sin contraseña; si no: `sudo apt install colmap` |
|
|
437
|
+
| **Open3D** | Mallado de nubes de puntos | ✅ automático (Python 3.12 privado) | ídem | ídem |
|
|
438
|
+
| **PyTorch** | Profundidad con IA | ✅ automático (CUDA si hay NVIDIA) | ✅ automático (MPS) | ✅ automático (CUDA o CPU) |
|
|
439
|
+
|
|
440
|
+
Si quieres usar un Blender o COLMAP propio: `reverse3d config set blender "C:\Program Files\Blender Foundation\Blender 4.2\blender.exe"` (igual con `colmap`).
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Referencia de la CLI
|
|
445
|
+
|
|
446
|
+
```
|
|
447
|
+
reverse3d [--json] [--device auto|cpu|gpu] [--profile fast|balanced|quality] [--workspace DIR] <comando>
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
| Comando | Descripción |
|
|
451
|
+
|---------|-------------|
|
|
452
|
+
| `auto ENTRADA [SALIDA]` | Piloto automático: detecta la entrada y la procesa (salida por defecto: `resultados/<nombre>`) |
|
|
453
|
+
| `watch [BANDEJA] [--out DIR] [--once]` | Carpeta vigilada: procesa sola lo que dejes en `bandeja/` |
|
|
454
|
+
| `offline status` · `offline prepare [--all]` | Qué funciona sin internet · descargar los modelos de IA |
|
|
455
|
+
| `run <receta> ENTRADA SALIDA` | Flujos completos: `auto`, `photos_to_model`, `plan_to_part`, `scan_to_cad`, `photo_to_relief`, `mesh_report` |
|
|
456
|
+
| `setup [--agents …] [--dry-run] [--uninstall] [--snippets]` | Registra o elimina reverse3d en tus agentes |
|
|
457
|
+
| `config show \| set K V \| unset K \| path` | Configuración persistente (`~/.reverse3d/config.json`) |
|
|
458
|
+
| `doctor` | Capacidades, GPU, extras, binarios y límites |
|
|
459
|
+
| `vision analyze DIR` · `vision match A B` | Calidad y solape de capturas |
|
|
460
|
+
| `vision mask IMG OUT` · `vision extrude CONTOURS OUT` | Máscaras, contornos y extrusión |
|
|
461
|
+
| `recon photo DIR OUT` · `recon depth IMG OUT` · `recon mesh CLOUD OUT` | Reconstrucción |
|
|
462
|
+
| `mesh clean IN OUT` · `mesh measure IN` · `mesh fit IN [--parametric x.scad]` | Ingeniería inversa |
|
|
463
|
+
| `render MESH OUT.png [--turntable 36]` | Render |
|
|
464
|
+
| `agent tools [--format anthropic\|openai\|gemini] [--toolset lean]` | Esquemas de herramientas |
|
|
465
|
+
| `agent call NOMBRE --args JSON` | Ejecuta una herramienta con sandbox |
|
|
466
|
+
| `agent mcp` | Servidor MCP (stdio) |
|
|
467
|
+
|
|
468
|
+
**Códigos de salida:** `0` OK · `1` error · `2` entrada inválida o seguridad · `3` falta una dependencia · `4` falló COLMAP o Blender.
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Configuración
|
|
473
|
+
|
|
474
|
+
**Prioridad:** valores por defecto ← `~/.reverse3d/config.json` (`reverse3d config set`) ← variables de entorno.
|
|
475
|
+
|
|
476
|
+
| Clave (`config set`) | Variable de entorno | Defecto | Descripción |
|
|
477
|
+
|----------------------|---------------------|---------|-------------|
|
|
478
|
+
| `workspace` | `REVERSE3D_WORKSPACE` | `~/reverse3d-workspace` (tras `setup`) | Carpeta sandbox de los agentes |
|
|
479
|
+
| `device` | `REVERSE3D_DEVICE` | `auto` | `auto` · `cpu` · `gpu` |
|
|
480
|
+
| `profile` | `REVERSE3D_PROFILE` | `balanced` | `fast` · `balanced` · `quality` |
|
|
481
|
+
| `verbosity` | `REVERSE3D_VERBOSITY` | `compact` | `compact` (ahorra tokens) · `full` |
|
|
482
|
+
| `toolset` | `REVERSE3D_TOOLSET` | `full` | `full` (14 herramientas) · `lean` (5) |
|
|
483
|
+
| `offline` | `REVERSE3D_OFFLINE` | `auto` | `auto` (detecta la conexión) · `on` (nunca usa la red) · `off` |
|
|
484
|
+
| `threads` | `REVERSE3D_THREADS` | `0` (auto) | Hilos de CPU |
|
|
485
|
+
| `timeout_s` | `REVERSE3D_TIMEOUT_S` | `3600` | Timeout por proceso externo |
|
|
486
|
+
| `max_input_mb` · `max_images` · `max_mesh_faces` · `max_image_pixels` | `REVERSE3D_MAX_*` | 512 · 500 · 5M · 100M | Límites de recursos |
|
|
487
|
+
| `blender` · `colmap` | `REVERSE3D_BLENDER` · `REVERSE3D_COLMAP` | PATH | Ruta a los binarios |
|
|
488
|
+
| — | `REVERSE3D_HOME` | `~/.reverse3d` | Ubicación de `config.json` y del venv |
|
|
489
|
+
|
|
490
|
+
reverse3d **no necesita credenciales** de ningún tipo.
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Integración avanzada
|
|
495
|
+
|
|
496
|
+
- **Function calling propio** (SDK de Anthropic, OpenAI o Gemini): `tool_definitions("anthropic" | "openai" | "gemini", toolset)` + `execute_tool(name, args, settings)`. Ver [docs/agent-integration.md](docs/agent-integration.md) y el agente de ejemplo [`examples/claude_agent.py`](examples/claude_agent.py).
|
|
497
|
+
- **Configuración MCP manual** para cualquier cliente: `reverse3d setup --snippets` imprime el JSON o TOML exacto. Ver [docs/mcp.md](docs/mcp.md).
|
|
498
|
+
- **Esquemas estáticos:** [`docs/tools/`](docs/tools/).
|
|
499
|
+
- **Agentes con terminal sin MCP:** `reverse3d --json agent call <tool> --args '{…}'` (mismo sandbox).
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Stack tecnológico
|
|
504
|
+
|
|
505
|
+
| Capa | Tecnologías |
|
|
506
|
+
|------|-------------|
|
|
507
|
+
| Lenguaje | Python 3.10+ con tipado estático (mypy) |
|
|
508
|
+
| Visión | OpenCV 4/5 (headless), Pillow |
|
|
509
|
+
| Geometría 3D | trimesh, NumPy, SciPy, Shapely, mapbox-earcut, NetworkX, fast-simplification |
|
|
510
|
+
| Reconstrucción | COLMAP (SfM/MVS, CUDA), Open3D (Poisson) |
|
|
511
|
+
| IA | PyTorch (CUDA / MPS), Hugging Face Transformers, Depth Anything V2 |
|
|
512
|
+
| Render | Blender 3.6–4.x headless (Cycles/Eevee, OptiX/CUDA/HIP/Metal), PyVista/VTK |
|
|
513
|
+
| Agentes | MCP (SDK 1.x y 2.x, herramientas y prompts), JSON Schema para Anthropic/OpenAI/Gemini, Agent Skills, AGENTS.md |
|
|
514
|
+
| CLI | Typer, Rich |
|
|
515
|
+
| Instalación | Instaladores bash/PowerShell, venv aislado, `uvx`, `pip` |
|
|
516
|
+
| Calidad y seguridad | pytest, ruff, mypy, bandit, CodeQL, pip-audit, gitleaks, SBOM CycloneDX, Dependabot |
|
|
517
|
+
| CI/CD | GitHub Actions (Linux/Windows/macOS × Python 3.10–3.13, actions fijadas por SHA) |
|
|
518
|
+
|
|
519
|
+
## Arquitectura
|
|
520
|
+
|
|
521
|
+
```mermaid
|
|
522
|
+
flowchart LR
|
|
523
|
+
U[Tú] -->|"lenguaje natural / comandos /"| AG[Agente de IA]
|
|
524
|
+
AG -->|MCP stdio| MCP[mcp_server.py<br/>herramientas + prompts]
|
|
525
|
+
AG -->|shell| CLI[cli.py]
|
|
526
|
+
MCP --> T[agent/tools.py<br/>validación · sandbox · compactación]
|
|
527
|
+
CLI --> T
|
|
528
|
+
T --> R[recipes.py<br/>flujos de 1 llamada]
|
|
529
|
+
T --> D[vision · reconstruction · reverse_eng · rendering]
|
|
530
|
+
R --> D
|
|
531
|
+
D --> HW[hardware.py<br/>GPU/CPU · perfiles]
|
|
532
|
+
D --> SEC[security.py]
|
|
533
|
+
SEC -->|sin shell| C[(COLMAP)]
|
|
534
|
+
SEC -->|sin shell| B[(Blender)]
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
Detalle en [docs/architecture.md](docs/architecture.md).
|
|
538
|
+
|
|
539
|
+
## Seguridad
|
|
540
|
+
|
|
541
|
+
- **Sandbox de workspace:** los agentes solo leen y escriben dentro de su carpeta; se resuelven symlinks y referencias internas de glTF/OBJ.
|
|
542
|
+
- **Configuración por agente limitada:** con `reverse3d_configure` el agente solo puede cambiar `device`, `profile`, `verbosity` y `threads`. **Nunca** el workspace, los límites ni la ruta de Blender o COLMAP, porque eso equivaldría a ejecutar código arbitrario.
|
|
543
|
+
- **`setup` respetuoso:** respalda cada archivo, solo toca la entrada `reverse3d` y nunca reescribe archivos que no puede leer con seguridad.
|
|
544
|
+
- **Instaladores sin privilegios:** sin `sudo` ni administrador, en un venv aislado y con validación de argumentos. Se puede fijar la versión con `--ref`.
|
|
545
|
+
- **Procesos sin shell**, con timeout y entorno sin secretos. **Blender endurecido** (`--factory-startup --disable-autoexec`, script estático).
|
|
546
|
+
- **Modelos de IA:** lista blanca, solo safetensors y `trust_remote_code=False`.
|
|
547
|
+
- **CI:** bandit, CodeQL, pip-audit, gitleaks, SBOM y actions fijadas por SHA.
|
|
548
|
+
|
|
549
|
+
Detalle en [docs/security-model.md](docs/security-model.md). Para reportar vulnerabilidades, consulta [SECURITY.md](SECURITY.md).
|
|
550
|
+
|
|
551
|
+
## 🔏 Autenticidad y autoría
|
|
552
|
+
|
|
553
|
+
**reverse3d fue creado por y es propiedad de [Voxel Enterprise](https://voxel.lat).** El código es open source (Apache-2.0); **la autoría y el nombre no se ceden**.
|
|
554
|
+
|
|
555
|
+
- **Repo oficial blindado:** un *guardián de autoría* (`scripts/check_authorship.py`) bloquea en CI, en pre-commit y en los tests cualquier cambio de autor, licencia o copyright. CODEOWNERS exige la aprobación del propietario, y los agentes de IA tienen la regla explícita de no tocar la autoría ([AGENTS.md §4](AGENTS.md)).
|
|
556
|
+
- **Releases verificables:** solo se publican desde **tags firmados**, cada archivo lleva una **atestación de procedencia (Sigstore)** y PyPI usa *Trusted Publishing*. Para comprobar que tu copia es la oficial:
|
|
557
|
+
```bash
|
|
558
|
+
gh attestation verify <archivo> --repo rellytechgame/Reverse3D-tool
|
|
559
|
+
```
|
|
560
|
+
- **Copias y forks:** están permitidos, pero deben **conservar la atribución** (Apache-2.0 §4, [NOTICE](NOTICE)) y **usar otro nombre** ([TRADEMARKS.md](TRADEMARKS.md)). Presentarse como autor o dueño de reverse3d no está permitido.
|
|
561
|
+
|
|
562
|
+
Más detalles, cómo reportar suplantaciones y la lista de blindaje del propietario: **[docs/authenticity.md](docs/authenticity.md)** · Autores: [AUTHORS.md](AUTHORS.md)
|
|
563
|
+
|
|
564
|
+
## Solución de problemas
|
|
565
|
+
|
|
566
|
+
| Problema | Solución |
|
|
567
|
+
|----------|----------|
|
|
568
|
+
| El agente no ve las herramientas | Reinicia el agente. Ejecuta `reverse3d setup` y revisa la columna `status`. Usa `reverse3d setup --snippets` para configurarlo a mano. |
|
|
569
|
+
| `reverse3d: command not found` | Abre una terminal nueva o usa `~/.reverse3d/venv/bin/reverse3d` (Windows: `%USERPROFILE%\.reverse3d\venv\Scripts\reverse3d.exe`). |
|
|
570
|
+
| `security_violation` | El archivo está fuera del workspace: muévelo a `~/reverse3d-workspace`. |
|
|
571
|
+
| La instalación se cortó a medias | Vuelve a ejecutar el mismo comando: continúa donde se quedó. El detalle está en `~/.reverse3d/install.log`. |
|
|
572
|
+
| `dependency_missing` | Falta Blender, COLMAP o un extra: vuelve a ejecutar el instalador sin `--lite`/`--minimal`. `~/.reverse3d/install-status.json` → `missing` dice qué falta y por qué. |
|
|
573
|
+
| No usa la GPU | Comprueba `reverse3d config show` → `hardware`. Si instalaste antes de tener los drivers NVIDIA, vuelve a ejecutar el instalador. |
|
|
574
|
+
| El agente pide permiso en cada herramienta | Claude Code y Gemini CLI quedan aprobados solos. En los demás, elige **"Permitir siempre"** la primera vez. |
|
|
575
|
+
| Fotogrametría lenta o con timeout | Usa el perfil `fast`, `reverse3d config set timeout_s 7200` y menos fotos o fotos más pequeñas. |
|
|
576
|
+
| `photos_to_model` dice que las fotos no sirven | Sigue las recomendaciones (más fotos, más nitidez, más solape) o usa `force_analysis: true`. |
|
|
577
|
+
| Mi archivo de configuración tiene comentarios | `setup` no lo modifica; pega el bloque que te muestra. |
|
|
578
|
+
| «The AI depth model is not on this computer» | Conéctate una vez y ejecuta `reverse3d offline prepare`. Después funciona sin internet. |
|
|
579
|
+
| Algo de la bandeja acabó en `_revisar` | Lee el `LEEME.txt` que está junto al archivo, corrige lo que indica y vuelve a dejarlo en `bandeja`. |
|
|
580
|
+
|
|
581
|
+
## Estructura del repositorio
|
|
582
|
+
|
|
583
|
+
```
|
|
584
|
+
reverse3d/
|
|
585
|
+
├── AGENTS.md · CLAUDE.md · GEMINI.md # Protocolo de instalación y uso para agentes de IA
|
|
586
|
+
├── scripts/install.sh · install.ps1 # Instaladores de 1 comando (Linux/macOS · Windows)
|
|
587
|
+
├── pyproject.toml · requirements.txt · policy.yaml
|
|
588
|
+
├── docs/ # Arquitectura, MCP, agentes, seguridad, esquemas de tools
|
|
589
|
+
├── examples/ # Agente Claude y demo de punta a punta
|
|
590
|
+
├── reverse3d/
|
|
591
|
+
│ ├── cli.py · recipes.py · autopilot.py · watch.py · offline.py · setup_agents.py · userconfig.py
|
|
592
|
+
│ ├── config.py · security.py · mesh_io.py · imaging.py · errors.py · doctor.py
|
|
593
|
+
│ ├── vision/ · reconstruction/ · reverse_eng/ · rendering/
|
|
594
|
+
│ └── agent/ # tools.py · mcp_server.py · prompts.py · compact.py · skill/
|
|
595
|
+
└── tests/ # 170+ tests (unitarios, seguridad, CLI, MCP, setup)
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
## Desarrollo
|
|
599
|
+
|
|
600
|
+
```bash
|
|
601
|
+
pip install -e ".[dev]" && pre-commit install
|
|
602
|
+
pytest --cov=reverse3d
|
|
603
|
+
ruff format --check reverse3d tests && ruff check reverse3d tests && mypy reverse3d
|
|
604
|
+
bandit -c pyproject.toml -r reverse3d && pip-audit --skip-editable
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
Las normas y reglas de seguridad obligatorias están en [CONTRIBUTING.md](CONTRIBUTING.md) y [AGENTS.md](AGENTS.md).
|
|
608
|
+
|
|
609
|
+
## Hoja de ruta
|
|
610
|
+
|
|
611
|
+
- [ ] Visual hull multivista desde siluetas
|
|
612
|
+
- [ ] Reconstrucción feed-forward multivista (DUSt3R / VGGT) como alternativa a COLMAP
|
|
613
|
+
- [ ] Exportación STEP directa y ajuste de conos y toroides
|
|
614
|
+
- [ ] Comparación escaneo vs CAD (mapa de desviaciones)
|
|
615
|
+
- [ ] Publicación en PyPI (`pipx install reverse3d`) con Trusted Publishing
|
|
616
|
+
- [ ] Imagen Docker con CUDA para el servidor MCP
|
|
617
|
+
|
|
618
|
+
## Sobre Voxel Enterprise
|
|
619
|
+
|
|
620
|
+
<div align="center">
|
|
621
|
+
|
|
622
|
+
**[VOXEL ENTERPRISE](https://voxel.lat)** — *Tu éxito es nuestra misión.*
|
|
623
|
+
|
|
624
|
+
</div>
|
|
625
|
+
|
|
626
|
+
**Voxel Enterprise** es una empresa de desarrollo de software y soluciones tecnológicas con sede en **Panamá**, que da servicio a toda **Latinoamérica**:
|
|
627
|
+
|
|
628
|
+
- **Desarrollo web** a medida, orientado a conversión.
|
|
629
|
+
- **Aplicaciones móviles** para iOS, Android y multiplataforma.
|
|
630
|
+
- **Diseño UI/UX**, **SEO** y **publicidad digital**.
|
|
631
|
+
- **VX Business**: plataforma todo en uno para PYMES (CRM, contabilidad, RR. HH., nómina, reclutamiento, sucursales).
|
|
632
|
+
- **IT outsourcing y staff augmentation**: desde un especialista hasta un departamento de TI completo.
|
|
633
|
+
|
|
634
|
+
`reverse3d` es una contribución open source de Voxel Enterprise a la comunidad de ingeniería, manufactura e IA.
|
|
635
|
+
|
|
636
|
+
| Contacto | |
|
|
637
|
+
|----------|---|
|
|
638
|
+
| 🌐 Web | [voxel.lat](https://voxel.lat) |
|
|
639
|
+
| ✉️ Email | info@voxel.lat |
|
|
640
|
+
| 💬 Redes | `@voxelenterprise` en X, Instagram, LinkedIn y TikTok |
|
|
641
|
+
|
|
642
|
+
¿Integraciones a medida o soporte comercial? [Contáctanos](https://voxel.lat/contact/).
|
|
643
|
+
|
|
644
|
+
## Licencia
|
|
645
|
+
|
|
646
|
+
**Apache 2.0** © Voxel Enterprise. Ver [LICENSE](LICENSE), [NOTICE](NOTICE), [AUTHORS.md](AUTHORS.md) y [TRADEMARKS.md](TRADEMARKS.md). Las redistribuciones deben conservar la atribución. Blender, COLMAP y los pesos de los modelos conservan sus propias licencias. **Depth Anything V2 Base y Large son CC-BY-NC-4.0 (uso no comercial)**; el modelo por defecto, *Small*, es Apache-2.0.
|
|
647
|
+
|
|
648
|
+
<div align="center">
|
|
649
|
+
<sub>Hecho con ❤️ en Panamá por <a href="https://voxel.lat">Voxel Enterprise</a></sub>
|
|
650
|
+
</div>
|