synth op• Data kinds: none → images (an op determined by its arguments alone — it takes no image or data input)
• Call: import fullseye as fs; fs.ledger.synth_frame_series(shape=(128, 128), n_frames=8, dither_px=1.5, fwhm_px=3.2, fwhm_jitter=0.0, n_cosmic=0, seed=0, **starfield_kw) (to call the implementation directly, import astrostack; astrostack.synth_frame_series(shape=(128, 128), n_frames=8, dither_px=1.5, fwhm_px=3.2, fwhm_jitter=0.0, n_cosmic=0, seed=0, **starfield_kw); from the registry, opsastrostack.get("synth_frame_series"))
• Return value through the ledger: fullseye.ledger.synth_frame_series(...) returns only the declared out type images (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.synth_frame_series.raw(...) or call astrostack.synth_frame_series directly.
• Underlying return: (frames, truth) -> images
Re-shoot the same star field n_frames times, each with its own noise and its own dither.
Star coordinates and fluxes are the same in every frame (field_seed is fixed to reproduce the drawing of stars, and only the per-observation seed and shift_row / shift_col are varied), so 1 set of answers serves for registration, stacking and drizzle. Giving *fwhm_jitter* makes the FWHM fluctuate per frame —— this is the "seeing fluctuates" condition of lucky imaging; left at 0, lucky_select has no reason to select anything.
The dither is a deterministic spiral with radius dither_px (frame i is placed at radius dither_px * (i / (n-1)) in the golden-angle direction). It is not random, so the arrangement stays stable when the number of frames changes, and the figures reproduce.
Returns (frames, truth):
• frames —— a list of length n_frames, each element (H, W) float64. It is exactly the images vocabulary, so it can be passed straight to the stacking ops.
• truth —— the truth of synth_starfield plus shifts (N, 2) (the (dr, dc) of each frame) and fwhms (N,). rows / cols are before dithering (the positions in frame 0).
Raises ValueError: in addition to the conditions of synth_starfield, when *n_frames* is less than 1, *dither_px* is negative, or *fwhm_jitter* is negative.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• astro_stacking — py -3.11 examples/astro_stacking.py
• poc_astro_photometry — py -3.11 examples/poc_astro_photometry.py
images as input)lucky_select · sigma_clip_stack · drizzle_resample · cosmic_ray_reject_stack · align_frames
synth)*Provenance: astrostack.py — ASTROSTACK operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.