Overview
Automatically captures map timelapses from WPlace archives — screenshots every historical snapshot at your chosen location and assembles them into an MP4 video. Built primarily to document the Spanish invasion of Moroccan territories visible on the WPlace canvas over time.
Supported Archives
| Site | Snapshots | Period | Command |
|---|---|---|---|
| Samuel Scheit | ~40 | Aug 2025 – May 2026 | ./start.sh samuel |
| Eralyon | ~250+ | Aug 2025 – Jun 2026 | ./start.sh eralyon |
Quick Start
./start.sh eralyon- A Chromium window opens to the archive
- Pan & zoom to the area you want to document
- Click the red Start Recording button at the top of the page
- The script steps through every snapshot, overlays the date, and produces an MP4
Output saved to eralyon_output/run_<timestamp>/ or samuel_output/run_<timestamp>/.
Architecture
Single-file Playwright agents that launch headed Chromium, inject a floating “Start Recording” button, iterate all snapshots (oldest → newest), screenshot the map, overlay the date via Pillow, and assemble the MP4 via FFmpeg.
Playwright → Headed Chromium → Inject recording button
→ Iterate slider snapshots (oldest → newest)
→ Wait for MapLibre tiles to load
→ Screenshot composited map
→ Overlay date (Pillow)
→ FFmpeg → MP4Requirements
- Python 3
- Playwright for Python (auto-installed)
- FFmpeg
Tech Stack
| Category | Technology |
|---|---|
| Browser Automation | Playwright (Python) |
| Image Processing | Pillow |
| Video Encoding | FFmpeg (libx264, CRF 18) |
| Map Rendering | MapLibre GL (via browser) |
| License | The Unlicense |
Key Technical Details
- Uses
Object.getOwnPropertyDescriptorto bypass React’s intercept of the slider value setter - Waits for
.maplibregl-tile-loading/.maplibregl-image-loadingselectors to disappear (up to 20s) - Extra 2.5s settle time for tile rasterisation
- Screenshots via Playwright’s built-in compositing (avoids WebGL
preserveDrawingBufferissues) - Date labels parsed from hash params (Samuel) or slider label (Eralyon)
Future Features
- Date range filtering:
./start.sh eralyon s=06-12-2025 e=07-02-2026 - Configurable frame rate:
fps=4 - Both combinable:
./start.sh eralyon s=01-01-2026 e=01-06-2026 fps=2