Ce tutoriel explique comment prétraiter et empiler une cible unique (pas une mosaïque) prise avec une caméra couleur (OSC), en utilisant le script Python TLB_ASTRO-OSC_Preprocessing.py. Il automatise, via une interface graphique, la conversion, la calibration (bias/dark/flat, chacun optionnel), l'alignement et l'empilement dans Siril 1.4 — y compris quand la cible a été capturée sur plusieurs nuits différentes.
Le script s'adapte à ce que tu lui fournis : calibration avec ou sans bias/dark/flat, une seule session ou plusieurs, drizzle activable avec un calcul automatique de l'échelle recommandée, et un empilement par lots qui contourne une limite technique de Windows sur les très grands nombres de brutes.
Pour assembler une mosaïque (plusieurs panneaux du ciel), utilise plutôt TLB_ASTRO-OSC_mosaique.py et son propre tutoriel. Ce script-ci traite un seul champ du ciel, éventuellement réparti sur plusieurs nuits.
Le script est amené à évoluer (nouveaux capteurs, options supplémentaires...). Ce tutoriel correspond à la version 1.5.0 — le numéro de version est visible dans l'en-tête de la fenêtre du script et via son bouton À propos. Depuis la 1.5.0, le menu déroulant Capteur propose une sélection de caméras Player One, ZWO et QHY courantes, ainsi qu'une entrée Autre pour saisir directement une taille de pixel (section 4.5).
Sommaire
- Prérequis
- Logique générale du script
- Installer le script dans Siril
- Étape 1 — Configurer et lancer le script
- Ce que fait le script ensuite
- Le drizzle dans ce script
- Nom du fichier résultat
- Sessions multiples : pourquoi et comment
- Limite Windows et découpage par lots
- Considérations selon ton matériel
- En cas de souci
- Checklist résumée
1. Prérequis
- Siril 1.4 ou plus récent (scripting Python requis).
- Une caméra couleur (OSC) — le script calibre en supposant une matrice
de Bayer (option
-cfa). Pour une caméra monochrome, ce script n'est pas adapté. - Le module de scripting Python de Siril (
sirilpy), activé par défaut à partir de la 1.4, mais marqué expérimental par l'éditeur. - Des brutes de lights pour au moins une session. Bias, dark et flat sont tous optionnels : le script adapte automatiquement la calibration à ce qui est réellement fourni.
2. Logique générale du script
- Calibration adaptative : chaque dossier de calibration (bias, dark, flat) renseigné déclenche l'étape correspondante ; un champ laissé vide désactive simplement cette étape, sans erreur.
- Une ou plusieurs sessions : par défaut, une seule ligne de session (le cas courant). Si la cible a été reprise sur plusieurs nuits, ajoute une session par nuit — chacune avec son propre dossier de lights et, si besoin, son propre bias/dark/flat (voir section 8).
- Alignement global en 2 passes (-2pass) : Siril choisit automatiquement la meilleure image de toute la séquence comme référence, plutôt que de prendre systématiquement la première brute.
- Empilement par lots : avec plusieurs sessions, un stack partiel est produit par session avant un empilement final de consolidation (voir sections 8 et 9).
- Drizzle optionnel, avec calcul automatique de l'échelle recommandée à partir de ta focale et du seeing de ton site (section 6).
3. Installer le script dans Siril
TLB_ASTRO-OSC_Preprocessing.py et
place-le dans le même dossier que tes scripts .ssf habituels (celui configuré
dans Préférences → Scripts).
Teste d'abord sur un petit jeu de brutes avant de lancer un traitement complet, et garde en tête que l'API peut encore évoluer d'une version à l'autre de Siril.
4. Étape 1 — Configurer et lancer le script
Lance le script depuis le menu Scripts (comme un
.ssf). Une fenêtre TLB Astro — Configuration pré-traitement
OSC s'ouvre avant toute chose — Siril reste en attente tant qu'elle est ouverte. Le
bandeau du haut affiche le logo, le nom et la version du script, ainsi qu'un bouton
À propos.
4.1 — Répertoire de traitement
En haut de la fenêtre, le champ Répertoire de traitement est
pré-rempli avec le répertoire de travail actuel de Siril. Change-le si besoin via
Parcourir…. C'est ce dossier qui recevra le sous-dossier
process/ (fichiers intermédiaires) et le fichier résultat final — il peut être
différent des dossiers où se trouvent tes brutes.
4.2 — Bias et dark partagés
Deux champs optionnels, Bias partagé et
Dark partagé, se pré-remplissent automatiquement avec
<répertoire de traitement>/biases et /darks, et continuent à
suivre le répertoire de traitement si tu le changes. Dès que tu modifies l'un de ces deux
champs toi-même (saisie, Parcourir… ou Effacer),
il cesse de suivre automatiquement.
Ces dossiers servent de bias/dark par défaut pour toutes les sessions qui ne définissent pas leur propre surcharge (section 8). Laisse-les vides si tu préfères tout renseigner session par session, ou si tu n'as pas de bias/dark du tout.
4.3 — Sessions
Une seule ligne de session est présente par défaut — le cas courant d'une cible prise en une seule nuit. Chaque ligne comporte :
- Un Nom (pré-rempli avec le nom du dossier de lights choisi, modifiable) ;
- Un Dossier lights obligatoire ;
- Bias et Dark optionnels — à ne renseigner que si cette session doit utiliser un bias/dark différent du partagé (bouton Effacer pour revenir au partagé) ;
- Un Flat optionnel, toujours propre à la session (jamais partagé — voir encadré ci-dessous).
Utilise + Ajouter une session pour traiter une cible reprise sur plusieurs nuits, et Supprimer cette session pour retirer une ligne. Voir la section 8 pour la logique complète de partage bias/dark et le comportement avec plusieurs sessions.
Une caméra démontée puis remontée entre deux nuits (ou un rotateur de champ qui a bougé) change la position des poussières sur le capteur : un flat d'une nuit ne corrige plus correctement une autre nuit. Le flat reste donc systématiquement un réglage par session.
4.4 — Drizzle (Bayer Drizzle)
Coche Utiliser le drizzle pour faire apparaître deux champs supplémentaires :
- Longueur focale (mm) — celle réellement utilisée à l'acquisition (750 mm par défaut pour le Newton 150/750 ; à changer si tu utilises un réducteur de focale ou un autre instrument) ;
- Seeing typique du site (", FWHM) — une estimation de la turbulence atmosphérique habituelle chez toi (2,5" est une valeur de départ raisonnable pour un site rural).
Le script affiche alors l'échantillonnage réel de ta configuration et calcule une Échelle à utiliser recommandée (voir section 6 pour le détail du calcul). Ce champ reste modifiable : si tu changes la focale ou le seeing, l'échelle se recalcule automatiquement tant que tu ne l'as pas toi-même modifiée à la main — après quoi elle reste figée à ta valeur, même si tu retouches la focale ou le seeing ensuite.
4.5 — Capteur et seuil de découpage
Le menu Capteur propose une sélection de caméras courantes, regroupées par capteur réel (plusieurs marques vendent parfois des caméras autour du même capteur Sony, avec exactement la même taille de pixel) :
| Caméras | Capteur | Pixel |
|---|---|---|
| Player One Artemis-C Pro / ZWO ASI294MC Pro / QHY294C Pro | Sony IMX294 | 4,63 µm |
| Player One Uranus-C / ZWO ASI585MC Pro | Sony IMX585 | 2,90 µm |
| ZWO ASI183MC Pro / QHY183C | Sony IMX183 | 2,40 µm |
| Player One Neptune-C II / ZWO ASI662MC / iOptron iCam 464C | Sony IMX464 | 2,90 µm |
| ZWO ASI533MC Pro / Player One Saturn-C / QHY533C | Sony IMX533 | 3,76 µm |
| ZWO ASI2600MC Pro / QHY268C | Sony IMX571 | 3,76 µm |
| ZWO ASI6200MC Pro / QHY600C | Sony IMX455 | 3,76 µm |
Ta caméra n'est pas dans la liste (autre marque, autre capteur) ? Choisis Autre (taille de pixel personnalisée) : un champ Taille de pixel (µm) apparaît alors, à renseigner toi-même — la fiche technique de ta caméra ou de son capteur indique cette valeur.
Le choix du capteur n'a d'effet que si le drizzle est coché (section 4.4) : c'est la seule étape du script qui utilise la taille de pixel, pour calculer l'échelle recommandée. Sans drizzle, ce menu n'a aucune influence sur le traitement.
Le champ Seuil de découpage par lot (2000 par défaut, modifiable jusqu'à 2048) contrôle le mécanisme décrit en section 9.
4.6 — Lancer le traitement
Au clic sur Go, le script vérifie le répertoire de traitement, les dossiers renseignés (partagés et par session), l'unicité des noms de session, le seuil de découpage, et — si le drizzle est coché — que la focale, le seeing et l'échelle sont des nombres positifs. Une fenêtre d'erreur s'affiche sinon et te laisse corriger sans tout refermer.
5. Ce que fait le script ensuite
Une fois validé, la fenêtre se ferme et le script traite, pour chacune des sessions configurées :
- Construction du bias/dark partagé (si renseigné), une seule fois pour tout le projet ;
- Pour chaque session : bias/dark propre si défini (sinon le partagé), flat propre si défini, conversion et calibration de ses lights ;
- Fusion (par lien physique, sans copie) des brutes calibrées de toutes les sessions en une seule séquence, dans l'ordre où les sessions sont listées ;
- Alignement global en 2 passes sur l'ensemble fusionné, avec drizzle si activé ;
- Empilement avec rejet Winsorized Sigma Clipping, par lots si nécessaire (sections 8 et 9).
6. Le drizzle dans ce script
Le drizzle sert ici à deux choses : éviter les artefacts de dématriçage classique (fond de ciel plus propre) et, si ton système est réellement sous-échantillonné, récupérer un peu de résolution. Le script calcule une échelle recommandée à partir de trois valeurs :
- La taille de pixel du capteur (fixe pour les caméras listées, ou saisie librement si tu choisis « Autre », voir section 4.5) ;
- La longueur focale que tu renseignes ;
- Le seeing typique de ton site que tu renseignes.
Le calcul compare ton échantillonnage réel (secondes d'arc par pixel, déduit de la focale et de la taille de pixel) à un échantillonnage jugé idéal (la moitié du seeing, critère de Nyquist usuel). Si les deux sont proches, l'échelle recommandée reste à 1.0 (le drizzle n'améliore alors que la propreté du fond de ciel, pas la résolution). Si ton système est nettement sous-échantillonné par rapport au seeing, l'échelle recommandée monte au-dessus de 1.0 (plafonnée à 3.0).
Tu peux toujours modifier l'échelle proposée à la main si tu as une raison précise de vouloir une valeur différente — le script ne l'impose pas, il propose un point de départ raisonnable.
Techniquement, quand le drizzle est activé, le script conserve le motif de Bayer intact à la calibration (pas de démosaïçage classique) et utilise l'alignement en Bayer Drizzle avec un noyau carré (le plus robuste). Sans drizzle, le démosaïçage classique a lieu normalement à la calibration.
7. Nom du fichier résultat
Le nom est construit par le script lui-même, à partir des informations lues directement
dans l'en-tête FITS des brutes d'origine (mots-clés OBJECT et
EXPTIME) — pas par les tokens automatiques de Siril, qui ne resteraient pas
fiables une fois que des stacks déjà empilés sont eux-mêmes combinés entre eux (voir section
9). Deux formats possibles :
- Temps de pose identique sur toutes les sessions :
result_<cible>_<N>x<pose>s_<temps total>.fit, par exempleresult_M27_180x300s_15h00m.fit; - Temps de pose différent d'une session à l'autre :
result_<cible>_<N>poses_<M>sessions_<temps total>.fit, par exempleresult_M27_180poses_3sessions_15h32m.fit.
Le temps total d'intégration est toujours calculé précisément (somme, pour chaque session, du nombre de poses × leur temps de pose), quel que soit le format retenu pour le reste du nom.
Si une session n'a pas de mot-clé OBJECT ou EXPTIME
exploitable, le script continue mais te prévient dans la console : le nom de fichier
basculera alors sur le format « poses/sessions », et le temps total sera sous-estimé pour
la ou les sessions concernées.
8. Sessions multiples : pourquoi et comment
Reprendre une cible sur plusieurs nuits change certaines choses : la température (donc le dark, surtout sans capteur refroidi), l'état des poussières sur le capteur si la caméra a été démontée (donc le flat), et la qualité du ciel (turbulence, lune).
8.1 — Règle de partage bias/dark
Une session utilise son propre bias/dark s'il est renseigné ; sinon, elle utilise le bias/dark partagé défini en haut de la fenêtre (section 4.2) ; sinon, aucun. Deux cas de figure typiques :
- Capteur refroidi (température stable d'une nuit à l'autre) : un seul dark partagé pour tout le projet, aucune session n'a besoin de le redéfinir.
- Capteur non refroidi (température ambiante variable) : renseigne un dark propre à chaque session, et laisse le dark partagé vide.
Le bias varie généralement peu d'une nuit à l'autre ; le partager est donc l'usage le plus courant, mais la même logique de surcharge par session reste disponible si besoin.
8.2 — Ce qui se passe ensuite
Chaque session est calibrée séparément avec son bias/dark/flat effectif, puis toutes les sessions calibrées sont fusionnées en une seule séquence pour un alignement et un étalonnage global (section 5) — le résultat final est une seule image, pas une par session.
9. Limite Windows et découpage par lots
Sous Windows, un programme ne peut pas garder plus de 2048 fichiers ouverts simultanément (limite du runtime C, absolue — aucun réglage ne permet de la dépasser). Cette limite touche spécifiquement l'empilement : pour calculer un rejet de pixels (sigma clipping) à chaque position de pixel, Siril doit garder l'ensemble des fichiers de la séquence accessibles pendant toute la durée du calcul. La conversion et l'alignement, eux, traitent les images une par une et ne sont pas concernés.
9.1 — Ce que fait le script
- Une seule session : empilement direct, sauf si son nombre de poses dépasse le seuil configuré (section 4.5) — dans ce cas, découpage en lots + empilement de consolidation, comme ci-dessous.
- Plusieurs sessions : un stack partiel est toujours produit par session (utile pour repérer une nuit de moins bonne qualité), avec un découpage supplémentaire uniquement si une session dépasse, à elle seule, le seuil configuré. Un empilement final consolide ensuite tous les stacks partiels en un seul résultat.
9.2 — Le compromis à connaître
Empiler par lots revient à faire le rejet de pixels en deux temps (une fois par lot, une fois sur les stacks partiels) plutôt qu'en une seule passe globale. C'est légèrement moins efficace pour repérer un événement isolé (satellite, avion) qui ne toucherait qu'une seule brute au milieu de plusieurs milliers — mais c'est la seule façon de dépasser la limite Windows sans sacrifier de brutes. Avec une seule session sous le seuil, ce compromis ne s'applique pas : l'empilement reste direct et global.
10. Considérations selon ton matériel
Newton 150/750 et Artemis-C Pro
La valeur par défaut de 750 mm dans les champs drizzle correspond à ce tube. Si tu ajoutes un réducteur de focale ou changes de tube, pense à ajuster la longueur focale renseignée — c'est elle qui détermine l'échantillonnage réel et donc l'échelle de drizzle recommandée.
Capteur refroidi ou non
Voir section 8.1 : c'est ce qui détermine si tu as intérêt à partager le dark entre sessions ou à en définir un par session.
Rotateur de champ (ZWO CAA)
Si l'angle du rotateur change entre deux sessions, le flat n'est plus valable d'une session à l'autre : renseigne un flat propre à chaque session concernée (le flat n'est de toute façon jamais partagé, voir encadré section 4.3).
Nombre de brutes par session
Quel que soit ce nombre, le rejet Winsorized Sigma Clipping utilisé par le script élimine bruit résiduel et artefacts (avions, satellites) à chaque empilement — y compris à l'étape de consolidation finale quand plusieurs lots sont utilisés (section 9).
11. En cas de souci
- Le nom de fichier ne contient pas le nom de la cible attendu :
vérifie que le champ « objet »/« cible » était bien renseigné dans ton logiciel
d'acquisition (N.I.N.A / APT / StellarMate) au moment de la capture — c'est ce mot-clé
OBJECTde l'en-tête FITS que le script relit. - Le temps total semble sous-estimé : regarde la console Siril, elle signale explicitement toute session dont le temps de pose n'a pas pu être lu.
- Erreur de création de dossier ou de commande en toute fin de script
sur un nouvel essai : vérifie qu'il ne reste pas de fichiers partiels (séquences,
merge_staging/,partial_stacks/) d'un essai précédent interrompu dansprocess/— les supprimer avant de relancer évite souvent le problème. - Espace disque : la fusion des sessions et les stacks partiels utilisent des liens physiques (pas de copie), donc peu d'espace disque supplémentaire — sauf si le lien échoue (volumes différents), auquel cas Siril ou le script basculent sur une copie complète.
12. Checklist résumée
- TLB_ASTRO-OSC_Preprocessing.py installé dans le dossier de scripts (aucune édition requise)
- Script lancé depuis le menu Scripts ; répertoire de traitement vérifié
- Bias/dark partagés renseignés si pertinent (capteur refroidi → dark partagé typique)
- Au moins une session avec un dossier de lights valide ; sessions supplémentaires ajoutées si plusieurs nuits, avec surcharge bias/dark/flat par session si besoin
- Drizzle coché si souhaité ; capteur choisi dans la liste (ou taille de pixel saisie pour « Autre ») ; focale et seeing renseignés ; échelle recommandée vérifiée (ou ajustée)
- Seuil de découpage par lot vérifié (2000 par défaut)
- Bouton Go cliqué, aucune erreur de validation affichée
- Progression suivie dans la console Siril (capteur, drizzle, sessions, lots)
- Fichier résultat repéré via le nom affiché en fin d'exécution dans la console