glori: LDM + SWIIT for LOFAR radio sky maps
Pretrained weights for glori (Generate LOFAR Radio Images) — a latent diffusion model (LDM) that generates realistic, synthetic radio-continuum survey maps (simulated LOFAR skies), with explicit control over the position, brightness, and size of sources via a catalog context vector. Paired with SWIIT sampling, a sliding-window technique, it can generate maps of arbitrary size.
Reference implementation and full documentation: github.com/tmartinezML/glori
Paper
T. Vicánek Martínez and M. Brüggen (2026), "Generating radio continuum survey maps of arbitrary size with latent diffusion models", A&A, arXiv:2609.06549
If you use these weights, please cite the paper above.
Files in this repository
| File | Component | Notes |
|---|---|---|
VQ-VAE-256-DR3opt-FT.ckpt |
VQ-VAE | image ↔ latent compression, downsampling factor 4 |
LDM-Denoiser-WnetCC-v5.ckpt |
Denoiser | catalog-context-conditioned diffusion U-Net |
scalers/LOFAR_scaler_II.pt |
Image scaler | inverse-transforms generated latents/maps back to physical (Jy/beam-like) units |
scalers/ctxt_scaler_ftot.pt |
Context scaler | used only if you construct catalog context via ContextScaler (see repo) |
scalers/ctxt_scaler_fpeak.pt |
Context scaler | " |
scalers/ctxt_scaler_maj.pt |
Context scaler | " |
Both checkpoints are stripped to inference-only state (weights + hyperparameters,
no optimizer/training state) via the reference repo's scripts/release/strip_checkpoint.py.
How to use
Requires the glori package (see the reference repo for installation — pinned
dependencies including torch==2.2.1, numpy==1.25.2, and a specific vqtorch
commit).
import torch
from glori.config.swiit_config import SWIITSamplerConfig
from glori.inference.swiit_sampler import SWIITSampler
from glori.data.trf.scalers import LOFARScaler
from glori.hub import download_pretrained
DENOISER_CKPT = download_pretrained("denoiser")
VAE_CKPT = download_pretrained("vae")
SCALER_PATH = download_pretrained("scaler")
config = SWIITSamplerConfig(
denoiser="unused", # ignored: an explicit "/" path in *_ckpt below bypasses name lookup
denoiser_ckpt=DENOISER_CKPT,
vae="unused",
vae_ckpt=VAE_CKPT,
device="cuda:0" if torch.cuda.is_available() else "cpu",
)
sampler = SWIITSampler(config=config)
sampler.scaler = LOFARScaler(**torch.load(SCALER_PATH, weights_only=False))
map_image, latent_map = sampler.sample(sampling_steps=(2, 2), timesteps=25)
physical_map = sampler.scaler.inverse_scale(map_image) # back to Jy/beam-like units
For catalog-conditioned generation, larger maps, and the sampling parameters, see
tutorials/tutorial_getting_started.ipynb in the reference repo.
Intended use & limitations
These models generate synthetic radio-continuum sky maps for augmenting training sets, testing pipelines, and methodology research — outputs are not real observations and should not be presented as such. Generated maps carry known, characteristic SWIIT-sampling artifacts (e.g. faint striping at patch-overlap boundaries at full mask coverage); see the paper's Section on quality evaluation for details.
Training data
Both models were trained on image patches derived from LoTSS-DR2 (LOFAR Two-metre Sky Survey, Data Release 2) Stokes I continuum maps.
License
CC BY-SA 4.0. License inherited from the training data (LoTSS-DR2) as this data itself is licensed CC BY-SA 3.0. Commercial use is permitted, but if you redistribute a modified/fine-tuned version of these weights, it must also be released under a compatible CC BY-SA license with attribution.
If you use these weights, please cite both:
- T. Vicánek Martínez and M. Brüggen (2026), "Generating radio continuum survey maps of arbitrary size with latent diffusion models", A&A, arXiv:2609.06549
- Shimwell et al. (2022), "The LOFAR Two-metre Sky Survey. V. Second data release", A&A, 10.1051/0004-6361/202142484