viewer on-demand — relancer viser à la demande depuis le dashboard

Le viser de demo.py était tué dès que le PLY était écrit (pour libérer la VRAM),
donc les liens dans le dashboard menaient vers ERR_CONNECTION_REFUSED.

Ajout d'un viewer standalone indépendant :
- scripts/viser_ply.py : charge un PLY via open3d + sert via viser (sans GPU),
  subsample random à 2M pts max pour rester fluide
- app/main.py : routes POST /jobs/{id}/view et /stitches/{id}/view qui scp
  le script sur le worker et lancent un viser détaché (nohup+setsid+disown via
  wrapper shell déposé sur le worker)
- templates : remplace <a href> par <button class=viewer-btn> qui POST puis
  window.open de l'URL retournée
- Dockerfile : copie scripts/ dans l'image (nécessaire pour scp-er viser_ply.py)
This commit is contained in:
Poulpe
2026-04-21 13:09:48 +00:00
parent 6ac3a382c7
commit 468f9084ec
6 changed files with 159 additions and 3 deletions

View File

@@ -74,6 +74,11 @@ progress::-moz-progress-bar { background: var(--accent); }
white-space: nowrap; }
.job-list .dur { color: var(--muted); font-size: 0.78rem; }
.job-list .ext { margin-left: 0.5rem; color: var(--accent); font-size: 0.75rem; }
button.ext.viewer-btn { background: transparent; border: 1px solid var(--accent);
color: var(--accent); font-size: 0.72rem; padding: 1px 6px; border-radius: 3px;
cursor: pointer; font-family: inherit; }
button.ext.viewer-btn:hover { background: var(--accent); color: #000; }
button.ext.viewer-btn:disabled { opacity: 0.6; cursor: wait; }
.err-line { color: var(--err); font-size: 0.75rem;
padding-left: 28px; padding-bottom: 0.25rem; }