Meld
changelog

Changelog

Meld is the orchestrator and UI. It drives a custom Arnis fork to generate each cell.

Every version below links to its release on GitHub, where you can download that exact build.

Download the latest release

Meld (orchestrator)

v1.9.8 2026-08-27currentGeneration is much faster, and tunes itself

On the same city, same machine, a render that took 230 s on a stock 1.9.7 now takes 136 s — 1.7× a default install, 1.3× a hand-tuned one, and 1.8× what the generator manages alone on the same ground — while using 30–40 points less memory at peak. Default output is unchanged, hash-verified against 1.9.7 on every build.

Meld now picks its own worker count. One generator process cannot fill a modern CPU (measured: 10 of 24 cores), so Meld starts low, times every finished cell, adds workers while that keeps paying, backs off when it stops, and remembers the answer per project and scale — never exceeding the worker, CPU and free-memory limits you set. Two savings sit underneath it: cells no longer write the seam ring the merge deletes moments later, and cached map tiles carry a pre-parsed sidecar so repeat renders skip most decoding.

A long list of scheduling bugs went with it: Stop never actually set its flag, so cancelled cells were resubmitted twice; a stopped run could be revived by its own prefetcher; a project switch mid-run could merge cells into the wrong world; and the first run of a new project sat at about a third of the machine. Caves also broke in worlds taller or deeper than vanilla — a giant void above roughly y=256, solid rock below y=−64 — and both limits now follow the world’s own bounds.

Two new generator options ship off by default, because they deliberately change the world: smooth river beds (a rounded channel scaled to the river’s width, with lakes and oceans left untouched) and road grading (one slope-limited height profile per road, so a carriageway ramps instead of stepping on terrain contours). Bundles the Arnis fork 3.1.8.

v1.9.1 2026-08-18Compatibility release for the Arnis fork 3.1.x

The Meld half of the 3.1.0 generator upgrade. Scale is now validated before a render starts: the generator rejects --scale outside 0.01 to 4.0 at the parser, so Meld clamps the stored value on write, shows what will actually run, and clamps again when building the command line. Non-finite values fall back to 1.0. The Scale box gained an upper bound and says when a value is out of range instead of accepting it silently.

Image signage is explicitly held off: arnis 3.1.0 added --signage (street plates and billboards as map items in item frames), but the map payloads live in the world’s data/ directory, which Meld’s merge does not carry across cells. Every cell would restart map ids at 0 and the merge would drop them all, leaving blank frames everywhere. Meld states the value rather than inheriting a default it does not control.

v1.9.0 ยท Unbound 2026-08-16Meld is a standalone app: download, run, generate

Six months ago Meld was a Python script that drove one generator over one country. Unbound rolls the whole desktop arc, previewed and hardened across 1.8.4–1.8.9, into one release: a portable app for Windows, macOS and Linux with no Python, no installer and no terminal. It keeps itself and its generator up to date, prices every job against your machine before starting it, fetches its own map data, and carries a preset system so a world’s look travels as one file. Bundles the Arnis fork 3.0.10. Download links for each platform are on the home page.

The app
  • Download, run, generate. A portable folder (or a single file) carrying its own Python runtime and its own arnis binary. No installer, so nothing to uninstall and nothing that can delete a project folder on the way out. Meld lives in the tray; closing the window stops nothing, because the window was never doing the work.
  • A status bar built for six-hour renders. A frameless always-on-top strip with one coloured block per worker, current task, ETA, CPU/RAM/disk and an optional history graph. No close box, so it cannot be dismissed by reflex mid-render.
  • Survives real life. Generator children die with the app however it dies (no orphaned processes pinning every core), the machine is kept awake while a run is active, a second launch opens the running copy instead of fighting it, and the local API refuses requests from other pages and origins.
It maintains itself
  • Self-updating, reversibly. A new version stages beside the running one, is verified against the release checksums and smoke-tested before handover, and the old folder is kept so you can go back. Removing an old build is a separate, explicit action that refuses any folder containing your projects.
  • The generator updates independently. arnis is one binary in a folder Meld owns, so a generator fix never needs a new Meld. Downloads are verified against the release checksum; a release without one is refused rather than trusted.
The bake knows its cost
  • Priced before it starts. A bake states memory, disk, time and worker count against what your machine actually has, measured at about 2.2 GB of RAM per GB of map data per worker, and roughly 15.7 MB per baked tile, corrected live from the tiles actually written. A job that cannot fit is refused with the fix in the message: use the country extract, not the continent.
  • “Get the data for this region.” Meld reads your selection and asks Geofabrik’s own index which extract fits: the smallest file that contains it, or the set of neighbouring countries when it crosses a border. Continent-sized files are offered last, with their true size and a RAM warning.
  • Fully offline generation. Baked OSM packs plus elevation packs, and a cached-elevation-only mode that guarantees no cell ever waits on a tile server or receives a truncated tile (the documented cause of flat terrain seams).
  • Parallel baking actually works in the packaged app. A spawn bug meant every bake in every packaged build had secretly run single-file; fixed at the root, along with the extra Meld tabs it opened.
Presets
  • A world’s look as one shareable file. Scale, terrain, trees, climate, caves, props and textures, and none of the machine-specific settings, so a preset from a big desktop is safe on a laptop and never leaks a private Overpass mirror. Three tuned starters ship built in, as editable files.
  • Test build. Render just the few cells at the centre of a selection to check the look before committing to the full run.
UI overhaul
  • Flat dark theme throughout, one gold Generate button on the page, one “Props & 3D models” drawer instead of two controls nobody could tell apart, and the Generate area reordered to the order you actually work in. Presets and the status bar are one click from the left rail.
  • A headless-browser console check is now a release gate, after a one-line script error shipped with half the interface dead while every static check passed.
Generator: arnis 3.0.10
  • The football-field stadium is gone. The 3D pipeline kept dropping a generated stadium onto ordinary soccer grounds; the archetype is removed outright. Pitch lines and goals are untouched.
  • Rail tunnels and building parts ported from the upstream 3.x wave, plus three upstream scanline-fill correctness fixes.
  • Every upstream commit triaged: the useful ones ported, the rest rejected with written reasons (several were fixes this fork shipped first). The fork sits 0 commits behind upstream, by decision.

Only the 1.9.x arc is shown here. The full Meld history, 1.8.x back to 1.0, lives on GitHub with notes and downloads for every release.

Full Meld changelog

Arnis fork(releases)

The generator Meld runs for each cell. These are the changes that make adjacent cells line up.

v3.1.8 2026-08-27latestFaster cells, caves at any world height

A tiled cell used to write 36 region files and keep 16 — the rest a seam ring the orchestrator deleted moments later. It now writes only the regions it owns (−12% per cell), and cached map tiles gain a content-verified pre-parsed sidecar that cuts decoding from 946 ms to 429 ms per cell. With no new flags passed, output is byte-identical to 3.1.7.

Caves are fixed for any world height. Vanilla’s limits were baked in as constants, so above roughly y=256 every underground block became air — one giant void under any mountain reaching past it — and below y=−64 no caves generated at all. Both fade bands now follow the world’s real floor and ceiling; at vanilla bounds the new formulas land on exactly the old numbers, bit for bit.

Two opt-in quality passes, both default off. --river-bed v1 replaces the terraced integer depth steps with a smooth channel whose bank curve scales to the river’s width, applied to rivers only — lakes, oceans and coastlines keep their own beds, enforced by clipping mapped water out of the river mask rather than trusting tags. --road-grade on gives each road one height profile computed before placement from the unrounded terrain, limited to one block of climb per 4–12 travelled by road class, so steps become evenly spaced ramps instead of contour cliffs.

v3.1.1 2026-08-18Farmland texturing got much cheaper

Nothing about the world changes: every render is byte-identical to 3.1.0, verified by world hash. On the farmland-dense benchmark bbox (Flevoland, 61 farmland polygons), peak memory dropped from 4929 MB to 1333 MB and generation time from 24.5 s to 11.8 s. Crop blocks now share one of eight prebuilt NBT compounds instead of allocating per block, section palettes stop re-deriving the same answer 4096 times, and field parcel layout memoises its bearing per thread instead of taking a lock and three trigonometric calls per block.

v3.1.0 2026-08-18Upstream port wave 3, and a golden-hash regression gate

Every upstream change from v3.0.10 to v3.1.0 (90 commits across 17 pull requests) triaged one by one, with the reason for each take, adapt or skip written down. The fork gains a golden world-hash regression harness with five committed OSM fixtures covering deliberately different tagging regimes, so generation is finally gated by committed baselines instead of eyeballing finished worlds. --scale now rejects NaN, infinities, zero and absurd values at the parser with a real message; the accepted range is 0.01 to 4.0. The update check finally points at this fork instead of upstream, and Overture release discovery works again.

Only the two newest fork releases are shown here. The full fork history, 3.0.10 back to 2.8.1, lives on GitHub with notes and downloads for every release.

Full Arnis fork changelog