Fecha
2026-07-13 (reporte), fix en v1.54.1
Severidad
Alta — funcionalidad completamente ausente (165/165 masters sin imagen).
Síntomas
- Usuario (Edu) importa stencil
.vssde Cisco Catalyst 9000. - Modal de stenciles: miniaturas muestran icono de imagen rota.
- Stencil en editor: vacío (sin puertos, sin serigrafía, sin imagen).
- Internar: no hay errores en logs; libvisio-ng genera SVGs válidos en XML, pero llenos de
<image href="data:image/emf">.
Investigación
Raíz
Cisco no dibuja sus stencils con geometría Visio standard. En su lugar, incrusta el arte en un formato bitmap nativo de Windows (EMF — Enhanced Metafile). libvisio-ng extrae estos datos y los envuelve en una etiqueta SVG <image> con el EMF codificado en base64:
<svg xmlns="...">
<image xlink:href="data:image/emf;base64,AQ..."/>
</svg>
El navegador web NO sabe renderizar EMF. Chrome, Firefox, Safari: todos lo ignoran → imagen rota.
Del fichero Catalyst 9000 (40 MB, 165 masters): los 165 son solo-EMF (sin geometría vectorial).
Verificación
- Catalyst 9200, 9300: mismo patrón (Cisco usa el mismo motor para todos).
- Eaton (Racks, UPS): SVGs con geometría real, no tocados.
Impacto en PROD
- Usuarios que importan stencils de Cisco reciben librerías no funcionales.
- Sin forma de arreglarlo sin fix en el servidor.
- Reporte urgente por Edu (early user).
Resolución
v1.54.1 (mismo día):
- Detección automática: función
svg_is_emf_only()identifica SVGs con solo EMF. - Conversión: LibreOffice + rsvg convierten a PNG en lote (una invocación por operación = costo amortizado).
- Fallback: si rsvg falla, EMF→PNG directo de LibreOffice.
- Postproceso: blanco→transparente, autocrop, escalado mínimo.
- Desaprobación: master fallido se descarta (mejor ausente que roto).
Memoria: compose.yml (dev) 512M → 1024M (libvisio pica ~515 MB).
Testing
- Unit: detección, conversión, descarte.
- Integration: Catalyst 9000 real (27/27 masters convertidos con éxito en Docker).
- Verificación visual: Catalyst 9200/9300 nítidos, con puertos y serigrafía.
Limitaciones
- Los stencils importados rotos (pre-fix) no se auto-reparan. Solución: borrarlos de la librería y re-importar el
.vss. - Memoria: ficheros >100 MB pueden no caber. Mitigación: guards en QA + logs de warning.
Prevención futura
- Ampliar QA: añadir tests con otros fabricantes que usen EMF (si los hay).
- Monitoreo: loguear ratio EMF-solo vs. vectoriales (señal temprana de nuevos formatos).
- Documentación: en README, aclarar que stencils rotos pre-v1.54.1 deben re-importarse.
Véase también
- [[feature—stencils—visio-emf-to-png]]
- [[decision—20260713—visio-emf-detection-and-fallback]]
- [[entity—racks—service—emf-converter]]