Cómo procesé un mosaico Seestar con Siril y Codex en Windows

Mosaico de la Cadena de Markarian obtenido con un Seestar S30
Cadena de Markarian y campo galáctico del Cúmulo de Virgo. Crédito: Sergio Cava / Astrocava . Licencia: CC BY 4.0 (abre en una pestaña nueva).

La Cadena de Markarian: de 1.278 imágenes desalineadas a un mosaico completo

La Cadena de Markarian es uno de esos campos que invitan a ampliar el encuadre. Alrededor de las galaxias M84 y M86 aparecen decenas de galaxias del cúmulo de Virgo, muchas de ellas pequeñas, pero perfectamente reconocibles cuando se consigue suficiente señal.

Con mis telescopios anteriores, encuadrar la cadena era tarea imposible, pero la función de mosaico del Seestar y el campo del S30 la convertían en un objetivo muy interesante. Merecía una prueba, no solo para captar la cadena, sino también para ampliar el campo y sacar todas las galaxias posibles de la zona.

Para este proyecto partíamos de 1.278 imágenes FITS obtenidas con un Seestar S30 durante cuatro sesiones de febrero de 2025. Cada exposición era de 10 segundos, con filtro IRCUT y ganancia 200. En total, unas 3 horas y 33 minutos de exposición nominal.

El registro y la integración de las tomas de los mosaicos del Seestar me habían resultado imposibles con PixInsight, mi herramienta favorita de procesado. Una charla impartida por Marcos en la Asociación Astronómica Cruz del Norte me inspiró a probar Siril junto con Codex, de OpenAI.

El objetivo parecía sencillo: registrar las tomas, evaluar su calidad, construir el mosaico y apilarlas con Siril. La realidad, especialmente trabajando en Windows, fue bastante más complicada.

Codex hizo de operador e ingeniero del flujo: generó los guiones para Siril, ejecutó pruebas pequeñas, inspeccionó los registros, comparó resultados y fue creando las herramientas auxiliares necesarias. El preprocesado de las imágenes lo realizó Siril y la resolución astrométrica, Astrometry.net.

Este artículo desarrolla la parte técnica del proyecto que presenté en la entrada dedicada a la Cadena de Markarian y forma parte de la sección de este sitio web sobre preprocesado de imágenes astronómicas.

Lo que sigue es una explicación bastante técnica de los problemas que nos encontramos. Si lo prefieres, pasa directamente a la conclusión. Ahí encontrarás el enlace al repositorio desde el que puedes descargar las herramientas para aplicarlas a tus propias tomas.

Una primera prueba que daba demasiada confianza

El primer paso fue construir un flujo reutilizable para Siril 1.4.4. Los datos de la Cadena de Markarian eran nuestro «conejillo de indias», pero, si funcionaba, sería la puerta a procesar otros objetos que estaban guardados en el cajón a la espera de un flujo que permitiera trabajar con ellos.

Antes de lanzar las 1.278 imágenes hicimos una prueba con 50. Siril consiguió registrar 46 y rechazó solo cuatro por problemas de correspondencia de estrellas. Parecía un resultado prometedor...

Sin embargo, al procesar el conjunto completo solo se registraron 254 de las 1.278 tomas.

El problema no era simplemente que las imágenes no registradas fueran malas. Estábamos intentando construir un mosaico: muchas teselas no compartían suficientes estrellas con la imagen de referencia. Un método de registro que funcionaba en un pequeño grupo cercano fallaba cuando el campo se extendía por zonas alejadas del mosaico. Era lo mismo que me pasaba con PixInsight.

Intentos de construir el mosaico

Probamos cambiando la resolución de catálogo y algunas variantes de mosaico progresivo. Incluso relajamos la detección de estrellas, tanto con los FITS originales como con versiones debayerizadas.

Nada funcionaba. Solo nos quedaba una posibilidad: resolver astrométricamente cada imagen con Astrometry.net para guiar el proceso de registro. Y ahí nos estaba esperando el siguiente problema...

El muro de Windows

En Linux, Siril puede invocar una instalación local de Astrometry.net de una forma relativamente directa. En Windows la situación es más compleja: Siril espera encontrar una estructura parecida a ANSVR o Cygwin, mientras que Astrometry.net estaba instalado en el subsistema Linux.

Además, durante la instalación aparecieron varios problemas:

Finalmente dejamos instalada y verificada la versión 0.93 de solve-field, con los índices Tycho2 del 07 al 19. Una imagen FITS original del Seestar S30 se resolvió correctamente utilizando el índice Tycho2-11, con una escala aproximada de 3,99 segundos de arco por píxel y un campo de unos 1,20 × 2,13 grados.

Eso demostraba que Astrometry.net entendía las imágenes. Todavía faltaba conseguir que Siril pudiera hablar con él.

El puente entre Siril, Windows y WSL

La inspiración para construir el puente entre Siril y Astrometry.net llegó casi por casualidad. Encontré el repositorio abierto luzbel/fake-ansvr-in-wsl2-for-nina (abre en una pestaña nueva).

Este proyecto, creado originalmente para N.I.N.A., propone una solución poco ortodoxa: instalar una versión de Astrometry.net dentro de WSL2 y hacer creer a una aplicación de Windows que está utilizando una instalación convencional de ANSVR bajo Cygwin.

Aunque el repositorio estaba pensado para N.I.N.A., Siril hacía suposiciones muy parecidas cuando intentaba utilizar Astrometry.net localmente en Windows.

La investigación de los registros y del comportamiento de Siril nos dio muchas pistas.

Cuando Siril utiliza Astrometry.net local en Windows, escribe un guion temporal llamado asnet.sh dentro del directorio configurado para el solucionador. Después intenta ejecutarlo como si estuviera dentro de un entorno Cygwin:

Siril en Windows
    → falsa instalación Cygwin
    → guion temporal /tmp/asnet.sh
    → WSL2
    → Astrometry.net
    → solución WCS devuelta a Siril

El primer puente no proporcionaba correctamente ese directorio temporal. Por eso Siril detectaba Astrometry.net, pero fallaba antes de que el solucionador pudiera empezar.

La solución consistió en crear:

Esta es probablemente la parte más específica de Windows. No bastaba con instalar Astrometry.net en WSL: había que reproducir exactamente las suposiciones que hace Siril sobre Cygwin, los directorios temporales y las rutas.

Primero cinco, después cincuenta

Antes de arriesgarnos a lanzar un trabajo de muchas horas, probamos el puente con cinco imágenes. Después repetimos la prueba con cincuenta.

La segunda prueba terminó con 50 de 50 imágenes resueltas astrométricamente y exportadas. Siril construyó un FITS de 2.640 × 2.791 píxeles en unos 8 minutos y 54 segundos.

A diferencia de las pruebas externas con archivos .xyls, esto ya demostraba el flujo completo:

  1. Siril extraía las estrellas.
  2. Siril invocaba Astrometry.net a través del puente.
  3. Astrometry.net calculaba la solución WCS.
  4. Siril recuperaba esa solución.
  5. Siril registraba y exportaba las imágenes.
  6. El conjunto podía apilarse.

Con esa evidencia llegó el momento de lanzar las 1.278 tomas.

La ejecución completa

El proceso completo tardó aproximadamente 12 horas y 58 minutos:

El resultado fue un FITS de 6.212 × 4.059 píxeles y 32 bits.

Lo realmente importante fue que las 1.278 imágenes quedaron resueltas y exportadas: pasamos de registrar 254 de 1.278 con el método convencional a registrar 1.278 de 1.278 mediante resolución astrométrica individual. La parte de apilado fue la más lenta, sobre todo por la igualación de los fondos de cielo de cada tesela.

Mosaico completo anotado tras resolver y registrar las 1.278 tomas del Seestar S30
Mosaico anotado construido con las 1.278 tomas. Fotografía: Sergio Cava / Astrocava. Licencia: CC BY 4.0 (abre en una pestaña nueva).

Resolver una vez, apilar muchas veces

Después de invertir casi trece horas en el proceso, no tenía sentido repetir la conversión, la resolución astrométrica y el registro cada vez que quisiéramos probar una selección de calidad diferente.

La solución final se dividió por fases:

  1. Resolver y registrar todas las imágenes una sola vez.
  2. Conservar esa secuencia registrada como fuente canónica.
  3. Analizar la calidad de las 1.278 imágenes.
  4. Crear selecciones reproducibles.
  5. Ejecutar nuevos apilados reutilizando el registro existente.

Aquí apareció otra trampa de Siril. Modificar las banderas de selección dentro de la secuencia no era suficiente: si el comando de apilado no incluía -filter-included, Siril volvía a integrar las 1.278 imágenes.

También probamos a compactar manualmente la secuencia y reorganizar sus datos de registro. El resultado fue más frágil y llegó a provocar un cierre de Siril.

La solución fue conservar intacta la secuencia completa, modificar las banderas únicamente en una copia local de cada experimento y ejecutar:

stack ... -filter-included

Una prueba extrema confirmó el comportamiento: Siril apiló exactamente 3 imágenes de una secuencia de 1.278 en unos 33 segundos, sin repetir ningún cálculo astrométrico.

Elegir imágenes con datos, no a ojo

Tras la charla de Marcos, este era el objetivo inicial con Codex: seleccionar las imágenes antes de apilar. A partir de la secuencia registrada generamos un informe CSV con una fila por imagen. El informe conserva el nombre original, la fecha y hora de captura, los principales metadatos FITS y varias métricas calculadas por Siril:

Sobre ese CSV construimos un informe HTML que puede abrirse directamente en el navegador. Permite estudiar las distribuciones generales, comparar sesiones, ver la evolución durante cada noche y observar las relaciones entre las distintas métricas.

Informe HTML para analizar FWHM, redondez, fondo de cielo y número de estrellas de las tomas
Herramienta de análisis y filtrado de las 1.278 tomas. Captura: Sergio Cava / Astrocava. Licencia: CC BY 4.0 (abre en una pestaña nueva).

El informe también permite ajustar umbrales y muestra en directo cuántas imágenes se conservan. Al terminar genera los índices exactos, el comando reproducible y una nota para documentar la decisión.

El apilado filtrado actual

La integración filtrada que conservamos para la imagen definitiva utiliza 886 de las 1.278 imágenes: unas 2 horas, 27 minutos y 40 segundos de exposición. Se descartaron 392, aproximadamente el 30,7 % del conjunto, principalmente por un fondo de cielo excesivamente brillante, debido sobre todo a la contaminación lumínica o a las nubes.

La selección no afectó por igual a las cuatro sesiones:

Esto demuestra la utilidad de estudiar cada noche por separado. El número de imágenes capturadas no equivale necesariamente a su contribución útil al resultado.

Mosaico anotado de la Cadena de Markarian tras seleccionar 886 de las 1.278 tomas
Mosaico anotado de la integración filtrada. Fotografía: Sergio Cava / Astrocava. Licencia: CC BY 4.0 (abre en una pestaña nueva).

En comparación con la imagen que incluía todas las tomas, se aprecia una mejora en los gradientes, sobre todo en la parte superior, gracias al descarte de las capturas con demasiado brillo de fondo.

Una última sorpresa al abrir el FITS en PixInsight

El FITS producido por Siril se abría invertido en PixInsight.

La primera tentación era reflejar físicamente la imagen, pero el problema no estaba en los píxeles ni en la solución astrométrica. Era una diferencia en la interpretación del orden de las filas del FITS: en ausencia de una indicación explícita, los programas no siempre interpretan la orientación de la misma manera.

La corrección fue crear una copia y añadir a la cabecera:

ROWORDER = 'BOTTOM-UP'

Esto no modifica la imagen; simplemente le indica a PixInsight cómo debe leerla para mostrarla con la orientación correcta.

Lo que aportó Codex

Codex no sustituyó a Siril ni a Astrometry.net. Su papel fue convertir una sucesión de pruebas manuales en un proceso comprobable y repetible:

El resultado no es aplicable solamente a la Cadena de Markarian: es un flujo que puede reutilizarse con otros objetos, justo lo que necesitaba para empezar a procesar aquellos que estaban a la espera de la herramienta.

Además, una vez construida, la herramienta ya no depende de Codex: se puede utilizar directamente.

Conclusión

El principal problema del apilado de la Cadena de Markarian era conseguir registrar en Windows un mosaico de gran extensión y aprovechar todas las imágenes que tuvieran suficiente calidad.

La solución que quedó estable combina Siril 1.4.4, WSL2 y Astrometry.net mediante un puente que adapta las expectativas de Siril sobre Cygwin y normaliza las rutas entre ambos sistemas. Está disponible en este repositorio de GitHub (abre en una pestaña nueva).

Después de resolver y registrar las 1.278 tomas una sola vez, la secuencia queda preparada para probar distintas selecciones de calidad sin repetir las cinco horas de resolución astrométrica. El apilado filtrado actual integra 886 imágenes y sirve de base para el procesado y la anotación final.