Historical Map SR ×4

Super-resolution for scanned historical maps that is forbidden to invent. Archives serve centuries of drawn cartography — engraved city plans, inked cadastres, lithographed topographic sheets — through scans that undersell the plate: soft microfilm, faded ink, halftone screens, JPEG generations. A ×4 model can give the engraving back its edge. The failure mode of doing that naively is worse than softness: on featureless ground — a wash of water, blank paper, tinted parkland — a generic super-resolution model resolves grain into confident structure, drawing streets that were never surveyed. This model's entire training exists to sharpen what is on the sheet while refusing that invention, and both halves of the claim are measured on evidence its own selection never saw.

blocky scan → this model → the archive's better scan of the same plate

Toruń, GSGS 4435 town plan (1943) — a held-out plate scanned by two institutions. Left: the coarser scan, upscaled ×4 nearest — this is the model's input. Middle: the model. Right: the finer institution's scan of the same printing, the ground truth it never trained on. The lettering and hatching resolve to match what the better scan proves was there.

The measured claim

Upscalers usually argue with adjectives. This one argues with paired statistics on two kinds of held-out evidence: truth pairs (the same printed plate scanned by two institutions at different quality — 453 reserved crops from 8 sheets the training never saw) and served archival ground (structureless regions of live map layers, where anything the model draws is by definition invented):

axis result evidence
conjured strokes on structureless ground 0.118 strokes/kpx — vs 0.194 for this project's own best warm-started predecessor (CI [−0.149, −0.020]), 1.14 for this project's first-generation map GAN, and 0.021 for the input ground itself tiles disjoint from every selection decision
glyph precision against truth 0.691, statistically indistinguishable from the strongest predecessor (Δ −0.0002, CI spans zero) 453 paired crops, bootstrap
glyph recall against truth 0.403, likewise tied (Δ +0.0022) same paired test
training length 60k chosen over a 90k extension by measurement: the longer run tied on restraint and significantly lost text fidelity (precision −0.0059, CI [−0.0080, −0.0039]) paired, disjoint from selection

The selection/confirmation split matters: checkpoints were chosen on one set of tiles and tables, and every number above comes from evidence the choice could not see. No winner's curse.

Against the well-known generic upscalers

The same held-out plates through RealESRGAN x4plus and SwinIR-L (real-world GAN) — excellent models for photographs, never taught what a map is. Each grid shows a 96-pixel window of the coarse scan so the differences are visible without zooming; the finer institution's scan sits last to arbitrate, with plain bicubic as the honest reference for what "no model" looks like:

Toruń: input, RealESRGAN, SwinIR, this model, truth

Königsberg: input, RealESRGAN, SwinIR, this model, truth

Poznań: input, RealESRGAN, SwinIR, this model, truth

The pattern repeats across all three: the generic models thicken hatching into mush, blob the small cartographic symbols, and round the lettering — each confidently, none matching what the finer scan proves was printed. The difference is not quality of engineering; it is that they were never trained to treat a map as evidence.

And on ground with nothing to resolve, the difference becomes invention itself:

featureless wash: input, RealESRGAN, SwinIR, this model

Zone edges from a 1950s Warsaw planning map, where tinted wash meets real boundary lines. Both generic models repaint the zones as plastic gradients, erase the sheet's printed halftone, and conjure white scratch-filaments in the blue that exist on no version of this map. This model re-inks the boundary lines and the lettering while keeping the halftone screen the printer actually laid down — restraint and sharpening in the same frame, the trained property the measured-claim table quantifies.

On the deployment fleet

The model was built to re-ink a fleet of Warsaw archival plans, all of it deliberately excluded from training — what follows is the model meeting its real material. Left: the archive as served. Right: the model.

Warsaw 1941 occupation plan

Occupation-era city plan (1941), Mokotów: Wołoska, Gimnastyczna and their neighbours re-inked legible, the dotted block borders resolved dot by dot.

BOS building survey 1945

BOS building survey (1945): dashed boundaries re-inked dash by dash, the parallel track lines separated, parcel numbers and the red survey outline crisp — the hand-drawn line quality survives.

Sperrgebiet plan 1940

Sperrgebiet plan (1940): street lettering and house numbers along Elektoralna re-inked in the surveyor's own hand.

Uprising situation map 1944

Uprising situation map (1944): the faintest material in the fleet — dotted orchard fills and dashed roads resolve without a single added mark.

Tram network plan 1938

Tram network plan (1938): route numbers and street names printed at the edge of the halftone's resolving power, recovered.

Using it

The weights are a standard PLKSR (7.4M parameters, ×4): every spandrel-based tool — chaiNNer, upscaling suites, custom pipelines — loads model.safetensors directly with no custom code. The shipped script only adds tiled processing so whole map sheets stream through bounded memory:

pip install -r requirements.txt
python inference.py scan.png upscaled.png
from spandrel import ModelLoader
model = ModelLoader().load_from_file("model.safetensors")  # PLKSR, x4
file sha256 (first 16) contents
model.safetensors ef2b918cedb1b1f6 the model — PLKSR ×4, 7.4M parameters, fp32
  • Input: RGB scans of drawn cartography (engraving, ink, lithography, print). Any size ≥ 32 px; large sheets are tiled at 512 px with blended overlaps (tests.py pins seam-free tiling and determinism).
  • Throughput: a 2048² sheet in ~16 s on Apple-silicon MPS (measured); CUDA faster; CPU workable.
  • Outputs are derivatives of the input imagery: the source's terms and credits apply unchanged, and no rights are claimed in upscaled pixels. If you serve the results, label them as machine-upscaled and keep provenance (model, weights hash, date).

Intended use and honest limitations

  • Drawn maps, not photographs. Aerial imagery, photographs and halftone pictures are out of scope — the restraint machinery is calibrated to linework and lettering.
  • It sharpens; it does not read. Text below legibility in the input stays merely sharper illegible marks — the training deliberately caps degradation so the model never learns to guess letters.
  • Residual invention is small, not zero: 0.118 conjured strokes per kilopixel on the hardest held-out ground, against 0.021 measured on the input ground itself and 1.14 for this project's first-generation map GAN. On two of the fifteen deployment layers the predecessor model was marginally cleaner (differences of a few thousandths, below independent confirmability).
  • Trained at scan resolutions of roughly 1–4 m/px equivalent on city plans and 1:25k topography; far outside that band (wall maps, globes, modern vector renders) is extrapolation.
  • Colour is preserved conservatively; the model was trained never to invent hue where its two source scans disagreed.

Training

One command from one public checkpoint — the whole recipe:

train2.py --init 4xNomosWebPhoto_RealPLKSR.safetensors \
  --data patches_v2 --real-data realpairs_v3 --real-frac 0.4 \
  --iters 60000 --lr 1e-4 --bs 6 --gt-size 512
  • Objective: a two-band split. A guided filter separates structure (strokes, edges) from texture (paper, grain); the structure band trains on fidelity only — no adversarial gradient ever touches it, so nothing rewards drawing a mark the evidence does not support — while the texture band keeps GAN + FFT terms so paper stays alive rather than plastic.
  • Data: 72,375 synthetic patches from ~400 curated public-domain and openly-licensed archival sheets (city plans, cadastres, topographic series, hand-inked manuscripts), degraded by a simulator calibrated against the measured statistics of a real municipal archive's served scans; plus 15,181 crops of real degradation — 232 plates each scanned by two institutions at different quality, the finer scan serving as truth — sampled with per-series balancing so no single archive's publishing habits dominate the gradient.
  • Provenance experiment: this exact command was the control arm against a four-generation chain of warm-started fine-tunes. The control won on restraint and tied on fidelity — so the shipped model is the one whose entire lineage is a public checkpoint and this command.

Base model: 4xNomosWebPhoto_RealPLKSR by Philip Hofmann (CC-BY-4.0). Architecture: PLKSR — Lee et al., Partial Large Kernel CNNs for Efficient Super-Resolution (arXiv:2404.11848).

Licence

  • Weights: CC-BY-4.0. Use them for anything, including commercially; credit "Historical Map SR ×4 — 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).

Provenance

The model was developed for Powidok, an interactive historical map of Warsaw 1935–1951 — currently under construction — where it re-inks a fifteen-layer fleet of drawn plans, 1908–1956. The measurement methodology (truth-pair benches with bootstrap CIs, truth-free invention gates on served ground, selection/confirmation splits, matched-control attribution for every recipe ingredient) comes from that project's training record.

Citation

Grzybek, J. (2026). Historical Map SR ×4: invention-free super-resolution of
scanned historical maps. The Powidok project, https://powidok.waw.pl
(model: https://huggingface.co/jan-grzybek/historical-map-sr-x4)
Downloads last month

-

Downloads are not tracked for this model. How to track
Safetensors
Model size
7.39M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jan-grzybek/historical-map-sr-x4

Finetuned
(1)
this model

Paper for jan-grzybek/historical-map-sr-x4