Finding a Norwegian Farmhouse Brewery From One Photo
Hacktoria GEOINT. No EXIF, no signs, no text. Here's how I got from an unmarked Scandinavian valley down to a single building — and the shortcut I ignored for six hours.
One photo. No EXIF, no signs, no plates, no text anywhere. Rural valley, wooden houses, cut hay, a bald rounded summit poking above the treeline.

Everything the challenge hands you. No text, no metadata — the solve has to come out of buildings, treeline and terrain.
Description: Beverages are sold near this place.
Flag:
Hacktoria{Facility_Name}
That’s it. The building is Rodebak Farmhouse Brewery in Innset, Rennebu, Trøndelag, Norway — Hacktoria{Rodebak_Farmhouse_Brewery}. If the answer is all you wanted, you’re done in twenty seconds. The rest is how to find it when you don’t know it exists.
Step 1 — Read the picture first
Don’t reach for tools yet. The image tells you plenty if you actually look.
Buildings. Falun-red timber with white trim, plus grey weathered log outbuildings — stabbur / härbre type. That combo is Norway, Sweden or Finland. Nowhere else.
Trees and altitude. Spruce with birch mixed in, clear-cut patches on the slope, and the important bit: a bald rounded summit above the treeline. Treeline at ~900–1000 m means inland Scandinavia. Not coastal.
Settlement. Farms scattered across the hillside, no village core. That’s Nordic dispersed settlement. A German or Polish village would look nothing like it.
Season. Fresh hay swaths, deep green, low sun that’s still bright. High summer, high latitude.
Camera position. You’re looking down at roofs and across at the opposite slope. The photographer stood on high ground — a driveway, a yard, a viewpoint. Park that thought, it pays off at the end.
Power lines. Wooden poles along the valley, plus a branch climbing over the ridge. Lines don’t cross ridges for fun — there’s something on the other side.
What the picture does not give you: a way to tell Norway from Sweden. At this level of detail they’re the same country.
Step 2 — Pin the country
StreetCLIP is the tool for this. Zero-shot, discriminative — you give it labels, it scores the image against each one.
Use the prompt format it was trained on. It learned on Street View imagery and this phrasing beats the alternatives:
text = [f"A street view photo in {c}" for c in COUNTRIES]
Now the part that decides whether your number means anything: pass every country. StreetCLIP only scores what you hand it. Feed it ten Nordic candidates and you’ll get a confident percentage that tested nothing at all. All 165:
- Norway — 93.8%
- Sweden — 5.5%
- Finland — 0.4%
- Poland, Slovakia — 0.0%
Those last two matter. Montane spruce, rounded bald peaks, timber houses, hay farming — that also describes the Western Carpathians, and my coordinate model flagged exactly that region a few minutes later. Because Poland and Slovakia were on the list, I killed that branch by testing it instead of just not asking.

93.8% only means something because all 165 countries were in the race — including the Carpathian look-alikes at zero.
Cache the text embeddings on startup. Only the image encoder runs per query.
Step 3 — Narrow the region
GeoCLIP regresses coordinates. Two things you need to know or you’ll misread it completely.
It picks from a fixed gallery. GeoCLIP scores your image against 100,000 predefined coordinates and hands back the best ones. It never outputs a free position. Spread over the world’s land, that’s roughly 35–40 km apart, denser where people take photos. The gallery is your resolution ceiling, not the model. Cranking top_k gets you more neighbours, not more precision.
Read clusters, not ranks. My top hit was Trondheim at 3.70% and my first reaction was “3%, useless.” Wrong on both counts.
3.7% in a 100,000-class softmax is about 3,700× chance. Absolute percentages mean nothing here. Then aggregate:
| Cluster | Points | Sum |
|---|---|---|
| Western Carpathians (SK/PL) | 6 | 9.8% |
| Innlandet (Mjøsa/Gudbrandsdalen) | 4 | 8.8% |
| Trondheim + Trøndelag | 5 | 8.7% |
| Finland (Savo) | 3 | 4.0% |
Discount the cities. Three of my Trondheim hits sat within a few km of each other — that’s one generic “Norway” signal splitting across dense urban gallery points, not three separate clues. Rural points converging from different directions are worth far more.
Then a 5-crop ensemble — full image plus mountain silhouette, settlement band, foreground houses, hay field — tightened it up:
- Innlandet — 50.9%
- Trøndelag — 21.6%
- Vestland — 5.4%

Read clusters, not ranks: rural points converging from different directions outweigh three urban hits sitting on the same generic signal.
Two regions. Good enough, move on.
Step 4 — Turn the hint into a list
Description said beverages. A later hint got specific: the place sells beer.
That’s the whole game right there. It turns a landscape problem into a database problem, because breweries are mapped. Overpass across central Scandinavia:
[out:json][timeout:180];
(
nwr["craft"="brewery"](59.5,8.5,64.5,15.5);
nwr["microbrewery"="yes"](59.5,8.5,64.5,15.5);
nwr["industrial"="brewery"](59.5,8.5,64.5,15.5);
nwr["building"="brewery"](59.5,8.5,64.5,15.5);
);
out center tags;
85 hits. Drop the city taprooms, 13 left in rural mountain settings. Short enough to check by hand.
You can also reuse GeoCLIP here in a way that suits it: stop asking for precision, use it as a scoring function over a fixed candidate set. Sum the probability mass within 40 km of each brewery and you’ve got a checking order.
One warning: OSM brewery data has holes. The actual answer wasn’t in those 85. Shortlist generator, not gospel.
Step 5 — Reverse image search, done properly
This is the step that solved it. It’s also the step I should have run first. CTF images come from somewhere — Flickr, tourism sites, property listings, Wikimedia. If there’s a source, everything above was decoration.
Two things make it work.
Add keywords to the image. Lens, Yandex and Bing all let you refine an image search with text. Use the local language, not English: bryggeri, gårdsbryggeri, mikrobryggeri, utsikt, grend, gård, fjell.
Skip the AI summary. Open “Visual matches”. Google’s AI Overview does not do reverse image search. It writes text from your keyword. I ran five searches with different Scandinavian terms and got five confidently stated locations, all in the same wrong corner of Sweden. With utsikt it just described my own picture back to me, because it had nothing. The actual output is the thumbnail grid under Visual matches, and I hadn’t opened it once.
When I finally did, gårdsbryggeri fjell surfaced this:
Rodebak Farmhouse Brewery, Innset.
![]()
The answer was in the thumbnail grid the whole time — one tab below the AI summary that kept inventing Swedish villages.
Also: feed it the full image. RIS matches on overall composition. My cropped fence-post screenshots were worthless as input.
Step 6 — Verify before you commit
Never trust an RIS hit on its own. Check the geometry.

A branch of the power line climbs out of the valley and crosses the ridge — traced here hours before it decided the match.

The clear-cut wedge against dark spruce, directly below the bald summit — the most distinctive fixed mark on the slope.

A small clearing with buildings sits right on the ridge crest — third anchor for the terrain match.
Rodebak Gårdsbryggeri sits in Innset, Rennebu, Trøndelag. 62.7208°N, 10.0426°E, 559 m, on the Orkla. Treeline there is around 950 m, so a bald rounded summit in view is exactly what you’d expect. It’s on the edge of Forollhogna National Park — broad, gentle, rounded fells above the treeline. Precisely the silhouette in the photo.
Google Earth sealed it. At first I thought the photo was taken from a church — and the terrain matches.

Innset church sits on exactly the kind of high ground the camera position demanded — remember the downhill view across the roofs from Step 1.

From the church: same clear-cut wedge, same ridge-top clearing. The terrain reproduces the challenge photo.
Same rounded summit, same long ridge dropping right, same wedge of clear-cut against dark spruce, and the power line crossing the ridge exactly where I’d traced it hours earlier.
Then I “drove” the road in Street View until I found the exact power lines coming down from the hill.

528 Nord-Østerdalsveien: the power line comes down the hill exactly where it was traced — and the street name itself answers hint #1.
There’s hint #1, which had been sitting unused the entire time. “The street can help you figure out the country.” Not road markings — I burned an embarrassing amount of time measuring pixel colours on that asphalt. The street name. -veien is Norwegian, -vägen would be Swedish. The hint runs backwards: find the place, then the street tells you the country.
Hacktoria{Rodebak_Farmhouse_Brewery}
The version that doesn’t take eight hours
- Reverse image search. Full image, local-language keywords, Visual matches tab. If there’s a source, you’re done here.
- StreetCLIP with the complete country list. Country locked.
- GeoCLIP, read as clusters. Region narrowed.
- Turn the hint into a finite set. A mapped category beats a landscape every time.
- Verify the terrain before you submit.
Steps 2–4 are for images that exist nowhere online. You don’t know whether yours is one of those until you’ve done step 1.
I built a full ML geolocation pipeline for a challenge that needed a search box. The pipeline was fun and I’ll use it again. But it was the answer to a question nobody had asked yet.
Sources
- StreetCLIP — zero-shot country classification
- GeoCLIP — coordinate retrieval against the 100k gallery
- Overpass Turbo — brewery query across central Scandinavia
- Rodebak Gårdsbryggeri — the answer
- Google Earth, Google Street View — terrain and power-line verification
- Challenge: Hacktoria GEOINT (see the Hacktoria site)