This afternoon, I noticed that several of my colleagues were visiting a recently opened school in the far south.
They took several photos, which is quite a rarity on the internet, since not many people actually go there and upload pictures of the newly built buildings.
I wanted to upload those photos, hoping they might be useful for anyone trying to find information about the place.
Then I remembered that OpenStreetMap has this image=* tag.
I could associate an image with the place by adding an image URL there. So I opened Vespucci on my Android phone and added the image URL to the object.
Now I’m back at my PC, and I wanted to make a simple app (or maybe just a script) to browse every image=* tag that exists in OpenStreetMap.
At first, I thought of doing it the usual way : build a Leaflet web map, query the Overpass API, then display the images in popups.
But then I remembered that the Overpass API has recently been under heavy load.
From what I’ve heard, it’s because of a barrage of AI scrapers… or maybe just a flood of quick-and-dirty, vibe-coded OSM apps being produced en masse.
Whatever the exact reason, it has noticeably affected the service.
Knowing that, I was discouraged from making the situation any worse. So I scrapped that idea.
Then I remembered something else:
Overpass Ultra.
I don’t know exactly how it works internally, but I assume it uses a different Overpass API endpoint than the ones I would normally query directly.
If that’s the case, perhaps using Ultra wouldn’t add to the current strain on the public Overpass servers.
I also realized that Overpass Ultra’s advanced styling syntax lets me solve the whole problem directly within the query itself, without having to build my own Leaflet-based web app.
So here it is: a quickly put-together Ultra query that displays every OpenStreetMap object containing an image=* tag and shows the referenced image in a simple popup.
---
title: OSM image popup
description: Show only the object name and its image.
popupTemplate: >
<h2>
{% if tags.name %}
{{ tags.name }}
{% else %}
{{ type }} {{ id }}
{% endif %}
</h2>
{% if tags.image %}
<img src="{{ tags.image }}" style="max-width:400px;max-height:300px;">
{% endif %}
---
[bbox:{{bbox}}];
nwr["image"];
out geom;
Problem solved. My curiosity is satisfied, and I hope this little project won’t contribute to the worsening of the current Overpass API situation.
This afternoon, I noticed that several of my colleagues were visiting a recently opened school in the far south.
They took several photos, which is quite a rarity on the internet, since not many people actually go there and upload pictures of the newly built buildings.
I wanted to upload those photos, hoping they might be useful for anyone trying to find information about the place.
Then I remembered that OpenStreetMap has this image=* tag.
I could associate an image with the place by adding an image URL there. So I opened Vespucci on my Android phone and added the image URL to the object.
Now I’m back at my PC, and I wanted to make a simple app (or maybe just a script) to browse every image=* tag that exists in OpenStreetMap.
At first, I thought of doing it the usual way : build a Leaflet web map, query the Overpass API, then display the images in popups.
But then I remembered that the Overpass API has recently been under heavy load.
From what I’ve heard, it’s because of a barrage of AI scrapers… or maybe just a flood of quick-and-dirty, vibe-coded OSM apps being produced en masse.
Whatever the exact reason, it has noticeably affected the service.
Knowing that, I was discouraged from making the situation any worse. So I scrapped that idea.
Then I remembered something else:
I don’t know exactly how it works internally, but I assume it uses a different Overpass API endpoint than the ones I would normally query directly.
If that’s the case, perhaps using Ultra wouldn’t add to the current strain on the public Overpass servers.
I also realized that Overpass Ultra’s advanced styling syntax lets me solve the whole problem directly within the query itself, without having to build my own Leaflet-based web app.
So here it is: a quickly put-together Ultra query that displays every OpenStreetMap object containing an image=* tag and shows the referenced image in a simple popup.
---
title: OSM image popup
description: Show only the object name and its image.
popupTemplate: >
<h2>
{% if tags.name %}
{{ tags.name }}
{% else %}
{{ type }} {{ id }}
{% endif %}
</h2>
{% if tags.image %}
<img src="{{ tags.image }}" style="max-width:400px;max-height:300px;">
{% endif %}
---
[bbox:{{bbox}}];
nwr["image"];
out geom;

Problem solved. My curiosity is satisfied, and I hope this little project won’t contribute to the worsening of the current Overpass API situation.
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | digital tourism and mapping remote places | 0 | 7.3 | 03-08-2026 |
| 2 | Tile server for toll roads, cycling restrictions and cobblestone overlays | 0 | 5 | 29-06-2026 |
| 3 | Tourism and Digital Mapping: Documenting Local Places with OpenStreetMap | 0 | 7 | 08-08-2026 |
| 4 | So many notes | 0 | 4.62 | 01-08-2026 |
| 5 | First Time on OSM Database | 0 | 5.55 | 04-08-2026 |
| 6 | If contributing to OSM is no different from contributing to a commercial map service, ··· | 0 | 5.14 | 05-08-2026 |
| 7 | City Exploration, Guided by StreetComplete | 0 | 4.9 | 08-08-2026 |
| 8 | Mapping of Flood-Prone Areas in Pakistan | 0 | 9.2 | 05-08-2026 |
| 9 | Mein jetziges Ziel in OSM: Bayern-Park detaillierter mappen | 0 | 8.38 | 01-08-2026 |
| 10 | openformats .onv files | 0 | 3 | 15-05-2024 |