Aerial Film SR ×2
A ×2 super-resolution model for scanned historical aerial survey film that resolves what the negative holds and invents nothing on ground that holds nothing.
A mid-century survey reaches the reader as a scan of film, and the scan is usually coarser than the film: a 1:5,000 negative of the 1950s carries detail at a tenth of a metre that a 0.2 m/px scan halves away. A ×2 model can give that detail back. The failure of doing so naively is worse than softness: on flat ground, a cleared lot, a river, a field of rubble, a generic upscaler resolves grain into confident structure, and draws walls no camera saw. This model was trained so that texture is rewarded only where the input carries evidence, its checkpoint was chosen among those that pass an invention gate measured on real flat ground, and both halves of the claim are measured on film its training never saw.

Figure 1. Lyon, IGN survey flight of 26 June 1954, a held-out frame. Left: the film at 0.37 m/px, pixel-doubled, which is the model's input. Middle: the model. Right: the same film at 0.18 m/px, the finer resolution the negative holds, the ground truth. Below, the same window of all three enlarged twice more. Roof ridges, chimneys, the cars in the yard and the kerbs resolve to what the finer scan proves was there.
1. Method
Input. One grey channel, the scan at its own pitch, any size. The film is fed to the network's three channels as one luminance and the three output channels are averaged back; whole frames are tiled at 256 pixels with 32 pixels of context trimmed from every inner edge. Output: the input at twice its resolution.
Architecture. RealPLKSR, the partial-large-kernel super-resolution
network of Lee, Kim and Park (Partial Large Kernel CNNs for Efficient
Super-Resolution, arXiv:2404.11848) in
the variant Philip Hofmann trained as
4xNomosWebPhoto_RealPLKSR
(CC BY 4.0): 64 channels, 28 blocks, a 17-pixel kernel, 7.37 M parameters.
The ×2 was started from that public ×4 checkpoint through an exact
construction of a ×2 tail, which reproduces "×4 then block-mean ÷2" to
4·10⁻⁷ before any training; the weights ship as a standard spandrel-loadable
file.
Training data. Real film on both sides of every pair: the target is a crop of an IGN survey negative at the pitch it carries real detail at, and the input is its block-mean, degraded to the statistics of the film the model is deployed on. 149,867 crops over five truth pitches, 0.11, 0.18, 0.37, 0.73 and 1.46 m/px, cut from 650 frames of 210 IGN PVA missions flown over French towns between 1940 and 1965, with every mission held out whole from the crops that measure the model. The degradation — blur, added grain, plate-offset patches and a tone augmentation — was calibrated per pitch against the archive the model is deployed on, fourteen aerial surveys of Warsaw scanned from film of 1935 to 1994, so the input the model sees in training is the input it meets in use.
Objective. A guided filter splits every crop into a structure band and a texture band. The structure band trains on fidelity alone, a Charbonnier term with VGG and FFT terms, so nothing rewards drawing an edge the evidence does not support. The texture band keeps the film alive with a grain-energy match at a gain of 1.05 and a hinge adversary, and the adversary is what this model changes: its gradient reaches each patch of the crop in proportion to the evidence mask of the input under it, one where the film's own high band rises above one and a half times its median, zero on flat film. Two further terms hold flat ground: a nothing-from-nothing term that forbids high-band energy and orientation beyond the input's where the mask is zero, and the invention gate of section 2 itself as a loss, computed with no truth on 421 flat tiles of that Warsaw archive, disjoint from the tiles that measure the model. Twenty thousand iterations, AdamW, cosine decay; the checkpoint at iteration 8,000 was chosen by distance from truth among those that pass the gate at every evaluation, and the run's later checkpoints, which over-texture progressively, were declined by that rule.
2. Evaluation
Three instruments, in the order the model's deployment uses them, every number on held-out film.
The calibrated bench. 120 reserved crops per truth pitch, the input degraded as in training; three energy ratios against the film's own finer resolution, where 1.00 is exactly what the negative holds: detail on structure, detail in flat film (grain), and large-scale tone; PSNR beside them for reference.
The invention gate. Seven of the Warsaw surveys, each at the finest level its scan resolves; from each, sixty of the flattest tenth of its tiles, cleared lots, water, rubble and fields, upscaled with no truth in hand. Two numbers: the elongated connected components the output creates per thousand output pixels that the input does not have, and the ratio of its high-band energy to the input's. Bicubic creates none; a model that draws walls on rubble is caught here and nowhere else.
The pipeline. In deployment a restoration model, the companion Aerial Film Restorer, runs after the ×2 and owns tone and grain, so the ×2 is also measured through it: forty reserved pairs of raw IGN scan and the cleaned orthophoto IGN produced from the same photographs, the scan at half resolution, ×2 then restored, scored against the clean.
3. Results
Table 1. The calibrated bench, structure / flat film / tone, and PSNR, at each truth pitch. Two ablations from the training record sit beside the model, neither of them published: its earlier ×2, trained on coarser film to be faithful above all, and an unconstrained training on this model's own data, with no evidence mask and neither flat-ground term.
| truth pitch | earlier faithful ×2 | unconstrained training | this model | PSNR (this model) |
|---|---|---|---|---|
| 0.11 m/px | 0.75 / 0.69 / 1.02 | 0.94 / 0.96 / 1.01 | 0.95 / 0.95 / 1.02 | 27.9 |
| 0.18 m/px | 0.89 / 0.73 / 1.01 | 0.98 / 0.94 / 1.01 | 1.02 / 0.94 / 1.01 | 29.2 |
| 0.37 m/px | 0.85 / 0.86 / 1.03 | 1.08 / 1.19 / 1.02 | 1.17 / 1.20 / 1.04 | 30.4 |
| 0.73 m/px | 0.78 / 1.27 / 1.03 | 1.04 / 1.14 / 1.04 | 1.06 / 1.13 / 1.04 | 29.8 |
| 1.46 m/px | 0.58 / 0.85 / 1.02 | 0.94 / 1.06 / 1.04 | 0.97 / 1.02 / 1.03 | 27.7 |
| mean distance from 1.00 | 0.339 | 0.118 | 0.119 |
Table 2. The invention gate: elongated components created per thousand output pixels, and high-band amplification, on the flattest tenth of seven Warsaw surveys' tiles at their finest resolved level. Bicubic, the reference input, creates none.
| layer | earlier faithful ×2 | unconstrained training | this model |
|---|---|---|---|
| 1935 | 0.015 / 1.52 | 0.183 / 1.79 | 0.000 / 1.14 |
| 1944-07-27 | 0.000 / 1.19 | 0.076 / 1.64 | 0.000 / 1.21 |
| 1944-11-04 | 0.000 / 1.18 | 0.000 / 1.25 | 0.000 / 1.07 |
| 1945 | 0.000 / 1.18 | 0.031 / 1.51 | 0.000 / 1.12 |
| 1951 | 0.015 / 1.20 | 0.412 / 2.07 | 0.000 / 1.13 |
| 1964 | 0.015 / 1.14 | 0.061 / 1.36 | 0.015 / 1.11 |
| 1990-1994 | 0.031 / 1.21 | 0.359 / 1.70 | 0.000 / 1.14 |
The two tables together are the claim. On the bench this model and the unconstrained training are three times nearer the negative than the earlier ×2, which under-resolves at every pitch; on the gate the unconstrained training is caught inventing on six layers of seven, most on the two at 0.37 m/px where its bench numbers looked cleanest, while this model creates fewer components than even the faithful ×2 on six of seven and none on six. It is the only one of the three that resolves and does not invent, and the evidence mask and the two flat-ground terms are the whole difference between it and the unconstrained training.
Table 3. Through the restoration model, forty reserved pairs, ×2 then restore, against the professional orthophoto.
| route | structure | grain | tone | L1, grey levels of 0–255 | PSNR |
|---|---|---|---|---|---|
| earlier faithful ×2, then restore | 1.009 | 0.917 | 1.052 | 16.37 | 21.29 |
| unconstrained training, then restore | 1.012 | 0.946 | 1.059 | 16.98 | 21.03 |
| this model then restore | 0.983 | 0.943 | 1.062 | 16.93 | 21.09 |
| restore the full-resolution scan, no ×2 | 1.005 | 1.041 | 1.120 | 16.10 | 21.50 |
Through the restorer the three ×2s are a wash on the band ratios, within the instrument's standard errors, and this model pays 0.56 grey levels of L1 against the earlier ×2. A band split locates that penalty: the low band, tone and coarse shading at a few pixels' scale, carries it whole (+0.81 grey levels at σ = 2 px), and there this route lands exactly where restoring the native film lands; the high band carries a fifth (+0.19). It is the restorer's tone response to native-looking film, not detail misplaced, and in the deployment a per-cell tone solve on the ×2's own output addresses it.

Figure 2. Bordeaux, 1 May 1956, held out; the finest frame, 0.10 m/px. Left: the film pixel-doubled from 0.21 m/px. Middle: the model. Right: the negative at its own resolution; the detail of all three enlarged below. Garden rows, roof tiles and the parked vehicles come back; the grain stays film grain.

Figure 3. Besançon, 3 August 1945, held out; 0.37 m/px from 0.73, the detail enlarged below. The old town's roofs and lanes resolve. This is the pitch at which the model over-textures a little, flat film at 1.20 times the negative's on the bench; it is visible here as a touch more micro-contrast on the roofs than the truth carries.

Figure 4. Warsaw, Marszałkowska Street, the survey of 1990–1994 (City of Warsaw open data); no finer scan exists for the Warsaw archive, so every Warsaw panel is input against output only. Above: the film at the pitch its scan resolves, pixel-doubled, and the model. Below: the same detail of both, enlarged twice more. The buses, the lane markings and the round roof resolve; the flat asphalt stays flat.

Figure 5. Warsaw, 1951, the reconstruction-era survey (City of Warsaw, Wojskowe Biuro Historyczne). The truck, the fences and the walls of the cleared lots; the cleared lots themselves stay bare ground.

Figure 6. Warsaw, 1945, the survey of the ruined city (City of Warsaw, Archiwum Państwowe). The gutted shells of the city centre, wall by wall.

Figure 7. Warsaw, 4 November 1944, captured German reconnaissance film (US National Archives, RG 373, orthorectified by the Warsaw Rising Museum), the grainiest film in the archive. The gain on such film is modest, cleaner wall lines and no more; what matters is what the model does not do on the rubble between them.
All panels are the bare model through the shipped inference.py, with no
grading and no sharpening, rendered by a script in the project's repository
so they can be re-made from the file below. The Warsaw panels are read from
the archive's raw scans, with no tone processing.
4. Using the model
The weights are a standard RealPLKSR ×2: spandrel and every spandrel-based
tool (chaiNNer, upscaling suites,
custom pipelines) load model.safetensors directly with no custom code. The
shipped script adds the film's needs, one luminance in and out, and tiling.
pip install -r requirements.txt
python inference.py scan.tif upscaled.png
from inference import load_model, read_image, upscale
net, dev = load_model() # model.safetensors beside the script; cuda / mps / cpu
out = upscale(net, dev, read_image("scan.tif")) # float32 [0,255], twice the input's size
from spandrel import ModelLoader
model = ModelLoader().load_from_file("model.safetensors") # RealPLKSR, x2
| file | sha256 | measured |
|---|---|---|
model.safetensors | fdee25716be96441… | Tables 1 to 3; RealPLKSR ×2, 7.37 M parameters, fp32 |
- Input. Single-channel film at 0.1–1.5 m/px, any size; 8-bit and 16-bit files are read, colour is reduced to luminance. Feed the scan at its own pitch: the model's frames are the five pitches of Table 1, and film coarser than 1.5 m/px is outside them.
- Throughput. A 1024² frame in about 4 s on Apple-silicon MPS with the shipped tiling; CUDA is faster, CPU workable for single frames. Memory is bounded by the 256-pixel tile.
- Determinism. Same input, same output.
tests.py(pytest) pins the ×2 geometry on awkward sizes, seam-free tiling, determinism, the luminance contract and the hash of the weights.
5. Limitations and intended use
- Film, not photographs of anything else. The model was trained on panchromatic survey negatives of the 1940s to 1960s and calibrated to a municipal archive of the same kind; other imagery is extrapolation.
- It over-textures at the middle pitches. At 0.37 and 0.73 m/px flat film reads 1.20 and 1.13 times the negative's on the bench, a property every model trained on these truth sets shows and the one thing this model misses of its own bench criteria. The finest and coarsest pitches sit at the negative's. A per-pitch grain gain is the known remedy and is not in this release.
- It resolves; it does not read. Detail below the negative's own resolution is not there to recover; the model sharpens what the film holds and, by construction and by measurement, leaves flat ground flat.
- Colour imagery: upscale the luminance and carry the chroma separately.
- Outputs are derivatives of the input imagery: the source's terms and credits apply to them unchanged, and no rights are claimed in upscaled pixels. If you serve the results, label them as machine-upscaled and keep the provenance (model, weights hash, date).
6. Training data and attribution
| source | role | licence |
|---|---|---|
| IGN France, PVA raw survey negatives, 1940–1965, 210 missions | both halves of every training and bench crop | Licence Ouverte / Etalab 2.0 |
| IGN France, raw scans and BD ORTHO® Historique | the forty pairs of Table 3 | Licence Ouverte / Etalab 2.0 |
| City of Warsaw open data (1935, 1945, 1951, 1964, 1990–1994 surveys); Muzeum Powstania Warszawskiego and the US National Archives (the 1944 flights) | the flat tiles of the gate loss and of Table 2; the Warsaw panels | as published by each institution, see the project's LEGAL.md |
GeoNames, cities15000 | chose every French harvest site | CC BY 4.0 |
7. Licence
- Weights: CC BY 4.0. Use them for anything, including commercially; credit "Aerial Film SR ×2, the Powidok project (powidok.waw.pl), CC BY 4.0, fine-tuned from 4xNomosWebPhoto_RealPLKSR by Philip Hofmann (CC BY 4.0)" and indicate modifications.
- Code (
inference.py,tests.py): MIT (LICENSE-CODE).
8. Provenance
The model was developed for Powidok, an interactive historical map of Warsaw 1935–1951, currently under construction, where it adds one level of detail to fourteen aerial surveys before the Aerial Film Restorer runs over them. The measurement methodology, the calibrated bench, the truth-free invention gate, the read-through of the restoration pipeline and acceptance rules written down before the run, comes from that project's training records, which also record that this model failed two of those four rules, the bench's flat-film band and the pipeline's L1 bar, and was adopted after those failures were understood as texture calibration and tone.
Citation
Grzybek, J. (2026). Aerial Film SR ×2: super-resolution of historical aerial
survey film that invents nothing on flat ground. The Powidok project,
https://powidok.waw.pl (model: https://huggingface.co/jan-grzybek/aerial-film-sr-x2)